معلمات جافا سكريبت التنبيه. جافا سكريبت - طرق التنبيه والمطالبة والتأكيد. معالجة انتباه الزائر

في هذا الدرس ، سنتعرف على طرق كائن النافذة: التنبيه () ، والموجه () ، والتأكيد ().

طريقة التنبيه ()

تم تصميم طريقة التنبيه () لعرض مربع حوار تحذير بالرسالة المحددة وزر "موافق" على شاشة المستخدم. يمكن استخدامه لنقل المعلومات المهمة للمستخدم.

window.alert (Parameter_1) ؛

يحتوي الأسلوب alert () على معلمة واحدة مطلوبة ، وهي نص الرسالة التي يتم عرضها في مربع الحوار. هذه الطريقة لا تعيد أي شيء نتيجة تنفيذها.

على سبيل المثال ، دعنا نعرض مربع حوار تحذير لزائر الموقع عندما ينقر على ارتباط: اذهب إلى الموقع

تأكيد طريقة ()

تم تصميم طريقة Confirm () الخاصة بكائن النافذة لعرض مربع حوار بالرسالة المحددة وأزرار "OK" و "Cancel" على شاشة المستخدم. يمكن استخدام نافذة تأكيد لطلب الإذن من المستخدم لتنفيذ إجراء.

var resultConfirm = Confirm (Parameter_1) ،

تحتوي هذه الطريقة على معلمة واحدة - هذا هو نص الرسالة التي سيتم عرضها في مربع الحوار.

يُرجع التابع () Confirm إحدى قيمتين كنتيجة (resultConfirm) لتنفيذه:

  • صحيح إذا نقر المستخدم على "موافق" ؛
  • خطأ إذا قام المستخدم بالنقر فوق "إلغاء الأمر" أو إغلاقه.

على سبيل المثال ، دعنا نعرض نتيجة قيام المستخدم بالنقر فوق الزر "موافق" في مربع الحوار في العنصر p بالمعرف = "resultConfirm":

طريقة () موجه

تم تصميم طريقة المطالبة () لعرض مربع حوار به رسالة ، وحقل نصي لإدخال البيانات ، وأزرار "موافق" و "إلغاء" على شاشة المستخدم. إنه مصمم لطلب البيانات من المستخدم.

var resultPrompt = موجه (Parameter_1، Parameter_2) ،

هذه الطريقة لها معلمتان:

  • الرسالة التي سيتم عرضها في مربع الحوار. هذه المعلمة مطلوبة وتحتوي على رسالة "تقول" ما هي البيانات التي يجب على المستخدم إدخالها في حقل النص ؛
  • المعلمة الثانية اختيارية ويمكن استخدامها لتحديد القيمة الأولية التي سيتم عرضها في حقل الإدخال بمربع الحوار عند الفتح.

اعتمادًا على إجراءات المستخدم ، يمكن للأسلوب الفوري () إرجاع البيانات التالية:

  • قيمة النص - إذا كان حقل الإدخال يحتوي على بيانات وضغط المستخدم على "موافق" ؛
  • سلسلة فارغة - إذا كان حقل الإدخال لا يحتوي على بيانات وضغط المستخدم على "موافق" ؛
  • خالية - إذا ضغط المستخدم على "إلغاء" أو أغلق هذه النافذة ، فلا يهم البيانات التي تم إدخالها في حقل النص.

ملاحظة: مربع الحوار الذي يظهر كنتيجة لتنفيذ إحدى طرق التنبيه () أو التأكيد () أو الموجه () هو مشروط ، أي يمنع وصول المستخدم إلى التطبيق الرئيسي (المتصفح) حتى يغلق المستخدم مربع الحوار هذا.

على سبيل المثال ، سنطلب من المستخدم اسمًا ، وبناءً على النتيجة ، سنعرض النص في العنصر بالمعرف = "nameUser":

على سبيل المثال ، دعنا نطلب من المستخدم تخمين الرقم 8:

... خمن الرقم

ومرة أخرى أرحب بكم في موضوع آخر مخصص للغة جافا سكريبت، والتي سنحلل فيها طرق تنبيه ، سريعة ، توكيد... هذه الأساليب مدمجة في اللغة جافا سكريبتومساعدتنا على التفاعل مع المستخدم.
انذاريعرض نافذة تحتوي على معلومات معينة على شاشة المتصفح ، مما يؤدي إلى إيقاف البرنامج النصي مؤقتًا حتى ينقر المستخدم على الزر "موافق".
مستعجل، كقاعدة عامة ، يعرض نافذة يُسأل فيها المستخدم سؤالاً يجب عليه الإجابة عليه في حقل نصي معين ، ثم الضغط على مفتاح OK. أيضًا ، لا يمكن للمستخدم إدخال أي شيء بالضغط على مفتاح الإلغاء.
يتأكديعرض أيضًا نافذة لم يعد بإمكان المستخدم إدخال أي شيء فيها في حقل النص ، ولكن يمكنه فقط النقر فوق الزر "موافق" أو الزر "إلغاء".
والآن ، بعد مقدمة قصيرة ، دعنا ننتقل إلى التفكير في كل ما سبق في الممارسة العملية.



تنبيه ، موجه ، تأكيد





نتيجة لذلك ، عندما يتم تحديث صفحة المتصفح ، ستظهر نافذة مع ترحيب المستخدم. بعد النقر فوق "موافق" ، ستظهر النافذة التالية ، حيث سيطلبون اسمك. الخامس هذه الطريقةهناك معلمتان ، الأول مطلوب وهو المسؤول عن العنوان الذي سيتم عرضه ، وفي حالتنا يتعلق الأمر باسم المستخدم. والمعلمة الثانية مسؤولة عن القيمة التي سيتم عرضها افتراضيًا في حقل النص. إذا أدخلت اسمك ونقرت على الزر "موافق" ، فسيتم احتواء اسمك في المتغير اسم المستخدم... إذا قمت بالنقر فوق زر إلغاء ، فسيتم كتابة المتغير باطل.
وأخيرًا ، نافذة تسأل المستخدم عما إذا كان يريد مغادرة موقعنا أم لا. في حالة الاتفاق ، سيتم وضع قيمة منطقية في المتغير حقيقية، وفي حالة الفشل خاطئةعلى التوالى. هذا كل ما يمكن معرفته عن هذه الأساليب ، أراك في الدروس القادمة!

  • طرق كائن النافذة ؛
  • طريقة التنبيه (): ملخص قصير ؛
  • تأكيد () الأسلوب - كتابة الرسائل ؛
  • موجه الطريقة () - دعنا نتعرف ، أنا Stirlitz.

لذلك ، كائنات المتصفح. وقبل كل شيء - أقدمهم ، الكائن نافذة او شباك.

فيما يلي الطرق الرئيسية للكائن نافذة او شباك(إلى جانبهم ، هناك آخرون ، لكنهم قليلو الفائدة ، ولكي لا نشوش الدماغ بمعلومات غير ضرورية ، سأؤجلهم حتى السلسلة الثالثة).

طريقة

وصف

فتح وإغلاق نوافذ المتصفح ؛ من الممكن تحديد حجم النافذة ومحتوياتها بالإضافة إلى وجود لوحة زر وحقل العنوان والسمات الأخرى.

ظهور مربع حوار تنبيه برسالة مقابلة.

يظهر مربع حوار للتأكيد مع أزرار "موافق" و "إلغاء".

يظهر مربع حوار موجه مع حقل إدخال نص.

يضبط أو يزيل التركيز من النافذة.

يمرر محتويات النافذة إلى نقطة معينة.

ضبط الفاصل الزمني بين استدعاء الوظيفة وتقييم التعبير.

يضبط فاصلاً زمنيًا لمرة واحدة قبل استدعاء دالة أو تقييم تعبير.

نحن نعلم ذلك بالفعل نافذة او شباكغالبًا ما تكون ضمنية ولكنها غير مكتوبة.

استدعاء مربعات الحوار المختلفة

تُستخدم نوافذ الحوار في البرامج للتفاعل مع المستخدم.

طريقة التنبيه ()

قمنا بتفكيكها في بداية فصولنا. يقوم بإنشاء مربع حوار بسيط مع رسالة وزر موافق. يقتصر كل تفاعله على حقيقة أن المستخدم ، بالضغط على هذا الزر الفردي ، يمكنه إرسال هذه النافذة في مكان بعيد (وشكرًا على ذلك).

تأكيد طريقة ()

طريقة تؤكد ()يسمح بالفعل للمستخدم باتخاذ أبسط قرار "منطقي": قل "نعم" أو "لا".

على سبيل المثال ، انقر فوق هذا الزر:

آسف للمزحة الصغيرة. أتمنى أن تعرف كيفية استخدام زر الرجوع.

كيف يعمل هذا كله؟ لقد رأيت ، بالطبع ، أنني جمعت هذه الطريقة مع التنبيهات. ويتم ذلك باستخدام دالة يتم إدراجها في .

ترجع الطريقة قيمتين: حقيقية(إذا كان موافق) و خاطئة(إذا تم الإلغاء).

الخامس حقيقيةنرسله إلى الصفحة المناسبة (الخاصية hrefموضوع موقعك) واشتقاق المقابل إنذار ()... خلاف ذلك (أي خاطئة) فقط أخرج آخر إنذار ().

وفي الزر نسمي الوظيفة في الحدث عند النقر:

وبعد ذلك تحتاج إلى استدعاء هذه الوظيفة من معالج الأحداث عند تقديمبطاقة شعار

، على سبيل المثال:

"http://narod.yandex.ru/send-poll.xhtml"طريقة = "نشر" عند التقديم = "عودة تأكيد الإجراء ()" >

هنا ، على سبيل المثال ، يمكنك أن تكتب لي عن "الصابون" كل ما تفكر به في دروسي. إذا كنت متحمسًا فجأة وضغطت على الزر ، وبعد ذلك أصبح الأمر محرجًا بطريقة ما ، ستظهر نافذة حوار وتنبهك.

إذا قمت بعمل نوافذ منبثقة ، فمن الممارسات الجيدة تحذير المستخدم من ذلك وإعطائه خيارًا - لفتح النافذة أو عدم فتحها. للقيام بذلك ، قبل تحميل النافذة ، تحتاج إلى تحرير الحوار "البرلماني" تؤكد ()... هنا يتم استدعاء الوظيفة من ... سنتحدث عن هذا قريبًا جدًا عندما ننتقل إلى إنشاء النوافذ باستخدام الطريقة افتح ().

طريقة () موجه

تطلب هذه الطريقة بالفعل من المستخدم بيانات محددة. يظهر مربع حوار مع حقل إدخال. تقوم الطريقة بإرجاع البيانات التي أدخلها المستخدم في هذا الحقل وتسمح للبرنامج بالعمل مع هذه البيانات.

طريقة مستعجل ()وسيطان: السؤال (الذي يظهر أعلى حقل الإدخال) والإجابة (النص في حقل الإدخال):

إذا كنت تريد أن يظهر حقل الإدخال فارغًا ، فاستخدم علامات الاقتباس الفارغة كوسيطة ثانية:

مستعجل("نص السؤال","")

دعونا نراه في العمل. اضغط على الزر ، لا تخف.

لذلك ، أدخلت (أو لم تدخل) البيانات وتلقيت ردًا من الكمبيوتر بناءً على هذه البيانات (أو عدم وجودها).

إليك اختلاف بسيط عن هذه الوظيفة:

ملكية داخلي HTMLالذي يسمح لنا بالتحكم في محتوى الوسم ، التقينا في الدرس العاشر عندما قمنا ببرمجة الأسماء تحت الصور.

وهنا رمز الزر والفقرة الفارغة للتحية.


ولكن إذا تبين أنك تحمل الاسم نفسه ، فقد رأيت أن الوظيفة تفاعلت مع هذا أيضًا.

كيفية القيام بذلك في النسخة "التقريبية" ، يمكنك بالفعل تخمين نفسك. نحن بحاجة للتحقق من المتغير اسم االمستخدمليس فقط بعلامات اقتباس فارغة ، ولكن أيضًا باستخدام " أندريه"، وأضف واحدًا آخر لومع النص المناسب (يمكنك التدرب عليه بنفسك).

ولكن إذا كتبت " أندريه", "أندريوشا", "أندريوشكا", "أندريوخا", "أندريكا", "أندري إيفانوفيتش"وما إلى ذلك ، فإن النتيجة ستكون هي نفسها ، على الرغم من أنني لم أتطرق إلى كل هذه القيم صراحة ، لكنني تمكنت من إدارة خمسة أسطر فقط:" أندريه", "أندرو", "أندريه", "أندريشي" و " أندريتش"(الثلاثة الأخيرة - لاستبعاد Andreev و Andreichenko و Andreichuk من الأسماء ، مع إبقاء Andreichik في الاسم نفسه).

أي يمكنك تخمين أن الوظيفة تتحقق من المتغير اسم االمستخدمبأول 5 أو 6 أو 8 أحرف.

لكننا سنتحدث عن هذا بعد قليل ، عندما ننتقل إلى سلسلة الكائنات وطرقها. أريدك فقط أن تتخيل مسبقًا المهام التي يتعين علينا حلها (على وجه الخصوص ، جميع أنواع تقسيم السلاسل إلى سلاسل فرعية). ثم ستبدو القرارات نفسها أكثر وضوحًا. ولكن إذا كنت لا تتحلى بالصبر ، فيمكنك "نسخ" الوظيفة من الشفرة و "قصها مثل الجوز". للفضول ، كتبت تعليقًا هناك.

طريقة مستعجل ()يمكن استخدامها أيضًا لإدخال كلمة مرور.

هذه ليست نهاية الدرس!

لنلعب دور جاسوس صغير لقراءة هذا الفصل حتى النهاية. حاول أولاً النقر فوق الزر وكتابة شيء ما.

آه ، هذا كل شيء! لكن انظر ، هناك زر آخر! حسنا ...

كلمه السر:

اضغط على الزر الأول مرة أخرى وادخل كلمة المرور الصحيحة.

كل هذا المرح ، ربما ، يتفوق على التأثير ، ولكن في الواقع ، يمكنك معرفة كلمة المرور بالضغط على الزر الأيمن والنظر إليها في الكود. قد يعتقد شخص ما بسذاجة أنه يكفي وضع الكود في ملف .js منفصل. لكن في كود الصفحة سيكون هناك رابط لهذا الملف بالعنوان. وإذا قمت بكتابته في شريط العناوين ، فسيتم فتح ملف برمز JavaScript :)

هل من الممكن تشفير كلمة المرور في الكود؟ يمكنك ذلك ، ولكن هذا يتطلب مرة أخرى معالجة السلسلة جنبًا إلى جنب مع استخدام بعض الأساليب الرياضية. عندما نصل إلى كل هذا ، سوف نفحص البرنامج النصي بحثًا عن كلمة المرور "الحقيقية". لكن تقنية التفاعل مع المستخدم ستكون هي نفسها: الطريقة مستعجل ()... (هل من الممكن "اختراق" كلمة المرور المشفرة؟ للأسف ، لا يوجد حد لإتقان المتسللين ...)

بنفس الطريقة التي "اكتشفنا" فيها الاسم أو عدم وجوده ، سنقوم بإمساك الوظيفة وكلمة المرور.

إذا قمت بإدخال كلمة مرور غير صحيحة أو لا شيء ، فإن الخط

document.getElementById ("no"). style.display = "block"

سيفتح الكتلة بالزر الثاني

وإذا تم إدخال كلمة المرور الصحيحة ، فسيتم تمرير الإجراء إلى السطر

document.getElementById ("نعم"). style.display = "block",

الذي يفتح الكتلة التالية

توقف ، ما هذا البطة؟ هذه رسالة تشفير بسيطة ، سأشرحها قريبًا.

في غضون ذلك ، أعطي رمز هذه الكتل (من أجل التوضيح ، حذفت الجدول بالإطارات ، التي أرفقتها في الكتلة الأخيرة):


"no" style = "display: none؛" >

آه ، هذا كل شيء! لكن انظر ، هناك زر آخر! حسنا ...




"mypassword" style = "display: none؛" >

كلمه السر:


اضغط على الزر الأول مرة أخرى وأدخل كلمة المرور الصحيحة.



"نعم" style = "display: none؛" >

الآن نقرأ.


. . . . .
. . . . .

لذا ، حول التشفير. إنها بائسة جدا. أي شخص لديه معرفة بالوظيفة هرب ()و unescape ()، سوف تخترقه على الفور.

وظيفة escape ("أدخل سلسلة هنا")يحول الأحرف إلى قيمها السداسية العشرية.

وظيفة unescape ("أدخل البطة هنا")ينفذ العمل المعاكس.

لتشفير كلمة المرور بهذه الطريقة ، تحتاج إلى تمريرها عبر ملف هرب ()، انسخ النتيجة والصقها في unescape ()... لكن هذا ، أكرر ، ليس جديا.

حسنًا ، بالنسبة للمجموعة الكاملة - وظيفة الزر الثاني:

لعرض المعيار مربعات الحوارجافا سكريبت لديها ثلاث طرق فقط تعلمناها اليوم. بينما نادرًا ما يتم استخدام هذه الأساليب ، فإن الثقة بها مفيدة للغاية. إنها بسيطة ، لكنها ، إذا جاز التعبير ، برمجة "خالصة". إنهم جيدون جدًا في الحصول على يديك في إتقان لغة البرمجة. وأنصحك بتجربتها بكل طريقة ممكنة ، حتى لو كانت بلا هدف من وجهة نظر واقعية. البرمجة الجيدة- هذه لعبة مثيرة ، مثلها مثل أي لعبة إبداعية.

يمكن تنظيم حوار مع زائر لمورد الويب طرق مختلفةمنها استخدام وظائف JavaScriptتنبيه () هو أبسط وأسرع خيار. يعد هذا الخيار جيدًا بشكل خاص لأغراض الاختبار ، ولكن يتم استخدامه في العديد من الموارد كوظيفة طبيعية.

تتيح لك وظيفة تنبيه JavaScript () الحصول على إجابة مؤكدة. في الواقع ، ليس الجواب هو المهم ، بل حقيقة المعلومات التي يتم عرضها. علاوة على ذلك ، يتوقف مورد الويب عن العمل حتى يستجيب المستخدم. الجواب على التنبيه هو نفسه دائمًا - هذه هي الإجابة!

لأغراض تصحيح الأخطاء ، يعد JavaScript alert () الأداة المثالية للحصول بسرعة على معلومات محدثة واتخاذ قرار والمضي قدمًا. ولكن بالنسبة للتشغيل العادي للموقع ، فإنه يحتوي أيضًا على قدر لا بأس به من المزايا.

معالجة انتباه الزائر

"التنبيه" - كما هو الحال في الحياة ، يشكل حدثًا لا يمكن تجاوزه. لكن قد لا يحدث هذا الحدث.

يعرف مطور نادر عن هذا الظرف ويستغرق وقتًا طويلاً للغاية لتصحيح أخطاء موقعه من جانب العميل. في الوقت نفسه ، قلة من المطورين لا يعرفون: غالبًا ما يكون من الصعب جدًا العثور على خطأ في العميل ، أي في المتصفح ، حيث:

  • ساعات من الوقت الثمين تذهب بلا هدف ؛
  • يتم إنفاق تحولات لا تصدق في الكود ؛
  • يتم تجريف الكثير من البرامج النصية ، بالكلمات ، تذهب إلى كل من المتصفح والخادم.

لكن لا توجد نتيجة حتى الآن. لا تساعد أدوات تصحيح الأخطاء ولا الكلمات ولا أدوات التصحيح المضمنة في أي متصفح. في هذه الأثناء ، يفتح النعش دائمًا ببساطة - المفتاح الصحيح مهم.

القاعدة البسيطة للكود الصحيح

بادئ ذي بدء ، أصبحت ملفات تعريف الارتباط الجزء الأكثر شيوعًا في أي موقع ويب حديث. يجب ألا تنسى أبدًا:

  • تنبيه جافا سكريبت وملفات تعريف الارتباط للمستندات
  • "هنا والآن" & "بشكل عام أو في وقت ما".

تعد ملفات تعريف الارتباط طريقة رائعة لتذكر كل عميل في أحشاء المتصفح ، ولكن لا ينبغي أن تكون مهمة جدًا للجلسة الحالية. الشغل الشاغل لملفات تعريف الارتباط هو البقاء في "ذاكرة" المتصفح بنفس المحتوى الذي كان به وقت مغادرة الزائر.

من جميع النواحي الأخرى ، يعتمد كود البرنامج النصي في أحشاء المتصفح فقط على نفسه والأحداث التي يعالجها.

في هذا السياق ، وهذا السياق مثالي هنا ، لا يمكن أن تفشل الكود في العمل إذا تمت كتابته بشكل صحيح. هذه هي القاعدة الأساسية المثالية للتعليمة البرمجية الصحيحة. إذا أظهر المتصفح شاشة فارغة أو فعل شيئًا خاطئًا ، فهناك سبب للشك في حدوث خطأ.

أسهل في الاستخدام:

  • تنبيه JavaScript ("كل شيء كان صحيحًا حتى الآن!").

أفضل مصحح أو مصحح هو حدث يجب أن يحدث ، لكن لم يحدث.

من خلال نقل هذا البناء من الصفر إلى الجريمة المزعجة في الكود ، يمكنك العثور على المكان الذي لا يعمل بعده. سيتم العثور على الخطأ. تنبيه JavaScript () هو نافذة مشروطة ... لا توجد طريقة لتجاوزها ، ولن يحدث شيء حتى يغلق المطور / الزائر هذه النافذة.

إذا لم تنبثق النافذة ، فإما أن تتم الإشارة إليها في الكود بشكل غير صحيح ، أو أن كل ما يحدث قبل أن يحتوي على خطأ.

موقف صعب حيث لا يبدو أن تنبيه JavaScript ينطلق

يتعلق هذا بشكل أساسي بخوارزميات AJAX لتبادل المعلومات مع الخادم. لا يُسمح دائمًا باستخدام أدوات تصحيح الأخطاء الكلاسيكية هنا ، وعندما يعمل نظام كائنات متعدد المستويات من جانب العميل ، يتحول التصحيح عمومًا إلى عقل المطور ولا يمكن لأي مصحح أن يساعد.

أفضل خيار تنبيه في إجراء الاتصال بالخادم هو div (div) ، حيث يتم وضع بروتوكول الاتصال بالخادم باستخدام طريقة HTML الداخلية - سيكون دائمًا واضحًا في أي مرحلة تحدث المشكلة.

إن عنصر div الثابت المرئي دائمًا على الصفحة ليس مشروطًا من تنبيه JavaScript. قد لا تظهر النافذة ، وقد يكون هناك العديد من الأسباب لذلك ، وهي صحيحة نحويًا. تتمتع لغة المتصفح بتصرف هادئ للغاية ولن تتخذ أي إجراء أبدًا إذا لم يتم تفكيكها وفهمها.

ساكنة من أي علامة HTMLعامل جيد. إن إزالة كل التعليمات البرمجية وإضافتها في أجزاء حتى يحدث الخطأ مرة أخرى ليست أسرع تقنية لتصحيح الأخطاء. الكتابة بشكل صحيح هي نصيحة شائعة ، مطلوبة ولكنها ليست عملية.

تعتمد لغة المتصفح على الأحداث ، ولا ينصب اهتمامها الرئيسي على الكود المتسلسل ، ولكن تنفيذ الوظائف المعينة لعلامات الصفحة ومعالجة الأحداث.

قاعدة إضافية لقاعدة بسيطة

إذا لم تظهر نافذة تنبيه JavaScript ("تمت كتابة كل شيء بشكل صحيح حتى الآن") في المتصفح ، فإن بناء الجملة حتى المكان الذي تمت كتابة هذا البناء فيه لا يسبب شكوكًا في المتصفح ويتم تنفيذه بشكل صحيح.

منطق الكتابة الحديثة به عيب كبير. يتم دمج جميع ملفات الصفحات معًا (من جوهرها وأنواعها) في كل واحد ، وبعد ذلك يتم إنشاء DOM. غالبًا ما يكون الترتيب الذي يتم به ضم الملفات أمرًا بالغ الأهمية.

من الأفضل ألا يعلق المطور أهمية على المبدأ الذي يحركه الحدث لتنظيم تنفيذ الوظائف المخصصة للأحداث ، ولكنه يضع جميع الوظائف في تسلسل تطبيقهم وتخصيصها للعلامات وأحداث الصفحة.

النظام هو دائما أهم شيء. سوف تكتشف JavaScript الباقي لنفسها: ماذا ومتى تستدعي. البرمجة الحديثةبشكل عام وفي سياق أي طريقة ، أي نهج موجه للكائنات عالي التنظيم على وجه الخصوص ، يكون دائمًا متسقًا. يتم دمجها دائمًا أيضًا بشكل تسلسلي كما هو موصوف.

إذا لم يحدث شيء ما ، فهذا يعني: ليس هناك شيء خاطئ في مكان ما ، ولكن فقط أمام هذا المكان.