شخصی سازی

ساختار پیش فرض

DSP از یک ساختار پیشفرض برای تولید manifest.json استفاده می‌کند.

 1#<pwa/defaults.py>
 2
 3DEFAULT_CONFIG = {
 4        "name": "Progressive Web Application",
 5        "short_name": "PWA",
 6        "theme_color": "#7820f5",
 7        "background_color": "#7820f5",
 8        "display": "standalone",
 9        "orientation": "portrait",
10        "scope": "/",
11        "start_url": "/",
12        "icons": [
13                {
14                        "src": "/static/pwa/icons/72x72.png",
15                        "type": "image/png",
16                        "sizes": "72x72"
17                },
18                {
19                        "src": "/static/pwa/icons/96x96.png",
20                        "type": "image/png",
21                        "sizes": "96x96"
22                },
23                {
24                        "src": "/static/pwa/icons/128x128.png",
25                        "type": "image/png",
26                        "sizes": "128x128"
27                },
28                {
29                        "src": "/static/pwa/icons/144x144.png",
30                        "type": "image/png",
31                        "sizes": "144x144"
32                },
33                {
34                        "src": "/static/pwa/icons/152x152.png",
35                        "type": "image/png",
36                        "sizes": "152x152"
37                },
38                {
39                        "src": "/static/pwa/icons/192x192.png",
40                        "type": "image/png",
41                        "sizes": "192x192"
42                },
43                {
44                        "src": "/static/pwa/icons/384x384.png",
45                        "type": "image/png",
46                        "sizes": "384x384"
47                },
48                {
49                        "src": "/static/pwa/icons/512x512.png",
50                        "type": "image/png",
51                        "sizes": "512x512"
52                }
53                ],
54        "lang": "en",
55        "dir": "ltr",
56        "description": "Progressive Web app powerd by Django",
57        "version": "1.",
58        "manifest_version": "1.0",
59        "permissions": [
60                "notifications",
61                "webRequest"
62        ],
63        "author": "PWA-django"
64}

تغییر پیش فرض

برای شخصی‌سازی فایل manifest.json app.js sw.js کافیست متغیر PWA_CONFIG PWA_SW PWA_APP را در فایل settings.py تعریف کنید.

1#<my_project/settings.py>
2
3PWA_CONFIG = {
4# ...
5"name": "Progressive Web Application"
6# ...
7}
8PWA_APP = """// js code here"""
9PWA_SW = """// js code here"""

هشدار

توجه داشته باشید که هیچ یک از دو آیکون شما دارای سایز برابر نباشند.

برای مثال ساختار زیر باعث ایجاد خطا در برنامه میشود.

 1{
 2        "src": "/static/pwa/icons/144x144.png",
 3        "type": "image/png",
 4        "sizes": "144x144"
 5},
 6{
 7        "src": "/static/pwa/icons/144x144.ico",
 8        "type": "image/x-icon",
 9        "sizes": "144x144"
10},

توجه

این بدین معنی است که لزوما تغییر فرمت موجب جلوگیری از خطا نمی‌شود.

توجه

همچنین ما توصیه نمی‌کنیم که PWA_APP و PWA_SW را دوباره تعریف کنید مگر آنکه بدانید واقعا چه می‌کنید.

شما میتوانید آیکون‌های خود را در سایزهای مختلف با فرمت‌های دلخواه خود به صورت فوق تعریف کنید اما ما توصیه میکنیم از فرمت .ico استفاده کنید.

تغییر manifest.json

برای این کار PWA_CONFIG را به settings.py اضافه کنید.

 1#<my_project/settings.py>
 2
 3PWA_CONFIG = {
 4        "name": "My Costum Name",
 5        "short_name": "MCN",
 6        "theme_color": "#fff",
 7        "background_color": "#f0f0f0",
 8        "display": "standalone",
 9        "orientation": "portrait",
10        "scope": "/",
11        "start_url": "/",
12        "icons": [
13                {
14                        "src": "/static/pwa/icons/72x72.png",
15                        "type": "image/png",
16                        "sizes": "72x72"
17                },
18                {
19                        "src": "/static/pwa/icons/96x96.png",
20                        "type": "image/png",
21                        "sizes": "96x96"
22                },
23                {
24                        "src": "/static/pwa/icons/128x128.png",
25                        "type": "image/png",
26                        "sizes": "128x128"
27                },
28                {
29                        "src": "/static/pwa/icons/144x144.png",
30                        "type": "image/png",
31                        "sizes": "144x144"
32                },
33                {
34                        "src": "/static/pwa/icons/152x152.png",
35                        "type": "image/png",
36                        "sizes": "152x152"
37                },
38                {
39                        "src": "/static/pwa/icons/192x192.png",
40                        "type": "image/png",
41                        "sizes": "192x192"
42                },
43                {
44                        "src": "/static/pwa/icons/384x384.png",
45                        "type": "image/png",
46                        "sizes": "384x384"
47                },
48                {
49                        "src": "/static/pwa/icons/512x512.png",
50                        "type": "image/png",
51                        "sizes": "512x512"
52                }
53                ],
54        "lang": "en",
55        "dir": "ltr",
56        "description": "Progressive Web app powerd by Django",
57        "version": "1.",
58        "manifest_version": "1.0",
59        "permissions": [
60                "notifications",
61                "webRequest"
62        ],
63        "author": "PWA-django"
64}

مقادیر قابل قبول manifest.json

ما در اینجا برخی از مواردی که یک PWA میتواند در فایل manifest.json خود داشته باشد را به صورت پیشفرض برای اپ خود تعریف کرده‌ایم و در ادامه به تعریف مقادیری که میتوانید برای آن‌ها لحاظ کنید می‌پردازیم.

 1{
 2"name": 'The name of application',
 3"short_name": "Short name; Can be same with name",
 4"theme_color": "The hex color for app theme",
 5"background_color": "The hex color for app background color",
 6"display": "fullscreen [OR] standalone [OR] minimal-ui [OR] browser",
 7"orientation": "any [OR] natural [OR] landscape [OR] landscape-primary [OR] landscape-secondary [OR] portrait [OR] portrait-primary [OR] portrait-secondary",
 8"scope": "/app/ [OR] https://example.com/ [OR] https://example.com/subdirectory/",
 9"start_url": "/ [OR] https://example.com [OR] ../startpoint.html",
10"icons": "the list of dictionery that contains **src** and **sizes** and **type**"
11"lang": "langueage code like fa [OR] en [OR] tu [OR] fn [OR] ge [OR] ...",
12"dir": "rtl [OR] ltr [OR] auto",
13"description": "Description pf your app",
14"version": "app version",
15"manifest_version": "manifest.json file vertion if change on updating app",
16"permissions": `list here <https://developer.chrome.com/docs/extensions/mv2/declare_permissions/>`_
17"author": "author name or title of app"
18
19}

توجه

برای اطلاعات بیشتر می‌توانید به برخی مستندات آن که در لیست زیر فراهم کردیم بپردازید:

تغییر ServiceWorker.js

برای این کار PWA_SW را در settings.py به یکی از دو روش زیر تعریف کنید.

1PWA_SW = """// js code here """
1SW = open('/path/to/ServiceWorker.js', "r")
2PWA_SW = SW.read()
3SW.close()

توجه

برای اطلاعات بیشتر نسبت به نحوه‌ی کارکرد ServiceWorker.js می‌توانید از منابع زیر استفاده کنید.

تغییر app.js

برای این کار کافیست متغییر PWA_APP را در فایل settings.py تعریف کنید.

1PWA_SW = """// js code here """
1APP = open('/path/to/app.js', "r")
2PWA_SW = APP.read()
3APP.close()

توجه

همچنان توصیه نمی‌کنیم که PWA_APP و PWA_SW را دوباره تعریف کنید مگر آن که بدانید واقعا چه می‌کنید.

تغییر محتوای صفحه‌ی آفلاین

ما از ساختاری مشابه ساختار جنگو برای تغییر صفحه‌ی آفلاین استفاده می‌کنیم. به طوری که برای تغییر آن می‌بایست ابتدا در مسیر <templates-dir>/pwa/ یک فایل با نام offline.html ایجاد کنید و سپس آن را در مسیر pwa/pwa_offline.html اکستند کنید.

1<!-- <templates-dir/pwa/offline.html> -->
2
3{% extend 'pwa/pwa_offline.html' %}
4
5{% block title %} title {% endblock title %}
6{% block main %} something {% endblock main %}

توجه

ما به طور پیش‌فرض از بوت‌استرپ در قسمت آفلاین سایت استفاده می‌کنیم با این حال میتوانید به صورت زیر فایل‌های css و js خود را در آن بارگذاری کنید.

1{% block extrastyles %} <!-- your css here --> {% endblock extrastyles %}
2
3{% block extrascripts %} <!-- your js here --> {% endblock extrascripts %}

هشدار

توجه داشته باشید با اعمال قطعه کد بالا دیگر بوت استرپ در صفحه اعمال نخواهد شد.

درضمن هرگونه تغییر در فایل آفلاین باید با تغییر کش در ServiceWorker.js همراه باشد. بنابراین در صورتی که فایل آفلاین را تغییر دادید نیاز است که PWA_SW را نیز تعریف کنید هرچند ممکن است بدون این کار هم برنامه کار بکند ولی بهتر است که ServiceWorker.js باز نویسی شود.