توابع جاوا اسکریپت

برای سرویس دهی موضوعات ویجت نس از زبان جاوا اسکریپت استفاده شده است، این مجموعه کامپوننت ها توسط typescript و بدون استفاده از هیچ لایبری اضافی مانند jquery استفاده شده است.

شما برای استفاده از این کامپوننت نیازی به اضافه کردن هیچ کتابخانه اضافی ندارید و همچنین سعی شده است سربارهای اضافی نیز حذف گردد.

توابع

قطعا شما نیز میتوانید از توابع نوشته شده برای اعمال اسکریپتی خود استفاده کنید، برخی از این توابع در زیر نام برده خواهد شد و به مرور زمان مستندات آن تکمیل خواهد گردید.

WNmod(a: number, b: number)

مقدار باقیمانده دو پارامتر خود را برمیگرداند.


WNparseBoolean(value: any, Default?: boolean)

مقدار ورودی را بررسی و در صورت bool بودن، مقدار آنرا برمیگرداند، در غیر اینصورت مقدار پیش فرض انتخاب شده را برمیگرداند.


WNparseNumber(value: any, Default?: number, culture: wnCultureInfo = wnConfig.cultureInfo)

مقدار عددی ورودی را بررسی میکند، اگر عدد بود، مقدار آن و در غیر اینصورت مقدار پیش فرض را برمیگرداند. اگر اعداد به صورت اعداد محلی بودند، ابتدا اعداد را تبدیل و سپس صحت مقداری را بررسی میکند.


WNparseString(value: any, Default?: string)

مقدار رشته ای را بررسی کرده و در صورت عدم وجود مقدار رشته ای مانند null مقدار پیش فرض را برمیگرداند.


WNLimitRange(value: number, min: number, max: number)

اگر مقدار بین حداقل و حداکثر بود، مقدار خود و در غیر اینصورت مقدار حداقل یا حداکثر را برمیگرداند.


WNParentHaveClass(child: HTMLElement, parentClassName: string)

بررسی میکند، آیا کلاسی در تگهای والد موضوع مورد نظر استفاده شده است یا خیر.


WNnativeDigit(number: number | string, culture: wnCultureInfo, convert: boolean)

اعداد درون یک رشته یا عدد را به صورت اعداد محلی تبدیل میکند، برای مثال عدد 1 را ۱ نمایش میدهد.


WNDenativeDigit(value: string, culture: wnCultureInfo = wnConfig.cultureInfo)

اعداد محلی را به اعداد سیستمی تبدیل میکند، برعکس تابع WNnativeDigit


WNGetNodesList(list: string, parent: any = document, thiselemnt: HTMLElement = null)

لیست تگهایی که با قوانین سلکتورها قابل شناسایی هستند را برمیگرداند، قوانین را میتوانید در پارامتر list و به صورت , جداکننده استفاده کنید.


WNCalcValue(value1: string, value2: string, sign: string, elem: HTMLElement = null, min: number = Number.MIN_VALUE, max: number = Number.MAX_VALUE)

محاسبه 4 عمل اصلی در واحدهای مختلف نمایشی که نسبت به المت انتخاب شده محاسبه میگردد، برای مثال تبدیل px و em یا rem


WNContainElement(elem: HTMLElement, findin: HTMLElement)

بررسی میکند، یک المت داخل یک المت دیگر است یا خیر.


WNHtmlToEscape(src:string)

تبدیل تگهای html به تگهای قابل نمایش در pre


WNValueUnit(value: string): { value: number, unit: string }

دریافت مقدار عددی و واحد یک رشته مانند 10px


WNGetCookie(cname: string)

دریافت مقدار کوکی


WNSetCookie(cname: string, cvalue: string, exdays: number)

ثبت مقدار کوکی، اگر مقدار تاریخ انقضا صفر باشد، آنرا تنظیم نمیکند.


WNGetStorage(key: string)

دریافت مقدار از استوریج سشن، اگر نبود، از استوریج لوکال


WNSetStorage(key: string, value: string, localstorage: boolean)

تنظیم مقدار استوریج، در صورتیکه localstorage مقدار true باشد. در لوکال استرویج و در غیر اینصورت در سشن ذخیره میشود.


WNAddStringQuote(value: string)

برای ارسال یه رشته به صورت post به سرور، بایستی عبارت متنی در " قرار گیرد، این تابع این علامت را در کنار مقدار قرار میدهد.


function WNChangeFieldTreeArray(source: any, childsFieldName: string, parent: any, call: Function): void

در برخی مواقع نیاز داریم بر روی یک دیتایی از نوع درخت، مثل آرایه تابعی را ایجاد کنیم. این تابع چنین دسترسی را به آسانی به شما میدهد.

source آرایه ای جنس درخت

childsFieldName نام فیلد که دارای فرزند هستند

parent والدی که از آن فرزندان در حال پردازش هست. مقدار اولیه null باید باشد. دقیقا به ردیف قبلی دیتا اشاره میکند.

call تابعی که به ازای هر ردیف داده صدا زده میشود تا شما در آن عملیات مرتبط را انجام دهید.

(item,parent) => { sum+=item.y + parent.x }


WN(element: HTMLElement | HTMLDocument | string): WNElement

اگر میخواهید یکسری توابع یا خصوصیات یک موضوعی را تغییر دهید، از این تابع استفاده کنید.

Element: HTMLElement | HTMLDocument | any;
Ready(callBack: any, options?: boolean);
Click(callBack: any);
Change(callBack: any);
Input(callBack: any);
Focus(callBack: any);
FocusIn(callBack: any);
FocusOut(callBack: any);
Resize(callBack: any);
Scroll(callBack: any);
Select(callBack: any);
ContextMenu(callBack: any);
Copy(callBack: any);
Cut(callBack: any);
Paste(callBack: any);
DBLClick(callBack: any);
Drag(callBack: any);
Dragend(callBack: any);
Dragenter(callBack: any);
Dragleave(callBack: any);
Dragover(callBack: any);
Dragstart(callBack: any);
Drop(callBack: any);
Keydown(callBack: any);
Keypress(callBack: any);
Keyup(callBack: any);
Mousedown(callBack: any);
Mouseenter(callBack: any);
Mouseleave(callBack: any);
Mousemove(callBack: any);
Mouseover(callBack: any);
Mouseout(callBack: any);
Mouseup(callBack: any);
Touchcancel(callBack: any);
Touchend(callBack: any);
Touchmove(callBack: any);
Touchstart(callBack: any);
Wheel(callBack: any);

برای مثال میخواهید وقتی روی موضعی با ID یا نام 'd1' کلیک شد یک پیام نشان دهید از مثال زیر استفاده کنید.

WN('d1').Click(()=>{alert('some');});


ارسال و دریافت اطلاعات با سرور

برای آنکه شما بتوانید به سرور ارسال اطلاعات داشته باشید میتوانید از توابع زیر استفاده کنید.

WNBaseFetchUri

اگر آدرس سرور وب سرویس شما با آدرس سرویس دهنده شما متفاوت است، میتوانید یکبار این متغییر را مقدار دهی کنید، تا در زمانیکه آدرس سرور به هر دلیلی تغییر کرد فقط با تغییر این متغییر، کلیه ارسال و دریافت به آن سرور منتقل شود.
برای مثال سایت شما به آدرس a.com است ولی سرویس دهنده دیتای شما به آدرس data.a.com است. بدین منظور بایستی مقدار متغییر را قبل از فراخوانی توابع ارسال اطلاعات مقدار دهی کنید.
WNBaseFetchUri='https://data.a.com/api/v1';

Post

Post(data: any, postUrl: string)
برای پست اطلاعات به سرور از این تابع استفاده کنید. پارامتر اول دیتای شما به صورت فرم یا دیتای مستقیم یا جیسون میباشد.
پارامتر بعدی، آدرس کنترلر دریافت کننده به صورت نسبی با مقدار متغییر WNBaseFetchUri است.

WN(document).Ready(async() =˃ { await Post(null, '/Components/Tree').then((r) =˃ { alert(r); }).catch((e) =˃ { console.log(e); }); });

Get

Get(data: any, postUrl: string)
این تابع همانند تابع Post است با این تفاوت روش ارسال اطلاعات به صورت Get میباشد.

GetText

GetText(postUrl: string)
اگر میخواهید یک فایل یا دیتای متنی را دریافت کنید، به صورت Get فراخوانی شده و مقدار برگشتی را نمایش میدهد.

GetFile

GetFile(path: any, postUrl: string)
برای دانلود یک فایل از سرور توسط کنترلر میتوانید از این تابع استفاده کنید. در قسمت پارامتر path میتوانید آدرسی که کنترلر میشناسد را وارد کرده و در قسمت url اسم کنترلر خود را بنویسید.
نحوه فراخوانی به صورت Get میباشد.
مقدار بازگشتی به صورت یک موضوع Blob است.

await GetFile('Test.png', '/Download').then(async (r) =˃ { if (r) { var a = document.createElement("a"); a.href = r; a.download = filesName.files[i]; a.click(); window.URL.revokeObjectURL(r); } });

Upload

Upload(files: any, destination: string, postUrl: string)
زمانیکه میخواهید یک فایل را برای سرور توسط کنترلر ارسال کنید، از این تابع استفاده کنید.
نحوه فراخوانی به صورت Put میباشد.
نحوه کار بدین صورت است که اطلاعات فایل مد نظر در پارامتر files و سپس آدرس فهرست مد نظر برای آپلود و سپس آدرس کنترلر آورده میشود.
اطلاعات به صورت Form Data و به روش Put برای سرور ارسال میشود. در این حین در اطلاعات فرم ارسالی فیلیدی به اسم destination با مقدار آدرس پارامتر destination به همراه فایلهای ارسالی به کنترلر فرستاده میشود. تا اگر سرور نیاز به این آدرس داشت بتواند از آن استفاده کند.

_dragdrop.addEventListener("drop", async (ev) =˃ { ev.preventDefault(); if (ev.dataTransfer.items) { let files = []; for (var i = 0; i < ev.dataTransfer.items.length; i++) if (ev.dataTransfer.items[i].kind === 'file') files.push(ev.dataTransfer.items[i].getAsFile()); await this.UploadFile(files); } else { await this.UploadFile(ev.dataTransfer.files[i]); } }); async UploadFile(files) { await Upload(files, 'folder', '/Upload').then(async (r) =˃ { if (r==true) { alert("success"); } else { alert("error"); } }); }

GetFormData

GetFormData(Form: HTMLFormElement)
اگر شما یک فرم ورودی دارید و میخواهید اطلاعات آن فرم را به سرور توسط یکی از توابع بالا ارسال کنید، میتوانید از این تابع برای ساهت موضوع ارسالی کمک بگیرید.
این تابع با گرفتن اسم فرم، اجزای اطلاعاتی را شناسایی میکند و سپس آنها را تبدیل به جیسون میکند.

متغییرها

برخی متغییرها در سیستم از کارآیی بالایی برخوردار هستند که به مهمترین آنها در زیر اشاره میکنیم.

WN

این آرایه به کلیه موضوعات ساخته شده از نوع ویجت نس اشاره دارد. یعنی اگر میخواهید یکی از خصوصیات، توابع، رخدادهای هر موضوع ویجتنس ساخته شده را تغییر دهید بایستی از این آرایه استفاده کنید.
بدین صورت که ID موضوع مورد نظر را به این آرایه بدید و آن موضوع را دریافت کنید.

alert(WN('tree1'].selectedItem);

WNLanguage

این آرایه نیز بر اساس زبان انتخاب شده، لیستی از کلیدها و پیامهای آنها را برمیگرداند.

alert(WNLanguage["en"]["filelist"]["newfolder"]); WNLanguage['en'] = { 'common': { 'browsererror': 'Please use a new browser with proper w3 support. Chrome version 89 and above or FireFox version 55 and above.', 'close': 'Close', 'ok': 'Ok', 'cancel': 'Cancel', },...

wnConfig.calendar

با تنظیم این متغییر تقویم پیش فرض برای محاسبات تاریخی مشخص میشود. نوع تقویم wnCalendar است.
wnConfig.calendar = new WNPersianCalendar();

wnConfig.cultureInfo

با تنظیم این متغییر فرهنگ پیش فرض برای محاسبات تاریخی مشخص میشود. نوع فرهنگ wnCultureInfo است.
wnConfig.cultureInfo = new WNCultureInfo_fa_IR();

WNDefaultLanguage

زبان پیش فرض انتخاب شده برای استفاده از فرهنگ و ... است
WNDefaultLanguage = 'fa';

WNDefaultHijriAdjustment

در محاسبات تاریخ هجری قمری برخی اوقات محاسبات با واقعیت 1 الی 2 روز متفاوت است، در این متغییر، آن تعداد روز مغایرت را وارد کنید.