الفصل 12.2 · الجزء III · في التطبيق
Sandbox: الصفحات المركّبة
قوالب الصفحات والإطارات تُحرَّر على الصفحة نفسها، ومكتبة أنماط الأطر، وفحوص الصفحات المركّبة في كل النسخ، ونقل النص إلى Markdown، وإصلاح إطار بنقرة واحدة
باختصار
تجمع هذه الصفحة ما يقدّمه Sandbox للصفحات المركّبة، أي الصفحات التي يُصبّ نصها في إطارات يرتّبها قالب. تُرسم إطارات القالب وتُحرَّك على الصفحة مباشرةً، وتُحفظ أنماط الإطارات في مكتبة. وتخبرك لوحة الفحوص، في كل لغة من لغات الكتاب، أيّ الصفحات المركّبة لا يتسع إطارها لنصها، وتعرض أزرارًا تصلح الإطار. ويمكن للكتاب الذي صُنع قبل الصفحات المركّبة أن ينقل نص صفحاته إلى Markdown دفعةً واحدة.
تجمع هذه الصفحة أجزاء لوحتَي التصميم والفحوص التي تتعلق بالصفحات المركّبة (الصفحات المكتوبة بـ ::::page، وتصبّ محتواها في إطارات قالب الصفحة). وباقي اللوحتين في Sandbox: لوحتا التصميم والفحوص، وطريقة كتابة الصفحة المركّبة في الصفحات المركّبة.
#قوالب الصفحات
يحرّر التصميم › الصفحة والأعمدة › قوالب الصفحات الإعداد pageTemplates، أي التخطيطات التي تصبّ فيها الصفحة المركّبة (::::page{template="…"}) محتواها، من غير فتح ملف الإعدادات.
- القائمة تعرض كل قالب برسم لأطره ومعرّفه وعدد صفحات الكتاب التي تستعمله (الصفحتان المتقابلتان تُحسبان صفحتين) والقالب الذي بُني عليه. يبدأ جديد قالبًا فيه إطار واحد يتلقّى نص الصفحة الحرّ؛ وينسخ نسخ القالب المفتوح؛ ويحوّل حفظ التخطيط قالبًا الصفحة المركّبة المختارة (أو أول صفحة مركّبة صُفّت) إلى قالب جديد تبقى أطره حيث وقعت، بمقاسات ثابتة بالمليمتر، مع أنماطها وسائر حقولها.
- يختار التحرير لـ ما تغيّره الحقول: كل الصفحات (القالب نفسه)، أو الفردية أو الزوجية (
variants.rectoوvariants.verso). الحقل الذي لا يضبطه هذا النطاق يعرض القيمة الموروثة باهتة، وزرّ إعادة الضبط يعيدها إليه. ويُرسم قالب الصفحتين المتقابلتين مع هامش الكعب ورقةً واحدة من صفحتين مع تعليم شريط الكعب، ولا متغيّرات له. وفي الكتب من اليمين إلى اليسار والكتب العمودية تُقرأ الورقة في مجرى الصفحة: الصفحة الأولى من الصفحتين المتقابلتين هي اليمنى، ويُرسم نطاق الصفحة المقابلة وشريط الكعب في الجهة التي وضعهما فيها المحرّك (منذ postext 1.40). - القالب: المعرّف (تغييره يغيّره في كل أسيجة الصفحات التي تسمّيه)، والاسم، ومبنيّ على (
extends)، ومفتاح الصفحتين المتقابلتين، وتُقاس الأطر من (area)، وتستخدم الصفحات المضافة (overflowTemplate: قالب الصفحات التي يستمر فيها محتوى إطار، انظر حين يستمر النص في صفحات مضافة)، والشبكة، وحذف القالب (يذكر عدد الصفحات التي تسمّيه؛ والقوالب المبنيّة عليه تحتفظ بما ورثته). - الأطر: زرّ لكل إطار، وإضافة إطار، وخصائص الإطار المختار: الاسم (الخانة) ويجوز أن يبقى فارغًا؛ والموضع (مرساة إلى منطقة القالب أو الصفحة بعد القصّ أو النزف أو إطار آخر أو مجموعة، مع الحافة والإزاحات) أو خلية من الشبكة؛ والعرض والارتفاع (ثابت، حصّة من المنطقة، بقدر المحتوى، حتى الحافة) مع حدودهما؛ ونمط الصندوق والطبقة والتدوير وموضع المحتوى والأعمدة والحشوة لكل جهة؛ ويتلقّى نص الصفحة الحرّ (
flow) ويتلقّى العنوان الأول (takes) والنص الذي لا يتّسع له يكمل في (next) ونص الأطر الأخرى يلتفّ حوله (exclude: "push") ومعه الإزاحة بـ الصندوق أو المحيط (wrap، شكل الصور التي فيه)؛ والملاءمة (fit)؛ والتمدّد والتقلّص والأولوية والتثبيت في المجموعات؛ والمتابعة (overflow.continueInوoverflow.markوoverflow.fromMark): يعرض المحتوى الذي لا يتّسع له يذهب إلى عدم الاستمرار، والصفحة التالية، وإطارًا آخر، وقالبًا آخر، وكل سور صفحة في الكتاب يحملid(page:<id>)؛ ويقبل صفحة لاحقة بمعرّفها… قيمة مكتوبة مثل{attr.sigue}أوp47#resto. لكل حقل شرحه وزرّ إعادة ضبطه. - المجموعات: الاسم، متراكبة أو في صفّ، والمسافة بين الأطر، وأين تذهب المساحة الفائضة، وأطر المجموعة بترتيب الصفحة. المجموعة التي لها صندوق خاص بها توزّع مساحتها الفائضة وتدع أطرها تردّ المساحة داخله؛ ومن دونه تكون اتحاد صناديق أطرها.
- الترويسة والتذييل (كما في الكتاب، مخفيّة، خاصّة به) والزخرفة، وتُحرَّر كما تُحرَّر ترويسة الكتاب وتذييله؛ ويمكن لنص الزخرفة أن يقرأ سمات الصفحة (
{attr.name}).
على الصفحة، في وضع التصميم. حين يكون المفتاح فوق المعاينة على التصميم (أو تحرير الأطر على الصفحة في هذا القسم)، تعرض الصفحة المركّبة هوامشها وشبكتها وكعب الصفحتين المتقابلتين وسهمًا لكل سلسلة. الضغط على إطار يختاره ويفتح خصائصه؛ وسحبه ينقله؛ والمقابض الثمانية للإطار المختار تغيّر حجمه؛ والسحب في موضع فارغ يرسم إطارًا جديدًا. تلتصق الصناديق بالهوامش وبالشبكة وبحواف الأطر الأخرى ومراكزها (مع الضغط على Alt توضع بحرّية؛ وEsc يلغي السحب). ويُكتب الصندوق بالمليمتر: الإطار المعلَّق على إطار آخر يحتفظ بمرساته ويغيّر إزاحته. وإن استعملت صفحاتٌ أخرى القالب، تسأل الصفحة أين يُحفظ التغيير: تغيير القالب (مع عدد الصفحات) أو هذه الصفحة وحدها، فيُنشأ لتلك الصفحة قالب مبنيّ على الأول ويُجعل سياجها يسمّيه. الإطار المدوَّر يُنقل على الصفحة ويُحدَّد حجمه في حقوله. وكل ما يفعله السحب يمكن فعله من لوحة المفاتيح عبر الحقول.
#أنماط الأطر
يعرض التصميم › الإطارات › أنماط الأطر أنماط الإطارات (calloutStyles) في مكتبة. وأطر قوالب الصفحات تلبس الأنماط نفسها (frames[].style)، فيخدم النمط الواحد إطار :::callout في النص وإطارًا في صفحة مركّبة على حدّ سواء.
- يرسم المحرّك كل نمط بفقرة نموذجية، وبلسان نموذجي إن كان للنمط لسان، كما يلبسه الإطار: بعرض 80 مم (وأعرض إن ترك حشوه أقل من 40 مم لعرض السطر)، في مجرى النص، ومن غير الموضع الثابت الذي قد يمنحه نمط الإطار لصندوقه. والنمط المبنيّ على نمط آخر (
extends) يُرسم بالمظهر الذي يرثه من النمط الأصل، كما ترسمه الصفحة (منذ postext 1.40). وتحت اسمه يذكر القسم مواضع استعماله في الكتاب: أطر القوالب، والصفحات المركّبة بتلك القوالب، وإطارات النص. وإذا فُتح النمط سرد كل إطار قالب (يأخذك فتح إليه في قوالب الصفحات) وكل فصل بإطاراته (يحدّد عرض الكتلة التالية في لوحة النص؛ والكتلة التي لاtypeلها تُحسب للنمط الأول، لأنه ما يعطيها إياه المحرّك)، ويفتح تحرير النمط محرّر أنماط الإطارات في مكانه. ويصفّي عرض القائمة: في القوالب (وهو ما يظهر أولًا متى استعمل قالبٌ نمطًا)، وفي النص، وغير المستعملة، والكل. - تجمع اقتراحات الدمج الأنماط شبه المتطابقة حول أكثرها استعمالًا: «هذه الأنماط (3) لا تختلف إلا في الحشوة: أندمجها؟». وتُقارن الأنماط بما يحلّه المحرّك منها، إعدادًا إعدادًا، من غير معرّفها واسمها. وتُعدّ الأطوال التي يقل فرقها عن 0.5 مم والألوان التي يقل فرقها عن ΔE 2 متساوية، وتُعدّ جوانب الحشوة الأربعة إعدادًا واحدًا، ويحدّد الإعدادات المسموح باختلافها (2 افتراضيًا) عدد الإعدادات التي يجوز أن تختلف.
- يجب أن يتطابق موضع إطار
:::callout(التموضع، والموضع الثابت، والعرض الذي يمتد عليه، والمسافة فوقه وتحته)، وإلا نقل الدمج الصندوق من مكانه. ويُسقط مقارنة المظهر وحده هذا الشرط، فتذكر المراجعة حينئذ عدد الإطارات التي ستنتقل؛ وما دام معطّلًا يذكر القسم كم نمطًا آخر كان سيُدمج. أما الأنماط التي لا تستعملها إلا أطر القوالب فتُقارن دائمًا بمظهرها، لأن الإطار يأخذ موضعه من قالبه. - إبقاء كل إطار في موضعه (يظهر مع مقارنة المظهر وحده، ومفعّل افتراضيًا): النمط الذي تقع إطاراته في غير موضع إطارات النمط الباقي لا يُدمج كليًا. يبقى بموضعه وحده (طريقة الوضع، والموضع الثابت، والعرض، والمسافة فوقه وتحته)، مبنيًا على النمط الباقي (
extends)، فتأخذ إطاراته مظهره ولا تتحرك؛ وتذكر المراجعة عدد الأنماط التي تبقى هكذا. - تسرد مراجعة كل نمط سيُحذف، وما يختلف فيه، والفصول والأطر التي ستُعاد كتابتها. ويعيد الدمج في (أو دمج كل الاقتراحات) كتابة
styleكل إطار قالب، والمتغيّرات معه، وtypeكل كتلة في كل فصل لتسمّي النمط الباقي، ويحذف الأنماط الأخرى، ويضع النمط الباقي في موضع أول أنماط مجموعته، فتحتفظ الكتلة التي لاtypeلها بمظهرها. ويدخل الدمج سجلّ التراجع في Sandbox خطوةً لكل فصل أُعيدت كتابته وخطوةً للأنماط والقوالب. ويتراجع تراجع في القسم نفسه عن الدمج كله ما لم يتغيّر شيء بعده؛ أما Cmd/Ctrl+Z فيتراجع خطوة خطوة، الأنماط أولًا، فلا تسمّي أي حالة في الطريق إلا أنماطًا موجودة. - وإعادة تسمية نمط في أنماط الإطارات تعيد تسميته أيضًا في كل كتلة وكل إطار قالب.
يعيد الدمج كتابة فصول الطبعة المفتوحة: أما لغة أخرى من الكتاب، محفوظة مسودةً أو مشروعًا مستقلًّا، فتحتفظ بأنماطها. وللوكلاء المكتبة نفسها عبر sandbox_frame_styles وsandbox_merge_styles (انظر WebMCP).
#الصفحات المركّبة في كل النسخ
في كتاب فيه قوالب صفحات (pageTemplates) تبدأ اللوحة بقسم الصفحات المركّبة: فحوص كل صفحة مركّبة في كل فصل، في كل نسخة يحملها الكتاب. فالحزمة التي فيها الإسبانية والإنجليزية والكتالونية تُفحص بنسخها الثلاث ما دامت إحداها على الشاشة. وتُنضَّد النسخ غير المعروضة في الخلفية، وتُقرأ كل واحدة كما تُقرأ عند فتحها: مسودّتها إن عُدّلت، وإلا فنص الحزمة بتلك اللغة. ويذكر سطر تحت عناصر التحكّم النسخ التي يجري تنضيدها، ثم النسخ التي فُحصت حين تنتهي كلها.
يجمع القسم:
- نص لا يتّسع له إطاره (
frameOverflow)، مع خطوات الملاءمة التي جُرّبت والتغييرات التي تجعل الإطار يتّسع؛ - نص لا يتّسع حتى بعد الصفحات المضافة (
frameContinuationLimit): استمرّ محتوى الإطار في أقصى عدد من الصفحات يمكن لصفحة مركّبة أن تضيفه، ولا يزال لا يتّسع؛ - نص يُحال إلى صفحة لا تأتي بعده (
continueTargetMissing): لا يحمل أي سور صفحة لاحق المعرّف الذي يسمّيهcontinueInفي الإطار؛ - تسمية على مرساة غير موجودة ومرساة بلا تسمية (
labelAnchorUnknownوanchorUnlabelled)، تحت الإطار الذي يضع الشكل؛ - تسمية أعرض من قياسها وتسميات تتداخل (
labelOverflowوlabelOverlap)، تحت الإطار نفسه: تُقاس تسميات كل إصدار بكلماته هو، فقد تفيض لغة كلماتها أطول حيث لا تفيض لغة أخرى؛ - خانة بلا إطار وإطار فارغ وقالب صفحة غير معروف وصفحة مركّبة بثلاث نقطتين رأسيتين وعلامة الصفحتين المتقابلتين لا توافق القالب (
slotUnknownوslotEmptyوtemplateUnknownوpageFenceLengthوspreadMismatch)؛ - كتلة من جدول المحتويات مقسومة بين عمودين (
tocGroupSplit)؛ - تحذيرات القوالب نفسها (نمط إطار أو مرساة لا وجود لهما، ومقاسات متناقضة، وسلسلة تعود إلى أولها)، ونص التصميم الذي يحمل شيئًا من محتوى الكتاب (
contentInConfig).
ولا تتكرّر هذه المدخلات في المجموعات التي تحتها.
تجمع الصفحة والإطار واللغة القائمة حسب الصفحة المركّبة (الصفحة نفسها في كل النسخ أيًّا كان رقمها في كل منها)، أو حسب الإطار، أو حسب النسخة. وتُبقي القوائم الثلاث تحتها لغة واحدة أو صفحة واحدة أو إطارًا واحدًا. ويُظهر كل مدخل رمز النسخة (CA) ورقم الصفحة في تلك النسخة واسم الإطار.
النقر على مدخل ينقلك إلى إطاره في نسخته. فإن كانت على الشاشة نسخة أخرى انتقل الكتاب إلى لغة المدخل، ثم يُفتح الفصل والصفحة، ويُحدَّد الإطار على الصفحة (ويظهر مساره أسفل المعاينة)، ويوضع المؤشر في أول خانته في لوحة النص. وتحذير القالب نفسه يفتح أول صفحة رُكّبت به، وإطاره محدَّد؛ أما نص التصميم الذي يحمل محتوى فيفتح لوحة التصميم.
المشروع المحلي المستورد من حزمة بعدة لغات يحتفظ بها كلها، فتُفحص صفحاته المركّبة في كل لغة كما تُفحص صفحات كتاب نموذجي، وينقلك الفحص في لغة أخرى إليه بعد تحويل المشروع إلى تلك اللغة. الكتاب بلغة واحدة له نسخة واحدة، ويذكر ذلك السطر الذي تحت عناصر التحكّم. أما الشارة على شريط الأنشطة فتعدّ تحذيرات الفصل المعروض في النسخة المعروضة. والكتاب الكبير ينتظر الطلب: إذا زاد عدد فصوله مضروبًا في عدد نسخه على 48 فحصت اللوحة الفصل المعروض وحده وعرضت فحص كل النسخ، وهو ينضّد الباقي في الخلفية (منذ postext 1.40). وتسرد الأداة sandbox_get_composed_checks (انظر WebMCP) فحوص الصفحات المركّبة في كل النسخ دون اللوحة.
#نقل النص إلى Markdown
قد يحتفظ كتاب صُنع قبل الصفحات المركّبة بنص صفحات كاملة في أنماط عناوينه: عنوان مخفي في كل صفحة تضع ترويسته عشرات النصوص والمربعات والصور حيث كانت في الصفحة المطبوعة. وعندئذ تعرض لوحة الفحوص نص محفوظ في الإعدادات وتقترح في أعلاها نقل النص إلى Markdown. وإذا استُورد كتاب كهذا من لوحة الكتب فُتحت النافذة نفسها بعد الاستيراد مباشرة.
تبيّن النافذة ما سيفعله النقل قبل أن تغيّر شيئًا:
- يصير كل تصميم صفحة قالبَ صفحة (
pageTemplates). ويصير كل نص إطارًا في موضعه، وتصير كتل النص المتشابهة في مظهرها الموضوعة بعضها تحت بعض بمسافة واحدة إطارًا واحدًا. وتنتقل المربعات والخطوط والصور إلى زخرفة القالب، فتُرسم فوق النص الجاري للصفحة كما كانت الترويسة تُرسم، وتصير الصورة التي تغطي الصفحة سمةَ الصفحةbackgroundالتي تقرؤها الزخرفة ({attr.background}). - وتصير كل صفحة من الفصل صفحةً مركّبة
::::page{template="…"}فيها عناوين الصفحة ونصها الجاري و:::frame{slot="…"}لكل إطار بنصه. ويبقى الغامق والمائل، وتبقى نهايات الأسطر في التصميم فواصلَ أسطر مفروضة. - ويصير خط كل نص وحجمه وسُمكه ولونه ومحاذاته وتباعد أسطره نمطَ فقرة: نمطَ الكتاب إن طابقه تمامًا، وإلا نمطًا جديدًا يُسمّى باسم الخط والحجم. ويصير المربع الملوّن تحت الكلمات الغامقة شارةً من نمط الشارة الذي في الكتاب بذلك اللون، أو من نمط جديد.
- وتتشارك الصفحات التي تقع إطاراتها في المواضع نفسها قالبًا (
page-base) توسّعه قوالبها الخاصة (extends)، والصفحة التي لا تضيف شيئًا تستعمله كما هو. - وتُدمج أنماط العناوين التي تصير متطابقة بعد ذهاب ترويستها (
tema--p04وtema--p05←tema) ويتغيّر اسمها في العناوين، وتُحذف العناوين المخفية التي لم تكن تفعل إلا تبديل الترويسة. والصفحة التي كانت تبدأ بعنوان يطلب صفحة زوجية أو فردية يُضاف قبل سورها:::pagebreak{parity="…"}.
والأرقام تحت ما الذي يتغيّر هي النصوص والحروف المنقولة، والصفحات المكتوبة، والقوالب المقترحة، وأنماط العناوين قبل وبعد، والأنماط الجديدة، وحجم الإعدادات، وتحذيرات نص محفوظ في الإعدادات قبل وبعد.
وقبل وبعد تنضّد كل فصل مرتين بتنضيد Sandbox نفسه وترسم كل صفحة تتغيّر، القديمة بجانب الجديدة. وتذكر القائمة المجاورة الصفحات التي تبدو مختلفة وسبب ذلك حين يُعرف: مربع النص الخاص أو خطه المحيط أو حرفه الاستهلالي، أو صفحة لا تُعرف جهتها، أو نص جارٍ صار في إطار التدفق في القالب. ويلوّن تعليم ما تغيّر بالأحمر البكسلات المختلفة.
والخيارات: تتشارك الصفحاتُ التي تقع إطاراتها في المواضع نفسها قالبًا واحدًا، ويصير مربع التظليل تحت الكلمات الغامقة شارة، وحين توجد: حذف أنماط العناوين التي تحمل نصًا ولا يستعملها أي عنوان.
مع تصير الكلمات الواقعة على الصور تسميات لها، وهو خيار يظهر حين يضع التصميم كلمات قصيرة على صور الكتاب (أسماء الخريطة وأرقام المخطط)، تصير هذه الكلمات أسطر ::label في :::figure، وتنال الصورة إطارًا خاصًا بها، ويتلقى موردها المراسي. ويعدّ الملخص التسميات والصور والمراسي وأنماط التسمية. والخيار مُعطَّل حتى تفعّله لأن هذه الصفحات هي الأكثر تغيّرًا: تُصفّ التسميات من جديد بخطوط الكتاب، فقارنها بالصفحات القديمة. وتُكتب المراسي في مورد الصورة، كلٌّ منها خطوة تراجع، بين النص والتصميم، ويتراجع عنها تراجع وإعادة الكتاب كما كان أيضًا.
ويكتب نقل النص التغيير في سجلّ التراجع الواحد للكتاب: خطوة لكل فصل أُعيدت كتابته، ثم خطوة للتصميم. فيعيد Cmd/Ctrl+Z التصميم أولًا ثم الفصول، ويعيد تراجع في النافذة الخطوات كلها ما دامت هي الأحدث. وتبقى نسخة الكتاب السابقة محفوظة أيضًا، حتى بعد إعادة التحميل، إلى أن تختار اعتماد النقل في لوحة الفحوص، وإلى ذلك الحين تكتب إعادة الكتاب كما كان التصميمَ والنص السابقين من جديد، في خطوات يمكن التراجع عنها بدورها.
ويبقى في الإعدادات، ويُذكر تحت ما يبقى في الإعدادات: نص يخلط الكلمات بالعناصر النائبة (الصفحة {pageNumber})، ونص معلّق بمربع ترويسته أو بعنصر آخر، ونص تصميم عنوان (وهو ليس صفحة). والعنوان الموضوع في إطار يحتفظ هناك بتصميمه (لسان العنوان المؤطّر، والأشرطة المرسومة حول العنوان؛ انظر العناوين داخل الصناديق والإطارات)، ويقرأ فحص التباين نص الإطار على مربع الإطار نفسه أو على مربع الزخرفة الذي تحته، فتُقاس تسمية بيضاء على مربع ملوّن على ذلك اللون (انظر ما يقرؤه الفحص).
والنقل نفسه دالةٌ في المحرّك، moveTextToMarkdown({ config, chapters, metadata }, options)، تعيد الإعدادات الجديدة والفصول والتقرير الذي تعرضه النافذة. انظر الصفحات المركّبة.
#إصلاح إطار بنقرة واحدة
تحت نص لا يتّسع له إطاره تظهر الحلول التي حسبها سُلّم إعادة التوزيع لذلك الإطار أزرارًا، بكلمات التحذير نفسها:
- اسمح بتصغير النص إلى 60٪ يضبط
fit.minScaleللإطار (ويشغّلfit.shrinkTextإن كان معطّلًا)؛ - ارفع maxHeight إلى 66 مم يضبط
maxHeightالخاص به؛ - خفّض minHeight للإطار … يخفّض الارتفاع الأدنى لإطار آخر من مجموعته؛
- اجعله يتابع في الصفحة التالية يضبط
overflow.continueInعلىnext-page، فيتابع ما لا يتّسع في صفحة تُضاف بعد هذه الصفحة؛ - صُفّ الصفحة بالقالب … يعيد كتابة
templateفي سياج::::pageالخاص بالصفحة في النص؛ - احذف نحو 626 حرفًا لا يغيّر شيئًا: يحدّد نص الإطار في لوحة النص ويذكر عدد الأحرف التي ينبغي حذفها.
أما الأزرار الأخرى فتغيّر شكل الكتاب، ولذلك يسأل كل منها أولًا، ذاكرًا الإعداد وقيمته (tema-fija › dinero › maxHeight = 66 mm) أو القالب الذي ستأخذه الصفحة. ويسري تغيير التصميم على كل الصفحات المصفوفة بذلك القالب. يُجري زر غيّر التغيير خطوةً واحدة في سجل التراجع: يتراجع عنه Cmd/Ctrl+Z أو زر التراجع بجوار المحتوى والتصميم. ثم تُنضَّد الصفحة من جديد، فيختفي التحذير أو يحلّ محلّه ما خلّفه التغيير (صندوق في الأسفل لم يعد يتّسع).
وترافق الأزرار نفسها الإطار في لوحة ما الذي تحرّك ولماذا فوق اللوحة. أما تحذير نسخة غير معروضة فيعرض فتح تلك النسخة، حيث يمكن تطبيق حلولها. وإذا تغيّر الكتاب بعد أن اقترح التنضيد حلًّا (عُدِّل القالب، أو صار السياج يسمّي قالبًا آخر) قال الزر ذلك ولم يغيّر شيئًا. ويطبّق الوكيل الحلول نفسها بـsandbox_apply_proposal (WebMCP).