UNPKG

siftal

Version:

CSS Framework, not bad ;)

123 lines (88 loc) 7.09 kB
ایژکس === وظیفه این ماژول استفاده از فناوری Ajax برای ارسال فرم ها و درخواست‌های بدون ورودی (لینک) به سرور است. نحوه کار --- نحوه‌ی کار این ماژول نسبتا ساده است و نیاز به تنظیمات خاصی از سمت شما ندارد و تنها کاری که شما باید انجام دهید اضافه کردن تگ های `data-*` به عناصر HTML برای تعیین تنظیمات است. رویداد های این ماژول روی عنصری که رویداد روی آن اجرا شده جرقه می‌خورند. مراحل کاری --- مراحل کاری این ماژول برای لینک‌ها و فرم‌ها متفاوت است: در ابتدای اجرای این متد رویداد `ajaxify:init` و سپس `ajaxify:send:before` جرقه می‌خورند. ####فرم برای فرم‌ها، متد ارسال درخواست از مشخصه `method` و آدرس هدف از مشخصه `action` فرم خوانده می‌شود. سپس اطلاعات فرم به صورت `FormData` در می‌آید و درخواست ایژکس ارسال می‌شود. پس از ارسال درخواست، تمامی ورودی های از نوع `input` و عناصر `[contenteditable]` غیر فعال می‌شوند. ####لینک برای لینک ها اطلاعات درخواست از جمله متد و آدرس از مشخصه‌های `data-method` و `href` خوانده می شوند. اطلاعات درخواست با اجرای `JSON.parse` بر روی مشخصه `data-data` لینک خوانده شده و همراه با داده‌ها، این تنظیمات به `jQuery.ajax` داده می‌شوند: ```javascript { data: JSON.parse(el.attr('data-data')), contentType: 'application/x-www-form-urlencoded; charset=UTF-8', processData: true } ``` قبل از ارسال اطلاعات عناصر `[data-ajaxify]` غیر فعال می‌شوند. ####مشترک بعد از جمع‌آوری اطلاعات در مورد درخواست رویداد `ajaxify:send:ajax:start‍` جرقه خورده و `jQuery.ajax` اجرا می‌شود. پس از دریافت پاسخ از سمت سرور رویداد `ajaxify:complete` جرقه می‌خورد، عناصر غیر فعال شده به حالت خود باز‌میگردند و کلاس ‍`loading-form` از بادی حذف می‌شود. پس از این مراحل، بسته به پاسخ دریافتی از سرور دو حالت وجود دارد: #####موفقیت در صورت موفق بودن درخواست متد `ajaxify.showResults` اجرا می‌شود که نوتیفیکیشن مناسب را نمایش می‌دهد. سپس در صورت وجود مشخصه `redirect` در جواب، کاربر به صفحه مورد نظر منتقل می‌شود. در صورت وجود مشخصه `refresh` هنگام اجرای متد و یا وجود مشخصه `data-refresh` روی عنصر صفحه رفرش می‌شود. رویداد `ajaxify:success` جرقه می‌خورد. #####اختلال رویداد `ajaxify:fail` جرقه می‌خورد. استفاده --- برای استفاده از این ماژول شما از متد `ajaxify` اضافه شده به جی‌کوری استفاده میکنید که خواندن و ارسال داده‌ها و در نهایت نمایش نتیجه را بر عهده دارد. این متد یک شی به عنوان آرگومان قبول می‌کند که شامل تنظیمات می‌شود. تنظیمات این متد در زیر توضیح داده شده اند: ```javascript $('#myform').ajaxify({ ajax: { cache: true, ... }, noLoading: false, link: false, refresh: false }); ``` ######ajax این شی با تنظیمات پیش‌فرض ایژکسی ادغام شده و به `jQuery.ajax ` داده می‌شود. دقت کنید که مشخصه `data`ی این شی در آخر با اطلاعات گرفته شده از عنصر جایگزین می‌شود پس استفاده از این مشخصه بی‌فایده و نادرست است. بجای اینکار باید اطلاعات مورد نظرتان را به عنصر اضافه کنید (برای مثال اضافه کردن ورودی‌های مخفی به فرم. ######noLoading در صورت مثبت بودن این مشخصه از اضافه کردن کلاس `loading-form` به بدنه صفحه خودداری می‌شود. ######link این مشخصه تعیین می‌کند که رفتار متد باید مانند لینک باشد یا خیر. ######refresh در صورت مثبت بودن این مشخصه بعد از دریافت پاسخ برای درخواست، صفحه با استفاده از دستور `Navigate` رفرش می‌شود. متد‌ها --- ######showResults ######(data: Object, form: DOMNode, jq: jQuery Object) این متد وظیفه‌ی نمایش نتیجه‌ی درخواست را دارد. در اجرای این متد رویداد `ajaxify:render:start` جرقه می‌خورد. در ابتدا این متد کلاس‌های `error` و `warn` را از روی تمامی ورودی‌های فرم حذف می‌کند. سپس یک عنصر `ul` ساخته می‌شود که با اطلاعات `data.messages` پر می‌شود. برای اطلاع از نحوه رندر نوتیفیکشن به فایل`includes/mvc/display.html` مراجعه کنید. ```php <div id="formError" class="error_{{debug.status}} unselectable"> {%for key, mydebug in debug.messages if mydebug is iterable %} <ul class="{{key}}"> {%for key, err in mydebug%} {%if err.title is defined%} <li class="{{err.group}} {{err.redirect}}">{{err.title}}</li> {%else%} <li class="n_{{key}}">{{err}}</li> {%endif%} {%endfor%} </ul> {%endfor%} </div> ``` پس از اتمام پر کردن عناصر رویداد `ajaxify:render:done` جرقه می‌خورد. در صورتی که خطایی در فرم وجود نداشته باشد و مشخصه `data-clear` روی عنصر مشخص شده باشد، مقدار تمام عناصری که مشخصه `data-unclear` را نداشته باشند خالی می‌شود. رویداد `ajaxify:render:clear` اجرا می‌شود. سپس در صورت نبودن خطا، اولین ‍`input` در فرم دارای فوکوس می‌شود. رویداد `ajaxify:render:focus` اجرا می‌شود. سپس با استفاده از `notify` پیغام نمایش داده می شود و رویداد `ajaxify:notify` جرقه می‌خورد. در صورت مشخص کردن `data-delay` این تنظیم به `notify` داده می‌شود که تعیین کننده‌ی زمان ماندن روی صفحه‌ی نوتیفیکیشن است.