diff --git a/includes/block-library/index.php b/includes/block-library/index.php index 81f0e17..8b4380b 100644 --- a/includes/block-library/index.php +++ b/includes/block-library/index.php @@ -37,6 +37,7 @@ function get_blocks() { 'mega-menu', 'styles-switcher', 'styles-switcher-item', + 'table-of-contents', 'user-icon', ); } diff --git a/languages/ja.l10n.php b/languages/ja.l10n.php index 7acafdd..33ba167 100644 --- a/languages/ja.l10n.php +++ b/languages/ja.l10n.php @@ -1,2 +1,2 @@ 'mone','plural-forms'=>NULL,'language'=>'ja','project-id-version'=>'Mone 0.0.19','pot-creation-date'=>'2024-10-26T05:32:38+00:00','po-revision-date'=>'2024-11-30 18:18+0900','x-generator'=>'Poedit 3.5','messages'=>['Mone'=>'Mone','https://mone-wp.com'=>'https://mone-wp.com','WordPress theme for mone.'=>'WordPressテーマ Mone.','Tomoki Shimomura'=>'しもむら ともき','URL copied!'=>'URLがコピーされました!','Copy to clipboard'=>'クリップボードにコピー','Code copied!'=>'コードをコピーしました!','Copied'=>'コピーしました','Plane'=>'プレーン','Mone Option Overrides'=>'Mone オプションのオーバーライド','Mone List'=>'Mone リスト','Once you create a template part, you can select it in the mega menu..'=>'テンプレートパーツを作成するとメガメニューで選択できます。','Menu'=>'メニュー','Mone Settings'=>'Mone設定','Icon URL'=>'アイコンURL','Select an image'=>'画像を選択する','delete'=>'削除','Activate'=>'アクティベーション','User email is required.'=>'メールアドレスは必須です。','User email saved successfully.'=>'メールアドレスを保存しました。','Saved'=>'保存されました','An error has occurred'=>'エラーが発生しました','Activate Mone'=>'Mone アクティベート','Email Address'=>'メールアドレス','Activate Code'=>'コードを有効化する','Please enter a valid email address'=>'有効なメールアドレスを入力してください','Mone blocks'=>'Mone blocks',404=>'404','Mega menu'=>'Mega menu','Label for the copyright placeholder in the editor© YEAR'=>'© YEAR','%1$s %2$s'=>'%1$s, %2$s','Home'=>'ホーム','Category'=>'カテゴリー','Custom Link'=>'カスタムリンク','Mone User Authenticationhas not been completed. Version update functionality is limited.'=>'Moneユーザー認証が完了していません。バージョンアップデート機能が制限されてます。','Mone user authenticationhas not been completed. If your email address and the authentication URL on yourMy Pageare correct, anauthentication checkplease perform '=>'Moneユーザー認証が完了していません。メールアドレスとマイページの認証URLが正しい場合は認証チェックを行なってください','Pattern titleAlert Red'=>'アラート レッド','Pattern descriptionAdd Alert Red.'=>'アラートレッドを追加する.','Write your text here!'=>'こんにちは、ここに文章を書きましょう!','Pattern titlecomments'=>'コメント','Pattern titlefooter'=>'フッター','About me!'=>'About me!','Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text'=>'プロフィール テキスト プロフィール テキスト プロフィール テキスト プロフィール テキスト','Portfolio'=>'Portfolio','List1'=>'リスト1','List2'=>'リスト2','List3'=>'リスト3','List4'=>'リスト4','List5'=>'リスト5','Created by'=>'Created by','WordPress theme Mone logo'=>'WordPressテーマMoneロゴ','Copyright'=>'Copyright','All Rights Reserved.'=>'All Rights Reserved.','Pattern titleHeader row'=>'ヘッダー 横並び','Written by Mone Creators'=>'Written by Mone Creators','Pattern titleHidden 404'=>'404','Pattern description404 page template'=>'404ページテンプレート','Service 1'=>'サービス 1','List 1'=>'リスト 1','List 2'=>'リスト 2','List 3'=>'リスト 3','List 4'=>'リスト 4','Service 2'=>'サービス 2','Service 3'=>'サービス 3','Service 4'=>'サービス 4','This page could not be found.'=>'ページが見つかりませんでした。','Pattern titleHidden No Results Content'=>'非表示の結果なしコンテンツ','Message explaining that there are no results returned from a searchSorry, but nothing matched your search terms. Please try again with some different keywords.'=>'申し訳ありませんが、検索条件に一致するものはありません。 別のキーワードでもう一度お試しください。','Search'=>'検索','Search for...'=>'検索...','Pattern titleMega menu'=>'メガメニュー','Pattern descriptionmenu'=>'メニュー','Pattern titleLatest Articles'=>'最新記事','New Posts'=>'新着記事','Pattern titlePost Foot Meta'=>'投稿フットメタ','Pattern titlePost Head Meta'=>'投稿ヘッドメタ','Last Updated'=>'更新日','Pattern titleRelated Posts'=>'関連記事','Related Posts'=>'関連記事','Pattern titlesidebar'=>'サイドバー','Mone Creators'=>'Mone Creators','Most Read Articles'=>'よく読まれている記事','Archive'=>'Archive','Pattern titleSNS Menu'=>'SNSメニュー','Pattern descriptionAdd SNS Box Menu.'=>'SNSボックスメニューを追加。','Pattern titleSNS share buttons simple'=>'シンプルなSNSシェアボタン','Pattern descriptionAdd SNS share buttons.'=>'SNSシェアボタンを追加します。','Pattern titleSNS share buttons'=>'SNSシェアボタン','Pattern titleList of posts, 1 column'=>'投稿のリスト、1コラム','Pattern descriptionA list of posts, 1 column, with featured image and post date.'=>'投稿のリスト、1 列、アイキャッチ画像と投稿日。','Please add text or a block to display when the query returns no results.'=>'クエリが結果を返さないときに表示するテキストまたはブロックを追加してください。','No results found'=>'記事が見つかりませんでした','Pattern titlePickup article'=>'ピックアップ記事','Previous Post'=>'前のページ','Next Post'=>'次のページ','user email saved successfully'=>'ユーザーメールアドレスを保存しました','An error occurred while saving the user email.'=>'ユーザーのメールを保存中にエラーが発生しました。','Mone Activation Settings'=>'Mone アクティベート設定','Step 1'=>'ステップ1','Register the domain you want to authenticate on your Mone My Page'=>'Moneマイページで認証したいドメインを登録する','Mone Mypage'=>'Moneマイページ','Please register the following domains'=>'で以下のドメインを登録してください','Copied!'=>'コピー完了!','Copy'=>'コピー','Step 2'=>'ステップ2','Mone user Enter your email address'=>'Moneユーザー メールアドレスを入力','Enter your Mone user email address below and save'=>'以下にMoneユーザーのメールアドレスを入力して保存してください','Save'=>'保存','Step 3'=>'ステップ3','Authentication Check'=>'認証チェック','If you press the button below and no alert appears, authentication is complete.'=>'以下のボタンを押してアラートが出なければ認証完了です。','Check authentication'=>'認証チェック','Using the selector, it can be rewritten to a block-specific class.'=>'selectorを使用して、ブロック固有のクラスに書き換えることができます。','Additional CSS'=>'追加CSS','Hide settings'=>'非表示設定','Media Query'=>'メディアクエリー','Hide on PC'=>'PC 非表示','Hide on mobile'=>'モバイル 非表示','Post Type'=>'投稿タイプ','Hide on %s'=>'%s 非表示','Table Of Contents'=>'目次','Hide if no table of contents'=>'目次がない場合は非表示','Position'=>'位置','Type'=>'タイプ','Default'=>'デフォルト','Sticky'=>'張り付き','Fixed'=>'固定','Top'=>'上','Right'=>'右','Bottom'=>'下','Left'=>'左','Unlock content only'=>'コンテンツ ロック 解除','Lock content only'=>'コンテンツ ロック','Archives List Unstyled'=>'アーカイブ リストスタイルなし','None'=>'なし','Facebook'=>'Facebook','X'=>'X','Hatena'=>'はてな','Pocket'=>'Pocket','LINE'=>'LINE','Share Settings'=>'共有設定','Share Button Provider'=>'シェアボタン種類','Add image'=>'画像を新規追加','Click animation image'=>'アニメーション画像をクリック','Code Settings'=>'コード設定','Code Language'=>'コード言語','Height'=>'高さ','Pattern titleAmazon Rakuten product card'=>'Amazon 楽天商品 カード','Pattern descriptionThis block is ideal for showcasing products from Amazon and Rakuten.'=>'Amazon,楽天の商品紹介用カードです。','Product name'=>'製品名','View on Amazon'=>'Amazonで見る','View on Kindle'=>'Kindleで見る','View on Rakuten'=>'楽天で見る','Fold backwards on mobile'=>'モバイルで逆順に並べる','Mark as nofollow'=>'nofollow をマーク','Hover Background'=>'ホバー背景','Link'=>'リンク','Applause Button'=>'拍手ボタン','Applause button and counter that can be pressed multiple times without logging in'=>'ログインせずに複数回押せる拍手ボタンとカウンター','Hand'=>'ハンド','Balloon'=>'吹き出し','Balloon icon'=>'吹き出しアイコン','Hello, write your sentence here!'=>'こんにちは、ここに文章を書きましょう!','Box Menu'=>'ボックスメニュー','Vertical layout on mobile'=>'モバイルでは縦に並べる','List style none'=>'リストスタイルなし','スタイル'=>'スタイル','チェック'=>'チェック','info'=>'情報','Mone prefix suffix'=>'Mone接頭辞','Horizontal scrolling'=>'横スクロール','Scroll Snap'=>'スクロールスナップ','Snap placement'=>'スナップ配置','Recommend an odd number of columns for snap scrolling.'=>'スナップスクロールのカラム数は奇数がおすすめです。','Tags'=>'タグ','Pre scrollable'=>'スクロール可能','Next Article'=>'次の記事','Previous article'=>'前の記事','Include Posts'=>'ピックアップ記事','Post Ids'=>'投稿IDs','Example: 1,4,7'=>'例: 1,4,7','*Please enter with commas.'=>'*カンマ区切りで入力してください。','Shows the most read articles'=>'最も読まれた記事を表示します','Related articles'=>'関連記事','Displays random articles from the same category as the post.'=>'投稿と同じカテゴリの記事をランダムに表示します。','Pick Up Articles'=>'ピックアップ記事','Display the selected article.'=>'選択した記事を表示します。','You cannot select multiple cells from different sections.'=>'異なるセクションから複数のセルを選択することはできません。','Merging and splitting cells'=>'セルの結合と分割','Merge Cells'=>'セルの結合','Split Cell'=>'セルを分割','The cell was repaired'=>'セルは修復されました','No cells to repair'=>'修復するセルはありません','Repairing broken cells'=>'壊れたセルの修復','Clear Selection'=>'選択を解除','Link to URL'=>'URLへのリンク','Link to home page'=>'トップページへのリンク','Choose a pattern. The original block settings will be cleared.'=>'パターンを選択します。元のブロック設定がクリアされます。','Blog card'=>'ブログカード','Top image'=>'トップ画像','Please set your Github token.'=>'Githubトークンを設定してください。','If the data is old, please clear the cache. It is usually updated every day.'=>'データが古い場合はキャッシュをクリアしてください。自動で毎日更新されます。','GitHub Code Embed'=>'GitHubコード埋め込み','Paste the permalink of the Github code you want to display on your site.'=>'サイトに表示したいGithubコードのパーマリンクを貼り付けます。','example :'=>'例:','Size'=>'サイズ','Icon Color'=>'アイコンカラー','Hover background Color'=>'ホバー背景色','Link to page'=>'ページヘリンク','Clear cache'=>'キャッシュクリア','If the data is old, please clear the cache. It is usually updated every hour.'=>'データが古い場合は、キャッシュをクリアしてください。通常、1時間ごとに更新されます。','Menu Template'=>'メニューテンプレート','Edit'=>'編集','Create a template part'=>'テンプレート パーツの作成','Click to open'=>'クリックで開く','Mega menu link text'=>'メガメニューリンクのテキスト','Mega menu label'=>'メガメニューラベル','Variation Name'=>'バリエーション名','%s switcher item'=>'%sスイッチャーアイテム','Current'=>'現在','Mone Default'=>'Moneデフォルト','Blue'=>'Blue','Dark'=>'Dark','Green'=>'Green','White'=>'White','More Information'=>'詳細情報','Learn More'=>'さらに詳しく','Settings'=>'設定','Style variation settings'=>'スタイルバリエーションの設定','VariationOption'=>'バリエーションオプション','Defaults'=>'デフォルト','white'=>'白','isToggle'=>'トグル','Max height'=>'最大の高さ','Mone post settings'=>'Mone投稿設定','Display eye-catcher on the page'=>'アイキャッチ画像を表示する','Display SNS Share Button on the page'=>'SNSシェアボタンを表示する','Display Date on the page'=>'日付を表示する','Inline font size'=>'インライン文字サイズ','Inline Font Size'=>'インライン文字サイズ','Icon not found.'=>'アイコンが見つかりません。','Inline Icon'=>'インラインアイコン','Icon'=>'アイコン','Add NO IMAGE'=>'NO IMAGEを追加','Default NO IMAGE'=>'デフォルト NO IMAGE','NO IMAGE'=>'NO IMAGE 画像','GitHub Token'=>'GitHubトークン','You can get a GitHub token from your GitHub account settings. This token is used to increase the number of requests to the GitHub API.'=>'GitHubアカウント設定からGitHubトークンを取得できます。このトークンは、GitHubAPIへのリクエスト数を増やすために使用されます。','https://mone-wp.com/get-github-token/'=>'https://mone-wp.com/get-github-token/','Site settings'=>'サイト設定','Show NO IMAGE in query'=>'クエリーでNO IMAGEを表示','Show NO IMAGE on the page'=>'ページでNO IMAGEを表示','Display eye-catching template'=>'アイキャッチテンプレートを表示','User Settings'=>'ユーザー設定','Eye-catching template'=>'アイキャッチテンプレート','Mone settings'=>'Mone 設定','This setting is immediately saved to the database.'=>'この設定はすぐにデータベースに保存されます。','Post author name'=>'投稿者名','Post Title'=>'投稿タイトル','Setting'=>'設定','Site title'=>'サイトのタイトル','Logo not found'=>'ロゴが見つかりません','Icon not found'=>'アイコンが見つかりません','Upload & Eye-Catch Updated'=>'アップロード & アイキャッチが更新されました','Upload & Update Eyecatcher'=>'アップロード & アイキャッチを更新','Custom thumbnail %s'=>'カスタムアイキャッチ%s','Article Title'=>'記事のタイトル','Preview Article Title'=>'記事タイトルのプレビュー','Debug Mode'=>'デバッグモード','Changes saved'=>'変更を保存しました','Featured Template:Save Changes'=>'アイキャッチ テンプレート:変更を保存','Featured image Templates'=>'アイキャッチテンプレート','Custom Thumbnail Templates'=>'カスタムアイキャッチテンプレート','Group'=>'グループ','Add a background image'=>'背景画像を追加する','Background Image'=>'背景画像','Set background image'=>'背景画像の設定','* Recommended size: 1200px wide, 630px tall'=>'*推奨サイズ:幅1200px、高さ630px','You can customize it from the eye-catching template.'=>'アイキャッチテンプレートからカスタマイズできます。','Mega menu label…'=>'メガメニューラベル…','Select Icon'=>'アイコンを選択','block titleEmbed Excerpt'=>'抜粋を埋め込む','block descriptionShows an excerpt retrieved from a URL.'=>'URL から取得した抜粋が表示されます。','block titleEmbed Featured Image'=>'アイキャッチ画像を埋め込む','block descriptionDisplays the featured image obtained from the URL.'=>'URLから取得したアイキャッチ画像を表示します。','block titleEmbed Site Logo'=>'サイトロゴの埋め込み','block descriptionDisplays the site logo image obtained from the URL.'=>'URLから取得したサイトのロゴ画像を表示します。','block titleEmbed Site Title'=>'サイトタイトルを埋め込む','block descriptionDisplays the site title obtained from the URL.'=>'URL から取得したサイトのタイトルが表示されます。','block titleEmbed Title'=>'タイトルを埋め込む','block descriptionDisplays the title obtained from the URL.'=>'URL から取得したタイトルが表示されます。','block titleEmbed'=>'埋め込み','block descriptionAdd a block that fetches and displays content from a URL.'=>'URL からコンテンツを取得して表示するブロックを追加します。','block titleGitHub Code Embed'=>'Githubコード埋め込み','block descriptionView the code via the Github code permalink.'=>'Github のコードパーマリンクからコードを表示します。','block titleIcon child'=>'アイコン要素','block descriptionIcons with configurable colors and links.'=>'カラーやリンクが設定できるアイコン。','block titleIcons'=>'アイコン','block descriptionAccentuate your website with icon groups with configurable colors and links.'=>'カラーやリンクが設定できるアイコングループでWebサイトにアクセントをつけましょう。','block titleMega Menu'=>'メガメニュー','block descriptionMega Menu'=>'メガメニュー','block titleTheme Styles switcher item'=>'テーマスタイルスイッチャーアイテム','block descriptionTheme Styles switcher item'=>'テーマスタイルスイッチャーアイテム','block titleTheme Styles switcher'=>'テーマスタイルスイッチャー','block descriptionTheme Styles switcher'=>'テーマスタイルスイッチャー','block titleGroup'=>'グループ','block titlesatori wrapper'=>'satori wrapper','block descriptionGroup'=>'グループ','block titlePost Author Icon'=>'投稿作成者アイコン','block titleAuthor Name'=>'投稿者名','block titlesatori post-author-name'=>'satori post-author-name','block descriptionpost-author-name'=>'投稿者名','block titleTitle'=>'タイトル','block descriptionpost-title'=>'投稿タイトル','block titleSite Logo'=>'サイトロゴ','block titleSite Title'=>'サイトタイトル','block titlesatori site-title'=>'satori site-title','block descriptionsite-title'=>'サイトタイトル','block titleCustom Thumbnail'=>'カスタムアイキャッチ','Style variation nameBlue'=>'Blue','Color nameKey'=>'キー','Color nameKey / Two'=>'キー/ 2','Color nameMain Background'=>'メイン背景','Color nameContent Background'=>'コンテンツエリア 背景','Color nameKey Contrast'=>'キーコントラスト','Color nameKey / Two contrast'=>'キー/2コントラスト','Color nameContent Contrast'=>'コンテンツ コントラスト','Color nameContent Contrast / Two'=>'コンテンツコントラスト/ 2','Color nameContent Contrast / Three'=>'コンテンツコントラスト / 3','Color nameLink Color'=>'リンク色','Color nameLink Hover Color'=>'リンクホバー色','Color nameHading Background'=>'見出し背景','Color nameList Background'=>'リスト背景','Color nameQuote Background'=>'引用 背景','Color nameBorder'=>'枠線','Duotone nameKey'=>'キー','Style variation nameDark'=>'Dark','Style variation nameGreen'=>'Green','Style variation nameWhite'=>'White','Custom template nameblank'=>'ブランク','Custom template nameThin one column'=>'ワンカラム スリム','Custom template nameWide one column'=>'ワンカラム ワイド','Custom template nameHeader & Footer'=>'ヘッダー&フッターのみ','Custom template name404'=>'404','Gradient nameBlack'=>'黒','Gradient nameSilver'=>'シルバー','Gradient nameBronze'=>'ブロンズ','Gradient nameGold'=>'ゴールド','Aspect ratio nameOptimize OGP 1.91:1'=>'OGP 1.91:1','Space size name1'=>'1','Space size name2'=>'2','Space size name3'=>'3','Space size name4'=>'4','Space size name5'=>'5','Space size name6'=>'6','Font family nameSystem Font'=>'System Font','Font family nameNoto Sans'=>'Noto Sans JP','Font family nameA-OTF Shin Go Pro'=>'A-OTF Shin Go Pro','Font family nameicomoon'=>'icomoon','Font family nameCode'=>'コード','Template part nameHeader'=>'ヘッダー','Template part nameFooter'=>'フッター','Template part nameSidebar'=>'サイドバー','Template part nameComments'=>'コメント','Template part namePost meta'=>'投稿のメタ情報','Template part nameQuery'=>'クエリ','Template part nameMenu'=>'メニュー']]; \ No newline at end of file +return ['domain'=>'mone','plural-forms'=>NULL,'language'=>'ja','project-id-version'=>'Mone 0.0.19','pot-creation-date'=>'2024-10-26T05:32:38+00:00','po-revision-date'=>'2024-11-30 18:18+0900','x-generator'=>'Poedit 3.5','messages'=>['Mone'=>'Mone','https://mone-wp.com'=>'https://mone-wp.com','WordPress theme for mone.'=>'WordPressテーマ Mone.','Tomoki Shimomura'=>'しもむら ともき','URL copied!'=>'URLがコピーされました!','Copy to clipboard'=>'クリップボードにコピー','Code copied!'=>'コードをコピーしました!','Copied'=>'コピーしました','Plane'=>'プレーン','Mone Option Overrides'=>'Mone オプションのオーバーライド','Mone List'=>'Mone リスト','Once you create a template part, you can select it in the mega menu..'=>'テンプレートパーツを作成するとメガメニューで選択できます。','Menu'=>'メニュー','Mone table of contents'=>'Mone 目次','Mone Settings'=>'Mone設定','Icon URL'=>'アイコンURL','Select an image'=>'画像を選択する','delete'=>'削除','Activate'=>'アクティベーション','User email is required.'=>'メールアドレスは必須です。','User email saved successfully.'=>'メールアドレスを保存しました。','Saved'=>'保存されました','An error has occurred'=>'エラーが発生しました','Activate Mone'=>'Mone アクティベート','Email Address'=>'メールアドレス','Activate Code'=>'コードを有効化する','Please enter a valid email address'=>'有効なメールアドレスを入力してください','Mone blocks'=>'Mone blocks',404=>'404','Mega menu'=>'Mega menu','Label for the copyright placeholder in the editor© YEAR'=>'© YEAR','%1$s %2$s'=>'%1$s, %2$s','Home'=>'ホーム','Category'=>'カテゴリー','Custom Link'=>'カスタムリンク','Mone User Authenticationhas not been completed. Version update functionality is limited.'=>'Moneユーザー認証が完了していません。バージョンアップデート機能が制限されてます。','Mone user authenticationhas not been completed. If your email address and the authentication URL on yourMy Pageare correct, anauthentication checkplease perform '=>'Moneユーザー認証が完了していません。メールアドレスとマイページの認証URLが正しい場合は認証チェックを行なってください','Pattern titleAlert Red'=>'アラート レッド','Pattern descriptionAdd Alert Red.'=>'アラートレッドを追加する.','Write your text here!'=>'こんにちは、ここに文章を書きましょう!','Pattern titlecomments'=>'コメント','Pattern titlefooter'=>'フッター','About me!'=>'About me!','Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text Profile text'=>'プロフィール テキスト プロフィール テキスト プロフィール テキスト プロフィール テキスト','Portfolio'=>'Portfolio','List1'=>'リスト1','List2'=>'リスト2','List3'=>'リスト3','List4'=>'リスト4','List5'=>'リスト5','Created by'=>'Created by','WordPress theme Mone logo'=>'WordPressテーマMoneロゴ','Copyright'=>'Copyright','All Rights Reserved.'=>'All Rights Reserved.','Pattern titleHeader row'=>'ヘッダー 横並び','Written by Mone Creators'=>'Written by Mone Creators','Pattern titleHidden 404'=>'404','Pattern description404 page template'=>'404ページテンプレート','Service 1'=>'サービス 1','List 1'=>'リスト 1','List 2'=>'リスト 2','List 3'=>'リスト 3','List 4'=>'リスト 4','Service 2'=>'サービス 2','Service 3'=>'サービス 3','Service 4'=>'サービス 4','This page could not be found.'=>'ページが見つかりませんでした。','Pattern titleHidden No Results Content'=>'非表示の結果なしコンテンツ','Message explaining that there are no results returned from a searchSorry, but nothing matched your search terms. Please try again with some different keywords.'=>'申し訳ありませんが、検索条件に一致するものはありません。 別のキーワードでもう一度お試しください。','Search'=>'検索','Search for...'=>'検索...','Pattern titleMega menu'=>'メガメニュー','Pattern descriptionmenu'=>'メニュー','Pattern titleLatest Articles'=>'最新記事','New Posts'=>'新着記事','Pattern titlePost Foot Meta'=>'投稿フットメタ','Pattern titlePost Head Meta'=>'投稿ヘッドメタ','Last Updated'=>'更新日','Pattern titleRelated Posts'=>'関連記事','Related Posts'=>'関連記事','Pattern titlesidebar'=>'サイドバー','Mone Creators'=>'Mone Creators','Most Read Articles'=>'よく読まれている記事','Archive'=>'Archive','Pattern titleSNS Menu'=>'SNSメニュー','Pattern descriptionAdd SNS Box Menu.'=>'SNSボックスメニューを追加。','Pattern titleSNS share buttons simple'=>'シンプルなSNSシェアボタン','Pattern descriptionAdd SNS share buttons.'=>'SNSシェアボタンを追加します。','Pattern titleSNS share buttons'=>'SNSシェアボタン','Pattern titleList of posts, 1 column'=>'投稿のリスト、1コラム','Pattern descriptionA list of posts, 1 column, with featured image and post date.'=>'投稿のリスト、1 列、アイキャッチ画像と投稿日。','Please add text or a block to display when the query returns no results.'=>'クエリが結果を返さないときに表示するテキストまたはブロックを追加してください。','No results found'=>'記事が見つかりませんでした','Pattern titlePickup article'=>'ピックアップ記事','Previous Post'=>'前のページ','Next Post'=>'次のページ','user email saved successfully'=>'ユーザーメールアドレスを保存しました','An error occurred while saving the user email.'=>'ユーザーのメールを保存中にエラーが発生しました。','Mone Activation Settings'=>'Mone アクティベート設定','Step 1'=>'ステップ1','Register the domain you want to authenticate on your Mone My Page'=>'Moneマイページで認証したいドメインを登録する','Mone Mypage'=>'Moneマイページ','Please register the following domains'=>'で以下のドメインを登録してください','Copied!'=>'コピー完了!','Copy'=>'コピー','Step 2'=>'ステップ2','Mone user Enter your email address'=>'Moneユーザー メールアドレスを入力','Enter your Mone user email address below and save'=>'以下にMoneユーザーのメールアドレスを入力して保存してください','Save'=>'保存','Step 3'=>'ステップ3','Authentication Check'=>'認証チェック','If you press the button below and no alert appears, authentication is complete.'=>'以下のボタンを押してアラートが出なければ認証完了です。','Check authentication'=>'認証チェック','Using the selector, it can be rewritten to a block-specific class.'=>'selectorを使用して、ブロック固有のクラスに書き換えることができます。','Additional CSS'=>'追加CSS','Hide settings'=>'非表示設定','Media Query'=>'メディアクエリー','Hide on PC'=>'PC 非表示','Hide on mobile'=>'モバイル 非表示','Post Type'=>'投稿タイプ','Hide on %s'=>'%s 非表示','Table Of Contents'=>'目次','block descriptionA table of contents is automatically created by retrieving headings from the content.A preview is displayed in the editor.'=>'コンテンツから見出しを取得して目次を自動的に作成します。プレビューはエディターに表示されます。','Hide if no table of contents'=>'目次がない場合は非表示','Position'=>'位置','Type'=>'タイプ','Default'=>'デフォルト','Sticky'=>'張り付き','Fixed'=>'固定','Top'=>'上','Right'=>'右','Bottom'=>'下','Left'=>'左','Unlock content only'=>'コンテンツ ロック 解除','Lock content only'=>'コンテンツ ロック','Archives List Unstyled'=>'アーカイブ リストスタイルなし','None'=>'なし','Facebook'=>'Facebook','X'=>'X','Hatena'=>'はてな','Pocket'=>'Pocket','LINE'=>'LINE','Share Settings'=>'共有設定','Share Button Provider'=>'シェアボタン種類','Add image'=>'画像を新規追加','Click animation image'=>'アニメーション画像をクリック','Code Settings'=>'コード設定','Code Language'=>'コード言語','Height'=>'高さ','Pattern titleAmazon Rakuten product card'=>'Amazon 楽天商品 カード','Pattern descriptionThis block is ideal for showcasing products from Amazon and Rakuten.'=>'Amazon,楽天の商品紹介用カードです。','Product name'=>'製品名','View on Amazon'=>'Amazonで見る','View on Kindle'=>'Kindleで見る','View on Rakuten'=>'楽天で見る','Fold backwards on mobile'=>'モバイルで逆順に並べる','Mark as nofollow'=>'nofollow をマーク','Hover Background'=>'ホバー背景','Link'=>'リンク','Applause Button'=>'拍手ボタン','Applause button and counter that can be pressed multiple times without logging in'=>'ログインせずに複数回押せる拍手ボタンとカウンター','Hand'=>'ハンド','Balloon'=>'吹き出し','Balloon icon'=>'吹き出しアイコン','Hello, write your sentence here!'=>'こんにちは、ここに文章を書きましょう!','Box Menu'=>'ボックスメニュー','Vertical layout on mobile'=>'モバイルでは縦に並べる','List style none'=>'リストスタイルなし','スタイル'=>'スタイル','チェック'=>'チェック','info'=>'情報','Mone prefix suffix'=>'Mone接頭辞','Horizontal scrolling'=>'横スクロール','Scroll Snap'=>'スクロールスナップ','Snap placement'=>'スナップ配置','Recommend an odd number of columns for snap scrolling.'=>'スナップスクロールのカラム数は奇数がおすすめです。','Tags'=>'タグ','Pre scrollable'=>'スクロール可能','Next Article'=>'次の記事','Previous article'=>'前の記事','Include Posts'=>'ピックアップ記事','Post Ids'=>'投稿IDs','Example: 1,4,7'=>'例: 1,4,7','*Please enter with commas.'=>'*カンマ区切りで入力してください。','Shows the most read articles'=>'最も読まれた記事を表示します','Related articles'=>'関連記事','Displays random articles from the same category as the post.'=>'投稿と同じカテゴリの記事をランダムに表示します。','Pick Up Articles'=>'ピックアップ記事','Display the selected article.'=>'選択した記事を表示します。','You cannot select multiple cells from different sections.'=>'異なるセクションから複数のセルを選択することはできません。','Merging and splitting cells'=>'セルの結合と分割','Merge Cells'=>'セルの結合','Split Cell'=>'セルを分割','The cell was repaired'=>'セルは修復されました','No cells to repair'=>'修復するセルはありません','Repairing broken cells'=>'壊れたセルの修復','Clear Selection'=>'選択を解除','Link to URL'=>'URLへのリンク','Link to home page'=>'トップページへのリンク','Choose a pattern. The original block settings will be cleared.'=>'パターンを選択します。元のブロック設定がクリアされます。','Blog card'=>'ブログカード','Top image'=>'トップ画像','Please set your Github token.'=>'Githubトークンを設定してください。','If the data is old, please clear the cache. It is usually updated every day.'=>'データが古い場合はキャッシュをクリアしてください。自動で毎日更新されます。','GitHub Code Embed'=>'GitHubコード埋め込み','Paste the permalink of the Github code you want to display on your site.'=>'サイトに表示したいGithubコードのパーマリンクを貼り付けます。','example :'=>'例:','Size'=>'サイズ','Icon Color'=>'アイコンカラー','Hover background Color'=>'ホバー背景色','Link to page'=>'ページヘリンク','Clear cache'=>'キャッシュクリア','If the data is old, please clear the cache. It is usually updated every hour.'=>'データが古い場合は、キャッシュをクリアしてください。通常、1時間ごとに更新されます。','Menu Template'=>'メニューテンプレート','Edit'=>'編集','Create a template part'=>'テンプレート パーツの作成','Click to open'=>'クリックで開く','Mega menu link text'=>'メガメニューリンクのテキスト','Mega menu label'=>'メガメニューラベル','Variation Name'=>'バリエーション名','%s switcher item'=>'%sスイッチャーアイテム','Current'=>'現在','Mone Default'=>'Moneデフォルト','Blue'=>'Blue','Dark'=>'Dark','Green'=>'Green','White'=>'White','Scroll animation'=>'スクロールアニメーション','Circle Color'=>'サークル カラー','Number Color'=>'ナンバー カラー','Deactivate text Color'=>'非活性テキストカラー','Circle deactivate Color'=>'サークル非活性カラー','Number deactivate Color'=>'ナンバー非活性カラー','Line Color'=>'ラインカラー','Table of Contents Editor Preview H2 Heading'=>'目次エディタプレビュー H2 見出し','Table of Contents Editor Preview H3 Heading'=>'目次エディタプレビュー H3 見出し','Table of Contents Editor Preview H4 Heading'=>'目次エディタプレビュー H4 見出し','Table of Contents Editor Preview H5 Heading'=>'目次エディタプレビュー H5 見出し','Table of contents'=>'目次','More Information'=>'詳細情報','Learn More'=>'さらに詳しく','Settings'=>'設定','Style variation settings'=>'スタイルバリエーションの設定','VariationOption'=>'バリエーションオプション','Defaults'=>'デフォルト','white'=>'白','isToggle'=>'トグル','Max height'=>'最大の高さ','Mone post settings'=>'Mone投稿設定','Display eye-catcher on the page'=>'アイキャッチ画像を表示する','Display SNS Share Button on the page'=>'SNSシェアボタンを表示する','Display Date on the page'=>'日付を表示する','Inline font size'=>'インライン文字サイズ','Inline Font Size'=>'インライン文字サイズ','Icon not found.'=>'アイコンが見つかりません。','Inline Icon'=>'インラインアイコン','Icon'=>'アイコン','Add NO IMAGE'=>'NO IMAGEを追加','Default NO IMAGE'=>'デフォルト NO IMAGE','NO IMAGE'=>'NO IMAGE 画像','GitHub Token'=>'GitHubトークン','You can get a GitHub token from your GitHub account settings. This token is used to increase the number of requests to the GitHub API.'=>'GitHubアカウント設定からGitHubトークンを取得できます。このトークンは、GitHubAPIへのリクエスト数を増やすために使用されます。','https://mone-wp.com/get-github-token/'=>'https://mone-wp.com/get-github-token/','Site settings'=>'サイト設定','Show NO IMAGE in query'=>'クエリーでNO IMAGEを表示','Show NO IMAGE on the page'=>'ページでNO IMAGEを表示','Display eye-catching template'=>'アイキャッチテンプレートを表示','User Settings'=>'ユーザー設定','Eye-catching template'=>'アイキャッチテンプレート','Mone settings'=>'Mone 設定','This setting is immediately saved to the database.'=>'この設定はすぐにデータベースに保存されます。','Post author name'=>'投稿者名','Post Title'=>'投稿タイトル','Setting'=>'設定','Site title'=>'サイトのタイトル','Logo not found'=>'ロゴが見つかりません','Icon not found'=>'アイコンが見つかりません','Upload & Eye-Catch Updated'=>'アップロード & アイキャッチが更新されました','Upload & Update Eyecatcher'=>'アップロード & アイキャッチを更新','Custom thumbnail %s'=>'カスタムアイキャッチ%s','Article Title'=>'記事のタイトル','Preview Article Title'=>'記事タイトルのプレビュー','Debug Mode'=>'デバッグモード','Changes saved'=>'変更を保存しました','Featured Template:Save Changes'=>'アイキャッチ テンプレート:変更を保存','Featured image Templates'=>'アイキャッチテンプレート','Custom Thumbnail Templates'=>'カスタムアイキャッチテンプレート','Group'=>'グループ','Add a background image'=>'背景画像を追加する','Background Image'=>'背景画像','Set background image'=>'背景画像の設定','* Recommended size: 1200px wide, 630px tall'=>'*推奨サイズ:幅1200px、高さ630px','You can customize it from the eye-catching template.'=>'アイキャッチテンプレートからカスタマイズできます。','Mega menu label…'=>'メガメニューラベル…','Select Icon'=>'アイコンを選択','block titleEmbed Excerpt'=>'抜粋を埋め込む','block descriptionShows an excerpt retrieved from a URL.'=>'URL から取得した抜粋が表示されます。','block titleEmbed Featured Image'=>'アイキャッチ画像を埋め込む','block descriptionDisplays the featured image obtained from the URL.'=>'URLから取得したアイキャッチ画像を表示します。','block titleEmbed Site Logo'=>'サイトロゴの埋め込み','block descriptionDisplays the site logo image obtained from the URL.'=>'URLから取得したサイトのロゴ画像を表示します。','block titleEmbed Site Title'=>'サイトタイトルを埋め込む','block descriptionDisplays the site title obtained from the URL.'=>'URL から取得したサイトのタイトルが表示されます。','block titleEmbed Title'=>'タイトルを埋め込む','block descriptionDisplays the title obtained from the URL.'=>'URL から取得したタイトルが表示されます。','block titleEmbed'=>'埋め込み','block descriptionAdd a block that fetches and displays content from a URL.'=>'URL からコンテンツを取得して表示するブロックを追加します。','block titleGitHub Code Embed'=>'Githubコード埋め込み','block descriptionView the code via the Github code permalink.'=>'Github のコードパーマリンクからコードを表示します。','block titleIcon child'=>'アイコン要素','block descriptionIcons with configurable colors and links.'=>'カラーやリンクが設定できるアイコン。','block titleIcons'=>'アイコン','block descriptionAccentuate your website with icon groups with configurable colors and links.'=>'カラーやリンクが設定できるアイコングループでWebサイトにアクセントをつけましょう。','block titleMega Menu'=>'メガメニュー','block descriptionMega Menu'=>'メガメニュー','block titleTheme Styles switcher item'=>'テーマスタイルスイッチャーアイテム','block descriptionTheme Styles switcher item'=>'テーマスタイルスイッチャーアイテム','block titleTheme Styles switcher'=>'テーマスタイルスイッチャー','block descriptionTheme Styles switcher'=>'テーマスタイルスイッチャー','block titleGroup'=>'グループ','block titlesatori wrapper'=>'satori wrapper','block descriptionGroup'=>'グループ','block titlePost Author Icon'=>'投稿作成者アイコン','block titleAuthor Name'=>'投稿者名','block titlesatori post-author-name'=>'satori post-author-name','block descriptionpost-author-name'=>'投稿者名','block titleTitle'=>'タイトル','block descriptionpost-title'=>'投稿タイトル','block titleSite Logo'=>'サイトロゴ','block titleSite Title'=>'サイトタイトル','block titlesatori site-title'=>'satori site-title','block descriptionsite-title'=>'サイトタイトル','block titleCustom Thumbnail'=>'カスタムアイキャッチ','Style variation nameBlue'=>'Blue','Color nameKey'=>'キー','Color nameKey / Two'=>'キー/ 2','Color nameMain Background'=>'メイン背景','Color nameContent Background'=>'コンテンツエリア 背景','Color nameKey Contrast'=>'キーコントラスト','Color nameKey / Two contrast'=>'キー/2コントラスト','Color nameContent Contrast'=>'コンテンツ コントラスト','Color nameContent Contrast / Two'=>'コンテンツコントラスト/ 2','Color nameContent Contrast / Three'=>'コンテンツコントラスト / 3','Color nameLink Color'=>'リンク色','Color nameLink Hover Color'=>'リンクホバー色','Color nameHading Background'=>'見出し背景','Color nameList Background'=>'リスト背景','Color nameQuote Background'=>'引用 背景','Color nameBorder'=>'枠線','Duotone nameKey'=>'キー','Style variation nameDark'=>'Dark','Style variation nameGreen'=>'Green','Style variation nameWhite'=>'White','Custom template nameblank'=>'ブランク','Custom template nameThin one column'=>'ワンカラム スリム','Custom template nameWide one column'=>'ワンカラム ワイド','Custom template nameHeader & Footer'=>'ヘッダー&フッターのみ','Custom template name404'=>'404','Gradient nameBlack'=>'黒','Gradient nameSilver'=>'シルバー','Gradient nameBronze'=>'ブロンズ','Gradient nameGold'=>'ゴールド','Aspect ratio nameOptimize OGP 1.91:1'=>'OGP 1.91:1','Space size name1'=>'1','Space size name2'=>'2','Space size name3'=>'3','Space size name4'=>'4','Space size name5'=>'5','Space size name6'=>'6','Font family nameSystem Font'=>'System Font','Font family nameNoto Sans'=>'Noto Sans JP','Font family nameA-OTF Shin Go Pro'=>'A-OTF Shin Go Pro','Font family nameicomoon'=>'icomoon','Font family nameCode'=>'コード','Template part nameHeader'=>'ヘッダー','Template part nameFooter'=>'フッター','Template part nameSidebar'=>'サイドバー','Template part nameComments'=>'コメント','Template part namePost meta'=>'投稿のメタ情報','Template part nameQuery'=>'クエリ','Template part nameMenu'=>'メニュー']]; \ No newline at end of file diff --git a/languages/ja.mo b/languages/ja.mo index b2f08dd..ec62792 100644 Binary files a/languages/ja.mo and b/languages/ja.mo differ diff --git a/languages/ja.po b/languages/ja.po index 72200b9..697de3d 100644 --- a/languages/ja.po +++ b/languages/ja.po @@ -72,6 +72,10 @@ msgstr "テンプレートパーツを作成するとメガメニューで選択 msgid "Menu" msgstr "メニュー" +#: build/block-library/table-of-contents/index.php:100 +msgid "Mone table of contents" +msgstr "Mone 目次" + #: build/block-library/user-icon/index.php:93 msgid "Mone Settings" msgstr "Mone設定" @@ -551,6 +555,11 @@ msgstr "%s 非表示" msgid "Table Of Contents" msgstr "目次" +#: build/block-library/table-of-contents/block.json +msgctxt "block description" +msgid "A table of contents is automatically created by retrieving headings from the content.A preview is displayed in the editor." +msgstr "コンテンツから見出しを取得して目次を自動的に作成します。プレビューはエディターに表示されます。" + #: build/block-editor/index.js:779 #: build/block-editor/index.js:629 msgid "Hide if no table of contents" @@ -1037,6 +1046,84 @@ msgstr "Green" msgid "White" msgstr "White" +#: build/block-library/table-of-contents/index.js:84 +#: build/block-library/table-of-contents/index.js:89 +#: build/block-library/table-of-contents/index.js:103 +#: build/block-library/table-of-contents/index.js:120 +msgid "Scroll animation" +msgstr "スクロールアニメーション" + +#: build/block-library/table-of-contents/index.js:103 +#: build/block-library/table-of-contents/index.js:144 +msgid "Circle Color" +msgstr "サークル カラー" + +#: build/block-library/table-of-contents/index.js:103 +#: build/block-library/table-of-contents/index.js:145 +msgid "Number Color" +msgstr "ナンバー カラー" + +#: build/block-library/table-of-contents/index.js:110 +#: build/block-library/table-of-contents/index.js:155 +msgid "Deactivate text Color" +msgstr "非活性テキストカラー" + +#: build/block-library/table-of-contents/index.js:117 +#: build/block-library/table-of-contents/index.js:168 +msgid "Circle deactivate Color" +msgstr "サークル非活性カラー" + +#: build/block-library/table-of-contents/index.js:117 +#: build/block-library/table-of-contents/index.js:172 +msgid "Number deactivate Color" +msgstr "ナンバー非活性カラー" + +#: build/block-library/table-of-contents/index.js:124 +#: build/block-library/table-of-contents/index.js:188 +msgid "Line Color" +msgstr "ラインカラー" + +#: build/block-library/table-of-contents/index.js:143 +#: build/block-library/table-of-contents/index.js:161 +#: build/block-library/table-of-contents/index.js:214 +#: build/block-library/table-of-contents/index.js:207 +#: build/block-library/table-of-contents/index.js:233 +#: build/block-library/table-of-contents/index.js:301 +msgid "Table of Contents Editor Preview H2 Heading" +msgstr "目次エディタプレビュー H2 見出し" + +#: build/block-library/table-of-contents/index.js:149 +#: build/block-library/table-of-contents/index.js:154 +#: build/block-library/table-of-contents/index.js:167 +#: build/block-library/table-of-contents/index.js:191 +#: build/block-library/table-of-contents/index.js:220 +#: build/block-library/table-of-contents/index.js:215 +#: build/block-library/table-of-contents/index.js:223 +#: build/block-library/table-of-contents/index.js:241 +#: build/block-library/table-of-contents/index.js:271 +#: build/block-library/table-of-contents/index.js:309 +msgid "Table of Contents Editor Preview H3 Heading" +msgstr "目次エディタプレビュー H3 見出し" + +#: build/block-library/table-of-contents/index.js:173 +#: build/block-library/table-of-contents/index.js:197 +#: build/block-library/table-of-contents/index.js:249 +#: build/block-library/table-of-contents/index.js:279 +msgid "Table of Contents Editor Preview H4 Heading" +msgstr "目次エディタプレビュー H4 見出し" + +#: build/block-library/table-of-contents/index.js:179 +#: build/block-library/table-of-contents/index.js:203 +#: build/block-library/table-of-contents/index.js:257 +#: build/block-library/table-of-contents/index.js:287 +msgid "Table of Contents Editor Preview H5 Heading" +msgstr "目次エディタプレビュー H5 見出し" + +#: build/block-library/table-of-contents/index.js:309 +#: build/block-library/table-of-contents/index.js:372 +msgid "Table of contents" +msgstr "目次" + #: build/components/index.js:617 #: build/plugins/index.js:163 #: build/components/index.js:1410 diff --git a/languages/mone-ja-b3219700b482574310e9f3d466c763fd.json b/languages/mone-ja-b3219700b482574310e9f3d466c763fd.json index 8267c4e..98d3699 100644 --- a/languages/mone-ja-b3219700b482574310e9f3d466c763fd.json +++ b/languages/mone-ja-b3219700b482574310e9f3d466c763fd.json @@ -1 +1 @@ -{"translation-revision-date":"2024-11-30 18:18+0900","generator":"WP-CLI\/2.11.0","source":"build\/block-library\/table-of-contents\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"ja","plural-forms":"nplurals=2; plural=(n != 1);"},"Max height":["\u6700\u5927\u306e\u9ad8\u3055"]}}} \ No newline at end of file +{"translation-revision-date":"2024-11-30 18:18+0900","generator":"WP-CLI\/2.11.0","source":"build\/block-library\/table-of-contents\/index.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"ja","plural-forms":"nplurals=2; plural=(n != 1);"},"Scroll animation":["\u30b9\u30af\u30ed\u30fc\u30eb\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3"],"Circle Color":["\u30b5\u30fc\u30af\u30eb \u30ab\u30e9\u30fc"],"Number Color":["\u30ca\u30f3\u30d0\u30fc \u30ab\u30e9\u30fc"],"Deactivate text Color":["\u975e\u6d3b\u6027\u30c6\u30ad\u30b9\u30c8\u30ab\u30e9\u30fc"],"Circle deactivate Color":["\u30b5\u30fc\u30af\u30eb\u975e\u6d3b\u6027\u30ab\u30e9\u30fc"],"Number deactivate Color":["\u30ca\u30f3\u30d0\u30fc\u975e\u6d3b\u6027\u30ab\u30e9\u30fc"],"Line Color":["\u30e9\u30a4\u30f3\u30ab\u30e9\u30fc"],"Table of Contents Editor Preview H2 Heading":["\u76ee\u6b21\u30a8\u30c7\u30a3\u30bf\u30d7\u30ec\u30d3\u30e5\u30fc H2 \u898b\u51fa\u3057"],"Table of Contents Editor Preview H3 Heading":["\u76ee\u6b21\u30a8\u30c7\u30a3\u30bf\u30d7\u30ec\u30d3\u30e5\u30fc H3 \u898b\u51fa\u3057"],"Table of Contents Editor Preview H4 Heading":["\u76ee\u6b21\u30a8\u30c7\u30a3\u30bf\u30d7\u30ec\u30d3\u30e5\u30fc H4 \u898b\u51fa\u3057"],"Table of Contents Editor Preview H5 Heading":["\u76ee\u6b21\u30a8\u30c7\u30a3\u30bf\u30d7\u30ec\u30d3\u30e5\u30fc H5 \u898b\u51fa\u3057"],"Table of contents":["\u76ee\u6b21"],"Max height":["\u6700\u5927\u306e\u9ad8\u3055"]}}} \ No newline at end of file diff --git a/languages/mone.pot b/languages/mone.pot index 0887a0c..61ffe5d 100644 --- a/languages/mone.pot +++ b/languages/mone.pot @@ -9,7 +9,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2024-12-22T01:31:53+00:00\n" +"POT-Creation-Date: 2024-12-26T12:27:24+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.11.0\n" "X-Domain: mone\n" @@ -91,6 +91,10 @@ msgstr "" msgid "Menu" msgstr "" +#: build/block-library/table-of-contents/index.php:100 +msgid "Mone table of contents" +msgstr "" + #: build/block-library/user-icon/index.php:97 msgid "Mone Settings" msgstr "" @@ -600,60 +604,60 @@ msgstr "" #: build/block-editor/index.js:883 #: build/block-editor/index.js:956 -#: build/block-editor/index.js:716 -#: build/block-editor/index.js:798 +#: build/block-editor/index.js:719 +#: build/block-editor/index.js:801 msgid "Position" msgstr "" #: build/block-editor/index.js:902 #: build/block-editor/index.js:920 -#: build/block-editor/index.js:736 -#: build/block-editor/index.js:755 +#: build/block-editor/index.js:739 +#: build/block-editor/index.js:758 msgid "Type" msgstr "" #: build/block-editor/index.js:935 -#: build/block-editor/index.js:771 +#: build/block-editor/index.js:774 msgid "Default" msgstr "" #: build/block-editor/index.js:938 -#: build/block-editor/index.js:775 +#: build/block-editor/index.js:778 msgid "Sticky" msgstr "" #: build/block-editor/index.js:941 -#: build/block-editor/index.js:779 +#: build/block-editor/index.js:782 msgid "Fixed" msgstr "" #: build/block-editor/index.js:958 -#: build/block-editor/index.js:801 +#: build/block-editor/index.js:804 msgid "Top" msgstr "" #: build/block-editor/index.js:981 -#: build/block-editor/index.js:832 +#: build/block-editor/index.js:835 msgid "Right" msgstr "" #: build/block-editor/index.js:1004 -#: build/block-editor/index.js:863 +#: build/block-editor/index.js:866 msgid "Bottom" msgstr "" #: build/block-editor/index.js:1027 -#: build/block-editor/index.js:894 +#: build/block-editor/index.js:897 msgid "Left" msgstr "" #: build/block-editor/index.js:1203 -#: build/block-editor/index.js:1080 +#: build/block-editor/index.js:1083 msgid "Unlock content only" msgstr "" #: build/block-editor/index.js:1203 -#: build/block-editor/index.js:1081 +#: build/block-editor/index.js:1084 msgid "Lock content only" msgstr "" @@ -1177,11 +1181,87 @@ msgstr "" msgid "white" msgstr "" -#: build/block-library/table-of-contents/index.js:51 -#: build/block-library/table-of-contents/index.js:58 -#: build/block-library/table-of-contents/index.js:30 -#: build/block-library/table-of-contents/index.js:38 -msgid "Max height" +#: build/block-library/table-of-contents/index.js:84 +#: build/block-library/table-of-contents/index.js:89 +#: build/block-library/table-of-contents/index.js:103 +#: build/block-library/table-of-contents/index.js:120 +msgid "Scroll animation" +msgstr "" + +#: build/block-library/table-of-contents/index.js:103 +#: build/block-library/table-of-contents/index.js:144 +msgid "Circle Color" +msgstr "" + +#: build/block-library/table-of-contents/index.js:103 +#: build/block-library/table-of-contents/index.js:145 +msgid "Number Color" +msgstr "" + +#: build/block-library/table-of-contents/index.js:110 +#: build/block-library/table-of-contents/index.js:155 +msgid "Deactivate text Color" +msgstr "" + +#: build/block-library/table-of-contents/index.js:117 +#: build/block-library/table-of-contents/index.js:168 +msgid "Circle deactivate Color" +msgstr "" + +#: build/block-library/table-of-contents/index.js:117 +#: build/block-library/table-of-contents/index.js:172 +msgid "Number deactivate Color" +msgstr "" + +#: build/block-library/table-of-contents/index.js:124 +#: build/block-library/table-of-contents/index.js:188 +msgid "Line Color" +msgstr "" + +#: build/block-library/table-of-contents/index.js:143 +#: build/block-library/table-of-contents/index.js:161 +#: build/block-library/table-of-contents/index.js:214 +#: build/block-library/table-of-contents/index.js:207 +#: build/block-library/table-of-contents/index.js:233 +#: build/block-library/table-of-contents/index.js:301 +msgid "Table of Contents Editor Preview H2 Heading" +msgstr "" + +#: build/block-library/table-of-contents/index.js:149 +#: build/block-library/table-of-contents/index.js:154 +#: build/block-library/table-of-contents/index.js:167 +#: build/block-library/table-of-contents/index.js:191 +#: build/block-library/table-of-contents/index.js:220 +#: build/block-library/table-of-contents/index.js:215 +#: build/block-library/table-of-contents/index.js:223 +#: build/block-library/table-of-contents/index.js:241 +#: build/block-library/table-of-contents/index.js:271 +#: build/block-library/table-of-contents/index.js:309 +msgid "Table of Contents Editor Preview H3 Heading" +msgstr "" + +#: build/block-library/table-of-contents/index.js:173 +#: build/block-library/table-of-contents/index.js:197 +#: build/block-library/table-of-contents/index.js:249 +#: build/block-library/table-of-contents/index.js:279 +msgid "Table of Contents Editor Preview H4 Heading" +msgstr "" + +#: build/block-library/table-of-contents/index.js:179 +#: build/block-library/table-of-contents/index.js:203 +#: build/block-library/table-of-contents/index.js:257 +#: build/block-library/table-of-contents/index.js:287 +msgid "Table of Contents Editor Preview H5 Heading" +msgstr "" + +#: build/block-library/table-of-contents/index.js:309 +#: build/block-library/table-of-contents/index.js:372 +msgid "Table of contents" +msgstr "" + +#: build/block-library/table-of-contents/index.js:317 +#: build/block-library/table-of-contents/index.js:381 +msgid "Table of Contents (dot)" msgstr "" #: build/components/index.js:617 @@ -1495,7 +1575,7 @@ msgstr "" #: build/block-library/table-of-contents/block.json msgctxt "block description" -msgid "Table of contents" +msgid "A table of contents is automatically created by retrieving headings from the content.A preview is displayed in the editor." msgstr "" #: build/post-featured-image/blocks/group/block.json diff --git a/readme.txt b/readme.txt index e05715b..757e830 100644 --- a/readme.txt +++ b/readme.txt @@ -12,7 +12,9 @@ License URI: http://www.gnu.org/licenses/gpl-2.0.html = 1.3.0 = +- Added Table of Contents block - Added heading plane style +- Added Position UI = 1.2.0 = 2024-12-09 diff --git a/src/block-editor/position/index.js b/src/block-editor/position/index.js index 52ecca4..365f066 100644 --- a/src/block-editor/position/index.js +++ b/src/block-editor/position/index.js @@ -49,7 +49,10 @@ function addInspectorControls( BlockEdit ) { if ( ( style?.position?.type === 'sticky' || style?.position?.type === 'fixed' ) && - style?.position?.top === undefined + style?.position?.top === undefined && + style?.position?.left === undefined && + style?.position?.right === undefined && + style?.position?.bottom === undefined ) { const newStyle = { ...style, @@ -131,10 +134,11 @@ function addInspectorControls( BlockEdit ) { label: __( 'Sticky', 'mone' ), value: 'sticky', }, - { - label: __( 'Fixed', 'mone' ), - value: 'fixed', - }, + // fixedはtocで調整が必要 + // { + // label: __( 'Fixed', 'mone' ), + // value: 'fixed', + // }, ] } /> diff --git a/src/block-hook/group/style.scss b/src/block-hook/group/style.scss index c3e5837..47ab065 100644 --- a/src/block-hook/group/style.scss +++ b/src/block-hook/group/style.scss @@ -62,5 +62,11 @@ .wp-block-group.mone_wrap-on-mobile.is-layout-grid { grid-template-columns: 1fr; column-gap: 0; + + // とても細くした時に横スクロールするのを防ぐ + // https://coliss.com/articles/build-websites/operation/css/minimum-content-size-in-css-grid.html + > * { + min-width: 0; + } } } diff --git a/src/block-library/table-of-contents/block.json b/src/block-library/table-of-contents/block.json new file mode 100644 index 0000000..005de21 --- /dev/null +++ b/src/block-library/table-of-contents/block.json @@ -0,0 +1,79 @@ +{ + "apiVersion": 3, + "name": "mone/table-of-contents", + "category": "mone-block-cat", + "title": "Table of contents", + "description": "A table of contents is automatically created by retrieving headings from the content.A preview is displayed in the editor.", + "textdomain": "mone", + "attributes": { + "deactivateTextColor": { + "type": "string" + }, + "customDeactivateTextColor": { + "type": "string" + }, + "beforeColor": { + "type": "string" + }, + "customBeforeColor": { + "type": "string" + }, + "beforeDeactivateColor": { + "type": "string" + }, + "customBeforeDeactivateColor": { + "type": "string" + }, + "lineColor": { + "type": "string" + }, + "customLineColor": { + "type": "string" + } + }, + "supports": { + "color": { + "gradients": true, + "link": false, + "__experimentalDefaultControls": { + "background": true, + "text": true + } + }, + "spacing": { + "margin": true, + "padding": true + }, + "typography": { + "__experimentalFontFamily": true, + "__experimentalFontWeight": true, + "__experimentalFontStyle": true, + "__experimentalTextTransform": true, + "__experimentalTextDecoration": true, + "__experimentalLetterSpacing": true, + "__experimentalDefaultControls": { + "fontSize": true + } + }, + "__experimentalBorder": { + "color": true, + "radius": true, + "width": true, + "style": true, + "__experimentalDefaultControls": { + "color": true, + "radius": true, + "width": true, + "style": true + } + }, + "shadow": true, + "interactivity": true, + "html": false + }, + "editorScript": "file:./index.js", + "editorStyle": "file:./style.css", + "render": "file:./render.php", + "viewScriptModule": "file:./view/index.js", + "style": "file:./style-index.css" +} diff --git a/src/block-library/table-of-contents/edit.js b/src/block-library/table-of-contents/edit.js new file mode 100644 index 0000000..8a1d51b --- /dev/null +++ b/src/block-library/table-of-contents/edit.js @@ -0,0 +1,328 @@ +import clsx from 'clsx'; + +import { __ } from '@wordpress/i18n'; +import { + __experimentalToolsPanelItem as ToolsPanelItem, + ToggleControl, + __experimentalToolsPanel as ToolsPanel, +} from '@wordpress/components'; +import { + InspectorControls, + useBlockProps, + withColors, + __experimentalColorGradientSettingsDropdown as ColorGradientSettingsDropdown, + __experimentalUseMultipleOriginColorsAndGradients as useMultipleOriginColorsAndGradients, +} from '@wordpress/block-editor'; +import { getPath } from '@wordpress/url'; + +import { + classStringToClassArray, + setClassName, + existsClass, + deleteClass, +} from '../../utils-func/class-name/classAttribute.js'; +import { useToolsPanelDropdownMenuProps } from '../../utils-func/use-tools-panel-dropdown'; + +const isSiteEditor = getPath( window.location.href )?.includes( + 'site-editor.php' +); + +function TableOfContentEdit( props ) { + const dropdownMenuProps = useToolsPanelDropdownMenuProps(); + const { + attributes, + setAttributes, + clientId, + deactivateTextColor, + setDeactivateTextColor, + beforeColor, + setBeforeColor, + beforeDeactivateColor, + setBeforeDeactivateColor, + lineColor, + setLineColor, + } = props; + const { className } = attributes; + const classArray = classStringToClassArray( className ); + const hasDefaultTocStyle = classArray.includes( + 'is-style-mone-default-toc' + ); + const scrollAnimationClassName = 'mone-is-scroll-animation'; + + const blockProps = useBlockProps( { + className: clsx( { + [ `has-deactivate-text-color` ]: + existsClass( className, scrollAnimationClassName ) && + !! deactivateTextColor.color, + [ `has-before-color` ]: !! beforeColor.color, + [ `has-before-deactivate-color` ]: + existsClass( className, scrollAnimationClassName ) && + !! beforeDeactivateColor.color, + [ `has-line-color` ]: !! lineColor.color, + [ `mone-toc` ]: ! hasDefaultTocStyle, + } ), + style: { + overflowY: existsClass( className, scrollAnimationClassName ) + ? 'auto' + : undefined, + '--the-deactivate-text-color': + existsClass( className, scrollAnimationClassName ) && + ( !! deactivateTextColor?.slug + ? `var(--wp--preset--color--${ deactivateTextColor.slug })` + : deactivateTextColor?.color ), + '--the-before-color': !! beforeColor?.slug + ? `var(--wp--preset--color--${ beforeColor.slug })` + : beforeColor?.color, + '--the-before-deactivate-color': + existsClass( className, scrollAnimationClassName ) && + ( !! beforeDeactivateColor?.slug + ? `var(--wp--preset--color--${ beforeDeactivateColor.slug })` + : beforeDeactivateColor?.color ), + '--the-line-color': !! lineColor?.slug + ? `var(--wp--preset--color--${ lineColor.slug })` + : lineColor?.color, + }, + } ); + + return ( + <> + { isSiteEditor && ( + + { + deleteClass( + scrollAnimationClassName, + className, + setAttributes + ); + } } + dropdownMenuProps={ dropdownMenuProps } + > + + existsClass( + className, + scrollAnimationClassName + ) + } + onDeselect={ () => + deleteClass( + scrollAnimationClassName, + className, + setAttributes + ) + } + > + { + setClassName( + scrollAnimationClassName, + className, + setAttributes + ); + } } + __nextHasNoMarginBottom + /> + + + + ) } + + setBeforeColor(), + isShownByDefault: true, + enableAlpha: true, + }, + ...( existsClass( className, scrollAnimationClassName ) + ? [ + { + label: __( + 'Deactivate text Color', + 'mone' + ), + colorValue: deactivateTextColor.color, + onColorChange: setDeactivateTextColor, + resetAllFilter: () => + setDeactivateTextColor(), + isShownByDefault: true, + enableAlpha: true, + }, + { + label: hasDefaultTocStyle + ? __( + 'Circle deactivate Color', + 'mone' + ) + : __( + 'Number deactivate Color', + 'mone' + ), + colorValue: beforeDeactivateColor.color, + onColorChange: setBeforeDeactivateColor, + resetAllFilter: () => + setBeforeDeactivateColor(), + isShownByDefault: true, + enableAlpha: true, + }, + ] + : [] ), + ...( hasDefaultTocStyle + ? [ + { + label: __( 'Line Color', 'mone' ), + colorValue: lineColor.color, + onColorChange: setLineColor, + resetAllFilter: () => setLineColor(), + isShownByDefault: true, + enableAlpha: true, + }, + ] + : [] ), + ] } + panelId={ clientId } + { ...useMultipleOriginColorsAndGradients() } + disableCustomGradients + /> + +
+
    +
  1. + + { __( + 'Table of Contents Editor Preview H2 Heading', + 'mone' + ) } + +
      +
    1. + + { __( + 'Table of Contents Editor Preview H3 Heading', + 'mone' + ) } + +
    2. +
    3. + + { __( + 'Table of Contents Editor Preview H3 Heading', + 'mone' + ) } + +
    4. +
    +
  2. +
  3. + + { __( + 'Table of Contents Editor Preview H2 Heading', + 'mone' + ) } + +
      +
    1. + + { __( + 'Table of Contents Editor Preview H3 Heading', + 'mone' + ) } + +
        +
      1. + + { __( + 'Table of Contents Editor Preview H4 Heading', + 'mone' + ) } + +
          +
        1. + + { __( + 'Table of Contents Editor Preview H5 Heading', + 'mone' + ) } + +
        2. +
        +
      2. +
      +
    2. +
    +
      +
    1. + + { __( + 'Table of Contents Editor Preview H3 Heading', + 'mone' + ) } + +
        +
      1. + + { __( + 'Table of Contents Editor Preview H4 Heading', + 'mone' + ) } + +
          +
        1. + + { __( + 'Table of Contents Editor Preview H5 Heading', + 'mone' + ) } + +
        2. +
        +
      2. +
      +
    2. +
    +
  4. +
  5. + + { __( + 'Table of Contents Editor Preview H2 Heading', + 'mone' + ) } + +
      +
    1. + + { __( + 'Table of Contents Editor Preview H3 Heading', + 'mone' + ) } + +
    2. +
    +
  6. +
+
+ + ); +} + +export default withColors( { + deactivateTextColor: 'color', + beforeColor: 'color', + beforeDeactivateColor: 'color', + lineColor: 'color', +} )( TableOfContentEdit ); diff --git a/src/block-library/table-of-contents/index.js b/src/block-library/table-of-contents/index.js new file mode 100644 index 0000000..1a82931 --- /dev/null +++ b/src/block-library/table-of-contents/index.js @@ -0,0 +1,23 @@ +/** + * WordPress dependencies + */ +import { registerBlockType } from '@wordpress/blocks'; + +/** + * block type + */ +import { blockCategoryIcon as icon } from '../../icons'; +import metadata from './block.json'; +import edit from './edit'; +import './style.scss'; +import variations from './variations'; + +const { name } = metadata; + +export { metadata, name }; + +registerBlockType( name, { + icon, + edit, + variations, +} ); diff --git a/src/block-library/table-of-contents/index.php b/src/block-library/table-of-contents/index.php new file mode 100644 index 0000000..fe42703 --- /dev/null +++ b/src/block-library/table-of-contents/index.php @@ -0,0 +1,111 @@ + implode( ' ', $classes ), + 'style' => $style_attribute, + ) + ); + return sprintf( + '
', + $wrapper_attributes + ); +} + + +/** + * Register block + * + * @return void + */ +function register_block_table_of_contents() { + + register_block_style( + 'mone/table-of-contents', + array( + 'name' => 'mone-default-toc', + 'label' => __( 'Mone table of contents', 'mone' ), + ) + ); + + register_block_type( + __DIR__, + array( + 'render_callback' => __NAMESPACE__ . '\table_of_contents_render_callback', + ) + ); +} +add_action( 'init', __NAMESPACE__ . '\register_block_table_of_contents' ); diff --git a/src/block-library/table-of-contents/style.scss b/src/block-library/table-of-contents/style.scss new file mode 100644 index 0000000..f91ba4a --- /dev/null +++ b/src/block-library/table-of-contents/style.scss @@ -0,0 +1,200 @@ +.wp-block-mone-table-of-contents.is-style-mone-default-toc { + + ol { + padding: 0; + list-style: none; + position: relative; + a { + text-decoration: none; + margin: 8px 0; + display: block; + line-height: 1.5; + transition: color 0.3s ease-in-out; + } + } + + .ol-depth-1 { + padding-left: 21px; + margin: 0; + + >li a{ + font-weight: 500; + font-size: var(--wp--preset--font-size--medium); + } + + >li:first-child > a{ + &:first-child { + margin-top: 0; + } + } + >li:last-child a{ + &:last-child { + margin-bottom: 0; + } + } + + ol li a { + font-weight: 400; + font-size: var(--wp--preset--font-size--small); + } + } + + .ol-depth-1:before { + position: absolute; + top: 17px; + bottom: 8px; + left: 7px; + width: 2px; + content: ""; + } + + &:not(.has-line-color) { + .ol-depth-1:before { + background: var(--wp--preset--color--mone-border); + } + } + .ol-depth-1:before { + background: var(--the-line-color, var(--wp--preset--color--mone-border)); + } + + .ol-depth-1>li { + position: relative; + } + + &.mone-is-scroll-animation.has-deactivate-text-color { + li:not(.active) { + > a { + color: var(--the-deactivate-text-color, currentColor); + } + } + } + &.mone-is-scroll-animation:not(.has-deactivate-text-color) { + li:not(.active) { + > a { + color: color-mix(in srgb, currentColor 60%, #fff); + } + } + } + + li { + position: relative; + } + + li:before { + top: 6px; + position: absolute; + content: ""; + border-radius: 100%; + } + + .ol-depth-1>li.active:before, + .ol-depth-2>li.active:before, + .ol-depth-3>li.active:before, + .ol-depth-4>li.active:before, + .ol-depth-5>li.active:before, + .ol-depth-6>li.active:before { + background: var(--the-before-color, var(--wp--preset--color--key-2)); + transition: background-color 0.3s ease-in-out; + } + + &.mone-is-scroll-animation { + &.has-before-deactivate-color { + li:not(.active):before { + background: var(--the-before-deactivate-color); + } + } + &:not(.has-before-deactivate-color) li:not(.active):before { + background: color-mix(in srgb, var(--the-before-color, var(--wp--preset--color--key-2)) 40%, #fff); + } + } + + &:not(.mone-is-scroll-animation) { + &:not(.has-before-deactivate-color) li:not(.active):before { + background: var(--the-before-color, var(--wp--preset--color--key-2)); + } + } + + + .ol-depth-1>li:before { + width: 12px; + height: 12px; + left: -19px; + } + + .ol-depth-2>li:before, + .ol-depth-3>li:before, + .ol-depth-4>li:before, + .ol-depth-5>li:before, + .ol-depth-6>li:before { + left: -17px; + width: 8px; + height: 8px; + } +} + +// デフォルトのスタイルの時 +.wp-block-mone-table-of-contents.mone-toc { + ol { + list-style: none; + counter-reset: item; + padding-inline-start: 1.5rem; + + a { + transition: color 0.3s ease-in-out; + } + + &:first-child { + padding: 0; + } + + li { + counter-increment: item; + margin: 8px 0; + line-height: 1.5; + &:first-child { + counter-reset: toc; + } + &:before { + content: counters(item, "."); + margin-right: 0.5em; + } + + ol { + counter-reset: item; + } + } + } + + &.mone-is-scroll-animation:not(.has-deactivate-text-color) { + li:not(.active) { + > a { + color: color-mix(in srgb, currentColor 60%, #fff); + } + } + } + + &.has-before-color { + ol li { + &::before { + color: var(--the-before-color, var(--wp--preset--color--key-2)); + } + } + } + + &.mone-is-scroll-animation.has-deactivate-text-color { + li:not(.active) { + > a { + color: var(--the-deactivate-text-color,var(--wp--preset--color--content-contrast-2)); + } + } + } + + &.mone-is-scroll-animation.has-before-deactivate-color { + ol li:not(.active) { + &::before { + color: var(--the-before-deactivate-color, var(--wp--preset--color--key-2)); + } + } + } + +} \ No newline at end of file diff --git a/src/block-library/table-of-contents/variations.js b/src/block-library/table-of-contents/variations.js new file mode 100644 index 0000000..d48c9ea --- /dev/null +++ b/src/block-library/table-of-contents/variations.js @@ -0,0 +1,38 @@ +/** + * WordPress dependencies + */ +import { __ } from '@wordpress/i18n'; +import { getPath } from '@wordpress/url'; + +/** + * Internal dependencies + */ +import { blockCategoryIcon } from '../../icons'; + +const isSiteEditor = getPath( window.location.href )?.includes( + 'site-editor.php' +); + +const variations = [ + { + name: 'mone-default-toc', + title: __( 'Table of contents', 'mone' ), + attributes: {}, + innerBlocks: [], + icon: blockCategoryIcon, + scope: [ 'inserter' ], + isDefault: true, + }, + { + name: 'side-toc', + title: __( 'Sidebar Table of Contents', 'mone' ), + attributes: { + className: 'mone-is-scroll-animation is-style-mone-default-toc', + }, + innerBlocks: [], + icon: blockCategoryIcon, + scope: [ isSiteEditor && 'inserter' ], + }, +]; + +export default variations; diff --git a/src/block-library/table-of-contents/view/calculate-height.js b/src/block-library/table-of-contents/view/calculate-height.js new file mode 100644 index 0000000..59f4e10 --- /dev/null +++ b/src/block-library/table-of-contents/view/calculate-height.js @@ -0,0 +1,66 @@ +export const calculateHeight = ( tocContainers ) => { + tocContainers.forEach( ( tocContainer ) => { + if ( tocContainer.classList.contains( 'mone-is-scroll-animation' ) ) { + const stickyParent = tocContainer.closest( + '.is-position-sticky, .is-position-fixed' + ); + if ( stickyParent ) { + const stickyParentStyle = + window.getComputedStyle( stickyParent ); + const paddingTop = + parseFloat( stickyParentStyle.paddingTop ) || 0; + const paddingBottom = + parseFloat( stickyParentStyle.paddingBottom ) || 0; + const top = parseFloat( stickyParentStyle.top ) || 0; + const gap = parseFloat( stickyParentStyle.gap ) || 0; + + const otherElementsHeight = Array.from( stickyParent.children ) + .filter( ( child ) => child !== tocContainer ) + .reduce( ( total, child ) => { + const childStyle = window.getComputedStyle( child ); + const childHeight = + child.getBoundingClientRect().height; + const marginTop = + parseFloat( childStyle.marginTop ) || 0; + const marginBottom = + parseFloat( childStyle.marginBottom ) || 0; + const childBorderTop = + parseFloat( childStyle.borderTopWidth ) || 0; + const childBorderBottom = + parseFloat( childStyle.borderBottomWidth ) || 0; + return ( + total + + childHeight + + marginTop + + marginBottom + + gap + + childBorderTop + + childBorderBottom + ); + }, 0 ); + + const tocStyle = window.getComputedStyle( tocContainer ); + const tocMarginTop = parseFloat( tocStyle.marginTop ) || 0; + const tocPaddingTop = parseFloat( tocStyle.paddingTop ) || 0; + const tocPaddingBottom = + parseFloat( tocStyle.paddingBottom ) || 0; + const tocBorderTop = parseFloat( tocStyle.borderTopWidth ) || 0; + const tocBorderBottom = + parseFloat( tocStyle.borderBottomWidth ) || 0; + + const availableHeight = + window.innerHeight - + paddingTop - + paddingBottom - + otherElementsHeight - + tocMarginTop - + tocPaddingTop - + tocPaddingBottom - + tocBorderTop - + tocBorderBottom - + 2 * top; + tocContainer.style.maxHeight = `calc(${ availableHeight }px + ( var(--wp-admin--admin-bar--position-offset, 0px) ) )`; + } + } + } ); +}; diff --git a/src/block-library/table-of-contents/view/hide-element.js b/src/block-library/table-of-contents/view/hide-element.js new file mode 100644 index 0000000..e4e3d8d --- /dev/null +++ b/src/block-library/table-of-contents/view/hide-element.js @@ -0,0 +1,5 @@ +export function hideElementsWithClass( className ) { + document.querySelectorAll( `.${ className }` ).forEach( ( element ) => { + element.style.display = 'none'; + } ); +} diff --git a/src/block-library/table-of-contents/view/index.js b/src/block-library/table-of-contents/view/index.js new file mode 100644 index 0000000..490c90e --- /dev/null +++ b/src/block-library/table-of-contents/view/index.js @@ -0,0 +1,41 @@ +import { + assignHeadingIds, + generateTableOfContents, + setupIntersectionObserver, +} from './toc.js'; +import { hideElementsWithClass } from './hide-element'; +import { calculateHeight } from './calculate-height'; + +document.addEventListener( 'DOMContentLoaded', () => { + // Get the entry content element + const entryContent = document.querySelector( '.entry-content' ); + if ( ! entryContent ) { + hideElementsWithClass( 'mone-toc-none' ); + return; + } + + // Get the table of contents containers + const tocContainers = document.querySelectorAll( + '.wp-block-mone-table-of-contents' + ); + if ( tocContainers.length === 0 ) { + hideElementsWithClass( 'mone-toc-none' ); + return; + } + + // Get all headings in the entry content + const headings = entryContent.querySelectorAll( 'h2, h3, h4, h5, h6' ); + if ( headings.length < 2 ) { + hideElementsWithClass( 'mone-toc-none' ); + return; + } + + calculateHeight( tocContainers ); + window.addEventListener( 'resize', () => calculateHeight( tocContainers ) ); + window.addEventListener( 'scroll', () => calculateHeight( tocContainers ) ); + + const idMap = new Map(); + assignHeadingIds( headings, idMap ); + generateTableOfContents( tocContainers, headings ); + setupIntersectionObserver( tocContainers, headings ); +} ); diff --git a/src/block-library/table-of-contents/view/scroll.js b/src/block-library/table-of-contents/view/scroll.js new file mode 100644 index 0000000..4984683 --- /dev/null +++ b/src/block-library/table-of-contents/view/scroll.js @@ -0,0 +1,83 @@ +/* global getComputedStyle */ + +export function handleScroll( headings, tocContainers ) { + let currentHeading = null; + const offset = + parseFloat( + getComputedStyle( document.documentElement ).getPropertyValue( + '--wp--style--block-gap' + ) + ) * + 16 + + 1.2 * 16; + + headings.forEach( ( heading, index ) => { + const nextHeading = headings[ index + 1 ]; + const rect = heading.getBoundingClientRect(); + const nextRect = nextHeading + ? nextHeading.getBoundingClientRect() + : { top: Infinity }; + if ( rect.top <= offset && nextRect.top > offset ) { + currentHeading = heading; + } + } ); + + tocContainers.forEach( ( tocContainer ) => { + const links = tocContainer.querySelectorAll( 'a' ); + let activeFound = false; + const tocRect = tocContainer.getBoundingClientRect(); + + const isTocFullyVisible = + tocRect.top >= 0 && tocRect.bottom <= window.innerHeight; + + links.forEach( ( link, index ) => { + const listItem = link.parentElement; + listItem.classList.remove( 'active' ); + if ( listItem.classList.length === 0 ) { + listItem.removeAttribute( 'class' ); + } + if ( + currentHeading && + link.getAttribute( 'href' ) === `#${ currentHeading.id }` + ) { + listItem.classList.add( 'active' ); + activeFound = true; + if ( + isTocFullyVisible && + tocContainer.classList.contains( + 'mone-is-scroll-animation' + ) && + window.innerWidth >= 781 + ) { + const listItemRect = listItem.getBoundingClientRect(); + const tocContainerRect = + tocContainer.getBoundingClientRect(); + + if ( index === 0 ) { + // 先頭にスクロール + tocContainer.scrollTop = 0; + } else if ( index === links.length - 1 ) { + // 最下部にスクロール + tocContainer.scrollTop = tocContainer.scrollHeight; + } else if ( listItemRect.top < tocContainerRect.top ) { + // 通常のスクロール(上方向) + tocContainer.scrollTop -= + tocContainerRect.top - listItemRect.top; + } else if ( + listItemRect.bottom > tocContainerRect.bottom + ) { + // 通常のスクロール(下方向) + tocContainer.scrollTop += + listItemRect.bottom - tocContainerRect.bottom; + } else { + // 通常のスクロール + listItem.scrollIntoView( { block: 'nearest' } ); + } + } + } + } ); + if ( ! activeFound && links.length > 0 ) { + links[ 0 ].parentElement.classList.add( 'active' ); + } + } ); +} diff --git a/src/block-library/table-of-contents/view/toc.js b/src/block-library/table-of-contents/view/toc.js new file mode 100644 index 0000000..231a335 --- /dev/null +++ b/src/block-library/table-of-contents/view/toc.js @@ -0,0 +1,107 @@ +import { handleScroll } from './scroll.js'; +/* global IntersectionObserver */ + +export function assignHeadingIds( headings, idMap ) { + headings.forEach( ( heading ) => { + let id = + heading.id || + heading.textContent.trim().toLowerCase().replace( /\s+/g, '-' ); + if ( ! heading.id ) { + idMap.set( id, ( idMap.get( id ) || 0 ) + 1 ); + if ( idMap.get( id ) > 1 ) { + id += `-${ idMap.get( id ) }`; + } + heading.id = id; + } + } ); +} + +export function generateTableOfContents( tocContainers, headings ) { + tocContainers.forEach( ( tocContainer ) => { + const tocList = document.createElement( 'ol' ); + tocList.classList.add( 'ol-depth-1' ); + let currentLevel = parseInt( headings[ 0 ].tagName.substring( 1 ) ); + let currentList = tocList; + const listStack = [ tocList ]; + + headings.forEach( ( heading ) => { + const level = parseInt( heading.tagName.substring( 1 ) ); + const listItem = createListItem( heading ); + + if ( level > currentLevel ) { + const newList = document.createElement( 'ol' ); + newList.classList.add( `ol-depth-${ level }` ); + appendNewList( listStack, newList ); + listStack.push( newList ); + currentList = newList; + } else { + while ( level < currentLevel && listStack.length > 1 ) { + listStack.pop(); + currentList = listStack[ listStack.length - 1 ]; + currentLevel--; + } + } + + if ( currentList ) { + currentList.appendChild( listItem ); + } + currentLevel = level; + } ); + + tocContainer.appendChild( tocList ); + + // activeクラスが存在しない場合は最初のliをactiveにする + const activeItems = tocContainer.querySelectorAll( 'li.active' ); + if ( activeItems.length === 0 ) { + const firstListItem = tocContainer.querySelector( 'li' ); + if ( firstListItem ) { + firstListItem.classList.add( 'active' ); + } + } + } ); +} + +function createListItem( heading ) { + const listItem = document.createElement( 'li' ); + const link = document.createElement( 'a' ); + link.href = `#${ heading.id }`; + link.textContent = heading.textContent; + listItem.appendChild( link ); + return listItem; +} + +function appendNewList( listStack, newList ) { + if ( listStack[ listStack.length - 1 ].lastElementChild ) { + listStack[ listStack.length - 1 ].lastElementChild.appendChild( + newList + ); + } else { + listStack[ listStack.length - 1 ].appendChild( newList ); + } +} + +export function setupIntersectionObserver( tocContainers, headings ) { + const observer = new IntersectionObserver( + ( entries ) => { + entries.forEach( ( entry ) => { + if ( entry.isIntersecting ) { + window.addEventListener( 'scroll', () => + handleScroll( headings, tocContainers ) + ); + } else { + window.removeEventListener( 'scroll', () => + handleScroll( headings, tocContainers ) + ); + } + } ); + }, + { + root: null, + threshold: 1, + } + ); + + tocContainers.forEach( ( tocContainer ) => { + observer.observe( tocContainer ); + } ); +} diff --git a/theme.json b/theme.json index ac16e3d..1a8642c 100644 --- a/theme.json +++ b/theme.json @@ -597,12 +597,28 @@ "border": { "color": "var(--wp--preset--color--mone-border)", "width": "1px" - } + }, + "css": "& .wp-block-search__inside-wrapper { padding: 0; }" }, "core/site-tagline": { "color": { "text": "#6f6f6f" } + }, + "mone/table-of-contents": { + "spacing": { + "padding": { + "bottom": "var:preset|spacing|10", + "left": "var:preset|spacing|10", + "right": "var:preset|spacing|10", + "top": "var:preset|spacing|10" + } + }, + "border": { + "color": "var(--wp--preset--color--mone-border)", + "style": "solid", + "width": "1px" + } } }, "color": {