をまとめます
このブログは静的サイトです。
これは私ひとりのブログなので、この`rule.md`を人様に見られたらなんだか恥ずかしいですね。
どのように開発してるのかバレバレです。ご容赦ください。
monologue/
- index.html
- 404.html
- pages.json
- favicon.ico
- _config.yml(サイトマップ生成)
- README.md
- google????????.html(GoogleSearchConsole認証用)
- [その他gitignoreしたもの]
- pages/
- [ページのフォルダ名]/
- index.html
- style.css(任意)
- script.js(任意)
- images/(任意)
- [画像ファイル]
- 0template/
- index.html
- general/
- html/
- header.html
- footer.html
- css/
- common.css
- js/
- common.js
- search.js
- search-allpages.js
- search-category.js
- search-tag.js
- images/
- [画像ファイル]
- sidebar/
- sidebar.html
- sidebar.js
- page-search/
- allpages.html
- category.html
- tag.html ## monologue(root)/ #### index.html ホーム。サイト全体の紹介と自己紹介。 #### 404.html ページが見つからない場合にgithub pagesが自動で表示するページ。 #### pages.json 全ページの情報を管理する。最重要。 #### favicon.ico 全ページに適用されるアイコン。 #### _config.yml Jekyllがサイトマップを生成する為の設定ファイル。 これを置くことで`sitemap.xml`がJekyllによって自動生成される。 google検索でヒットするようにするにはこれが必要である。 (Jekyllがあるなら_posts/を使えばいいって話はおいとく。結局私はフレームワーク等に頼らない。) #### README.md github用のREADME。
記事を書く際の基本のテンプレート。
このindex.htmlをコピーして使用する。
一意であり、ページの意味が分かる名前を入力すること。
ページ本体。
ページ固有のcss。
ページ固有のスクリプト。
ページで使用する画像フォルダ。
頻繁に使い回すものは(/monologue)/general/images/から使うこと。
全ページ共通のヘッダー。
全ページ共通のフッター。
全ページ共通のスタイルシート。
メディアクエリで表示位置を操作する。
サイドバー・ヘッダ・フッタのスタイルもここで設定する。
(light-dark()があってもいいかも)
全ページ共通のスクリプト。
これによりサイドバーの読み込みをする。
ESM
検索処理の共通処理。 ESM
全検索の個別処理。 ESM
カテゴリ検索の個別処理。 ESM
タグ検索の個別処理。 ESM
頻繁に使う画像のフォルダ。
全ページ共通の、他ページのリンクなどを表示するサイドバー。
widthが小さい場合はサイト最下部に移動する。
サイドバーのhtml。
サイドバーに表示する内容をpages.jsonから取得する。
ESM
様々な方法のページ検索ページ。並び替えができたら美しい。
URLに検索する内容を含める。
全ページを検索する。
カテゴリ内で検索する。
url末尾は?search=[検索カテゴリ]
urlが無効の場合は全てのカテゴリを列挙する。
タグ内で検索する。
url末尾は?search=[検索タグ]
urlが無効の場合は全てのタグを列挙する。
/だがgithub pagesのrootは/monologue/だからである/monologue/であることを留意すること。<meta name="local-env">を記述することで開発用のパス指定になる。(JavaScriptの範疇でないものは多少404が出てしまうが、仕方ない許容)これは現時点では手動での設定になる。
いずれは全自動で…
"title" [必須]
<title>要素と同一であること。"url" [必須]
/から始めること。 (例)"/pages/test/"/で終わること。末尾のindex.htmlは記述しない。/pages/から始まるが、そうとも限らない。"create-date"
"YYYY-MM-DD" の書式で記述すること。nullは許されない。"update-date"
"YYYY-MM-DD" の書式で記述すること。nullでも構わない。nullチェックをすること。"category"
nullでも構わない。nullチェックをすること。"tag"
[](空配列)でも構わない。空チェックを忘れずに。ここに書いていない記事は存在しないに等しい。
(完全に隠されているわけではないため、プライベート記事は/hidden-pages/へ)
<head>
<head prefix="og: https://ogp.me/ns#"> <- のようにOGP用に記述すること。<meta name="local-env">を記述することで開発用のパス指定になる。<link rel="stylesheet" href="../../general/css/common.css"> (/pages/にある場合)<script src="../../general/js/common.js" type="module"></script> (/pages/にある場合)<link rel="shortcut icon" href="/monologue/favicon.ico" type="image/x-icon"><meta property="og:site_name" content="Monologue"><meta property="og:type" content="article"><meta property="og:locale" content="ja_JP">(英記事なら、”en_US”)<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/themes/prism-tomorrow.min.css"><script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/components/prism-core.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/plugins/autoloader/prism-autoloader.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/plugins/normalize-whitespace/prism-normalize-whitespace.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/plugins/line-numbers/prism-line-numbers.min.js"></script><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/plugins/line-numbers/prism-line-numbers.min.css">
<pre>内の<code>のクラスにline-numbersを追加して使用する。<title>はpages.jsonに設定した"title"と同一にすること。<meta property="og:title" content="[]">SNS上で異なるタイトルを表示させたい場合は設定。<meta name="description">はできるだけ設定する。<meta property="og:description" content="[]">SNS上で…~同上~<meta property="og:url" content="[ここにページのURLを絶対パスで]"><meta property="og:image" content="[ここに画像のURLを絶対パスで]"><body>
<div id="container"><main></main></div>を必ず記述すること。<main>の中に全て書く。<header>, <aside>(サイドバー), <footer>はcommon.jsで補完する)<h1>直下に配置される。<meta name="no-toc">を記述すると無効化できる。<pre><code class="lang-[言語名]"></code></pre><code class="lang-[言語名]"></code><sup class="footnote">補遺文章...</sup>とすると脚注を自動生成する。<wbr>を追加するとよい。<p>の中に<pre>等を含めるべきではない。<title>, og:titleは設定したか?description, og:descriptionは設定したか?og:urlは設定したか?pages.jsonは設定したか?<meta name="local-env">は削除したか?page.jsonの"update-date"は設定したか?og:imageはあればbox-sizingはborder-boxを既定とする。font-familyは'Moralerspace Neon'を既定とする。(等幅フォントはナンセンスかも)<wbr>を正常に機能させるには.use-wbrを使う。
<wbr>を使うときは、文章の中盤ほど高密度で配置するといいかも。type="module"による影響この属性はこの<script>がESモジュールであることを表す。
そのためCORS制約を考慮する必要がある。
ローカル環境ではコンテキストパスのルートが/、github pages環境ではルートが/monologue/になるため、<head>内の<meta name="local-env">を読み取り、その存在によってルートを置き換える。
fetchしてそれぞれ、
header : <body>の開始直後
footer : <body>の終了直前
sidebar : #containerの終了直前
に配置する。
カテゴリ・タグ・作成日・更新日をメインの始めに表示する。
pages.jsonをfetchし、そのJSONのurlが現在のページのURLと完全一致したものから取得する。
titleのついている<abbr>, <dfn>要素にタップでtitle要素と同一の文章を表示する。
要素付近の上部にボックスを表示。画面内に収まるような調節をする。
<sup class="footnote"></sup>で囲んだ文章を補遺文章としてページ最下部に生成する。(innerHTML)
囲んだ文章は脚注番号に置き換える。
参照箇所と脚注に相互リンクを作成する。
<main>に記述した全ての<h*>要素に対してのリンクを<h1>直下もしくはページ最上部に表示する。
リンクを通すためのidをつけるため、全ての<h*>要素の直前に空の<span id="h-index-$">を挿入し、それに対してリンクする。
最も新しい更新日(でなければ作成日)の10件をリスト
同一の日付はグルーピングする。表示される中で最も古いグループが2つ以上の記事を持ち、それを含めると10件を超えてしまう場合は、そのまま10件を超えて表示する。