المكتبة
الكتب والدورات وسلاسل المحاضرات على الموقع العام، مساراتٍ يمشيها القارئ بالترتيب.
المدونة للقطع المكتوبة: تُقرأ المقالة مرةً واحدة، كاملةً، والمقالة التالية هي التي جاءت بعدها في الزمن، لا أكثر. أما الملاحظات على كتاب أو سلسلة محاضرات فليست كذلك. تُقرأ بالترتيب، على مدى أسابيع، قطعةً قطعة، ويريد القارئ أن يعرف أين هو من الكلّ. والمكتبة هي القشرة المصنوعة لها. تجلس إلى جانب المدونة والصفحة الرئيسية المصمَّمة، خلف باب واحد في شريط التنقّل، ولا يصل منها شيء إلى المدونة ما لم تطلب ذلك.
المسار مجلد
المسار بندٌ واحد في المكتبة: كتاب واحد، أو دورة واحدة، أو سلسلة واحدة. ولا تبنيه بيدك، فشكله موجود في الخزانة أصلًا. فالكتاب مجلد من مجلدات فصول فيها ملاحظات مفاهيم؛ والدورة مجلد من مجلدات محاضرات فيها ملاحظات. لذلك فالمسار في المكتبة هو ببساطة مجلد تعلنه، وتصير بنية المجلد نفسه بنية المسار:
- كل مجلد فرعي مباشر وحدة (فصل، أو محاضرة، أو أسبوع)، تُسمّى من المجلد:
L3يُطبع المحاضرة 3، وB2| Chapter 40يُطبع الفصل 40، وWeek 2يُطبع الأسبوع 2؛ والمجلد الذي لا رقم له يحتفظ باسمه ويُرتَّب بعد المرقّمة؛ - وكل ملاحظة منشورة في الداخل درس، مرتّبةً بعناوينها ترتيبًا يفهم الأرقام (فالدرس 2 قبل الدرس 10)، وتتقدّمها الملاحظة التي تحمل اسم وحدتها (محور الفصل الذي يكتبه رفيق القراءة)؛
- والملاحظات الجالسة مباشرةً في مجلد المسار هي مقدمته.
ولا يُطلب من أي ملاحظة في مقدمتها شيء غير publish: true. فالملاحظة غير المنشورة ليست درسًا، والمسار الذي ليس فيه درس يجوز للزائر أن يقرأه لا يُرسل إلى ذلك الزائر البتة.
إعلان مسار
ثمّة أربع طرق، وكلها تنتهي إلى المكان نفسه.
من جذر للرف. الإعدادات ← المكتبة ← جذور الرف: اختر «الكتب» مرة واحدة، وقل «كتاب»، فيصير كل مجلد داخله فيه ملاحظة منشورة مسارًا — عنوانه اسمه، ورابطه من عنوانه، وغلافه من متتبّع الوسائط إن كان ثمّة متتبّع يسمّيه. والكتاب الذي تنشره غدًا ينضم من تلقاء نفسه. فالجذر جملة واحدة عن شكل خزانتك، وهو الجواب عن اثني عشر صفًّا كلها تقول ما يقوله اسم المجلد أصلًا. ولا يُحسب إلا المجلد الفرعي المباشر: فالملاحظة الجالسة مباشرةً في «الكتب» تبقى تدوينة. وحتى 8 جذور، ولا يجوز أن يكون الجذر داخل جذر آخر ولا داخل مسار.
من الخزانة. ضع في المجلد ملاحظة تحمل اسمه (أو index.md) واكتب في مقدمتها library: book (أو course أو series). فيصير المجلد على الرف ولو لم يكن فوقه جذر. وتلك الملاحظة هي أيضًا موضع حقائق المجلد نفسه، بجذر أو بغير جذر: title: وdescription: وcover: وsource: وslug: وhidden:. ولا يُكتب شيء في الإعدادات؛ فقائمة الإعدادات تعرض هذه المسارات تحت صفوفها، وخصّص هنا يحوّل مسارًا منها إلى صف حين تريد أن تتجاوز شيئًا. والصف الذي يسمّي المجلد نفسه يغلب حقلًا حقلًا ويأخذ الباقي من الملاحظة.
من الشجرة. انقر بالزر الأيمن على المجلد في الشريط الجانبي واختر المكتبة…. تخمّن النافذة المنبثقة النوع مما في الداخل (L1..L14 دورة، وChapter 39..41 كتاب، ومجلد تحت Talks سلسلة)، وتأخذ اسم المجلد عنوانًا، وضع على الرف يحفظه. والمسار الأول يشغّل المكتبة. وإذا نقرت بالزر الأيمن على المجلد نفسه مرة أخرى قالت النافذة إنه على الرف، أو فتحته، أو أزالته من الرف.
الإعدادات ← المكتبة. الصفوف، وكل صف منها تجاوزٌ لمجلد واحد، مع الحقول التي لا تسألك عنها الشجرة. وإضافة مسار يفتح مجلدات الخزانة لتنقر عليها (اكتب لترشّح)، وسطر المجلد في كل صف يعيد فتح ذلك المنتقي؛ فلا شيء هنا يُكتب مسارًا بالحروف. وكل صف مطويٌّ في سطر واحد حتى تنقره.
| الحقل | ما هو |
|---|---|
| النوع | كتاب أو دورة أو سلسلة. يقرّر شكل الغلاف وتجميع الرف. |
| العنوان | ما يسمّيه به الرف والباب. |
| العنوان الشبكي | الجزء الأخير من الرابط: /library/<address>. حروف لاتينية صغيرة وأرقام وشرطات. |
| مجلد الخزانة | المجلد الذي يقرؤه المسار، مختارًا من الشجرة. |
| النبذة والغلاف والمصدر | مطويّة تحت سطر واحد حتى يملكها الصف. النبذة: جملة أو جملتان تحت العنوان. |
| الغلاف | صورة من الخزانة (ابدأ الكتابة فتُعرض صور الخزانة بصور مصغّرة) أو رابط https، كما تُكتب لافتة الملاحظة (attachments/cover.jpg أو https://…). ومن غيرها يرسم الموقع غلافًا من العنوان. ومتتبّع الوسائط الذي يشير folder: فيه إلى مجلد هذا المسار يعير غلافه بدل هذا الحقل. |
| رابط المصدر | من أين جاءت المادة: صفحة الدورة أو الناشر. يُعرض على المسار. |
| مخفي | إخفاء بلا خسارة: يحتفظ الصف بكل حقوله ولا يراه أحد. والمجلد الذي ضمّه جذرٌ يُخفى بـhidden: true في ملاحظة مجلده نفسه، أو بتخصيصه هنا. |
وفوق الصفوف موضعان واسم. باب في التنقل، وهو مفعَّل افتراضيًّا ما إن تُشغَّل المكتبة: رابط المكتبة بجانب المواضيع على القشرتين العامتين. والرف في الصفحة الرئيسية، وهو معطَّل افتراضيًّا: شريط من الأغلفة على رئيسية المدونة، فوق الكتابات. والاسم يعيد تسمية الباب والصفحة؛ والفارغ يعني «المكتبة».
وتعدّ كل بطاقة الملاحظات التي في الداخل وكم منها منشور. ولا تسرد المكتبة إلا الملاحظات المنشورة: فالمسار الذي كل ملاحظاته مسودات رفٌّ لا شيء عليه، ويبقى الباب في التنقّل مخفيًّا حتى يكون في مسار ما ملاحظة يستطيع القارئ أن يفتحها.
وحتى 24 صفًّا و8 جذور. تتقدّم الصفوف بترتيبها، ثم تلي مجلداتُ الجذور بحسب العنوان، كلٌّ في نوعه. والمجلد الذي لا يصنع عنوانُه رابطًا — والعنوان العربي لا يصنع رابطًا — ينتظر في يحتاج إلى رابط حتى يكون له slug: في ملاحظة مجلده أو صفٌّ خاص به؛ فلا يُنشر برابط مختلَق، وتبقى ملاحظاته في المدونة. وكذلك المجلد الذي رابطُه مأخوذ لصفٍّ آخر: فالصف تثبيتٌ لا يُزاح.
وإعادة تسمية المجلد أو نقله أو حذفه تحمل معها صفَّه وجذرَه، فلا ينتقل المسار من بيته حين ينتقل المجلد. ويحتفظ الصف بالرابط الذي ثُبِّت عليه؛ أما المجلد الذي لا صف له فيأخذ الرابط الذي يقترحه عنوانه الجديد.
العرض
إذا جلس صفّان أو أكثر من صفوفك تحت مجلد واحد ولم يكن ذلك المجلد جذرًا بعد، سألتك اللوحة مرة واحدة: «يضم «الكتب» 10 من مساراتك — أتجعله جذرًا للرف؟» وتسرد الصفوف التي لا تقول شيئًا لا يقوله المجلد، والترتيب الذي سيأخذه الرف إن طويتها (الصفوف التي تبقيها أولًا بترتيبها، ثم المجلدات المطويّة بحسب العنوان). وثلاثة أجوبة: اطوِها، أو أبقِها، أو ليس الآن. ولا يُطوى شيء ما لم تضغط — فالطيّ إعادة ترتيب مرئية، وإعادة ترتيب لم يطلبها أحد ليست ترقية.
ما يأخذه القارئ
- الرف (
/library): الدورات والكتب والسلاسل في مجموعات، لكل منها غلاف وعنوان ونبذة وعدد الدروس ووقت القراءة وتقدّم هذا المتصفح. - المسار (
/library/<address>): الغلاف، والنبذة، والمصدر، وزر ابدأ القراءة أو تابع من الدرس n، والمحتويات بحسب الوحدة مع ترقيم كل درس. - الدرس (
/library/<address>/<n>): الملاحظة معروضة بمعرِّض القراءة، وموضعها مذكور في الأعلى (الدرس 7 من 24 · المحاضرة 3)، ومخطط المسار على الجانب وهذا الدرس مضاء فيه، والدرسان السابق والتالي في الأسفل. و←و→يمشيان على المسار.
والدرس ليس تدوينة. فالملاحظة المنشورة داخل مسار في المكتبة تعيش على الرف وتغادر المدونة: ليست في قوائم الرئيسية، ولا في المواضيع، ولا في خلاصة RSS، ولا في مدخلات التدوينات في خريطة الموقع. ورابطها الخاص ما زال يعمل. وإيقاف المكتبة، أو إخفاء المسار، يعيد تلك الملاحظات إلى المدونة. والموضعان مستقلان: فرفٌّ على الصفحة الرئيسية من غير باب في التنقّل طريقة جيدة لإبقاء المكتبة هادئة.
والروابط تبقى على المسار. فالرابط الويكي داخل درس يشير إلى درس آخر في المكتبة يفتح ذلك الدرس، في المكتبة، بمحتوياته وموضعه. أما الرابط إلى ملاحظة ليست على أي رف فيفتح صفحة الملاحظة نفسها، كما كان دائمًا.
والتقدّم ملك القارئ، يُحفظ في متصفحه ولا يُرسل إلى أي مكان أبدًا: فتح الدرس يعلّمه مقروءًا، وصفحة المسار تعدّ، وبطاقة الرف تقول تابع من الدرس n، وانسَ موضعي يمسحه.
أين يعيش
يحمل shared/library.ts القواعد (ما الصف الصالح، وكيف يُقرأ اسم الوحدة، وكيف تُرتَّب الأشياء)، مشتركةً بين محرر الإعدادات والخادم حتى لا يقبل المحرر (بحقل أخضر) ما يرفضه الخادم (بالرمز 400). ويبني server/library.ts المسار من فهرس الخزانة بحسب ما يجوز لجلسة واحدة أن تراه. وGET /api/library هو الرف، و/api/me.library هو الباب. وclient/library/ هو الصفحات والشريط والأغلفة والتقدّم. ويغطّي npm test القواعد (tests/library.test.ts).