diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7b4c954 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,60 @@ +# Use an official Python runtime based on Debian 10 "buster" as a parent image. +FROM python:3.8.1-slim-buster + +# Add user that will be used in the container. +RUN useradd wagtail + +# Port used by this container to serve HTTP. +EXPOSE 8000 + +# Set environment variables. +# 1. Force Python stdout and stderr streams to be unbuffered. +# 2. Set PORT variable that is used by Gunicorn. This should match "EXPOSE" +# command. +ENV PYTHONUNBUFFERED=1 \ + PORT=8000 + +# Install system packages required by Wagtail and Django. +RUN apt-get update --yes --quiet && apt-get install --yes --quiet --no-install-recommends \ + build-essential \ + libpq-dev \ + libmariadbclient-dev \ + libjpeg62-turbo-dev \ + zlib1g-dev \ + libwebp-dev \ + && rm -rf /var/lib/apt/lists/* + +# Install the application server. +RUN pip install "gunicorn==20.0.4" + +# Install the project requirements. +COPY requirements.txt / +RUN pip install -r /requirements.txt + +# Use /app folder as a directory where the source code is stored. +WORKDIR /app + +# Set this directory to be owned by the "wagtail" user. This Wagtail project +# uses SQLite, the folder needs to be owned by the user that +# will be writing to the database file. +RUN chown wagtail:wagtail /app + +# Copy the source code of the project into the container. +COPY --chown=wagtail:wagtail . . + +# Use user "wagtail" to run the build commands below and the server itself. +USER wagtail + +# Collect static files. +RUN python manage.py collectstatic --noinput --clear + +# Runtime command that executes when "docker run" is called, it does the +# following: +# 1. Migrate the database. +# 2. Start the application server. +# WARNING: +# Migrating database at the same time as starting the server IS NOT THE BEST +# PRACTICE. The database should be migrated manually or using the release +# phase facilities of your hosting platform. This is used only so the +# Wagtail instance can be started with a simple "docker run" command. +CMD set -xe; python manage.py migrate --noinput; gunicorn unblocklife.wsgi:application diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..f111262 --- /dev/null +++ b/Pipfile @@ -0,0 +1,18 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +django = "*" +tzdata = "*" # Fixes "zoneinfo._common.ZoneInfoNotFoundError" on docker server +wagtail = "*" +whitenoise = "*" + +[dev-packages] +black = "*" +flake8 = "*" +isort = "*" + +[requires] +python_version = "3.10" diff --git a/courses/__init__.py b/courses/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/courses/admin.py b/courses/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/courses/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/courses/apps.py b/courses/apps.py new file mode 100644 index 0000000..019ba91 --- /dev/null +++ b/courses/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CoursesConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'courses' diff --git a/courses/models.py b/courses/models.py new file mode 100644 index 0000000..3a657c3 --- /dev/null +++ b/courses/models.py @@ -0,0 +1,166 @@ +from django.db import models +from wagtail.models import Page +from django.shortcuts import redirect, render +from wagtail.fields import RichTextField +from wagtail.admin.panels import FieldPanel, MultiFieldPanel +from wagtail.search import index +from wagtail.fields import StreamField +from wagtail import blocks +from wagtail.images.blocks import ImageChooserBlock +from modelcluster.contrib.taggit import ClusterTaggableManager +from modelcluster.fields import ParentalKey +from taggit.models import Tag, TaggedItemBase +from home.blocks import BaseStreamBlock, TrainerBlock +from wagtail.contrib.routable_page.models import RoutablePageMixin, route +from wagtail.admin.filters import WagtailFilterSet + + +class CoursesIndexPage(RoutablePageMixin, Page): + max_count=1 + summary = models.CharField(blank=True, max_length=255) + image = models.ForeignKey( + "wagtailimages.Image", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + help_text="Landscape mode only; horizontal width between 1000px and 3000px.", + ) + + template = "courses/courses_index_page.html" + + content_panels = Page.content_panels + [ + FieldPanel('summary'), + FieldPanel("image") + ] + + def get_context(self, request, *args, **kwargs): + context = super().get_context(request, *args, **kwargs) + context['course_entries'] = CoursesPage.objects.child_of(self).live().order_by('-date') + return context + + subpage_types = ["CoursesPage"] + + def children(self): + return self.get_children().specific().live() + + @route(r"^tags/$", name="tag_archive") + @route(r"^tags/([\w-]+)/$", name="tag_archive") + def tag_archive(self, request, tag=None): + try: + tag = Tag.objects.get(slug=tag) + except Tag.DoesNotExist: + if tag: + msg = 'There are no Course Pagess tagged with "{}"'.format(tag) + messages.add_message(request, messages.INFO, msg) + return redirect(self.url) + course_entries = self.get_posts(tag=tag) + context = {"self": self, "tag": tag, "course_entries": course_entries} + return render(request, "courses/courses_index_page.html", context) + + def serve_preview(self, request, mode_name): + return self.serve(request) + + # Returns the child CoursePage objects for this CoursePageIndex. + # If a tag is used then it will filter the posts by tag. + def get_posts(self, tag=None): + posts = CoursesPage.objects.live().descendant_of(self) + if tag: + posts = posts.filter(tags=tag) + return posts + # Returns the list of Tags for all child posts of this CoursePage. + def get_child_tags(self): + tags = [] + for post in self.get_posts(): + # Not tags.append() because we don't want a list of lists + tags += post.get_tags + tags = sorted(set(tags)) + return tags + + + +class CoursesPageTag(TaggedItemBase): + """ + This model allows us to create a many-to-many relationship between + the CoursePage object and tags. There's a longer guide on using it at + https://docs.wagtail.org/en/stable/reference/pages/model_recipes.html#tagging + """ + + content_object = ParentalKey( + "CoursesPage", related_name="tagged_items", on_delete=models.CASCADE + ) + + + + + + +class CoursesPage(Page): + author = models.CharField(max_length=255) + date = models.DateField("Post date") + summary = models.CharField(max_length=1000) + start_date = models.DateField(null=True, help_text="Schedule Start Date") + end_date = models.DateField( null=True, help_text="Schedule End Date") + feed_image = models.ForeignKey( + 'wagtailimages.Image', + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name='+' + ) + body = StreamField( BaseStreamBlock(), verbose_name="Page body", blank=True, use_json_field=True) + trainers = StreamField( TrainerBlock(), verbose_name="Trainers", blank=True, use_json_field=True) + + tags = ClusterTaggableManager(through=CoursesPageTag, blank=True) + + search_fields = Page.search_fields + [ + index.SearchField('summary'), + index.SearchField('author'), + index.SearchField('body'), + index.SearchField('trainers'), + ] + + content_panels = Page.content_panels + [ + FieldPanel('trainers'), + FieldPanel('date'), + FieldPanel('summary'), + FieldPanel('start_date'), + FieldPanel('end_date'), + FieldPanel('body'), + FieldPanel('author'), + FieldPanel("tags"), + ] + panels = [ + FieldPanel('start_date'), + ] + + + promote_panels = [ + MultiFieldPanel(Page.promote_panels, "Common page configuration"), + FieldPanel('feed_image'), + ] + + @property + def get_tags(self): + """ + Similar to the authors function above we're returning all the tags that + are related to the course page into a list we can access on the template. + We're additionally adding a URL to access CoursePage objects with that tag + """ + tags = self.tags.all() + base_url = self.get_parent().url + for tag in tags: + tag.url = f"{base_url}tags/{tag.slug}/" + return tags + + # Specifies parent to CoursePage as being CourseIndexPages + parent_page_types = ["CoursesIndexPage"] + + # Specifies what content types can exist as children of CoursePage. + # Empty list means that no child content types are allowed. + subpage_types = [] + +class CoursesPageFillterSet(WagtailFilterSet): + class Meta: + model = CoursesPage + fields = ["start_date"] diff --git a/courses/templates/courses/courses_index_page.html b/courses/templates/courses/courses_index_page.html new file mode 100644 index 0000000..941e7bb --- /dev/null +++ b/courses/templates/courses/courses_index_page.html @@ -0,0 +1,54 @@ +{% extends "base.html" %} + +{% load wagtailcore_tags wagtailimages_tags %} + +{% block body_class %}template-blogindexpage{% endblock %} + +{% block content %} + +
+ +
+
+
+

{{ page.title }}

+

{{ page.summary }}

+ +
+
+ {% for post in course_entries %} + +
+
+ + {% image post.feed_image fill-840x240 as img %} + + +
+ +
+
+

{{ post.title }}

+

+

{{ post.specific.summary }}

+ Read More + + + + +
+
+
+ {% endfor %} + +
+ +
+
+ + +{% endblock %} + + diff --git a/courses/templates/courses/courses_page.html b/courses/templates/courses/courses_page.html new file mode 100644 index 0000000..5c367a6 --- /dev/null +++ b/courses/templates/courses/courses_page.html @@ -0,0 +1,75 @@ +{% extends "base.html" %} +{% load wagtailcore_tags %} +{% block body_class %}template-blogpage{% endblock %} + +{% block content %} +{% load wagtailcore_tags wagtailimages_tags %} +
+
+{% image page.feed_image fill-840x240 as img %} +# + +
+ +
+
+

{{ page.title }}

+
+

by + + {{ page.author }} + on + +

+
+

Schedule

+

Start Date:

+

End Date:

+
+
+ +
+{% for trainer in page.trainers %} +
{{ trainer }}
+{% endfor %} + +
+ +
+ + +{% for block in page.body %} +
{{ block }}
+{% endfor %} + +
+ +{% if page.get_tags %} +

Find more blog posts with similar tags

+
+ {% for tag in page.get_tags %} + +{{ tag }} + {% endfor %} +
+{% endif %} + + + +
+ + + +
+
+ +{% endblock content %} + diff --git a/courses/tests.py b/courses/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/courses/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/courses/views.py b/courses/views.py new file mode 100644 index 0000000..ba75929 --- /dev/null +++ b/courses/views.py @@ -0,0 +1,26 @@ +from django.shortcuts import render +from wagtail.admin.panels import FieldPanel +from wagtail.admin.ui.tables import UpdatedAtColumn +from wagtail.snippets.models import register_snippet +from wagtail.snippets.views.snippets import SnippetViewSet + +from courses.models import CoursePage, CoursePageFilterSet + + +class CoursePageViewSet(SnippetViewSet): + model = CoursePage + icon = "user" + list_display = ["name", "shirt_size", "get_shirt_size_display", UpdatedAtColumn()] + list_per_page = 50 + copy_view_enabled = False + inspect_view_enabled = True + admin_url_namespace = "courses_views" + base_url_path = "pages/courses" + filterset_class = CoursePageFilterSet + + edit_handler = TabbedInterface([ + ObjectList([FieldPanel("name")], heading="Details"), + ObjectList([FieldPanel("start_date")], heading="Preferences"), + ]) + +register_snippet(CoursePageViewSet) diff --git a/demo_data.json b/demo_data.json new file mode 100644 index 0000000..aa65323 --- /dev/null +++ b/demo_data.json @@ -0,0 +1 @@ +[{"model": "home.standardpage", "pk": 6, "fields": {"introduction": "We are bunch of technical folks", "image": 4, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

bunch of techncial folks

\", \"id\": \"dbb667bd-e974-4433-9145-080fc9062296\"}]"}}, {"model": "home.standardpage", "pk": 8, "fields": {"introduction": "I am privacy Policy", "image": 4, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

Introduction

We, at Info Edge (India) Limited herein referred to as IEIL and our affiliated companies worldwide, are committed to respecting your online privacy and recognize your need for appropriate protection and management of personally identifiable information (\\\"Personal Information\\\") you share with us, in-line with the applicable data protection laws and regulations.

This Policy is subject to the terms of the Site Policy (Terms of Use) of Shiksha.com and the Application. This policy applies to those who register on the Platform (as defined in the Terms of Use) provided by the Shiksha.com, in connection with use of our services, or whose information Shiksha.com otherwise receives in connection with its services (such as but not limited to contact information of individuals associated with Shiksha.com including partner colleges/ educational institutes etc.)

Personal information (PI) - means any information relating to an identified or identifiable living person. In particular using a common identifier such as a name, an identification number, location data, an online identifier or one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person or any other piece of information as per applicable laws and regulations.

Core Purpose - The Platform is made available for use to help students get details, discover & research on colleges, courses and exams of their interest and for allied services related thereto. Platform also helps connect colleges/educational institutes/coaching centres etc. with prospective students who may be of interest to them.User's contactable information will be shared with Colleges/Educational Institutes/coaching centres etc either if they have shown interest in that Colleges/Educational Institutes/coaching centres etc or they have shortlisted the user as potential candidate for admission.

Study Abroad section of Platform also assists students in completing and submitting their applications to universities abroad. (\\u201cPurpose\\u201d).

Information collection

We collect information about you or your usage to provide better services to all of our users. We collect information in the following ways:

  • Many of our services require you to register/sign up for an account on Shiksha.com. When you do, we will ask for personal information, such as, but not limited to your name, email address and telephone number to create/update your account.
  • To provide you additional services, we may collect your profile information such as, but not limited to education background, work experience, date of birth.
  • We collect information about the services that you use and how you use them such as, but not limited to log information and location information.
  • We may collect your personal information such as but not limited to bank details, passport details to assist for study abroad program which includes services like Letter of recommendation, student profile, student visa and application to university programmes.
  • When you communicate with Shiksha.com or its Application or use the Shiksha.com platform to communicate with other Members (such as advertisers, colleges/ institutes, etc.), we collect information about your communication and any other additional information you choose to provide.

Processing personal information

Shiksha.com may process your Personal Information for the following purposes:

  • We use information collected from cookies and other technologies, like pixel tags, to improve your user experience and the overall quality of our services. When showing you tailored ads, we will not associate an identifier from cookies or similar technologies with sensitive categories, such as those based on race, religion, sexual orientation or health.
  • Our automated systems analyse your content to provide you customised search results, recommendations and specific promotions and offers
  • Send alerts and newsletter(s) to you (Provided you subscribe to the same. To unsubscribe, please visit your account settings)
  • Improving our website and its content to provide better features and services
  • Conducting market research and surveys with the aim of improving our products and services.
  • Sending you information about our products and services for marketing purposes and promotions.
  • Preventing, detecting, investigating and prosecuting crimes (including but not limited to fraud and other financial crimes) in any jurisdiction, identity verification, government sanctions screening and due diligence checks
  • Establishing, exercising or defending legal rights in connection with legal proceedings (including any prospective legal proceedings) and seeking professional or legal advice in relation to such legal proceedings.

Cookies and Other Tracking Technologies

Some of our Web pages utilize \\\"cookies\\\" and other tracking technologies. A \\\"cookie\\\" is a small text file that may be used, for example, to collect your information about Website activity. Some cookies and other technologies may serve to recall Personal Information previously indicated by a Web user. Most browsers allow you to control cookies, including whether or not to accept them and how to remove them.

You may set most browsers to notify you if you receive a cookie, or you may choose to block cookies with your browser, but please note that if you choose to erase or block your cookies, you will need to re-enter your original user ID and password to gain access to certain parts of the Web site and some sections/features of the site may not work.

Tracking technologies may record information such as Internet domain and host names; Internet protocol (IP) addresses; browser software and operating system types; clickstream patterns; and dates and times that our site has accessed.

Our use of cookies and other tracking technologies allows us to improve our Web site and your Web experience. We may also analyse information that does not contain Personal Information for trends and statistics.

For more information about our use of cookies please refer to our Cookie Policy.

Third Party Services

Third parties provide certain services available on Shiksha.com on IEIL\\u2019s behalf. Shiksha.com may provide information, including Personal Information, that \\u2018Shiksha.com collects on the Web to third-party service providers to help us deliver programs, products, information, and services. Service providers are also an important means by which Shiksha.com maintains its Web site and mailing lists. Shiksha.com will take reasonable steps to ensure that these third-party service providers are obligated to protect Personal Information on Shiksha.com behalf.

Shiksha.com does not intend to transfer Personal Information without your consent to third parties unless such transfer is required for providing relevant services or for purposes legal purposes.

When you are in a relationship with Shiksha.com, your personal information may be transferred to geographies outside India, for the purposes mentioned in this policy or to their local service providers for support in the pursuance of such purposes. Transfers outside India are covered by standard data protection laws.

Please be aware that Shiksha.com sometimes contains links to other sites that are not governed by this privacy policy. Visitors to Our Site may be directed to third-party sites for more information, such as advertisers, blogs, content sponsorships, vendor services, social networks, etc.

Shiksha.com makes no representations or warranties regarding how your information is stored or used on third-party servers. We recommend that you review the privacy statement of each third-party site linked from Our Site to determine their use of your personal information.

Children

To use the Site you agree that you must be of minimum age (described in this paragraph below) or older.

In case you are resident of the European Union, the minimum age for these purposes shall be 16, however if local laws require that you must be older in order for Shiksha.com to lawfully provide the services on the Site to you then that older age shall apply as the applicable minimum age.

In all jurisdictions outside the European Union, if you are under the age of 18 or the age of majority in your jurisdiction, you must use Shiksha.com under the supervision of your parent, legal guardian or responsible adult.

Information Sharing

We restrict access to your Personal Information to employees who we believe reasonably need to know/or that information in order to fulfil their jobs to provide, operate, develop, or improve our products or services.

Shiksha.com does not rent, sell, or share personal information about you with other people or non-affiliated companies except:

  1. to provide products or services you've requested,
  2. when we have your permission,
  3. or under the following circumstances:
  • We provide the information to trusted partners who work on behalf of or with \\u2018IEIL\\u2019 under confidentiality agreements. These companies may use your personal information to help Shiksha.com communicate with you about offers from \\u2018Shiksha.com and our marketing partners. However, these companies do not have any independent right to share this information.
  • We respond to subpoenas, court orders, or legal process, or to establish or exercise our legal rights or defend against legal claims;
  • We believe it is necessary to share information in order to investigate, prevent, or take action regarding illegal activities, suspected fraud, situations involving potential threats to the physical safety of any person, violations of \\u2018Shiksha.com terms of use, or as otherwise required by law.
  • We transfer information about you if \\u2018Shiksha.com is acquired by or merged with another company.
  • We share your personal information with colleges or educational institutions, etc. based on your browsing behaviour or expression of interest regarding courses, specializations and institutions or in case of applications for admission to such colleges or educational institutions, who may further contact you and process your information for the said purposes.

Shiksha.com displays targeted advertisements based on personal information. Advertisers (including ad serving for example, women aged 18-24 from a particular geographic area.

  • Shiksha.com does not provide any personal information to the advertiser when you interact with or view a targeted ad. However, by interacting with an ad you are consenting to the possibility that the advertiser will make the assumption that you meet the targeting criteria used to display the ad.
  • Shiksha.com advertisers include financial service providers (such as banks, insurance agents, stock brokers and mortgage lenders) and non-financial companies (such as stores, airlines, and software companies).
  • We may share personal information (such as name, mobile number, and email address) with carefully selected education colleges/ educational institutions based on your expression of interest regarding courses, specializations and institutions so that they may consider further marketing campaigns or recruitment measures. Some of these educational institutions may have access to your personal information to verify the status of your application or enrolment. We will inform the education institutions that they are not allowed to use your personal information for any reason other than mentioned above. Users should note however that, how these educational institutions use this data is not governed by our privacy policy. Therefore, we cannot be held responsible for how the data is utilized once it is shared with them. Educational institutions have separate policy practices for which Shiksha.com has no responsibility or liability. For further information on how such institutions use your information, please visit the applicable privacy policy of that institution.
  • Shiksha.com works with vendors, partners, advertisers, and other service providers in different industries and categories of business. For more information regarding providers of products or services, please refer the section \\u201cThird party services\\u201d of this policy

Retention of personal information

Your personal information processed by Shiksha.com are kept in a form which permits your identification for no longer than is necessary for the purposes for which the personal information are processed in line with legal, regulatory, contractual or statutory obligations as applicable.

At the expiry of such periods, your personal information will be archived to comply with legal/contractual retention obligations or in accordance with applicable statutory limitation periods.

Personalisation of services

To the extent permitted by law, Shiksha.com may record and monitor your communications with us to ensure compliance with our legal and regulatory obligations and our internal policies. This may include the recording of telephone conversations.

Personalisation of services

You may have the right to invoke certain rights (as per applicable laws and regulations such as GDPR) in relation to your personal information being processed by the Platform.

The Platform may be allowed by law, in particular in case of excessive or manifestly unfounded request, to charge a fee for fulfilling your request, subject to applicable conditions.

You are legally entitled to request details of the personal information we may be holding about you. The Company provides you the ability to keep your personal information accurate and up-to-date. If at any time you would like to rectify, erase or restrict the processing of your personal information, or you would like to obtain confirmation whether or not your personal information is processed by it, access your personal information, exercise your right to data portability or withdraw your consent to processing, please contact us.

You are entitled to lodge a complaint with a competent Data Protection Authority where existing, concerning the Platform\\u2019s compliance with the applicable data protection laws and regulation.

Confidentiality and Security

The security and confidentiality of your Personal Data is important to us and Shiksha.com has invested significant resources to protect the safekeeping and confidentiality of your personal data. When using external service providers acting as processors, we require that they adhere to the same standards as Shiksha.com. Regardless of where your personal information is transferred or stored, we take all steps reasonably necessary to ensure that personal data is kept secure.

We have physical, electronic, and procedural safeguards that comply with the laws prevalent in India to protect personal information about you. We seek to ensure compliance with the requirements of the Information Technology Act, 2000 and Rules made there under to ensure the protection and preservation of your privacy.

Social media

Shiksha.com operates channels, pages and accounts on some social media sites to inform, assist and engage with you. Shiksha.com monitors and records comments and posts made on these channels about Shiksha.com in order to improve its products and services. Please note that you must not communicate with Shiksha.com through such social media sites the following information:

  • Sensitive personal data including (i) special categories of personal data meaning any information revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, or trade union membership, and the processing of genetic data, biometric data for the purpose of uniquely identifying a natural person, data concerning health or data concerning a natural person's sex life or sexual orientation and (ii) other sensitive personal data such as criminal convictions and offences and national identification number ;
  • Excessive, inappropriate, offensive or insulting information towards individuals.

Shiksha.com is not responsible for any information posted on those sites other than the information posted by its employees on its behalf. Shiksha.com is only responsible for its own use of the personal data received through such sites

Changes to this Privacy Policy

Shiksha.com reserves the right to update, change or modify this policy at any time. The policy shall come to effect from the date of such update, change or modification.

Disclaimer

Shiksha.com shall not be liable for any loss or damage sustained by reason of any disclosure (inadvertent or otherwise) of any information concerning the user's account and / or information relating to or regarding online transactions using credit cards / debit cards and / or their verification process and particulars nor for any error, omission or inaccuracy with respect to any information so disclosed and used whether or not in pursuance of a legal process or otherwise. Shiksha.com does not store any Credit / Debit card details.

Any other personal information shared by you which is not asked by Shiksha.com during registration, either mandatorily or optionally; accounts to wilful and intentional furnishing; and Shiksha.com will not be liable for breach of such information.

Shiksha is neither affiliated with nor endorsed by any government organization. The Shiksha app doesn\\u2019t represent any government entity. The Shiksha team sources information about colleges & exams from their respective official websites. We try to put our best effort to make sure that the information is genuine and updated regularly.

If you have any questions regarding this privacy policy or the protection of your personal data, please contact IEIL\\u2019s Data Protection Officer at the following:

Data Protection Officer/ Grievance OfficerInfo Edge (India) LimitedNoida GF-12A, Meghdoot, Nehru Place, New DelhiEmail: privacy@infoedge.com

\", \"id\": \"d201a5c0-9f58-4a7c-a1f1-d053f86b681b\"}]"}}, {"model": "home.homepage", "pk": 3, "fields": {"image": 4, "hero_text": "We help craft the finance needs", "hero_cta": "Learn More", "hero_cta_link": 4, "body": "[]", "promo_image": 4, "promo_title": "Detailed Statistics of your Company", "promo_text": "

Praesent imperdiet, tellus et euismod euismod, risus lorem euismod erat, at finibus neque odio quis metus. Donec vulputate arcu quam. Morbi quis tincidunt ligula. Sed rutrum tincidunt pretium. Mauris auctor, purus a pulvinar fermentum, odio dui vehicula lorem, nec pharetra justo risus quis mi. Ut ac ex sagittis, viverra nisl vel, rhoncus odio.

", "featured_section_1_title": "", "featured_section_1": null, "featured_section_2_title": "", "featured_section_2": null, "featured_section_3_title": "", "featured_section_3": null}}, {"model": "home.formfield", "pk": 1, "fields": {"sort_order": 0, "clean_name": "name", "label": "Name", "field_type": "singleline", "required": true, "choices": "", "default_value": "", "help_text": "", "page": 7}}, {"model": "home.formpage", "pk": 7, "fields": {"to_address": "", "from_address": "info@dravate.com", "subject": "Thank you for Writing Us!", "image": 2, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

I am Contact Form

\", \"id\": \"fa17873b-466a-4aa4-8327-63f26de1b796\"}]", "thank_you_text": "

Thank you

"}}, {"model": "home.sitesettings", "pk": 1, "fields": {"site": 2, "title_suffix": "Mutual Life"}}, {"model": "home.unblocklifelogo", "pk": 1, "fields": {"name": "Unblocklife Logo", "logo": 3}}, {"model": "courses.coursesindexpage", "pk": 4, "fields": {"summary": "I am Finance Courses", "image": 4}}, {"model": "courses.coursespagetag", "pk": 7, "fields": {"tag": 2, "content_object": 5}}, {"model": "courses.coursespage", "pk": 5, "fields": {"author": "Sopan Shewale", "date": "2024-07-17", "summary": "Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.", "start_date": "2024-07-17", "end_date": "2024-07-18", "feed_image": 4, "body": "[{\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 1: Introduction and Balance Sheet\", \"size\": \"h2\"}, \"id\": \"d3eb94de-72c9-4203-aa3f-f406de8d8715\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"184be5aa-b60e-4043-8173-62ab39e25536\"}, {\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 2: Accrual Accounting and the Income Statement\", \"size\": \"h2\"}, \"id\": \"ef43ad62-114e-4d3b-95ec-7e9c81eef170\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"49ae9496-5f62-4577-8264-b5d78f36bf53\"}, {\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 3: Cash Flows\", \"size\": \"h2\"}, \"id\": \"7bd637c3-badc-42e4-ab34-f2acb5ffc9d1\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"5767cbd5-8498-4348-8d06-749909227b51\"}, {\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 4: Ratio Analysis and Final Exam\", \"size\": \"h2\"}, \"id\": \"2fa2155d-2265-4fe6-833e-a4d2ed522ffd\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"09d0b715-208a-42c2-8fb8-efcd4297bfe7\"}]", "trainers": "[{\"type\": \"profile\", \"value\": {\"image\": 5, \"firstname\": \"Sopan\", \"lastname\": \"Shewale\", \"title\": \"Technical Evangelist\", \"linkedin\": \"https://www.linkedin.com/in/sopanshewale/\", \"short_profile\": \"Full Stack Developer with 25 years of Experience\"}, \"id\": \"4a480283-3bab-4e0c-9606-13d9bb2b0920\"}]"}}, {"model": "wagtailforms.formsubmission", "pk": 1, "fields": {"form_data": {"name": "SOpan"}, "page": 7, "submit_time": "2024-07-17T09:41:40.577Z"}}, {"model": "wagtailforms.formsubmission", "pk": 2, "fields": {"form_data": {"name": "SOpan"}, "page": 7, "submit_time": "2024-07-17T09:42:04.411Z"}}, {"model": "wagtailforms.formsubmission", "pk": 3, "fields": {"form_data": {"name": "SOpan"}, "page": 7, "submit_time": "2024-07-17T09:42:22.236Z"}}, {"model": "wagtailforms.formsubmission", "pk": 4, "fields": {"form_data": {"name": "SOpan"}, "page": 7, "submit_time": "2024-07-17T09:42:42.222Z"}}, {"model": "wagtailforms.formsubmission", "pk": 5, "fields": {"form_data": {"name": "SOpan"}, "page": 7, "submit_time": "2024-07-17T09:43:11.823Z"}}, {"model": "wagtailforms.formsubmission", "pk": 6, "fields": {"form_data": {"name": "SOpan"}, "page": 7, "submit_time": "2024-07-17T09:43:22.938Z"}}, {"model": "wagtailforms.formsubmission", "pk": 7, "fields": {"form_data": {"name": "Rajendra Sopan Jori"}, "page": 7, "submit_time": "2024-07-17T09:44:05.513Z"}}, {"model": "wagtailredirects.redirect", "pk": 1, "fields": {"old_path": "/finance-courses", "site": 2, "is_permanent": true, "redirect_page": 4, "redirect_page_route_path": "", "redirect_link": "", "automatically_created": true, "created_at": "2024-07-17T08:07:05.152Z"}}, {"model": "wagtailimages.image", "pk": 1, "fields": {"collection": 1, "title": "unblock_logo", "file": "original_images/unblock_logo.png", "width": 512, "height": 512, "created_at": "2024-07-16T10:36:16.306Z", "uploaded_by_user": 1, "focal_point_x": null, "focal_point_y": null, "focal_point_width": null, "focal_point_height": null, "file_size": 25837, "file_hash": "7cea6d60cbdeda300885c7f94a3beac7d07b9399"}}, {"model": "wagtailimages.image", "pk": 2, "fields": {"collection": 1, "title": "unblock_logo", "file": "original_images/unblock_logo_gUJrKCF.png", "width": 397, "height": 299, "created_at": "2024-07-16T10:50:53.906Z", "uploaded_by_user": 1, "focal_point_x": null, "focal_point_y": null, "focal_point_width": null, "focal_point_height": null, "file_size": 24215, "file_hash": "801f2b3d4b266f720ae8ffedd8d392445c437906"}}, {"model": "wagtailimages.image", "pk": 3, "fields": {"collection": 1, "title": "unblock_logo", "file": "original_images/unblock_logo_Ij6Gvyj.png", "width": 172, "height": 163, "created_at": "2024-07-16T11:22:29.850Z", "uploaded_by_user": 1, "focal_point_x": null, "focal_point_y": null, "focal_point_width": null, "focal_point_height": null, "file_size": 16154, "file_hash": "cf5bbeab42158e8dbbe2c7e335b54019eddb6293"}}, {"model": "wagtailimages.image", "pk": 4, "fields": {"collection": 1, "title": "cheerful-speaker-talking-looking-distance", "file": "original_images/unblocklife_hero.jpg", "width": 1000, "height": 667, "created_at": "2024-07-16T12:34:19.777Z", "uploaded_by_user": 1, "focal_point_x": null, "focal_point_y": null, "focal_point_width": null, "focal_point_height": null, "file_size": 456549, "file_hash": "5ac18611dc995988cc04033011ed98d04e3319e0"}}, {"model": "wagtailimages.image", "pk": 5, "fields": {"collection": 1, "title": "sopan_shewale", "file": "original_images/sopan_shewale.jpeg", "width": 512, "height": 512, "created_at": "2024-07-17T08:34:19.761Z", "uploaded_by_user": 1, "focal_point_x": null, "focal_point_y": null, "focal_point_width": null, "focal_point_height": null, "file_size": 22596, "file_hash": "7d9dcfee95c35c934878eaa367eae51d538ebe9e"}}, {"model": "wagtailimages.rendition", "pk": 1, "fields": {"filter_spec": "max-165x165", "file": "images/unblock_logo.max-165x165.png", "width": 165, "height": 165, "focal_point_key": "", "image": 1}}, {"model": "wagtailimages.rendition", "pk": 2, "fields": {"filter_spec": "fill-125x125", "file": "images/unblock_logo.2e16d0ba.fill-125x125.png", "width": 125, "height": 125, "focal_point_key": "2e16d0ba", "image": 1}}, {"model": "wagtailimages.rendition", "pk": 3, "fields": {"filter_spec": "fill-256x256", "file": "images/unblock_logo.2e16d0ba.fill-256x256.png", "width": 256, "height": 256, "focal_point_key": "2e16d0ba", "image": 1}}, {"model": "wagtailimages.rendition", "pk": 4, "fields": {"filter_spec": "fill-512x512", "file": "images/unblock_logo.2e16d0ba.fill-512x512.png", "width": 512, "height": 512, "focal_point_key": "2e16d0ba", "image": 1}}, {"model": "wagtailimages.rendition", "pk": 5, "fields": {"filter_spec": "fill-128x128", "file": "images/unblock_logo.2e16d0ba.fill-128x128.png", "width": 128, "height": 128, "focal_point_key": "2e16d0ba", "image": 1}}, {"model": "wagtailimages.rendition", "pk": 6, "fields": {"filter_spec": "max-165x165", "file": "images/unblock_logo_gUJrKCF.max-165x165.png", "width": 165, "height": 124, "focal_point_key": "", "image": 2}}, {"model": "wagtailimages.rendition", "pk": 7, "fields": {"filter_spec": "fill-128x128", "file": "images/unblock_logo_gUJrKCF.2e16d0ba.fill-128x128.png", "width": 128, "height": 128, "focal_point_key": "2e16d0ba", "image": 2}}, {"model": "wagtailimages.rendition", "pk": 8, "fields": {"filter_spec": "fill-256x256", "file": "images/unblock_logo_gUJrKCF.2e16d0ba.fill-256x256.png", "width": 256, "height": 256, "focal_point_key": "2e16d0ba", "image": 2}}, {"model": "wagtailimages.rendition", "pk": 9, "fields": {"filter_spec": "max-165x165", "file": "images/unblock_logo_Ij6Gvyj.max-165x165.png", "width": 165, "height": 156, "focal_point_key": "", "image": 3}}, {"model": "wagtailimages.rendition", "pk": 10, "fields": {"filter_spec": "fill-256x256", "file": "images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-256x256.png", "width": 164, "height": 163, "focal_point_key": "2e16d0ba", "image": 3}}, {"model": "wagtailimages.rendition", "pk": 11, "fields": {"filter_spec": "max-165x165", "file": "images/unblocklife_hero.max-165x165.jpg", "width": 165, "height": 110, "focal_point_key": "", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 12, "fields": {"filter_spec": "format-jpeg|fill-1920x900", "file": "images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x900.jpg", "width": 1000, "height": 469, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 13, "fields": {"filter_spec": "format-jpeg|fill-800x650", "file": "images/unblocklife_hero.2e16d0ba.format-jpeg.fill-800x650.jpg", "width": 800, "height": 650, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 14, "fields": {"filter_spec": "format-avif|fill-1920x900", "file": "images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x900.avif", "width": 1000, "height": 469, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 15, "fields": {"filter_spec": "format-avif|fill-800x650", "file": "images/unblocklife_hero.2e16d0ba.format-avif.fill-800x650.avif", "width": 800, "height": 650, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 16, "fields": {"filter_spec": "format-webp|fill-1920x900", "file": "images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x900.webp", "width": 1000, "height": 469, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 17, "fields": {"filter_spec": "format-webp|fill-800x650", "file": "images/unblocklife_hero.2e16d0ba.format-webp.fill-800x650.webp", "width": 800, "height": 650, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 18, "fields": {"filter_spec": "format-jpeg|fill-590x413-c100", "file": "images/unblocklife_hero.2e16d0ba.format-jpeg.fill-590x413-c100.jpg", "width": 590, "height": 413, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 19, "fields": {"filter_spec": "format-webp|fill-590x413-c100", "file": "images/unblocklife_hero.2e16d0ba.format-webp.fill-590x413-c100.webp", "width": 590, "height": 413, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 20, "fields": {"filter_spec": "format-avif|fill-590x413-c100", "file": "images/unblocklife_hero.2e16d0ba.format-avif.fill-590x413-c100.avif", "width": 590, "height": 413, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 21, "fields": {"filter_spec": "fill-128x128", "file": "images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-128x128.png", "width": 128, "height": 128, "focal_point_key": "2e16d0ba", "image": 3}}, {"model": "wagtailimages.rendition", "pk": 22, "fields": {"filter_spec": "max-165x165", "file": "images/sopan_shewale.max-165x165.jpg", "width": 165, "height": 165, "focal_point_key": "", "image": 5}}, {"model": "wagtailimages.rendition", "pk": 23, "fields": {"filter_spec": "format-jpeg|fill-1920x600", "file": "images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x600.jpg", "width": 1000, "height": 313, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 24, "fields": {"filter_spec": "format-avif|fill-1920x600", "file": "images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x600.avif", "width": 1000, "height": 313, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 25, "fields": {"filter_spec": "format-webp|fill-1920x600", "file": "images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x600.webp", "width": 1000, "height": 313, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailimages.rendition", "pk": 26, "fields": {"filter_spec": "format-jpeg|width-150", "file": "images/sopan_shewale.format-jpeg.width-150.jpg", "width": 150, "height": 150, "focal_point_key": "", "image": 5}}, {"model": "wagtailimages.rendition", "pk": 27, "fields": {"filter_spec": "format-webp|width-150", "file": "images/sopan_shewale.format-webp.width-150.webp", "width": 150, "height": 150, "focal_point_key": "", "image": 5}}, {"model": "wagtailimages.rendition", "pk": 28, "fields": {"filter_spec": "format-avif|width-150", "file": "images/sopan_shewale.format-avif.width-150.avif", "width": 150, "height": 150, "focal_point_key": "", "image": 5}}, {"model": "wagtailimages.rendition", "pk": 29, "fields": {"filter_spec": "fill-840x240", "file": "images/unblocklife_hero.2e16d0ba.fill-840x240.jpg", "width": 840, "height": 240, "focal_point_key": "2e16d0ba", "image": 4}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 1, "fields": {"autocomplete": "unblock_logo", "title": "unblock_logo", "body": ""}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 2, "fields": {"autocomplete": "unblock_logo", "title": "unblock_logo", "body": ""}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 3, "fields": {"autocomplete": "unblock_logo", "title": "unblock_logo", "body": ""}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 4, "fields": {"autocomplete": "cheerful-speaker-talking-looking-distance", "title": "cheerful-speaker-talking-looking-distance", "body": ""}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 5, "fields": {"autocomplete": "We help Craft Dreams of Needy Students!", "title": "We help Craft Dreams of Needy Students!", "body": ""}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 6, "fields": {"autocomplete": "Finance Courses", "title": "Finance Courses", "body": ""}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 7, "fields": {"autocomplete": "sopan_shewale sopan", "title": "sopan_shewale", "body": "sopan"}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 8, "fields": {"autocomplete": "Introduction to Financial Accounting", "title": "Introduction to Financial Accounting", "body": "Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization. Sopan Shewale Week 1: Introduction and Balance Sheet, H2, Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization., Week 2: Accrual Accounting and the Income Statement, H2, Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization., Week 3: Cash Flows, H2, Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization., Week 4: Ratio Analysis and Final Exam, H2, Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization. Sopan, Shewale, Technical Evangelist, https://www.linkedin.com/in/sopanshewale/, Full Stack Developer with 25 years of Experience"}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 9, "fields": {"autocomplete": "About", "title": "About", "body": ""}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 10, "fields": {"autocomplete": "Contact", "title": "Contact", "body": ""}}, {"model": "wagtailsearch.sqliteftsindexentry", "pk": 11, "fields": {"autocomplete": "Privacy Policy", "title": "Privacy Policy", "body": ""}}, {"model": "wagtailsearch.indexentry", "pk": 1, "fields": {"content_type": 2, "object_id": "1", "title_norm": 1.6041666666666667, "autocomplete": "unblock_logo", "title": "unblock_logo", "body": ""}}, {"model": "wagtailsearch.indexentry", "pk": 2, "fields": {"content_type": 2, "object_id": "2", "title_norm": 1.6041666666666667, "autocomplete": "unblock_logo", "title": "unblock_logo", "body": ""}}, {"model": "wagtailsearch.indexentry", "pk": 3, "fields": {"content_type": 2, "object_id": "3", "title_norm": 1.6041666666666667, "autocomplete": "unblock_logo", "title": "unblock_logo", "body": ""}}, {"model": "wagtailsearch.indexentry", "pk": 4, "fields": {"content_type": 2, "object_id": "4", "title_norm": 0.4695121951219512, "autocomplete": "cheerful-speaker-talking-looking-distance", "title": "cheerful-speaker-talking-looking-distance", "body": ""}}, {"model": "wagtailsearch.indexentry", "pk": 5, "fields": {"content_type": 4, "object_id": "3", "title_norm": 4.05, "autocomplete": "We help Craft Dreams of Needy Students!", "title": "We help Craft Dreams of Needy Students!", "body": ""}}, {"model": "wagtailsearch.indexentry", "pk": 6, "fields": {"content_type": 56, "object_id": "4", "title_norm": 1.0666666666666667, "autocomplete": "Finance Courses", "title": "Finance Courses", "body": ""}}, {"model": "wagtailsearch.indexentry", "pk": 7, "fields": {"content_type": 2, "object_id": "5", "title_norm": 1.1978021978021978, "autocomplete": "sopan_shewale sopan", "title": "sopan_shewale", "body": "sopan"}}, {"model": "wagtailsearch.indexentry", "pk": 8, "fields": {"content_type": 55, "object_id": "5", "title_norm": 4.666666666666667, "autocomplete": "Introduction to Financial Accounting", "title": "Introduction to Financial Accounting", "body": "Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization. Sopan Shewale Week 1: Introduction and Balance Sheet, H2, Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization., Week 2: Accrual Accounting and the Income Statement, H2, Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization., Week 3: Cash Flows, H2, Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization., Week 4: Ratio Analysis and Final Exam, H2, Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization. Sopan, Shewale, Technical Evangelist, https://www.linkedin.com/in/sopanshewale/, Full Stack Developer with 25 years of Experience"}}, {"model": "wagtailsearch.indexentry", "pk": 9, "fields": {"content_type": 29, "object_id": "6", "title_norm": 2.6, "autocomplete": "About", "title": "About", "body": ""}}, {"model": "wagtailsearch.indexentry", "pk": 10, "fields": {"content_type": 33, "object_id": "7", "title_norm": 3.1399999999999997, "autocomplete": "Contact", "title": "Contact", "body": ""}}, {"model": "wagtailsearch.indexentry", "pk": 11, "fields": {"content_type": 29, "object_id": "8", "title_norm": 1.1233766233766234, "autocomplete": "Privacy Policy", "title": "Privacy Policy", "body": ""}}, {"model": "wagtailcore.locale", "pk": 1, "fields": {"language_code": "en"}}, {"model": "wagtailcore.site", "pk": 2, "fields": {"hostname": "localhost", "port": 80, "site_name": "", "root_page": 3, "is_default_site": true}}, {"model": "wagtailcore.modellogentry", "pk": 1, "fields": {"content_type": 53, "label": "Unblocklife Logo", "action": "wagtail.create", "data": {}, "timestamp": "2024-07-16T10:36:19.168Z", "uuid": "6ada13ed-4a47-4495-a79e-b4f9213f8efa", "user": 1, "revision": null, "content_changed": true, "deleted": false, "object_id": "1"}}, {"model": "wagtailcore.modellogentry", "pk": 2, "fields": {"content_type": 53, "label": "Unblocklife Logo", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-16T10:50:55.520Z", "uuid": "18e3dd69-e412-4a61-9ac2-6166056f36c8", "user": 1, "revision": null, "content_changed": true, "deleted": false, "object_id": "1"}}, {"model": "wagtailcore.modellogentry", "pk": 3, "fields": {"content_type": 53, "label": "Unblocklife Logo", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-16T11:22:31.326Z", "uuid": "b9f03991-1864-4b88-8ec1-b50afa363553", "user": 1, "revision": null, "content_changed": true, "deleted": false, "object_id": "1"}}, {"model": "wagtailcore.modellogentry", "pk": 4, "fields": {"content_type": 30, "label": "site settings for localhost [default]", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T14:10:08.253Z", "uuid": "05fb0f2d-4280-4826-8f8a-759bb8c0d88b", "user": 1, "revision": null, "content_changed": true, "deleted": false, "object_id": "1"}}, {"model": "wagtailcore.collection", "pk": 1, "fields": {"path": "0001", "depth": 1, "numchild": 0, "name": "Root"}}, {"model": "wagtailcore.groupcollectionpermission", "pk": 1, "fields": {"group": 2, "collection": 1, "permission": 1}}, {"model": "wagtailcore.groupcollectionpermission", "pk": 2, "fields": {"group": 1, "collection": 1, "permission": 1}}, {"model": "wagtailcore.groupcollectionpermission", "pk": 3, "fields": {"group": 2, "collection": 1, "permission": 2}}, {"model": "wagtailcore.groupcollectionpermission", "pk": 4, "fields": {"group": 1, "collection": 1, "permission": 2}}, {"model": "wagtailcore.groupcollectionpermission", "pk": 5, "fields": {"group": 2, "collection": 1, "permission": 102}}, {"model": "wagtailcore.groupcollectionpermission", "pk": 6, "fields": {"group": 1, "collection": 1, "permission": 102}}, {"model": "wagtailcore.groupcollectionpermission", "pk": 7, "fields": {"group": 2, "collection": 1, "permission": 103}}, {"model": "wagtailcore.groupcollectionpermission", "pk": 8, "fields": {"group": 1, "collection": 1, "permission": 103}}, {"model": "wagtailcore.groupcollectionpermission", "pk": 9, "fields": {"group": 2, "collection": 1, "permission": 105}}, {"model": "wagtailcore.groupcollectionpermission", "pk": 10, "fields": {"group": 1, "collection": 1, "permission": 105}}, {"model": "wagtailcore.referenceindex", "pk": 1, "fields": {"content_type": 2, "base_content_type": 2, "object_id": "1", "to_content_type": 9, "to_object_id": "1", "model_path": "collection", "content_path": "collection", "content_path_hash": "b40b1263-e929-57f2-a7f8-9dbce56b887b"}}, {"model": "wagtailcore.referenceindex", "pk": 3, "fields": {"content_type": 2, "base_content_type": 2, "object_id": "2", "to_content_type": 9, "to_object_id": "1", "model_path": "collection", "content_path": "collection", "content_path_hash": "b40b1263-e929-57f2-a7f8-9dbce56b887b"}}, {"model": "wagtailcore.referenceindex", "pk": 5, "fields": {"content_type": 2, "base_content_type": 2, "object_id": "3", "to_content_type": 9, "to_object_id": "1", "model_path": "collection", "content_path": "collection", "content_path_hash": "b40b1263-e929-57f2-a7f8-9dbce56b887b"}}, {"model": "wagtailcore.referenceindex", "pk": 6, "fields": {"content_type": 53, "base_content_type": 53, "object_id": "1", "to_content_type": 2, "to_object_id": "3", "model_path": "logo", "content_path": "logo", "content_path_hash": "ba402699-341b-59f7-bfe3-4d8ea0405a39"}}, {"model": "wagtailcore.referenceindex", "pk": 7, "fields": {"content_type": 2, "base_content_type": 2, "object_id": "4", "to_content_type": 9, "to_object_id": "1", "model_path": "collection", "content_path": "collection", "content_path_hash": "b40b1263-e929-57f2-a7f8-9dbce56b887b"}}, {"model": "wagtailcore.referenceindex", "pk": 8, "fields": {"content_type": 4, "base_content_type": 1, "object_id": "3", "to_content_type": 2, "to_object_id": "4", "model_path": "image", "content_path": "image", "content_path_hash": "3cb1a537-a728-548b-b207-8423b6010580"}}, {"model": "wagtailcore.referenceindex", "pk": 10, "fields": {"content_type": 4, "base_content_type": 1, "object_id": "3", "to_content_type": 2, "to_object_id": "4", "model_path": "promo_image", "content_path": "promo_image", "content_path_hash": "abfbb103-e548-5a1d-aeda-369aa6228e95"}}, {"model": "wagtailcore.referenceindex", "pk": 11, "fields": {"content_type": 56, "base_content_type": 1, "object_id": "4", "to_content_type": 2, "to_object_id": "4", "model_path": "image", "content_path": "image", "content_path_hash": "3cb1a537-a728-548b-b207-8423b6010580"}}, {"model": "wagtailcore.referenceindex", "pk": 12, "fields": {"content_type": 2, "base_content_type": 2, "object_id": "5", "to_content_type": 9, "to_object_id": "1", "model_path": "collection", "content_path": "collection", "content_path_hash": "b40b1263-e929-57f2-a7f8-9dbce56b887b"}}, {"model": "wagtailcore.referenceindex", "pk": 14, "fields": {"content_type": 55, "base_content_type": 1, "object_id": "5", "to_content_type": 2, "to_object_id": "5", "model_path": "trainers.profile.image", "content_path": "trainers.4a480283-3bab-4e0c-9606-13d9bb2b0920.image", "content_path_hash": "7ed0c6b4-8c00-5ca0-b73a-31d250ea8da0"}}, {"model": "wagtailcore.referenceindex", "pk": 18, "fields": {"content_type": 29, "base_content_type": 1, "object_id": "6", "to_content_type": 2, "to_object_id": "4", "model_path": "image", "content_path": "image", "content_path_hash": "3cb1a537-a728-548b-b207-8423b6010580"}}, {"model": "wagtailcore.referenceindex", "pk": 19, "fields": {"content_type": 4, "base_content_type": 1, "object_id": "3", "to_content_type": 1, "to_object_id": "4", "model_path": "hero_cta_link", "content_path": "hero_cta_link", "content_path_hash": "4dd68ee5-2133-514e-ab18-c39ada0704d5"}}, {"model": "wagtailcore.referenceindex", "pk": 20, "fields": {"content_type": 33, "base_content_type": 1, "object_id": "7", "to_content_type": 2, "to_object_id": "2", "model_path": "image", "content_path": "image", "content_path_hash": "3cb1a537-a728-548b-b207-8423b6010580"}}, {"model": "wagtailcore.referenceindex", "pk": 21, "fields": {"content_type": 29, "base_content_type": 1, "object_id": "8", "to_content_type": 2, "to_object_id": "4", "model_path": "image", "content_path": "image", "content_path_hash": "3cb1a537-a728-548b-b207-8423b6010580"}}, {"model": "wagtailcore.referenceindex", "pk": 22, "fields": {"content_type": 55, "base_content_type": 1, "object_id": "5", "to_content_type": 45, "to_object_id": "2", "model_path": "tagged_items.item.tag", "content_path": "tagged_items.None.tag", "content_path_hash": "ba6661ca-69a8-5ae1-a6aa-fb67dbf805eb"}}, {"model": "wagtailcore.referenceindex", "pk": 23, "fields": {"content_type": 55, "base_content_type": 1, "object_id": "5", "to_content_type": 2, "to_object_id": "4", "model_path": "feed_image", "content_path": "feed_image", "content_path_hash": "0dc5177c-8fc4-5e50-b0af-851e650f647f"}}, {"model": "wagtailcore.page", "pk": 1, "fields": {"path": "0001", "depth": 1, "numchild": 1, "translation_key": "ab6ce1a6-cdc7-459f-9013-42f621fdcf27", "locale": 1, "latest_revision": null, "live": true, "has_unpublished_changes": false, "first_published_at": null, "last_published_at": null, "live_revision": null, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Root", "draft_title": "Root", "slug": "root", "content_type": 1, "url_path": "/", "owner": null, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": null, "alias_of": null}}, {"model": "wagtailcore.page", "pk": 3, "fields": {"path": "00010001", "depth": 2, "numchild": 4, "translation_key": "ab3bf0a5-0dca-42b3-89be-b50129368ce0", "locale": 1, "latest_revision": 9, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-16T12:34:53.882Z", "last_published_at": "2024-07-17T09:08:53.809Z", "live_revision": 9, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "We help Craft Dreams of Needy Students!", "draft_title": "We help Craft Dreams of Needy Students!", "slug": "home", "content_type": 4, "url_path": "/home/", "owner": null, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T09:08:53.791Z", "alias_of": null}}, {"model": "wagtailcore.page", "pk": 4, "fields": {"path": "000100010001", "depth": 3, "numchild": 1, "translation_key": "afd02afb-7aad-496d-9556-a53bd8221d3f", "locale": 1, "latest_revision": 3, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T08:06:33.038Z", "last_published_at": "2024-07-17T08:07:05.133Z", "live_revision": 3, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Finance Courses", "draft_title": "Finance Courses", "slug": "courses", "content_type": 56, "url_path": "/home/courses/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T08:07:05.119Z", "alias_of": null}}, {"model": "wagtailcore.page", "pk": 5, "fields": {"path": "0001000100010001", "depth": 4, "numchild": 0, "translation_key": "763f11db-21e2-4aa0-9607-8a171dcebd39", "locale": 1, "latest_revision": 18, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T08:34:54.976Z", "last_published_at": "2024-07-18T10:03:27.084Z", "live_revision": 18, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Introduction to Financial Accounting", "draft_title": "Introduction to Financial Accounting", "slug": "one", "content_type": 55, "url_path": "/home/courses/one/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-18T10:03:27.061Z", "alias_of": null}}, {"model": "wagtailcore.page", "pk": 6, "fields": {"path": "000100010002", "depth": 3, "numchild": 0, "translation_key": "94b04597-580b-4f45-b996-7b4c2536456f", "locale": 1, "latest_revision": 6, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T08:36:51.842Z", "last_published_at": "2024-07-17T08:36:51.842Z", "live_revision": 6, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "About", "draft_title": "About", "slug": "about", "content_type": 29, "url_path": "/home/about/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T08:36:51.830Z", "alias_of": null}}, {"model": "wagtailcore.page", "pk": 7, "fields": {"path": "000100010003", "depth": 3, "numchild": 0, "translation_key": "16fb54b3-590e-47f2-99d6-a88c754a685c", "locale": 1, "latest_revision": 12, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T09:37:55.618Z", "last_published_at": "2024-07-17T09:38:35.955Z", "live_revision": 12, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Contact", "draft_title": "Contact", "slug": "contact", "content_type": 33, "url_path": "/home/contact/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T09:38:35.939Z", "alias_of": null}}, {"model": "wagtailcore.page", "pk": 8, "fields": {"path": "000100010004", "depth": 3, "numchild": 0, "translation_key": "ab00dc9a-c55e-486b-b92b-111dfbc20047", "locale": 1, "latest_revision": 19, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T10:15:53.380Z", "last_published_at": "2024-07-20T10:12:21.829Z", "live_revision": 19, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Privacy Policy", "draft_title": "Privacy Policy", "slug": "privacy-policy", "content_type": 29, "url_path": "/home/privacy-policy/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-20T10:12:21.804Z", "alias_of": null}}, {"model": "wagtailcore.revision", "pk": 1, "fields": {"content_type": 4, "base_content_type": 1, "object_id": "3", "created_at": "2024-07-16T12:34:53.866Z", "user": 1, "object_str": "Home", "content": {"pk": 3, "path": "00010001", "depth": 2, "numchild": 0, "translation_key": "ab3bf0a5-0dca-42b3-89be-b50129368ce0", "locale": 1, "latest_revision": null, "live": true, "has_unpublished_changes": false, "first_published_at": null, "last_published_at": null, "live_revision": null, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Home", "draft_title": "Home", "slug": "home", "content_type": 4, "url_path": "/home/", "owner": null, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": null, "alias_of": null, "image": 4, "hero_text": "We help craft the finance needs", "hero_cta": "Learn More", "hero_cta_link": 3, "body": "[]", "promo_image": 4, "promo_title": "We are here", "promo_text": "

We are writing promptional text

", "featured_section_1_title": "", "featured_section_1": null, "featured_section_2_title": "", "featured_section_2": null, "featured_section_3_title": "", "featured_section_3": null, "wagtail_admin_comments": []}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 2, "fields": {"content_type": 56, "base_content_type": 1, "object_id": "4", "created_at": "2024-07-17T08:06:33.024Z", "user": 1, "object_str": "Finance Courses", "content": {"pk": 4, "path": "000100010001", "depth": 3, "numchild": 0, "translation_key": "afd02afb-7aad-496d-9556-a53bd8221d3f", "locale": 1, "latest_revision": null, "live": true, "has_unpublished_changes": false, "first_published_at": null, "last_published_at": null, "live_revision": null, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Finance Courses", "draft_title": "Finance Courses", "slug": "finance-courses", "content_type": 56, "url_path": "/home/finance-courses/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": null, "alias_of": null, "summary": "I am Finance Courses", "image": 4, "wagtail_admin_comments": []}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 3, "fields": {"content_type": 56, "base_content_type": 1, "object_id": "4", "created_at": "2024-07-17T08:07:05.119Z", "user": 1, "object_str": "Finance Courses", "content": {"pk": 4, "path": "000100010001", "depth": 3, "numchild": 0, "translation_key": "afd02afb-7aad-496d-9556-a53bd8221d3f", "locale": 1, "latest_revision": 2, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T08:06:33.038Z", "last_published_at": "2024-07-17T08:06:33.038Z", "live_revision": 2, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Finance Courses", "draft_title": "Finance Courses", "slug": "courses", "content_type": 56, "url_path": "/home/finance-courses/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T08:06:33.024Z", "alias_of": null, "summary": "I am Finance Courses", "image": 4, "wagtail_admin_comments": []}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 4, "fields": {"content_type": 55, "base_content_type": 1, "object_id": "5", "created_at": "2024-07-17T08:34:51.346Z", "user": 1, "object_str": "One", "content": {"pk": 5, "path": "0001000100010001", "depth": 4, "numchild": 0, "translation_key": "763f11db-21e2-4aa0-9607-8a171dcebd39", "locale": 1, "latest_revision": null, "live": false, "has_unpublished_changes": false, "first_published_at": null, "last_published_at": null, "live_revision": null, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "One", "draft_title": "One", "slug": "one", "content_type": 55, "url_path": "/home/courses/one/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": null, "alias_of": null, "author": "Sopan Shewale", "date": "2024-07-17", "summary": "In this video we're going to explore how to add a new app to our Wagtail CMS website, how to install it, and how to add the custom page model. We'll be creating a brand new Wagtail Page from scratch.", "start_date": "2024-07-17", "end_date": "2024-07-18", "feed_image": null, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

Hello

\", \"id\": \"184be5aa-b60e-4043-8173-62ab39e25536\"}]", "trainers": "[{\"type\": \"profile\", \"value\": {\"image\": 5, \"firstname\": \"Sopan\", \"lastname\": \"Shewale\", \"title\": \"Technical Evangelist\", \"linkedin\": \"https://www.linkedin.com/in/sopanshewale/\", \"short_profile\": \"Full Stack Developer with 25 years of Experience\"}, \"id\": \"4a480283-3bab-4e0c-9606-13d9bb2b0920\"}]", "wagtail_admin_comments": [], "tagged_items": [{"pk": 1, "tag": 2, "content_object": 5}]}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 5, "fields": {"content_type": 55, "base_content_type": 1, "object_id": "5", "created_at": "2024-07-17T08:34:54.963Z", "user": 1, "object_str": "One", "content": {"pk": 5, "path": "0001000100010001", "depth": 4, "numchild": 0, "translation_key": "763f11db-21e2-4aa0-9607-8a171dcebd39", "locale": 1, "latest_revision": 4, "live": false, "has_unpublished_changes": true, "first_published_at": null, "last_published_at": null, "live_revision": null, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "One", "draft_title": "One", "slug": "one", "content_type": 55, "url_path": "/home/courses/one/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T08:34:51.346Z", "alias_of": null, "author": "Sopan Shewale", "date": "2024-07-17", "summary": "In this video we're going to explore how to add a new app to our Wagtail CMS website, how to install it, and how to add the custom page model. We'll be creating a brand new Wagtail Page from scratch.", "start_date": "2024-07-17", "end_date": "2024-07-18", "feed_image": null, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

Hello

\", \"id\": \"184be5aa-b60e-4043-8173-62ab39e25536\"}]", "trainers": "[{\"type\": \"profile\", \"value\": {\"image\": 5, \"firstname\": \"Sopan\", \"lastname\": \"Shewale\", \"title\": \"Technical Evangelist\", \"linkedin\": \"https://www.linkedin.com/in/sopanshewale/\", \"short_profile\": \"Full Stack Developer with 25 years of Experience\"}, \"id\": \"4a480283-3bab-4e0c-9606-13d9bb2b0920\"}]", "wagtail_admin_comments": [], "tagged_items": [{"pk": 2, "tag": 2, "content_object": 5}]}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 6, "fields": {"content_type": 29, "base_content_type": 1, "object_id": "6", "created_at": "2024-07-17T08:36:51.830Z", "user": 1, "object_str": "About", "content": {"pk": 6, "path": "00010002", "depth": 2, "numchild": 0, "translation_key": "94b04597-580b-4f45-b996-7b4c2536456f", "locale": 1, "latest_revision": null, "live": true, "has_unpublished_changes": false, "first_published_at": null, "last_published_at": null, "live_revision": null, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "About", "draft_title": "About", "slug": "about", "content_type": 29, "url_path": "/about/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": null, "alias_of": null, "introduction": "We are bunch of technical folks", "image": 4, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

bunch of techncial folks

\", \"id\": \"dbb667bd-e974-4433-9145-080fc9062296\"}]", "wagtail_admin_comments": []}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 7, "fields": {"content_type": 4, "base_content_type": 1, "object_id": "3", "created_at": "2024-07-17T08:50:43.167Z", "user": 1, "object_str": "We help Craft Dreams of Needy Students!", "content": {"pk": 3, "path": "00010001", "depth": 2, "numchild": 2, "translation_key": "ab3bf0a5-0dca-42b3-89be-b50129368ce0", "locale": 1, "latest_revision": 1, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-16T12:34:53.882Z", "last_published_at": "2024-07-16T12:34:53.882Z", "live_revision": 1, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "We help Craft Dreams of Needy Students!", "draft_title": "Home", "slug": "home", "content_type": 4, "url_path": "/home/", "owner": null, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-16T12:34:53.866Z", "alias_of": null, "image": 4, "hero_text": "We help craft the finance needs", "hero_cta": "Learn More", "hero_cta_link": 3, "body": "[]", "promo_image": 4, "promo_title": "We are here", "promo_text": "

We are writing promptional text

", "featured_section_1_title": "", "featured_section_1": null, "featured_section_2_title": "", "featured_section_2": null, "featured_section_3_title": "", "featured_section_3": null, "wagtail_admin_comments": []}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 8, "fields": {"content_type": 4, "base_content_type": 1, "object_id": "3", "created_at": "2024-07-17T08:53:49.548Z", "user": 1, "object_str": "We help Craft Dreams of Needy Students!", "content": {"pk": 3, "path": "00010001", "depth": 2, "numchild": 2, "translation_key": "ab3bf0a5-0dca-42b3-89be-b50129368ce0", "locale": 1, "latest_revision": 7, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-16T12:34:53.882Z", "last_published_at": "2024-07-17T08:50:43.190Z", "live_revision": 7, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "We help Craft Dreams of Needy Students!", "draft_title": "We help Craft Dreams of Needy Students!", "slug": "home", "content_type": 4, "url_path": "/home/", "owner": null, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T08:50:43.167Z", "alias_of": null, "image": 4, "hero_text": "We help craft the finance needs", "hero_cta": "Learn More", "hero_cta_link": 4, "body": "[]", "promo_image": 4, "promo_title": "We are here", "promo_text": "

We are writing promptional text

", "featured_section_1_title": "", "featured_section_1": null, "featured_section_2_title": "", "featured_section_2": null, "featured_section_3_title": "", "featured_section_3": null, "wagtail_admin_comments": []}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 9, "fields": {"content_type": 4, "base_content_type": 1, "object_id": "3", "created_at": "2024-07-17T09:08:53.791Z", "user": 1, "object_str": "We help Craft Dreams of Needy Students!", "content": {"pk": 3, "path": "00010001", "depth": 2, "numchild": 2, "translation_key": "ab3bf0a5-0dca-42b3-89be-b50129368ce0", "locale": 1, "latest_revision": 8, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-16T12:34:53.882Z", "last_published_at": "2024-07-17T08:53:49.567Z", "live_revision": 8, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "We help Craft Dreams of Needy Students!", "draft_title": "We help Craft Dreams of Needy Students!", "slug": "home", "content_type": 4, "url_path": "/home/", "owner": null, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T08:53:49.548Z", "alias_of": null, "image": 4, "hero_text": "We help craft the finance needs", "hero_cta": "Learn More", "hero_cta_link": 4, "body": "[]", "promo_image": 4, "promo_title": "Detailed Statistics of your Company", "promo_text": "

Praesent imperdiet, tellus et euismod euismod, risus lorem euismod erat, at finibus neque odio quis metus. Donec vulputate arcu quam. Morbi quis tincidunt ligula. Sed rutrum tincidunt pretium. Mauris auctor, purus a pulvinar fermentum, odio dui vehicula lorem, nec pharetra justo risus quis mi. Ut ac ex sagittis, viverra nisl vel, rhoncus odio.

", "featured_section_1_title": "", "featured_section_1": null, "featured_section_2_title": "", "featured_section_2": null, "featured_section_3_title": "", "featured_section_3": null, "wagtail_admin_comments": []}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 10, "fields": {"content_type": 33, "base_content_type": 1, "object_id": "7", "created_at": "2024-07-17T09:37:53.059Z", "user": 1, "object_str": "About", "content": {"pk": 7, "path": "00010002", "depth": 2, "numchild": 0, "translation_key": "16fb54b3-590e-47f2-99d6-a88c754a685c", "locale": 1, "latest_revision": null, "live": false, "has_unpublished_changes": false, "first_published_at": null, "last_published_at": null, "live_revision": null, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "About", "draft_title": "About", "slug": "about", "content_type": 33, "url_path": "/about/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": null, "alias_of": null, "to_address": "", "from_address": "info@dravate.com", "subject": "Thank you for Writing Us!", "image": 2, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

I am Contact Form

\", \"id\": \"fa17873b-466a-4aa4-8327-63f26de1b796\"}]", "thank_you_text": "

Thank you

", "wagtail_admin_comments": [], "form_fields": [{"pk": 1, "sort_order": 0, "clean_name": "name", "label": "Name", "field_type": "singleline", "required": true, "choices": "", "default_value": "", "help_text": "", "page": 7}]}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 11, "fields": {"content_type": 33, "base_content_type": 1, "object_id": "7", "created_at": "2024-07-17T09:37:55.608Z", "user": 1, "object_str": "About", "content": {"pk": 7, "path": "00010002", "depth": 2, "numchild": 0, "translation_key": "16fb54b3-590e-47f2-99d6-a88c754a685c", "locale": 1, "latest_revision": 10, "live": false, "has_unpublished_changes": true, "first_published_at": null, "last_published_at": null, "live_revision": null, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "About", "draft_title": "About", "slug": "about", "content_type": 33, "url_path": "/about/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T09:37:53.059Z", "alias_of": null, "to_address": "", "from_address": "info@dravate.com", "subject": "Thank you for Writing Us!", "image": 2, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

I am Contact Form

\", \"id\": \"fa17873b-466a-4aa4-8327-63f26de1b796\"}]", "thank_you_text": "

Thank you

", "wagtail_admin_comments": [], "form_fields": [{"pk": 1, "sort_order": 0, "clean_name": "name", "label": "Name", "field_type": "singleline", "required": true, "choices": "", "default_value": "", "help_text": "", "page": 7}]}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 12, "fields": {"content_type": 33, "base_content_type": 1, "object_id": "7", "created_at": "2024-07-17T09:38:35.939Z", "user": 1, "object_str": "Contact", "content": {"pk": 7, "path": "00010002", "depth": 2, "numchild": 0, "translation_key": "16fb54b3-590e-47f2-99d6-a88c754a685c", "locale": 1, "latest_revision": 11, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T09:37:55.618Z", "last_published_at": "2024-07-17T09:37:55.618Z", "live_revision": 11, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Contact", "draft_title": "About", "slug": "contact", "content_type": 33, "url_path": "/about/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T09:37:55.608Z", "alias_of": null, "to_address": "", "from_address": "info@dravate.com", "subject": "Thank you for Writing Us!", "image": 2, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

I am Contact Form

\", \"id\": \"fa17873b-466a-4aa4-8327-63f26de1b796\"}]", "thank_you_text": "

Thank you

", "wagtail_admin_comments": [], "form_fields": [{"pk": 1, "sort_order": 0, "clean_name": "name", "label": "Name", "field_type": "singleline", "required": true, "choices": "", "default_value": "", "help_text": "", "page": 7}]}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 13, "fields": {"content_type": 29, "base_content_type": 1, "object_id": "8", "created_at": "2024-07-17T10:15:53.367Z", "user": 1, "object_str": "Privacy Policy", "content": {"pk": 8, "path": "000100010004", "depth": 3, "numchild": 0, "translation_key": "ab00dc9a-c55e-486b-b92b-111dfbc20047", "locale": 1, "latest_revision": null, "live": true, "has_unpublished_changes": false, "first_published_at": null, "last_published_at": null, "live_revision": null, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Privacy Policy", "draft_title": "Privacy Policy", "slug": "privacy-policy", "content_type": 29, "url_path": "/home/privacy-policy/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": null, "alias_of": null, "introduction": "I am privacy Policy", "image": 4, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

Privacy Policy

\", \"id\": \"d201a5c0-9f58-4a7c-a1f1-d053f86b681b\"}]", "wagtail_admin_comments": []}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 14, "fields": {"content_type": 55, "base_content_type": 1, "object_id": "5", "created_at": "2024-07-17T10:51:12.883Z", "user": 1, "object_str": "Introduction to Financial Accounting", "content": {"pk": 5, "path": "0001000100010001", "depth": 4, "numchild": 0, "translation_key": "763f11db-21e2-4aa0-9607-8a171dcebd39", "locale": 1, "latest_revision": 5, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T08:34:54.976Z", "last_published_at": "2024-07-17T08:34:54.976Z", "live_revision": 5, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Introduction to Financial Accounting", "draft_title": "One", "slug": "one", "content_type": 55, "url_path": "/home/courses/one/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T08:34:54.963Z", "alias_of": null, "author": "Sopan Shewale", "date": "2024-07-17", "summary": "Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.", "start_date": "2024-07-17", "end_date": "2024-07-18", "feed_image": null, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

Hello

\", \"id\": \"184be5aa-b60e-4043-8173-62ab39e25536\"}]", "trainers": "[{\"type\": \"profile\", \"value\": {\"image\": 5, \"firstname\": \"Sopan\", \"lastname\": \"Shewale\", \"title\": \"Technical Evangelist\", \"linkedin\": \"https://www.linkedin.com/in/sopanshewale/\", \"short_profile\": \"Full Stack Developer with 25 years of Experience\"}, \"id\": \"4a480283-3bab-4e0c-9606-13d9bb2b0920\"}]", "wagtail_admin_comments": [], "tagged_items": [{"pk": null, "tag": 2, "content_object": 5}]}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 15, "fields": {"content_type": 55, "base_content_type": 1, "object_id": "5", "created_at": "2024-07-17T10:51:46.746Z", "user": 1, "object_str": "Introduction to Financial Accounting", "content": {"pk": 5, "path": "0001000100010001", "depth": 4, "numchild": 0, "translation_key": "763f11db-21e2-4aa0-9607-8a171dcebd39", "locale": 1, "latest_revision": 14, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T08:34:54.976Z", "last_published_at": "2024-07-17T10:51:12.904Z", "live_revision": 14, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Introduction to Financial Accounting", "draft_title": "Introduction to Financial Accounting", "slug": "one", "content_type": 55, "url_path": "/home/courses/one/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T10:51:12.883Z", "alias_of": null, "author": "Sopan Shewale", "date": "2024-07-17", "summary": "Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.", "start_date": "2024-07-17", "end_date": "2024-07-18", "feed_image": 4, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

Hello

\", \"id\": \"184be5aa-b60e-4043-8173-62ab39e25536\"}]", "trainers": "[{\"type\": \"profile\", \"value\": {\"image\": 5, \"firstname\": \"Sopan\", \"lastname\": \"Shewale\", \"title\": \"Technical Evangelist\", \"linkedin\": \"https://www.linkedin.com/in/sopanshewale/\", \"short_profile\": \"Full Stack Developer with 25 years of Experience\"}, \"id\": \"4a480283-3bab-4e0c-9606-13d9bb2b0920\"}]", "wagtail_admin_comments": [], "tagged_items": [{"pk": null, "tag": 2, "content_object": 5}]}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 16, "fields": {"content_type": 55, "base_content_type": 1, "object_id": "5", "created_at": "2024-07-17T10:53:18.365Z", "user": 1, "object_str": "Introduction to Financial Accounting", "content": {"pk": 5, "path": "0001000100010001", "depth": 4, "numchild": 0, "translation_key": "763f11db-21e2-4aa0-9607-8a171dcebd39", "locale": 1, "latest_revision": 15, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T08:34:54.976Z", "last_published_at": "2024-07-17T10:51:46.762Z", "live_revision": 15, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Introduction to Financial Accounting", "draft_title": "Introduction to Financial Accounting", "slug": "one", "content_type": 55, "url_path": "/home/courses/one/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T10:51:46.746Z", "alias_of": null, "author": "Sopan Shewale", "date": "2024-07-17", "summary": "Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.", "start_date": "2024-07-17", "end_date": "2024-07-18", "feed_image": 4, "body": "[{\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 1: Introduction and Balance Sheet\", \"size\": \"h2\"}, \"id\": \"d3eb94de-72c9-4203-aa3f-f406de8d8715\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"184be5aa-b60e-4043-8173-62ab39e25536\"}, {\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 2: Accrual Accounting and the Income Statement\", \"size\": \"h2\"}, \"id\": \"ef43ad62-114e-4d3b-95ec-7e9c81eef170\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"49ae9496-5f62-4577-8264-b5d78f36bf53\"}]", "trainers": "[{\"type\": \"profile\", \"value\": {\"image\": 5, \"firstname\": \"Sopan\", \"lastname\": \"Shewale\", \"title\": \"Technical Evangelist\", \"linkedin\": \"https://www.linkedin.com/in/sopanshewale/\", \"short_profile\": \"Full Stack Developer with 25 years of Experience\"}, \"id\": \"4a480283-3bab-4e0c-9606-13d9bb2b0920\"}]", "wagtail_admin_comments": [], "tagged_items": [{"pk": null, "tag": 2, "content_object": 5}]}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 17, "fields": {"content_type": 55, "base_content_type": 1, "object_id": "5", "created_at": "2024-07-17T10:54:36.524Z", "user": 1, "object_str": "Introduction to Financial Accounting", "content": {"pk": 5, "path": "0001000100010001", "depth": 4, "numchild": 0, "translation_key": "763f11db-21e2-4aa0-9607-8a171dcebd39", "locale": 1, "latest_revision": 16, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T08:34:54.976Z", "last_published_at": "2024-07-17T10:53:18.382Z", "live_revision": 16, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Introduction to Financial Accounting", "draft_title": "Introduction to Financial Accounting", "slug": "one", "content_type": 55, "url_path": "/home/courses/one/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T10:53:18.365Z", "alias_of": null, "author": "Sopan Shewale", "date": "2024-07-17", "summary": "Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.", "start_date": "2024-07-17", "end_date": "2024-07-18", "feed_image": 4, "body": "[{\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 1: Introduction and Balance Sheet\", \"size\": \"h2\"}, \"id\": \"d3eb94de-72c9-4203-aa3f-f406de8d8715\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"184be5aa-b60e-4043-8173-62ab39e25536\"}, {\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 2: Accrual Accounting and the Income Statement\", \"size\": \"h2\"}, \"id\": \"ef43ad62-114e-4d3b-95ec-7e9c81eef170\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"49ae9496-5f62-4577-8264-b5d78f36bf53\"}, {\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 3: Cash Flows\", \"size\": \"h2\"}, \"id\": \"7bd637c3-badc-42e4-ab34-f2acb5ffc9d1\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"5767cbd5-8498-4348-8d06-749909227b51\"}, {\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 4: Ratio Analysis and Final Exam\", \"size\": \"h2\"}, \"id\": \"2fa2155d-2265-4fe6-833e-a4d2ed522ffd\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"09d0b715-208a-42c2-8fb8-efcd4297bfe7\"}]", "trainers": "[{\"type\": \"profile\", \"value\": {\"image\": 5, \"firstname\": \"Sopan\", \"lastname\": \"Shewale\", \"title\": \"Technical Evangelist\", \"linkedin\": \"https://www.linkedin.com/in/sopanshewale/\", \"short_profile\": \"Full Stack Developer with 25 years of Experience\"}, \"id\": \"4a480283-3bab-4e0c-9606-13d9bb2b0920\"}]", "wagtail_admin_comments": [], "tagged_items": [{"pk": null, "tag": 2, "content_object": 5}]}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 18, "fields": {"content_type": 55, "base_content_type": 1, "object_id": "5", "created_at": "2024-07-18T10:03:27.061Z", "user": 1, "object_str": "Introduction to Financial Accounting", "content": {"pk": 5, "path": "0001000100010001", "depth": 4, "numchild": 0, "translation_key": "763f11db-21e2-4aa0-9607-8a171dcebd39", "locale": 1, "latest_revision": 17, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T08:34:54.976Z", "last_published_at": "2024-07-17T10:54:36.543Z", "live_revision": 17, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Introduction to Financial Accounting", "draft_title": "Introduction to Financial Accounting", "slug": "one", "content_type": 55, "url_path": "/home/courses/one/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T10:54:36.524Z", "alias_of": null, "author": "Sopan Shewale", "date": "2024-07-17", "summary": "Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.", "start_date": "2024-07-17", "end_date": "2024-07-18", "feed_image": 4, "body": "[{\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 1: Introduction and Balance Sheet\", \"size\": \"h2\"}, \"id\": \"d3eb94de-72c9-4203-aa3f-f406de8d8715\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"184be5aa-b60e-4043-8173-62ab39e25536\"}, {\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 2: Accrual Accounting and the Income Statement\", \"size\": \"h2\"}, \"id\": \"ef43ad62-114e-4d3b-95ec-7e9c81eef170\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"49ae9496-5f62-4577-8264-b5d78f36bf53\"}, {\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 3: Cash Flows\", \"size\": \"h2\"}, \"id\": \"7bd637c3-badc-42e4-ab34-f2acb5ffc9d1\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"5767cbd5-8498-4348-8d06-749909227b51\"}, {\"type\": \"heading_block\", \"value\": {\"heading_text\": \"Week 4: Ratio Analysis and Final Exam\", \"size\": \"h2\"}, \"id\": \"2fa2155d-2265-4fe6-833e-a4d2ed522ffd\"}, {\"type\": \"paragraph_block\", \"value\": \"

Master the technical skills needed to analyze financial statements and disclosures for use in financial analysis, and learn how accounting standards and managerial incentives affect the financial reporting process. By the end of this course, you'll be able to read the three most common financial statements: the income statement, balance sheet, and statement of cash flows. Then you can apply these skills to a real-world business challenge as part of the Wharton Business Foundations Specialization.

\", \"id\": \"09d0b715-208a-42c2-8fb8-efcd4297bfe7\"}]", "trainers": "[{\"type\": \"profile\", \"value\": {\"image\": 5, \"firstname\": \"Sopan\", \"lastname\": \"Shewale\", \"title\": \"Technical Evangelist\", \"linkedin\": \"https://www.linkedin.com/in/sopanshewale/\", \"short_profile\": \"Full Stack Developer with 25 years of Experience\"}, \"id\": \"4a480283-3bab-4e0c-9606-13d9bb2b0920\"}]", "wagtail_admin_comments": [], "tagged_items": [{"pk": null, "tag": 2, "content_object": 5}]}, "approved_go_live_at": null}}, {"model": "wagtailcore.revision", "pk": 19, "fields": {"content_type": 29, "base_content_type": 1, "object_id": "8", "created_at": "2024-07-20T10:12:21.804Z", "user": 1, "object_str": "Privacy Policy", "content": {"pk": 8, "path": "000100010004", "depth": 3, "numchild": 0, "translation_key": "ab00dc9a-c55e-486b-b92b-111dfbc20047", "locale": 1, "latest_revision": 13, "live": true, "has_unpublished_changes": false, "first_published_at": "2024-07-17T10:15:53.380Z", "last_published_at": "2024-07-17T10:15:53.380Z", "live_revision": 13, "go_live_at": null, "expire_at": null, "expired": false, "locked": false, "locked_at": null, "locked_by": null, "title": "Privacy Policy", "draft_title": "Privacy Policy", "slug": "privacy-policy", "content_type": 29, "url_path": "/home/privacy-policy/", "owner": 1, "seo_title": "", "show_in_menus": false, "search_description": "", "latest_revision_created_at": "2024-07-17T10:15:53.367Z", "alias_of": null, "introduction": "I am privacy Policy", "image": 4, "body": "[{\"type\": \"paragraph_block\", \"value\": \"

Introduction

We, at Info Edge (India) Limited herein referred to as IEIL and our affiliated companies worldwide, are committed to respecting your online privacy and recognize your need for appropriate protection and management of personally identifiable information (\\\"Personal Information\\\") you share with us, in-line with the applicable data protection laws and regulations.

This Policy is subject to the terms of the Site Policy (Terms of Use) of Shiksha.com and the Application. This policy applies to those who register on the Platform (as defined in the Terms of Use) provided by the Shiksha.com, in connection with use of our services, or whose information Shiksha.com otherwise receives in connection with its services (such as but not limited to contact information of individuals associated with Shiksha.com including partner colleges/ educational institutes etc.)

Personal information (PI) - means any information relating to an identified or identifiable living person. In particular using a common identifier such as a name, an identification number, location data, an online identifier or one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person or any other piece of information as per applicable laws and regulations.

Core Purpose - The Platform is made available for use to help students get details, discover & research on colleges, courses and exams of their interest and for allied services related thereto. Platform also helps connect colleges/educational institutes/coaching centres etc. with prospective students who may be of interest to them.User's contactable information will be shared with Colleges/Educational Institutes/coaching centres etc either if they have shown interest in that Colleges/Educational Institutes/coaching centres etc or they have shortlisted the user as potential candidate for admission.

Study Abroad section of Platform also assists students in completing and submitting their applications to universities abroad. (\\u201cPurpose\\u201d).

Information collection

We collect information about you or your usage to provide better services to all of our users. We collect information in the following ways:

  • Many of our services require you to register/sign up for an account on Shiksha.com. When you do, we will ask for personal information, such as, but not limited to your name, email address and telephone number to create/update your account.
  • To provide you additional services, we may collect your profile information such as, but not limited to education background, work experience, date of birth.
  • We collect information about the services that you use and how you use them such as, but not limited to log information and location information.
  • We may collect your personal information such as but not limited to bank details, passport details to assist for study abroad program which includes services like Letter of recommendation, student profile, student visa and application to university programmes.
  • When you communicate with Shiksha.com or its Application or use the Shiksha.com platform to communicate with other Members (such as advertisers, colleges/ institutes, etc.), we collect information about your communication and any other additional information you choose to provide.

Processing personal information

Shiksha.com may process your Personal Information for the following purposes:

  • We use information collected from cookies and other technologies, like pixel tags, to improve your user experience and the overall quality of our services. When showing you tailored ads, we will not associate an identifier from cookies or similar technologies with sensitive categories, such as those based on race, religion, sexual orientation or health.
  • Our automated systems analyse your content to provide you customised search results, recommendations and specific promotions and offers
  • Send alerts and newsletter(s) to you (Provided you subscribe to the same. To unsubscribe, please visit your account settings)
  • Improving our website and its content to provide better features and services
  • Conducting market research and surveys with the aim of improving our products and services.
  • Sending you information about our products and services for marketing purposes and promotions.
  • Preventing, detecting, investigating and prosecuting crimes (including but not limited to fraud and other financial crimes) in any jurisdiction, identity verification, government sanctions screening and due diligence checks
  • Establishing, exercising or defending legal rights in connection with legal proceedings (including any prospective legal proceedings) and seeking professional or legal advice in relation to such legal proceedings.

Cookies and Other Tracking Technologies

Some of our Web pages utilize \\\"cookies\\\" and other tracking technologies. A \\\"cookie\\\" is a small text file that may be used, for example, to collect your information about Website activity. Some cookies and other technologies may serve to recall Personal Information previously indicated by a Web user. Most browsers allow you to control cookies, including whether or not to accept them and how to remove them.

You may set most browsers to notify you if you receive a cookie, or you may choose to block cookies with your browser, but please note that if you choose to erase or block your cookies, you will need to re-enter your original user ID and password to gain access to certain parts of the Web site and some sections/features of the site may not work.

Tracking technologies may record information such as Internet domain and host names; Internet protocol (IP) addresses; browser software and operating system types; clickstream patterns; and dates and times that our site has accessed.

Our use of cookies and other tracking technologies allows us to improve our Web site and your Web experience. We may also analyse information that does not contain Personal Information for trends and statistics.

For more information about our use of cookies please refer to our Cookie Policy.

Third Party Services

Third parties provide certain services available on Shiksha.com on IEIL\\u2019s behalf. Shiksha.com may provide information, including Personal Information, that \\u2018Shiksha.com collects on the Web to third-party service providers to help us deliver programs, products, information, and services. Service providers are also an important means by which Shiksha.com maintains its Web site and mailing lists. Shiksha.com will take reasonable steps to ensure that these third-party service providers are obligated to protect Personal Information on Shiksha.com behalf.

Shiksha.com does not intend to transfer Personal Information without your consent to third parties unless such transfer is required for providing relevant services or for purposes legal purposes.

When you are in a relationship with Shiksha.com, your personal information may be transferred to geographies outside India, for the purposes mentioned in this policy or to their local service providers for support in the pursuance of such purposes. Transfers outside India are covered by standard data protection laws.

Please be aware that Shiksha.com sometimes contains links to other sites that are not governed by this privacy policy. Visitors to Our Site may be directed to third-party sites for more information, such as advertisers, blogs, content sponsorships, vendor services, social networks, etc.

Shiksha.com makes no representations or warranties regarding how your information is stored or used on third-party servers. We recommend that you review the privacy statement of each third-party site linked from Our Site to determine their use of your personal information.

Children

To use the Site you agree that you must be of minimum age (described in this paragraph below) or older.

In case you are resident of the European Union, the minimum age for these purposes shall be 16, however if local laws require that you must be older in order for Shiksha.com to lawfully provide the services on the Site to you then that older age shall apply as the applicable minimum age.

In all jurisdictions outside the European Union, if you are under the age of 18 or the age of majority in your jurisdiction, you must use Shiksha.com under the supervision of your parent, legal guardian or responsible adult.

Information Sharing

We restrict access to your Personal Information to employees who we believe reasonably need to know/or that information in order to fulfil their jobs to provide, operate, develop, or improve our products or services.

Shiksha.com does not rent, sell, or share personal information about you with other people or non-affiliated companies except:

  1. to provide products or services you've requested,
  2. when we have your permission,
  3. or under the following circumstances:
  • We provide the information to trusted partners who work on behalf of or with \\u2018IEIL\\u2019 under confidentiality agreements. These companies may use your personal information to help Shiksha.com communicate with you about offers from \\u2018Shiksha.com and our marketing partners. However, these companies do not have any independent right to share this information.
  • We respond to subpoenas, court orders, or legal process, or to establish or exercise our legal rights or defend against legal claims;
  • We believe it is necessary to share information in order to investigate, prevent, or take action regarding illegal activities, suspected fraud, situations involving potential threats to the physical safety of any person, violations of \\u2018Shiksha.com terms of use, or as otherwise required by law.
  • We transfer information about you if \\u2018Shiksha.com is acquired by or merged with another company.
  • We share your personal information with colleges or educational institutions, etc. based on your browsing behaviour or expression of interest regarding courses, specializations and institutions or in case of applications for admission to such colleges or educational institutions, who may further contact you and process your information for the said purposes.

Shiksha.com displays targeted advertisements based on personal information. Advertisers (including ad serving for example, women aged 18-24 from a particular geographic area.

  • Shiksha.com does not provide any personal information to the advertiser when you interact with or view a targeted ad. However, by interacting with an ad you are consenting to the possibility that the advertiser will make the assumption that you meet the targeting criteria used to display the ad.
  • Shiksha.com advertisers include financial service providers (such as banks, insurance agents, stock brokers and mortgage lenders) and non-financial companies (such as stores, airlines, and software companies).
  • We may share personal information (such as name, mobile number, and email address) with carefully selected education colleges/ educational institutions based on your expression of interest regarding courses, specializations and institutions so that they may consider further marketing campaigns or recruitment measures. Some of these educational institutions may have access to your personal information to verify the status of your application or enrolment. We will inform the education institutions that they are not allowed to use your personal information for any reason other than mentioned above. Users should note however that, how these educational institutions use this data is not governed by our privacy policy. Therefore, we cannot be held responsible for how the data is utilized once it is shared with them. Educational institutions have separate policy practices for which Shiksha.com has no responsibility or liability. For further information on how such institutions use your information, please visit the applicable privacy policy of that institution.
  • Shiksha.com works with vendors, partners, advertisers, and other service providers in different industries and categories of business. For more information regarding providers of products or services, please refer the section \\u201cThird party services\\u201d of this policy

Retention of personal information

Your personal information processed by Shiksha.com are kept in a form which permits your identification for no longer than is necessary for the purposes for which the personal information are processed in line with legal, regulatory, contractual or statutory obligations as applicable.

At the expiry of such periods, your personal information will be archived to comply with legal/contractual retention obligations or in accordance with applicable statutory limitation periods.

Personalisation of services

To the extent permitted by law, Shiksha.com may record and monitor your communications with us to ensure compliance with our legal and regulatory obligations and our internal policies. This may include the recording of telephone conversations.

Personalisation of services

You may have the right to invoke certain rights (as per applicable laws and regulations such as GDPR) in relation to your personal information being processed by the Platform.

The Platform may be allowed by law, in particular in case of excessive or manifestly unfounded request, to charge a fee for fulfilling your request, subject to applicable conditions.

You are legally entitled to request details of the personal information we may be holding about you. The Company provides you the ability to keep your personal information accurate and up-to-date. If at any time you would like to rectify, erase or restrict the processing of your personal information, or you would like to obtain confirmation whether or not your personal information is processed by it, access your personal information, exercise your right to data portability or withdraw your consent to processing, please contact us.

You are entitled to lodge a complaint with a competent Data Protection Authority where existing, concerning the Platform\\u2019s compliance with the applicable data protection laws and regulation.

Confidentiality and Security

The security and confidentiality of your Personal Data is important to us and Shiksha.com has invested significant resources to protect the safekeeping and confidentiality of your personal data. When using external service providers acting as processors, we require that they adhere to the same standards as Shiksha.com. Regardless of where your personal information is transferred or stored, we take all steps reasonably necessary to ensure that personal data is kept secure.

We have physical, electronic, and procedural safeguards that comply with the laws prevalent in India to protect personal information about you. We seek to ensure compliance with the requirements of the Information Technology Act, 2000 and Rules made there under to ensure the protection and preservation of your privacy.

Social media

Shiksha.com operates channels, pages and accounts on some social media sites to inform, assist and engage with you. Shiksha.com monitors and records comments and posts made on these channels about Shiksha.com in order to improve its products and services. Please note that you must not communicate with Shiksha.com through such social media sites the following information:

  • Sensitive personal data including (i) special categories of personal data meaning any information revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, or trade union membership, and the processing of genetic data, biometric data for the purpose of uniquely identifying a natural person, data concerning health or data concerning a natural person's sex life or sexual orientation and (ii) other sensitive personal data such as criminal convictions and offences and national identification number ;
  • Excessive, inappropriate, offensive or insulting information towards individuals.

Shiksha.com is not responsible for any information posted on those sites other than the information posted by its employees on its behalf. Shiksha.com is only responsible for its own use of the personal data received through such sites

Changes to this Privacy Policy

Shiksha.com reserves the right to update, change or modify this policy at any time. The policy shall come to effect from the date of such update, change or modification.

Disclaimer

Shiksha.com shall not be liable for any loss or damage sustained by reason of any disclosure (inadvertent or otherwise) of any information concerning the user's account and / or information relating to or regarding online transactions using credit cards / debit cards and / or their verification process and particulars nor for any error, omission or inaccuracy with respect to any information so disclosed and used whether or not in pursuance of a legal process or otherwise. Shiksha.com does not store any Credit / Debit card details.

Any other personal information shared by you which is not asked by Shiksha.com during registration, either mandatorily or optionally; accounts to wilful and intentional furnishing; and Shiksha.com will not be liable for breach of such information.

Shiksha is neither affiliated with nor endorsed by any government organization. The Shiksha app doesn\\u2019t represent any government entity. The Shiksha team sources information about colleges & exams from their respective official websites. We try to put our best effort to make sure that the information is genuine and updated regularly.

If you have any questions regarding this privacy policy or the protection of your personal data, please contact IEIL\\u2019s Data Protection Officer at the following:

Data Protection Officer/ Grievance OfficerInfo Edge (India) LimitedNoida GF-12A, Meghdoot, Nehru Place, New DelhiEmail: privacy@infoedge.com

\", \"id\": \"d201a5c0-9f58-4a7c-a1f1-d053f86b681b\"}]", "wagtail_admin_comments": []}, "approved_go_live_at": null}}, {"model": "wagtailcore.grouppagepermission", "pk": 1, "fields": {"group": 1, "page": 1, "permission": 33}}, {"model": "wagtailcore.grouppagepermission", "pk": 2, "fields": {"group": 1, "page": 1, "permission": 34}}, {"model": "wagtailcore.grouppagepermission", "pk": 3, "fields": {"group": 1, "page": 1, "permission": 39}}, {"model": "wagtailcore.grouppagepermission", "pk": 4, "fields": {"group": 2, "page": 1, "permission": 33}}, {"model": "wagtailcore.grouppagepermission", "pk": 5, "fields": {"group": 2, "page": 1, "permission": 34}}, {"model": "wagtailcore.grouppagepermission", "pk": 6, "fields": {"group": 1, "page": 1, "permission": 38}}, {"model": "wagtailcore.grouppagepermission", "pk": 7, "fields": {"group": 1, "page": 1, "permission": 40}}, {"model": "wagtailcore.workflowpage", "pk": 1, "fields": {"workflow": 1}}, {"model": "wagtailcore.workflowtask", "pk": 1, "fields": {"sort_order": 0, "workflow": 1, "task": 1}}, {"model": "wagtailcore.task", "pk": 1, "fields": {"name": "Moderators approval", "content_type": 3, "active": true}}, {"model": "wagtailcore.workflow", "pk": 1, "fields": {"name": "Moderators approval", "active": true}}, {"model": "wagtailcore.groupapprovaltask", "pk": 1, "fields": {"groups": [1]}}, {"model": "wagtailcore.pagelogentry", "pk": 1, "fields": {"content_type": 4, "label": "Home", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-16T12:34:53.876Z", "uuid": "a1eeaa61-fe53-4468-ac80-6c3ac01d3dfd", "user": 1, "revision": 1, "content_changed": true, "deleted": false, "page": 3}}, {"model": "wagtailcore.pagelogentry", "pk": 2, "fields": {"content_type": 4, "label": "Home", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-16T12:34:53.898Z", "uuid": "a1eeaa61-fe53-4468-ac80-6c3ac01d3dfd", "user": 1, "revision": 1, "content_changed": true, "deleted": false, "page": 3}}, {"model": "wagtailcore.pagelogentry", "pk": 3, "fields": {"content_type": 56, "label": "Finance Courses", "action": "wagtail.create", "data": {}, "timestamp": "2024-07-17T08:06:33.018Z", "uuid": "2bcee153-f066-4c7e-906b-ef7dab894da4", "user": 1, "revision": null, "content_changed": true, "deleted": false, "page": 4}}, {"model": "wagtailcore.pagelogentry", "pk": 4, "fields": {"content_type": 56, "label": "Finance Courses", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T08:06:33.030Z", "uuid": "2bcee153-f066-4c7e-906b-ef7dab894da4", "user": 1, "revision": 2, "content_changed": true, "deleted": false, "page": 4}}, {"model": "wagtailcore.pagelogentry", "pk": 5, "fields": {"content_type": 56, "label": "Finance Courses", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T08:06:33.051Z", "uuid": "2bcee153-f066-4c7e-906b-ef7dab894da4", "user": 1, "revision": 2, "content_changed": true, "deleted": false, "page": 4}}, {"model": "wagtailcore.pagelogentry", "pk": 6, "fields": {"content_type": 56, "label": "Finance Courses", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T08:07:05.126Z", "uuid": "68a28a2f-a5ba-42ea-9955-52593f1ec91f", "user": 1, "revision": 3, "content_changed": true, "deleted": false, "page": 4}}, {"model": "wagtailcore.pagelogentry", "pk": 7, "fields": {"content_type": 56, "label": "Finance Courses", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T08:07:05.156Z", "uuid": "68a28a2f-a5ba-42ea-9955-52593f1ec91f", "user": 1, "revision": 3, "content_changed": true, "deleted": false, "page": 4}}, {"model": "wagtailcore.pagelogentry", "pk": 8, "fields": {"content_type": 55, "label": "One", "action": "wagtail.create", "data": {}, "timestamp": "2024-07-17T08:34:51.340Z", "uuid": "aaebc24f-0506-451b-be3f-dc61dd7e3beb", "user": 1, "revision": null, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 9, "fields": {"content_type": 55, "label": "One", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T08:34:51.354Z", "uuid": "aaebc24f-0506-451b-be3f-dc61dd7e3beb", "user": 1, "revision": 4, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 10, "fields": {"content_type": 55, "label": "One", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T08:34:54.970Z", "uuid": "42e0b3f0-04e4-4863-95c1-2af02695d2ce", "user": 1, "revision": 5, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 11, "fields": {"content_type": 55, "label": "One", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T08:34:54.990Z", "uuid": "42e0b3f0-04e4-4863-95c1-2af02695d2ce", "user": 1, "revision": 5, "content_changed": false, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 12, "fields": {"content_type": 29, "label": "About", "action": "wagtail.create", "data": {}, "timestamp": "2024-07-17T08:36:51.825Z", "uuid": "8ee25787-4076-4572-a8d2-48c4290500b1", "user": 1, "revision": null, "content_changed": true, "deleted": false, "page": 6}}, {"model": "wagtailcore.pagelogentry", "pk": 13, "fields": {"content_type": 29, "label": "About", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T08:36:51.836Z", "uuid": "8ee25787-4076-4572-a8d2-48c4290500b1", "user": 1, "revision": 6, "content_changed": true, "deleted": false, "page": 6}}, {"model": "wagtailcore.pagelogentry", "pk": 14, "fields": {"content_type": 29, "label": "About", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T08:36:51.855Z", "uuid": "8ee25787-4076-4572-a8d2-48c4290500b1", "user": 1, "revision": 6, "content_changed": true, "deleted": false, "page": 6}}, {"model": "wagtailcore.pagelogentry", "pk": 15, "fields": {"content_type": 29, "label": "About", "action": "wagtail.move", "data": {"source": {"id": 1, "title": "Root"}, "destination": {"id": 3, "title": "Home"}}, "timestamp": "2024-07-17T08:37:12.883Z", "uuid": "97e32807-7125-43df-ad43-015c03edec24", "user": 1, "revision": null, "content_changed": false, "deleted": false, "page": 6}}, {"model": "wagtailcore.pagelogentry", "pk": 16, "fields": {"content_type": 4, "label": "Home", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T08:50:43.182Z", "uuid": "9ae23e84-64e6-41c4-ad49-1c86a1ad735f", "user": 1, "revision": 7, "content_changed": true, "deleted": false, "page": 3}}, {"model": "wagtailcore.pagelogentry", "pk": 17, "fields": {"content_type": 4, "label": "We help Craft Dreams of Needy Students!", "action": "wagtail.rename", "data": {"title": {"old": "Home", "new": "We help Craft Dreams of Needy Students!"}}, "timestamp": "2024-07-17T08:50:43.200Z", "uuid": "9ae23e84-64e6-41c4-ad49-1c86a1ad735f", "user": 1, "revision": 7, "content_changed": false, "deleted": false, "page": 3}}, {"model": "wagtailcore.pagelogentry", "pk": 18, "fields": {"content_type": 4, "label": "We help Craft Dreams of Needy Students!", "action": "wagtail.publish", "data": {"title": {"old": "Home", "new": "We help Craft Dreams of Needy Students!"}}, "timestamp": "2024-07-17T08:50:43.202Z", "uuid": "9ae23e84-64e6-41c4-ad49-1c86a1ad735f", "user": 1, "revision": 7, "content_changed": true, "deleted": false, "page": 3}}, {"model": "wagtailcore.pagelogentry", "pk": 19, "fields": {"content_type": 4, "label": "We help Craft Dreams of Needy Students!", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T08:53:49.561Z", "uuid": "1a282fb7-ee28-4159-8925-16cff5ba941f", "user": 1, "revision": 8, "content_changed": true, "deleted": false, "page": 3}}, {"model": "wagtailcore.pagelogentry", "pk": 20, "fields": {"content_type": 4, "label": "We help Craft Dreams of Needy Students!", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T08:53:49.581Z", "uuid": "1a282fb7-ee28-4159-8925-16cff5ba941f", "user": 1, "revision": 8, "content_changed": true, "deleted": false, "page": 3}}, {"model": "wagtailcore.pagelogentry", "pk": 21, "fields": {"content_type": 4, "label": "We help Craft Dreams of Needy Students!", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T09:08:53.800Z", "uuid": "066ae5b8-36f8-4e0b-aa27-7f994a0dd6e8", "user": 1, "revision": 9, "content_changed": true, "deleted": false, "page": 3}}, {"model": "wagtailcore.pagelogentry", "pk": 22, "fields": {"content_type": 4, "label": "We help Craft Dreams of Needy Students!", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T09:08:53.824Z", "uuid": "066ae5b8-36f8-4e0b-aa27-7f994a0dd6e8", "user": 1, "revision": 9, "content_changed": true, "deleted": false, "page": 3}}, {"model": "wagtailcore.pagelogentry", "pk": 23, "fields": {"content_type": 33, "label": "About", "action": "wagtail.create", "data": {}, "timestamp": "2024-07-17T09:37:53.052Z", "uuid": "c986a5ce-c829-4fd7-b90c-15d6ac6dec62", "user": 1, "revision": null, "content_changed": true, "deleted": false, "page": 7}}, {"model": "wagtailcore.pagelogentry", "pk": 24, "fields": {"content_type": 33, "label": "About", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T09:37:53.065Z", "uuid": "c986a5ce-c829-4fd7-b90c-15d6ac6dec62", "user": 1, "revision": 10, "content_changed": true, "deleted": false, "page": 7}}, {"model": "wagtailcore.pagelogentry", "pk": 25, "fields": {"content_type": 33, "label": "About", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T09:37:55.614Z", "uuid": "3e486501-b1c0-49da-92ae-f740225972f7", "user": 1, "revision": 11, "content_changed": true, "deleted": false, "page": 7}}, {"model": "wagtailcore.pagelogentry", "pk": 26, "fields": {"content_type": 33, "label": "About", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T09:37:55.629Z", "uuid": "3e486501-b1c0-49da-92ae-f740225972f7", "user": 1, "revision": 11, "content_changed": false, "deleted": false, "page": 7}}, {"model": "wagtailcore.pagelogentry", "pk": 27, "fields": {"content_type": 33, "label": "About", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T09:38:35.947Z", "uuid": "0a363143-d753-41a7-9852-969dcd98761b", "user": 1, "revision": 12, "content_changed": true, "deleted": false, "page": 7}}, {"model": "wagtailcore.pagelogentry", "pk": 28, "fields": {"content_type": 33, "label": "Contact", "action": "wagtail.rename", "data": {"title": {"old": "About", "new": "Contact"}}, "timestamp": "2024-07-17T09:38:35.970Z", "uuid": "0a363143-d753-41a7-9852-969dcd98761b", "user": 1, "revision": 12, "content_changed": false, "deleted": false, "page": 7}}, {"model": "wagtailcore.pagelogentry", "pk": 29, "fields": {"content_type": 33, "label": "Contact", "action": "wagtail.publish", "data": {"title": {"old": "About", "new": "Contact"}}, "timestamp": "2024-07-17T09:38:35.973Z", "uuid": "0a363143-d753-41a7-9852-969dcd98761b", "user": 1, "revision": 12, "content_changed": true, "deleted": false, "page": 7}}, {"model": "wagtailcore.pagelogentry", "pk": 30, "fields": {"content_type": 1, "label": "Contact", "action": "wagtail.move", "data": {"source": {"id": 1, "title": "Root"}, "destination": {"id": 3, "title": "We help Craft Dreams of Needy Students!"}}, "timestamp": "2024-07-17T09:39:08.423Z", "uuid": "5644e9ca-7a35-4ccd-b146-d3789a3eb74c", "user": 1, "revision": null, "content_changed": false, "deleted": false, "page": 7}}, {"model": "wagtailcore.pagelogentry", "pk": 31, "fields": {"content_type": 29, "label": "Privacy Policy", "action": "wagtail.create", "data": {}, "timestamp": "2024-07-17T10:15:53.359Z", "uuid": "d0c10f60-04ed-44fc-9c16-6d2e2c8fb4b2", "user": 1, "revision": null, "content_changed": true, "deleted": false, "page": 8}}, {"model": "wagtailcore.pagelogentry", "pk": 32, "fields": {"content_type": 29, "label": "Privacy Policy", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T10:15:53.373Z", "uuid": "d0c10f60-04ed-44fc-9c16-6d2e2c8fb4b2", "user": 1, "revision": 13, "content_changed": true, "deleted": false, "page": 8}}, {"model": "wagtailcore.pagelogentry", "pk": 33, "fields": {"content_type": 29, "label": "Privacy Policy", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T10:15:53.393Z", "uuid": "d0c10f60-04ed-44fc-9c16-6d2e2c8fb4b2", "user": 1, "revision": 13, "content_changed": true, "deleted": false, "page": 8}}, {"model": "wagtailcore.pagelogentry", "pk": 34, "fields": {"content_type": 55, "label": "One", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T10:51:12.896Z", "uuid": "482b89fa-7f74-49a3-b6f8-f2515c492e68", "user": 1, "revision": 14, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 35, "fields": {"content_type": 55, "label": "Introduction to Financial Accounting", "action": "wagtail.rename", "data": {"title": {"old": "One", "new": "Introduction to Financial Accounting"}}, "timestamp": "2024-07-17T10:51:12.919Z", "uuid": "482b89fa-7f74-49a3-b6f8-f2515c492e68", "user": 1, "revision": 14, "content_changed": false, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 36, "fields": {"content_type": 55, "label": "Introduction to Financial Accounting", "action": "wagtail.publish", "data": {"title": {"old": "One", "new": "Introduction to Financial Accounting"}}, "timestamp": "2024-07-17T10:51:12.921Z", "uuid": "482b89fa-7f74-49a3-b6f8-f2515c492e68", "user": 1, "revision": 14, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 37, "fields": {"content_type": 55, "label": "Introduction to Financial Accounting", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T10:51:46.754Z", "uuid": "c097f254-0d79-49ec-876c-058728399392", "user": 1, "revision": 15, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 38, "fields": {"content_type": 55, "label": "Introduction to Financial Accounting", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T10:51:46.778Z", "uuid": "c097f254-0d79-49ec-876c-058728399392", "user": 1, "revision": 15, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 39, "fields": {"content_type": 55, "label": "Introduction to Financial Accounting", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T10:53:18.374Z", "uuid": "8127ad69-45a9-4a5f-ad11-8bdbd359c7aa", "user": 1, "revision": 16, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 40, "fields": {"content_type": 55, "label": "Introduction to Financial Accounting", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T10:53:18.400Z", "uuid": "8127ad69-45a9-4a5f-ad11-8bdbd359c7aa", "user": 1, "revision": 16, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 41, "fields": {"content_type": 55, "label": "Introduction to Financial Accounting", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-17T10:54:36.535Z", "uuid": "092e3fa9-a1c9-43ba-bf80-e66717780800", "user": 1, "revision": 17, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 42, "fields": {"content_type": 55, "label": "Introduction to Financial Accounting", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-17T10:54:36.597Z", "uuid": "092e3fa9-a1c9-43ba-bf80-e66717780800", "user": 1, "revision": 17, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 43, "fields": {"content_type": 55, "label": "Introduction to Financial Accounting", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-18T10:03:27.076Z", "uuid": "c38a0422-7972-4622-b73b-140dfcafc996", "user": 1, "revision": 18, "content_changed": true, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 44, "fields": {"content_type": 55, "label": "Introduction to Financial Accounting", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-18T10:03:27.100Z", "uuid": "c38a0422-7972-4622-b73b-140dfcafc996", "user": 1, "revision": 18, "content_changed": false, "deleted": false, "page": 5}}, {"model": "wagtailcore.pagelogentry", "pk": 45, "fields": {"content_type": 29, "label": "Privacy Policy", "action": "wagtail.edit", "data": {}, "timestamp": "2024-07-20T10:12:21.820Z", "uuid": "7fe56bfd-048a-48f1-9353-058a326e51bb", "user": 1, "revision": 19, "content_changed": true, "deleted": false, "page": 8}}, {"model": "wagtailcore.pagelogentry", "pk": 46, "fields": {"content_type": 29, "label": "Privacy Policy", "action": "wagtail.publish", "data": {}, "timestamp": "2024-07-20T10:12:21.843Z", "uuid": "7fe56bfd-048a-48f1-9353-058a326e51bb", "user": 1, "revision": 19, "content_changed": true, "deleted": false, "page": 8}}, {"model": "wagtailcore.pagesubscription", "pk": 1, "fields": {"user": 1, "page": 3, "comment_notifications": false}}, {"model": "wagtailcore.pagesubscription", "pk": 2, "fields": {"user": 1, "page": 4, "comment_notifications": true}}, {"model": "wagtailcore.pagesubscription", "pk": 3, "fields": {"user": 1, "page": 5, "comment_notifications": true}}, {"model": "wagtailcore.pagesubscription", "pk": 4, "fields": {"user": 1, "page": 6, "comment_notifications": true}}, {"model": "wagtailcore.pagesubscription", "pk": 5, "fields": {"user": 1, "page": 7, "comment_notifications": true}}, {"model": "wagtailcore.pagesubscription", "pk": 6, "fields": {"user": 1, "page": 8, "comment_notifications": true}}, {"model": "taggit.tag", "pk": 1, "fields": {"name": "sopan", "slug": "sopan"}}, {"model": "taggit.tag", "pk": 2, "fields": {"name": "finance", "slug": "finance"}}, {"model": "taggit.taggeditem", "pk": 1, "fields": {"tag": 1, "content_type": 2, "object_id": 5}}, {"model": "auth.permission", "pk": 1, "fields": {"name": "Can add image", "content_type": 2, "codename": "add_image"}}, {"model": "auth.permission", "pk": 2, "fields": {"name": "Can change image", "content_type": 2, "codename": "change_image"}}, {"model": "auth.permission", "pk": 3, "fields": {"name": "Can delete image", "content_type": 2, "codename": "delete_image"}}, {"model": "auth.permission", "pk": 4, "fields": {"name": "Can choose image", "content_type": 2, "codename": "choose_image"}}, {"model": "auth.permission", "pk": 5, "fields": {"name": "Can add locale", "content_type": 5, "codename": "add_locale"}}, {"model": "auth.permission", "pk": 6, "fields": {"name": "Can change locale", "content_type": 5, "codename": "change_locale"}}, {"model": "auth.permission", "pk": 7, "fields": {"name": "Can delete locale", "content_type": 5, "codename": "delete_locale"}}, {"model": "auth.permission", "pk": 8, "fields": {"name": "Can view locale", "content_type": 5, "codename": "view_locale"}}, {"model": "auth.permission", "pk": 9, "fields": {"name": "Can add site", "content_type": 6, "codename": "add_site"}}, {"model": "auth.permission", "pk": 10, "fields": {"name": "Can change site", "content_type": 6, "codename": "change_site"}}, {"model": "auth.permission", "pk": 11, "fields": {"name": "Can delete site", "content_type": 6, "codename": "delete_site"}}, {"model": "auth.permission", "pk": 12, "fields": {"name": "Can view site", "content_type": 6, "codename": "view_site"}}, {"model": "auth.permission", "pk": 13, "fields": {"name": "Can add model log entry", "content_type": 7, "codename": "add_modellogentry"}}, {"model": "auth.permission", "pk": 14, "fields": {"name": "Can change model log entry", "content_type": 7, "codename": "change_modellogentry"}}, {"model": "auth.permission", "pk": 15, "fields": {"name": "Can delete model log entry", "content_type": 7, "codename": "delete_modellogentry"}}, {"model": "auth.permission", "pk": 16, "fields": {"name": "Can view model log entry", "content_type": 7, "codename": "view_modellogentry"}}, {"model": "auth.permission", "pk": 17, "fields": {"name": "Can add collection view restriction", "content_type": 8, "codename": "add_collectionviewrestriction"}}, {"model": "auth.permission", "pk": 18, "fields": {"name": "Can change collection view restriction", "content_type": 8, "codename": "change_collectionviewrestriction"}}, {"model": "auth.permission", "pk": 19, "fields": {"name": "Can delete collection view restriction", "content_type": 8, "codename": "delete_collectionviewrestriction"}}, {"model": "auth.permission", "pk": 20, "fields": {"name": "Can view collection view restriction", "content_type": 8, "codename": "view_collectionviewrestriction"}}, {"model": "auth.permission", "pk": 21, "fields": {"name": "Can add collection", "content_type": 9, "codename": "add_collection"}}, {"model": "auth.permission", "pk": 22, "fields": {"name": "Can change collection", "content_type": 9, "codename": "change_collection"}}, {"model": "auth.permission", "pk": 23, "fields": {"name": "Can delete collection", "content_type": 9, "codename": "delete_collection"}}, {"model": "auth.permission", "pk": 24, "fields": {"name": "Can view collection", "content_type": 9, "codename": "view_collection"}}, {"model": "auth.permission", "pk": 25, "fields": {"name": "Can add group collection permission", "content_type": 10, "codename": "add_groupcollectionpermission"}}, {"model": "auth.permission", "pk": 26, "fields": {"name": "Can change group collection permission", "content_type": 10, "codename": "change_groupcollectionpermission"}}, {"model": "auth.permission", "pk": 27, "fields": {"name": "Can delete group collection permission", "content_type": 10, "codename": "delete_groupcollectionpermission"}}, {"model": "auth.permission", "pk": 28, "fields": {"name": "Can view group collection permission", "content_type": 10, "codename": "view_groupcollectionpermission"}}, {"model": "auth.permission", "pk": 29, "fields": {"name": "Can add reference index", "content_type": 11, "codename": "add_referenceindex"}}, {"model": "auth.permission", "pk": 30, "fields": {"name": "Can change reference index", "content_type": 11, "codename": "change_referenceindex"}}, {"model": "auth.permission", "pk": 31, "fields": {"name": "Can delete reference index", "content_type": 11, "codename": "delete_referenceindex"}}, {"model": "auth.permission", "pk": 32, "fields": {"name": "Can view reference index", "content_type": 11, "codename": "view_referenceindex"}}, {"model": "auth.permission", "pk": 33, "fields": {"name": "Can add page", "content_type": 1, "codename": "add_page"}}, {"model": "auth.permission", "pk": 34, "fields": {"name": "Can change page", "content_type": 1, "codename": "change_page"}}, {"model": "auth.permission", "pk": 35, "fields": {"name": "Can delete page", "content_type": 1, "codename": "delete_page"}}, {"model": "auth.permission", "pk": 36, "fields": {"name": "Can view page", "content_type": 1, "codename": "view_page"}}, {"model": "auth.permission", "pk": 37, "fields": {"name": "Delete pages with children", "content_type": 1, "codename": "bulk_delete_page"}}, {"model": "auth.permission", "pk": 38, "fields": {"name": "Lock/unlock pages you've locked", "content_type": 1, "codename": "lock_page"}}, {"model": "auth.permission", "pk": 39, "fields": {"name": "Publish any page", "content_type": 1, "codename": "publish_page"}}, {"model": "auth.permission", "pk": 40, "fields": {"name": "Unlock any page", "content_type": 1, "codename": "unlock_page"}}, {"model": "auth.permission", "pk": 41, "fields": {"name": "Can add revision", "content_type": 12, "codename": "add_revision"}}, {"model": "auth.permission", "pk": 42, "fields": {"name": "Can change revision", "content_type": 12, "codename": "change_revision"}}, {"model": "auth.permission", "pk": 43, "fields": {"name": "Can delete revision", "content_type": 12, "codename": "delete_revision"}}, {"model": "auth.permission", "pk": 44, "fields": {"name": "Can view revision", "content_type": 12, "codename": "view_revision"}}, {"model": "auth.permission", "pk": 45, "fields": {"name": "Can add group page permission", "content_type": 13, "codename": "add_grouppagepermission"}}, {"model": "auth.permission", "pk": 46, "fields": {"name": "Can change group page permission", "content_type": 13, "codename": "change_grouppagepermission"}}, {"model": "auth.permission", "pk": 47, "fields": {"name": "Can delete group page permission", "content_type": 13, "codename": "delete_grouppagepermission"}}, {"model": "auth.permission", "pk": 48, "fields": {"name": "Can view group page permission", "content_type": 13, "codename": "view_grouppagepermission"}}, {"model": "auth.permission", "pk": 49, "fields": {"name": "Can add page view restriction", "content_type": 14, "codename": "add_pageviewrestriction"}}, {"model": "auth.permission", "pk": 50, "fields": {"name": "Can change page view restriction", "content_type": 14, "codename": "change_pageviewrestriction"}}, {"model": "auth.permission", "pk": 51, "fields": {"name": "Can delete page view restriction", "content_type": 14, "codename": "delete_pageviewrestriction"}}, {"model": "auth.permission", "pk": 52, "fields": {"name": "Can view page view restriction", "content_type": 14, "codename": "view_pageviewrestriction"}}, {"model": "auth.permission", "pk": 53, "fields": {"name": "Can add workflow page", "content_type": 15, "codename": "add_workflowpage"}}, {"model": "auth.permission", "pk": 54, "fields": {"name": "Can change workflow page", "content_type": 15, "codename": "change_workflowpage"}}, {"model": "auth.permission", "pk": 55, "fields": {"name": "Can delete workflow page", "content_type": 15, "codename": "delete_workflowpage"}}, {"model": "auth.permission", "pk": 56, "fields": {"name": "Can view workflow page", "content_type": 15, "codename": "view_workflowpage"}}, {"model": "auth.permission", "pk": 57, "fields": {"name": "Can add workflow content type", "content_type": 16, "codename": "add_workflowcontenttype"}}, {"model": "auth.permission", "pk": 58, "fields": {"name": "Can change workflow content type", "content_type": 16, "codename": "change_workflowcontenttype"}}, {"model": "auth.permission", "pk": 59, "fields": {"name": "Can delete workflow content type", "content_type": 16, "codename": "delete_workflowcontenttype"}}, {"model": "auth.permission", "pk": 60, "fields": {"name": "Can view workflow content type", "content_type": 16, "codename": "view_workflowcontenttype"}}, {"model": "auth.permission", "pk": 61, "fields": {"name": "Can add workflow task order", "content_type": 17, "codename": "add_workflowtask"}}, {"model": "auth.permission", "pk": 62, "fields": {"name": "Can change workflow task order", "content_type": 17, "codename": "change_workflowtask"}}, {"model": "auth.permission", "pk": 63, "fields": {"name": "Can delete workflow task order", "content_type": 17, "codename": "delete_workflowtask"}}, {"model": "auth.permission", "pk": 64, "fields": {"name": "Can view workflow task order", "content_type": 17, "codename": "view_workflowtask"}}, {"model": "auth.permission", "pk": 65, "fields": {"name": "Can add task", "content_type": 18, "codename": "add_task"}}, {"model": "auth.permission", "pk": 66, "fields": {"name": "Can change task", "content_type": 18, "codename": "change_task"}}, {"model": "auth.permission", "pk": 67, "fields": {"name": "Can delete task", "content_type": 18, "codename": "delete_task"}}, {"model": "auth.permission", "pk": 68, "fields": {"name": "Can view task", "content_type": 18, "codename": "view_task"}}, {"model": "auth.permission", "pk": 69, "fields": {"name": "Can add workflow", "content_type": 19, "codename": "add_workflow"}}, {"model": "auth.permission", "pk": 70, "fields": {"name": "Can change workflow", "content_type": 19, "codename": "change_workflow"}}, {"model": "auth.permission", "pk": 71, "fields": {"name": "Can delete workflow", "content_type": 19, "codename": "delete_workflow"}}, {"model": "auth.permission", "pk": 72, "fields": {"name": "Can view workflow", "content_type": 19, "codename": "view_workflow"}}, {"model": "auth.permission", "pk": 73, "fields": {"name": "Can add Group approval task", "content_type": 3, "codename": "add_groupapprovaltask"}}, {"model": "auth.permission", "pk": 74, "fields": {"name": "Can change Group approval task", "content_type": 3, "codename": "change_groupapprovaltask"}}, {"model": "auth.permission", "pk": 75, "fields": {"name": "Can delete Group approval task", "content_type": 3, "codename": "delete_groupapprovaltask"}}, {"model": "auth.permission", "pk": 76, "fields": {"name": "Can view Group approval task", "content_type": 3, "codename": "view_groupapprovaltask"}}, {"model": "auth.permission", "pk": 77, "fields": {"name": "Can add Workflow state", "content_type": 20, "codename": "add_workflowstate"}}, {"model": "auth.permission", "pk": 78, "fields": {"name": "Can change Workflow state", "content_type": 20, "codename": "change_workflowstate"}}, {"model": "auth.permission", "pk": 79, "fields": {"name": "Can delete Workflow state", "content_type": 20, "codename": "delete_workflowstate"}}, {"model": "auth.permission", "pk": 80, "fields": {"name": "Can view Workflow state", "content_type": 20, "codename": "view_workflowstate"}}, {"model": "auth.permission", "pk": 81, "fields": {"name": "Can add Task state", "content_type": 21, "codename": "add_taskstate"}}, {"model": "auth.permission", "pk": 82, "fields": {"name": "Can change Task state", "content_type": 21, "codename": "change_taskstate"}}, {"model": "auth.permission", "pk": 83, "fields": {"name": "Can delete Task state", "content_type": 21, "codename": "delete_taskstate"}}, {"model": "auth.permission", "pk": 84, "fields": {"name": "Can view Task state", "content_type": 21, "codename": "view_taskstate"}}, {"model": "auth.permission", "pk": 85, "fields": {"name": "Can add page log entry", "content_type": 22, "codename": "add_pagelogentry"}}, {"model": "auth.permission", "pk": 86, "fields": {"name": "Can change page log entry", "content_type": 22, "codename": "change_pagelogentry"}}, {"model": "auth.permission", "pk": 87, "fields": {"name": "Can delete page log entry", "content_type": 22, "codename": "delete_pagelogentry"}}, {"model": "auth.permission", "pk": 88, "fields": {"name": "Can view page log entry", "content_type": 22, "codename": "view_pagelogentry"}}, {"model": "auth.permission", "pk": 89, "fields": {"name": "Can add comment", "content_type": 23, "codename": "add_comment"}}, {"model": "auth.permission", "pk": 90, "fields": {"name": "Can change comment", "content_type": 23, "codename": "change_comment"}}, {"model": "auth.permission", "pk": 91, "fields": {"name": "Can delete comment", "content_type": 23, "codename": "delete_comment"}}, {"model": "auth.permission", "pk": 92, "fields": {"name": "Can view comment", "content_type": 23, "codename": "view_comment"}}, {"model": "auth.permission", "pk": 93, "fields": {"name": "Can add comment reply", "content_type": 24, "codename": "add_commentreply"}}, {"model": "auth.permission", "pk": 94, "fields": {"name": "Can change comment reply", "content_type": 24, "codename": "change_commentreply"}}, {"model": "auth.permission", "pk": 95, "fields": {"name": "Can delete comment reply", "content_type": 24, "codename": "delete_commentreply"}}, {"model": "auth.permission", "pk": 96, "fields": {"name": "Can view comment reply", "content_type": 24, "codename": "view_commentreply"}}, {"model": "auth.permission", "pk": 97, "fields": {"name": "Can add page subscription", "content_type": 25, "codename": "add_pagesubscription"}}, {"model": "auth.permission", "pk": 98, "fields": {"name": "Can change page subscription", "content_type": 25, "codename": "change_pagesubscription"}}, {"model": "auth.permission", "pk": 99, "fields": {"name": "Can delete page subscription", "content_type": 25, "codename": "delete_pagesubscription"}}, {"model": "auth.permission", "pk": 100, "fields": {"name": "Can view page subscription", "content_type": 25, "codename": "view_pagesubscription"}}, {"model": "auth.permission", "pk": 101, "fields": {"name": "Can access Wagtail admin", "content_type": 26, "codename": "access_admin"}}, {"model": "auth.permission", "pk": 102, "fields": {"name": "Can add document", "content_type": 27, "codename": "add_document"}}, {"model": "auth.permission", "pk": 103, "fields": {"name": "Can change document", "content_type": 27, "codename": "change_document"}}, {"model": "auth.permission", "pk": 104, "fields": {"name": "Can delete document", "content_type": 27, "codename": "delete_document"}}, {"model": "auth.permission", "pk": 105, "fields": {"name": "Can choose document", "content_type": 27, "codename": "choose_document"}}, {"model": "auth.permission", "pk": 106, "fields": {"name": "Can add home page", "content_type": 4, "codename": "add_homepage"}}, {"model": "auth.permission", "pk": 107, "fields": {"name": "Can change home page", "content_type": 4, "codename": "change_homepage"}}, {"model": "auth.permission", "pk": 108, "fields": {"name": "Can delete home page", "content_type": 4, "codename": "delete_homepage"}}, {"model": "auth.permission", "pk": 109, "fields": {"name": "Can view home page", "content_type": 4, "codename": "view_homepage"}}, {"model": "auth.permission", "pk": 110, "fields": {"name": "Can add generic settings", "content_type": 28, "codename": "add_genericsettings"}}, {"model": "auth.permission", "pk": 111, "fields": {"name": "Can change generic settings", "content_type": 28, "codename": "change_genericsettings"}}, {"model": "auth.permission", "pk": 112, "fields": {"name": "Can delete generic settings", "content_type": 28, "codename": "delete_genericsettings"}}, {"model": "auth.permission", "pk": 113, "fields": {"name": "Can view generic settings", "content_type": 28, "codename": "view_genericsettings"}}, {"model": "auth.permission", "pk": 114, "fields": {"name": "Can add standard page", "content_type": 29, "codename": "add_standardpage"}}, {"model": "auth.permission", "pk": 115, "fields": {"name": "Can change standard page", "content_type": 29, "codename": "change_standardpage"}}, {"model": "auth.permission", "pk": 116, "fields": {"name": "Can delete standard page", "content_type": 29, "codename": "delete_standardpage"}}, {"model": "auth.permission", "pk": 117, "fields": {"name": "Can view standard page", "content_type": 29, "codename": "view_standardpage"}}, {"model": "auth.permission", "pk": 118, "fields": {"name": "Can add site settings", "content_type": 30, "codename": "add_sitesettings"}}, {"model": "auth.permission", "pk": 119, "fields": {"name": "Can change site settings", "content_type": 30, "codename": "change_sitesettings"}}, {"model": "auth.permission", "pk": 120, "fields": {"name": "Can delete site settings", "content_type": 30, "codename": "delete_sitesettings"}}, {"model": "auth.permission", "pk": 121, "fields": {"name": "Can view site settings", "content_type": 30, "codename": "view_sitesettings"}}, {"model": "auth.permission", "pk": 122, "fields": {"name": "Can add Person", "content_type": 31, "codename": "add_person"}}, {"model": "auth.permission", "pk": 123, "fields": {"name": "Can change Person", "content_type": 31, "codename": "change_person"}}, {"model": "auth.permission", "pk": 124, "fields": {"name": "Can delete Person", "content_type": 31, "codename": "delete_person"}}, {"model": "auth.permission", "pk": 125, "fields": {"name": "Can view Person", "content_type": 31, "codename": "view_person"}}, {"model": "auth.permission", "pk": 126, "fields": {"name": "Can add gallery page", "content_type": 32, "codename": "add_gallerypage"}}, {"model": "auth.permission", "pk": 127, "fields": {"name": "Can change gallery page", "content_type": 32, "codename": "change_gallerypage"}}, {"model": "auth.permission", "pk": 128, "fields": {"name": "Can delete gallery page", "content_type": 32, "codename": "delete_gallerypage"}}, {"model": "auth.permission", "pk": 129, "fields": {"name": "Can view gallery page", "content_type": 32, "codename": "view_gallerypage"}}, {"model": "auth.permission", "pk": 130, "fields": {"name": "Can add form page", "content_type": 33, "codename": "add_formpage"}}, {"model": "auth.permission", "pk": 131, "fields": {"name": "Can change form page", "content_type": 33, "codename": "change_formpage"}}, {"model": "auth.permission", "pk": 132, "fields": {"name": "Can delete form page", "content_type": 33, "codename": "delete_formpage"}}, {"model": "auth.permission", "pk": 133, "fields": {"name": "Can view form page", "content_type": 33, "codename": "view_formpage"}}, {"model": "auth.permission", "pk": 134, "fields": {"name": "Can add form field", "content_type": 34, "codename": "add_formfield"}}, {"model": "auth.permission", "pk": 135, "fields": {"name": "Can change form field", "content_type": 34, "codename": "change_formfield"}}, {"model": "auth.permission", "pk": 136, "fields": {"name": "Can delete form field", "content_type": 34, "codename": "delete_formfield"}}, {"model": "auth.permission", "pk": 137, "fields": {"name": "Can view form field", "content_type": 34, "codename": "view_formfield"}}, {"model": "auth.permission", "pk": 138, "fields": {"name": "Can add footer text", "content_type": 35, "codename": "add_footertext"}}, {"model": "auth.permission", "pk": 139, "fields": {"name": "Can change footer text", "content_type": 35, "codename": "change_footertext"}}, {"model": "auth.permission", "pk": 140, "fields": {"name": "Can delete footer text", "content_type": 35, "codename": "delete_footertext"}}, {"model": "auth.permission", "pk": 141, "fields": {"name": "Can view footer text", "content_type": 35, "codename": "view_footertext"}}, {"model": "auth.permission", "pk": 142, "fields": {"name": "Can add form submission", "content_type": 36, "codename": "add_formsubmission"}}, {"model": "auth.permission", "pk": 143, "fields": {"name": "Can change form submission", "content_type": 36, "codename": "change_formsubmission"}}, {"model": "auth.permission", "pk": 144, "fields": {"name": "Can delete form submission", "content_type": 36, "codename": "delete_formsubmission"}}, {"model": "auth.permission", "pk": 145, "fields": {"name": "Can view form submission", "content_type": 36, "codename": "view_formsubmission"}}, {"model": "auth.permission", "pk": 146, "fields": {"name": "Can add redirect", "content_type": 37, "codename": "add_redirect"}}, {"model": "auth.permission", "pk": 147, "fields": {"name": "Can change redirect", "content_type": 37, "codename": "change_redirect"}}, {"model": "auth.permission", "pk": 148, "fields": {"name": "Can delete redirect", "content_type": 37, "codename": "delete_redirect"}}, {"model": "auth.permission", "pk": 149, "fields": {"name": "Can view redirect", "content_type": 37, "codename": "view_redirect"}}, {"model": "auth.permission", "pk": 150, "fields": {"name": "Can add embed", "content_type": 38, "codename": "add_embed"}}, {"model": "auth.permission", "pk": 151, "fields": {"name": "Can change embed", "content_type": 38, "codename": "change_embed"}}, {"model": "auth.permission", "pk": 152, "fields": {"name": "Can delete embed", "content_type": 38, "codename": "delete_embed"}}, {"model": "auth.permission", "pk": 153, "fields": {"name": "Can view embed", "content_type": 38, "codename": "view_embed"}}, {"model": "auth.permission", "pk": 154, "fields": {"name": "Can add user profile", "content_type": 39, "codename": "add_userprofile"}}, {"model": "auth.permission", "pk": 155, "fields": {"name": "Can change user profile", "content_type": 39, "codename": "change_userprofile"}}, {"model": "auth.permission", "pk": 156, "fields": {"name": "Can delete user profile", "content_type": 39, "codename": "delete_userprofile"}}, {"model": "auth.permission", "pk": 157, "fields": {"name": "Can view user profile", "content_type": 39, "codename": "view_userprofile"}}, {"model": "auth.permission", "pk": 158, "fields": {"name": "Can view document", "content_type": 27, "codename": "view_document"}}, {"model": "auth.permission", "pk": 159, "fields": {"name": "Can add uploaded document", "content_type": 40, "codename": "add_uploadeddocument"}}, {"model": "auth.permission", "pk": 160, "fields": {"name": "Can change uploaded document", "content_type": 40, "codename": "change_uploadeddocument"}}, {"model": "auth.permission", "pk": 161, "fields": {"name": "Can delete uploaded document", "content_type": 40, "codename": "delete_uploadeddocument"}}, {"model": "auth.permission", "pk": 162, "fields": {"name": "Can view uploaded document", "content_type": 40, "codename": "view_uploadeddocument"}}, {"model": "auth.permission", "pk": 163, "fields": {"name": "Can view image", "content_type": 2, "codename": "view_image"}}, {"model": "auth.permission", "pk": 164, "fields": {"name": "Can add rendition", "content_type": 41, "codename": "add_rendition"}}, {"model": "auth.permission", "pk": 165, "fields": {"name": "Can change rendition", "content_type": 41, "codename": "change_rendition"}}, {"model": "auth.permission", "pk": 166, "fields": {"name": "Can delete rendition", "content_type": 41, "codename": "delete_rendition"}}, {"model": "auth.permission", "pk": 167, "fields": {"name": "Can view rendition", "content_type": 41, "codename": "view_rendition"}}, {"model": "auth.permission", "pk": 168, "fields": {"name": "Can add uploaded image", "content_type": 42, "codename": "add_uploadedimage"}}, {"model": "auth.permission", "pk": 169, "fields": {"name": "Can change uploaded image", "content_type": 42, "codename": "change_uploadedimage"}}, {"model": "auth.permission", "pk": 170, "fields": {"name": "Can delete uploaded image", "content_type": 42, "codename": "delete_uploadedimage"}}, {"model": "auth.permission", "pk": 171, "fields": {"name": "Can view uploaded image", "content_type": 42, "codename": "view_uploadedimage"}}, {"model": "auth.permission", "pk": 172, "fields": {"name": "Can add index entry", "content_type": 43, "codename": "add_indexentry"}}, {"model": "auth.permission", "pk": 173, "fields": {"name": "Can change index entry", "content_type": 43, "codename": "change_indexentry"}}, {"model": "auth.permission", "pk": 174, "fields": {"name": "Can delete index entry", "content_type": 43, "codename": "delete_indexentry"}}, {"model": "auth.permission", "pk": 175, "fields": {"name": "Can view index entry", "content_type": 43, "codename": "view_indexentry"}}, {"model": "auth.permission", "pk": 176, "fields": {"name": "Can add sqliteftsindexentry", "content_type": 44, "codename": "add_sqliteftsindexentry"}}, {"model": "auth.permission", "pk": 177, "fields": {"name": "Can change sqliteftsindexentry", "content_type": 44, "codename": "change_sqliteftsindexentry"}}, {"model": "auth.permission", "pk": 178, "fields": {"name": "Can delete sqliteftsindexentry", "content_type": 44, "codename": "delete_sqliteftsindexentry"}}, {"model": "auth.permission", "pk": 179, "fields": {"name": "Can view sqliteftsindexentry", "content_type": 44, "codename": "view_sqliteftsindexentry"}}, {"model": "auth.permission", "pk": 180, "fields": {"name": "Can add tag", "content_type": 45, "codename": "add_tag"}}, {"model": "auth.permission", "pk": 181, "fields": {"name": "Can change tag", "content_type": 45, "codename": "change_tag"}}, {"model": "auth.permission", "pk": 182, "fields": {"name": "Can delete tag", "content_type": 45, "codename": "delete_tag"}}, {"model": "auth.permission", "pk": 183, "fields": {"name": "Can view tag", "content_type": 45, "codename": "view_tag"}}, {"model": "auth.permission", "pk": 184, "fields": {"name": "Can add tagged item", "content_type": 46, "codename": "add_taggeditem"}}, {"model": "auth.permission", "pk": 185, "fields": {"name": "Can change tagged item", "content_type": 46, "codename": "change_taggeditem"}}, {"model": "auth.permission", "pk": 186, "fields": {"name": "Can delete tagged item", "content_type": 46, "codename": "delete_taggeditem"}}, {"model": "auth.permission", "pk": 187, "fields": {"name": "Can view tagged item", "content_type": 46, "codename": "view_taggeditem"}}, {"model": "auth.permission", "pk": 188, "fields": {"name": "Can add log entry", "content_type": 47, "codename": "add_logentry"}}, {"model": "auth.permission", "pk": 189, "fields": {"name": "Can change log entry", "content_type": 47, "codename": "change_logentry"}}, {"model": "auth.permission", "pk": 190, "fields": {"name": "Can delete log entry", "content_type": 47, "codename": "delete_logentry"}}, {"model": "auth.permission", "pk": 191, "fields": {"name": "Can view log entry", "content_type": 47, "codename": "view_logentry"}}, {"model": "auth.permission", "pk": 192, "fields": {"name": "Can add permission", "content_type": 48, "codename": "add_permission"}}, {"model": "auth.permission", "pk": 193, "fields": {"name": "Can change permission", "content_type": 48, "codename": "change_permission"}}, {"model": "auth.permission", "pk": 194, "fields": {"name": "Can delete permission", "content_type": 48, "codename": "delete_permission"}}, {"model": "auth.permission", "pk": 195, "fields": {"name": "Can view permission", "content_type": 48, "codename": "view_permission"}}, {"model": "auth.permission", "pk": 196, "fields": {"name": "Can add group", "content_type": 49, "codename": "add_group"}}, {"model": "auth.permission", "pk": 197, "fields": {"name": "Can change group", "content_type": 49, "codename": "change_group"}}, {"model": "auth.permission", "pk": 198, "fields": {"name": "Can delete group", "content_type": 49, "codename": "delete_group"}}, {"model": "auth.permission", "pk": 199, "fields": {"name": "Can view group", "content_type": 49, "codename": "view_group"}}, {"model": "auth.permission", "pk": 200, "fields": {"name": "Can add user", "content_type": 50, "codename": "add_user"}}, {"model": "auth.permission", "pk": 201, "fields": {"name": "Can change user", "content_type": 50, "codename": "change_user"}}, {"model": "auth.permission", "pk": 202, "fields": {"name": "Can delete user", "content_type": 50, "codename": "delete_user"}}, {"model": "auth.permission", "pk": 203, "fields": {"name": "Can view user", "content_type": 50, "codename": "view_user"}}, {"model": "auth.permission", "pk": 204, "fields": {"name": "Can add content type", "content_type": 51, "codename": "add_contenttype"}}, {"model": "auth.permission", "pk": 205, "fields": {"name": "Can change content type", "content_type": 51, "codename": "change_contenttype"}}, {"model": "auth.permission", "pk": 206, "fields": {"name": "Can delete content type", "content_type": 51, "codename": "delete_contenttype"}}, {"model": "auth.permission", "pk": 207, "fields": {"name": "Can view content type", "content_type": 51, "codename": "view_contenttype"}}, {"model": "auth.permission", "pk": 208, "fields": {"name": "Can add session", "content_type": 52, "codename": "add_session"}}, {"model": "auth.permission", "pk": 209, "fields": {"name": "Can change session", "content_type": 52, "codename": "change_session"}}, {"model": "auth.permission", "pk": 210, "fields": {"name": "Can delete session", "content_type": 52, "codename": "delete_session"}}, {"model": "auth.permission", "pk": 211, "fields": {"name": "Can view session", "content_type": 52, "codename": "view_session"}}, {"model": "auth.permission", "pk": 212, "fields": {"name": "Can add unblocklife logo", "content_type": 53, "codename": "add_unblocklifelogo"}}, {"model": "auth.permission", "pk": 213, "fields": {"name": "Can change unblocklife logo", "content_type": 53, "codename": "change_unblocklifelogo"}}, {"model": "auth.permission", "pk": 214, "fields": {"name": "Can delete unblocklife logo", "content_type": 53, "codename": "delete_unblocklifelogo"}}, {"model": "auth.permission", "pk": 215, "fields": {"name": "Can view unblocklife logo", "content_type": 53, "codename": "view_unblocklifelogo"}}, {"model": "auth.permission", "pk": 216, "fields": {"name": "Can add unblocklife thankyou", "content_type": 54, "codename": "add_unblocklifethankyou"}}, {"model": "auth.permission", "pk": 217, "fields": {"name": "Can change unblocklife thankyou", "content_type": 54, "codename": "change_unblocklifethankyou"}}, {"model": "auth.permission", "pk": 218, "fields": {"name": "Can delete unblocklife thankyou", "content_type": 54, "codename": "delete_unblocklifethankyou"}}, {"model": "auth.permission", "pk": 219, "fields": {"name": "Can view unblocklife thankyou", "content_type": 54, "codename": "view_unblocklifethankyou"}}, {"model": "auth.permission", "pk": 220, "fields": {"name": "Can add courses page", "content_type": 55, "codename": "add_coursespage"}}, {"model": "auth.permission", "pk": 221, "fields": {"name": "Can change courses page", "content_type": 55, "codename": "change_coursespage"}}, {"model": "auth.permission", "pk": 222, "fields": {"name": "Can delete courses page", "content_type": 55, "codename": "delete_coursespage"}}, {"model": "auth.permission", "pk": 223, "fields": {"name": "Can view courses page", "content_type": 55, "codename": "view_coursespage"}}, {"model": "auth.permission", "pk": 224, "fields": {"name": "Can add courses index page", "content_type": 56, "codename": "add_coursesindexpage"}}, {"model": "auth.permission", "pk": 225, "fields": {"name": "Can change courses index page", "content_type": 56, "codename": "change_coursesindexpage"}}, {"model": "auth.permission", "pk": 226, "fields": {"name": "Can delete courses index page", "content_type": 56, "codename": "delete_coursesindexpage"}}, {"model": "auth.permission", "pk": 227, "fields": {"name": "Can view courses index page", "content_type": 56, "codename": "view_coursesindexpage"}}, {"model": "auth.permission", "pk": 228, "fields": {"name": "Can add courses page tag", "content_type": 57, "codename": "add_coursespagetag"}}, {"model": "auth.permission", "pk": 229, "fields": {"name": "Can change courses page tag", "content_type": 57, "codename": "change_coursespagetag"}}, {"model": "auth.permission", "pk": 230, "fields": {"name": "Can delete courses page tag", "content_type": 57, "codename": "delete_coursespagetag"}}, {"model": "auth.permission", "pk": 231, "fields": {"name": "Can view courses page tag", "content_type": 57, "codename": "view_coursespagetag"}}, {"model": "auth.group", "pk": 1, "fields": {"name": "Moderators", "permissions": [101, 102, 103, 105, 104, 1, 2, 3]}}, {"model": "auth.group", "pk": 2, "fields": {"name": "Editors", "permissions": [101, 102, 103, 105, 104, 1, 2, 3]}}, {"model": "auth.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$600000$GfuVDVybksjdIwXISMbnYF$S41IQOG0xHyOq6zT7FSHfx6eufz7zz5QP/jKmItLhu0=", "last_login": "2024-07-20T11:51:53.324Z", "is_superuser": true, "username": "info@unblocklife.in", "first_name": "", "last_name": "", "email": "info@unblocklife.in", "is_staff": true, "is_active": true, "date_joined": "2024-07-16T10:25:29.284Z", "groups": [], "user_permissions": []}}, {"model": "contenttypes.contenttype", "pk": 1, "fields": {"app_label": "wagtailcore", "model": "page"}}, {"model": "contenttypes.contenttype", "pk": 2, "fields": {"app_label": "wagtailimages", "model": "image"}}, {"model": "contenttypes.contenttype", "pk": 3, "fields": {"app_label": "wagtailcore", "model": "groupapprovaltask"}}, {"model": "contenttypes.contenttype", "pk": 4, "fields": {"app_label": "home", "model": "homepage"}}, {"model": "contenttypes.contenttype", "pk": 5, "fields": {"app_label": "wagtailcore", "model": "locale"}}, {"model": "contenttypes.contenttype", "pk": 6, "fields": {"app_label": "wagtailcore", "model": "site"}}, {"model": "contenttypes.contenttype", "pk": 7, "fields": {"app_label": "wagtailcore", "model": "modellogentry"}}, {"model": "contenttypes.contenttype", "pk": 8, "fields": {"app_label": "wagtailcore", "model": "collectionviewrestriction"}}, {"model": "contenttypes.contenttype", "pk": 9, "fields": {"app_label": "wagtailcore", "model": "collection"}}, {"model": "contenttypes.contenttype", "pk": 10, "fields": {"app_label": "wagtailcore", "model": "groupcollectionpermission"}}, {"model": "contenttypes.contenttype", "pk": 11, "fields": {"app_label": "wagtailcore", "model": "referenceindex"}}, {"model": "contenttypes.contenttype", "pk": 12, "fields": {"app_label": "wagtailcore", "model": "revision"}}, {"model": "contenttypes.contenttype", "pk": 13, "fields": {"app_label": "wagtailcore", "model": "grouppagepermission"}}, {"model": "contenttypes.contenttype", "pk": 14, "fields": {"app_label": "wagtailcore", "model": "pageviewrestriction"}}, {"model": "contenttypes.contenttype", "pk": 15, "fields": {"app_label": "wagtailcore", "model": "workflowpage"}}, {"model": "contenttypes.contenttype", "pk": 16, "fields": {"app_label": "wagtailcore", "model": "workflowcontenttype"}}, {"model": "contenttypes.contenttype", "pk": 17, "fields": {"app_label": "wagtailcore", "model": "workflowtask"}}, {"model": "contenttypes.contenttype", "pk": 18, "fields": {"app_label": "wagtailcore", "model": "task"}}, {"model": "contenttypes.contenttype", "pk": 19, "fields": {"app_label": "wagtailcore", "model": "workflow"}}, {"model": "contenttypes.contenttype", "pk": 20, "fields": {"app_label": "wagtailcore", "model": "workflowstate"}}, {"model": "contenttypes.contenttype", "pk": 21, "fields": {"app_label": "wagtailcore", "model": "taskstate"}}, {"model": "contenttypes.contenttype", "pk": 22, "fields": {"app_label": "wagtailcore", "model": "pagelogentry"}}, {"model": "contenttypes.contenttype", "pk": 23, "fields": {"app_label": "wagtailcore", "model": "comment"}}, {"model": "contenttypes.contenttype", "pk": 24, "fields": {"app_label": "wagtailcore", "model": "commentreply"}}, {"model": "contenttypes.contenttype", "pk": 25, "fields": {"app_label": "wagtailcore", "model": "pagesubscription"}}, {"model": "contenttypes.contenttype", "pk": 26, "fields": {"app_label": "wagtailadmin", "model": "admin"}}, {"model": "contenttypes.contenttype", "pk": 27, "fields": {"app_label": "wagtaildocs", "model": "document"}}, {"model": "contenttypes.contenttype", "pk": 28, "fields": {"app_label": "home", "model": "genericsettings"}}, {"model": "contenttypes.contenttype", "pk": 29, "fields": {"app_label": "home", "model": "standardpage"}}, {"model": "contenttypes.contenttype", "pk": 30, "fields": {"app_label": "home", "model": "sitesettings"}}, {"model": "contenttypes.contenttype", "pk": 31, "fields": {"app_label": "home", "model": "person"}}, {"model": "contenttypes.contenttype", "pk": 32, "fields": {"app_label": "home", "model": "gallerypage"}}, {"model": "contenttypes.contenttype", "pk": 33, "fields": {"app_label": "home", "model": "formpage"}}, {"model": "contenttypes.contenttype", "pk": 34, "fields": {"app_label": "home", "model": "formfield"}}, {"model": "contenttypes.contenttype", "pk": 35, "fields": {"app_label": "home", "model": "footertext"}}, {"model": "contenttypes.contenttype", "pk": 36, "fields": {"app_label": "wagtailforms", "model": "formsubmission"}}, {"model": "contenttypes.contenttype", "pk": 37, "fields": {"app_label": "wagtailredirects", "model": "redirect"}}, {"model": "contenttypes.contenttype", "pk": 38, "fields": {"app_label": "wagtailembeds", "model": "embed"}}, {"model": "contenttypes.contenttype", "pk": 39, "fields": {"app_label": "wagtailusers", "model": "userprofile"}}, {"model": "contenttypes.contenttype", "pk": 40, "fields": {"app_label": "wagtaildocs", "model": "uploadeddocument"}}, {"model": "contenttypes.contenttype", "pk": 41, "fields": {"app_label": "wagtailimages", "model": "rendition"}}, {"model": "contenttypes.contenttype", "pk": 42, "fields": {"app_label": "wagtailimages", "model": "uploadedimage"}}, {"model": "contenttypes.contenttype", "pk": 43, "fields": {"app_label": "wagtailsearch", "model": "indexentry"}}, {"model": "contenttypes.contenttype", "pk": 44, "fields": {"app_label": "wagtailsearch", "model": "sqliteftsindexentry"}}, {"model": "contenttypes.contenttype", "pk": 45, "fields": {"app_label": "taggit", "model": "tag"}}, {"model": "contenttypes.contenttype", "pk": 46, "fields": {"app_label": "taggit", "model": "taggeditem"}}, {"model": "contenttypes.contenttype", "pk": 47, "fields": {"app_label": "admin", "model": "logentry"}}, {"model": "contenttypes.contenttype", "pk": 48, "fields": {"app_label": "auth", "model": "permission"}}, {"model": "contenttypes.contenttype", "pk": 49, "fields": {"app_label": "auth", "model": "group"}}, {"model": "contenttypes.contenttype", "pk": 50, "fields": {"app_label": "auth", "model": "user"}}, {"model": "contenttypes.contenttype", "pk": 51, "fields": {"app_label": "contenttypes", "model": "contenttype"}}, {"model": "contenttypes.contenttype", "pk": 52, "fields": {"app_label": "sessions", "model": "session"}}, {"model": "contenttypes.contenttype", "pk": 53, "fields": {"app_label": "home", "model": "unblocklifelogo"}}, {"model": "contenttypes.contenttype", "pk": 54, "fields": {"app_label": "home", "model": "unblocklifethankyou"}}, {"model": "contenttypes.contenttype", "pk": 55, "fields": {"app_label": "courses", "model": "coursespage"}}, {"model": "contenttypes.contenttype", "pk": 56, "fields": {"app_label": "courses", "model": "coursesindexpage"}}, {"model": "contenttypes.contenttype", "pk": 57, "fields": {"app_label": "courses", "model": "coursespagetag"}}, {"model": "sessions.session", "pk": "3f203b3ibzp803plrlibx0st1r8hs7ak", "fields": {"session_data": ".eJxVjMsOwiAURP-FtSFAL68u3fsNBC5oUQMG2kRj_HfbpAvdTWbOnDdxfpknt_TUXI5kJJwcfrvg8ZbKNsSrL5dKsZa55UA3hO5rp6ca0_24s3-CyfdpfQfBGCiU3ASAAa2WQvMhcaUCAysMGhE0OwuJyprIvVyTlzAwBASrxSbtqfdci0vPR24vMrLPFy2RPYU:1sTfNQ:kXNoyX0gvumBnH0vor94CJiSxA6_IPzz-qxlPZdVlwo", "expire_date": "2024-07-30T10:25:44.840Z"}}, {"model": "sessions.session", "pk": "6jlluf3pr9s7i0k2edgh4mfo7i77k587", "fields": {"session_data": ".eJxVjMsOwiAURP-FtSFAL68u3fsNBC5oUQMG2kRj_HfbpAvdTWbOnDdxfpknt_TUXI5kJJwcfrvg8ZbKNsSrL5dKsZa55UA3hO5rp6ca0_24s3-CyfdpfQfBGCiU3ASAAa2WQvMhcaUCAysMGhE0OwuJyprIvVyTlzAwBASrxSbtqfdci0vPR24vMrLPFy2RPYU:1sV8cz:_fLo1e7yxGKFOY8f9g2sSjR7T7ox9w5e2V5zu8E4YsU", "expire_date": "2024-08-03T11:51:53.325Z"}}, {"model": "sessions.session", "pk": "gh3fgyliev4q7cq2jgsgyarezbtjrwm9", "fields": {"session_data": ".eJxVjMsOwiAURP-FtSFAL68u3fsNBC5oUQMG2kRj_HfbpAvdTWbOnDdxfpknt_TUXI5kJJwcfrvg8ZbKNsSrL5dKsZa55UA3hO5rp6ca0_24s3-CyfdpfQfBGCiU3ASAAa2WQvMhcaUCAysMGhE0OwuJyprIvVyTlzAwBASrxSbtqfdci0vPR24vMrLPFy2RPYU:1sV71P:eLH8c6Dm28lKmfkG3zDJF-t_BudJgPat1g-9Jqefs0I", "expire_date": "2024-08-03T10:08:59.674Z"}}, {"model": "sessions.session", "pk": "ulr1aqrr8c2afv40txy67w8vfp2jer7j", "fields": {"session_data": ".eJxVjMsOwiAURP-FtSFAL68u3fsNBC5oUQMG2kRj_HfbpAvdTWbOnDdxfpknt_TUXI5kJJwcfrvg8ZbKNsSrL5dKsZa55UA3hO5rp6ca0_24s3-CyfdpfQfBGCiU3ASAAa2WQvMhcaUCAysMGhE0OwuJyprIvVyTlzAwBASrxSbtqfdci0vPR24vMrLPFy2RPYU:1sUNDT:yYCBQyJbgRDRQfEs_gBPgcclUMPos75ZV7e8lJ98im8", "expire_date": "2024-08-01T09:14:23.445Z"}}] \ No newline at end of file diff --git a/home/__init__.py b/home/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/home/blocks.py b/home/blocks.py new file mode 100644 index 0000000..a2f3513 --- /dev/null +++ b/home/blocks.py @@ -0,0 +1,107 @@ +from wagtail.blocks import ( + CharBlock, + ChoiceBlock, + RichTextBlock, + StreamBlock, + StructBlock, + TextBlock, +) +from wagtail.embeds.blocks import EmbedBlock +from wagtail.images.blocks import ImageChooserBlock + + +class ImageBlock(StructBlock): + """ + Custom `StructBlock` for utilizing images with associated caption and + attribution data + """ + + image = ImageChooserBlock(required=True) + caption = CharBlock(required=False) + attribution = CharBlock(required=False) + + class Meta: + icon = "image" + template = "blocks/image_block.html" + + +class HeadingBlock(StructBlock): + """ + Custom `StructBlock` that allows the user to select h2 - h4 sizes for headers + """ + + heading_text = CharBlock(classname="title", required=True) + size = ChoiceBlock( + choices=[ + ("", "Select a header size"), + ("h2", "H2"), + ("h3", "H3"), + ("h4", "H4"), + ], + blank=True, + required=False, + ) + + class Meta: + icon = "title" + template = "blocks/heading_block.html" + + +class BlockQuote(StructBlock): + """ + Custom `StructBlock` that allows the user to attribute a quote to the author + """ + + text = TextBlock() + attribute_name = CharBlock(blank=True, required=False, label="e.g. Mary Berry") + + class Meta: + icon = "openquote" + template = "blocks/blockquote.html" + + +# StreamBlocks +class BaseStreamBlock(StreamBlock): + """ + Define the custom blocks that `StreamField` will utilize + """ + + heading_block = HeadingBlock() + paragraph_block = RichTextBlock( + icon="pilcrow", template="blocks/paragraph_block.html" + ) + image_block = ImageBlock() + block_quote = BlockQuote() + embed_block = EmbedBlock( + help_text="Insert an embed URL e.g https://www.youtube.com/watch?v=SGJFWirQ3ks", + icon="media", + template="blocks/embed_block.html", + ) + + +class ProfileBlock(StructBlock): + """ + Custom `StructBlock` for utilizing images with associated caption and + attribution data + """ + + image = ImageChooserBlock(required=True) + firstname = CharBlock(required=True) + lastname = CharBlock(required=False) + title = CharBlock(required=False) + linkedin = CharBlock(required=False) + short_profile = CharBlock(required=False) + + class Meta: + icon = "image" + template = "blocks/profile_image_block.html" + + + + +# Instructore - used for training/courses pages +class TrainerBlock(StreamBlock): + profile = ProfileBlock() + + + diff --git a/home/models.py b/home/models.py new file mode 100644 index 0000000..2fdf2ef --- /dev/null +++ b/home/models.py @@ -0,0 +1,554 @@ +from __future__ import unicode_literals + +from django.contrib.contenttypes.fields import GenericRelation +from django.db import models +from django.utils.translation import gettext as _ +from modelcluster.fields import ParentalKey +from modelcluster.models import ClusterableModel +from wagtail.admin.panels import ( + FieldPanel, + FieldRowPanel, + InlinePanel, + MultiFieldPanel, + PublishingPanel, +) +from wagtail.contrib.forms.models import AbstractEmailForm, AbstractFormField +from wagtail.contrib.settings.models import ( + BaseGenericSetting, + BaseSiteSetting, + register_setting, +) +from wagtail.fields import RichTextField, StreamField +from wagtail.models import ( + Collection, + DraftStateMixin, + LockableMixin, + Page, + PreviewableMixin, + RevisionMixin, + TranslatableMixin, + WorkflowMixin, +) +from wagtail.search import index +from .blocks import BaseStreamBlock +from wagtail.snippets.models import register_snippet + + +class Person( + WorkflowMixin, + DraftStateMixin, + LockableMixin, + RevisionMixin, + PreviewableMixin, + index.Indexed, + ClusterableModel, +): + """ + A Django model to store Person objects. + It is registered using `register_snippet` as a function in wagtail_hooks.py + to allow it to have a menu item within a custom menu item group. + + `Person` uses the `ClusterableModel`, which allows the relationship with + another model to be stored locally to the 'parent' model (e.g. a PageModel) + until the parent is explicitly saved. This allows the editor to use the + 'Preview' button, to preview the content, without saving the relationships + to the database. + https://github.com/wagtail/django-modelcluster + """ + + first_name = models.CharField("First name", max_length=254) + last_name = models.CharField("Last name", max_length=254) + job_title = models.CharField("Job title", max_length=254) + + image = models.ForeignKey( + "wagtailimages.Image", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + ) + + workflow_states = GenericRelation( + "wagtailcore.WorkflowState", + content_type_field="base_content_type", + object_id_field="object_id", + related_query_name="person", + for_concrete_model=False, + ) + + revisions = GenericRelation( + "wagtailcore.Revision", + content_type_field="base_content_type", + object_id_field="object_id", + related_query_name="person", + for_concrete_model=False, + ) + + panels = [ + MultiFieldPanel( + [ + FieldRowPanel( + [ + FieldPanel("first_name"), + FieldPanel("last_name"), + ] + ) + ], + "Name", + ), + FieldPanel("job_title"), + FieldPanel("image"), + PublishingPanel(), + ] + + search_fields = [ + index.SearchField("first_name"), + index.SearchField("last_name"), + index.FilterField("job_title"), + index.AutocompleteField("first_name"), + index.AutocompleteField("last_name"), + ] + + @property + def thumb_image(self): + # Returns an empty string if there is no profile pic or the rendition + # file can't be found. + try: + return self.image.get_rendition("fill-50x50").img_tag() + except: # noqa: E722 FIXME: remove bare 'except:' + return "" + + @property + def preview_modes(self): + return PreviewableMixin.DEFAULT_PREVIEW_MODES + [("blog_post", _("Blog post"))] + + def __str__(self): + return "{} {}".format(self.first_name, self.last_name) + + def get_preview_template(self, request, mode_name): + from bakerydemo.blog.models import BlogPage + + if mode_name == "blog_post": + return BlogPage.template + return "base/preview/person.html" + + def get_preview_context(self, request, mode_name): + from bakerydemo.blog.models import BlogPage + + context = super().get_preview_context(request, mode_name) + if mode_name == self.default_preview_mode: + return context + + page = BlogPage.objects.filter(blog_person_relationship__person=self).first() + if page: + # Use the page authored by this person if available, + # and replace the instance from the database with the edited instance + page.authors = [ + self if author.pk == self.pk else author for author in page.authors() + ] + # The authors() method only shows live authors, so make sure the instance + # is included even if it's not live as this is just a preview + if not self.live: + page.authors.append(self) + else: + # Otherwise, get the first page and simulate the person as the author + page = BlogPage.objects.first() + page.authors = [self] + + context["page"] = page + return context + + class Meta: + verbose_name = "Person" + verbose_name_plural = "People" + + +class FooterText( + DraftStateMixin, + RevisionMixin, + PreviewableMixin, + TranslatableMixin, + models.Model, +): + """ + This provides editable text for the site footer. Again it is registered + using `register_snippet` as a function in wagtail_hooks.py to be grouped + together with the Person model inside the same main menu item. It is made + accessible on the template via a template tag defined in base/templatetags/ + navigation_tags.py + """ + + body = RichTextField() + + revisions = GenericRelation( + "wagtailcore.Revision", + content_type_field="base_content_type", + object_id_field="object_id", + related_query_name="footer_text", + for_concrete_model=False, + ) + + panels = [ + FieldPanel("body"), + PublishingPanel(), + ] + + def __str__(self): + return "Footer text" + + def get_preview_template(self, request, mode_name): + return "base.html" + + def get_preview_context(self, request, mode_name): + return {"footer_text": self.body} + + class Meta(TranslatableMixin.Meta): + verbose_name_plural = "Footer Text" + + +class StandardPage(Page): + """ + A generic content page. On this demo site we use it for an about page but + it could be used for any type of page content that only needs a title, + image, introduction and body field + """ + + introduction = models.TextField(help_text="Text to describe the page", blank=True) + image = models.ForeignKey( + "wagtailimages.Image", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + help_text="Landscape mode only; horizontal width between 1000px and 3000px.", + ) + body = StreamField( + BaseStreamBlock(), verbose_name="Page body", blank=True, use_json_field=True + ) + content_panels = Page.content_panels + [ + FieldPanel("introduction"), + FieldPanel("body"), + FieldPanel("image"), + ] + + +class HomePage(Page): + """ + The Home Page. This looks slightly more complicated than it is. You can + see if you visit your site and edit the homepage that it is split between + a: + - Hero area + - Body area + - A promotional area + - Moveable featured site sections + """ + + # Hero section of HomePage + image = models.ForeignKey( + "wagtailimages.Image", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + help_text="Homepage image", + ) + hero_text = models.CharField( + max_length=255, help_text="Write an introduction for the bakery", + default="We help craft the finance needs" + ) + hero_cta = models.CharField( + verbose_name="Hero CTA", + max_length=255, + help_text="Text to display on Call to Action", + null=True, + blank=True + ) + hero_cta_link = models.ForeignKey( + "wagtailcore.Page", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + verbose_name="Hero CTA link", + help_text="Choose a page to link to for the Call to Action", + ) + + # Body section of the HomePage + body = StreamField( + BaseStreamBlock(), + verbose_name="Home content block", + blank=True, + use_json_field=True, + ) + + # Promo section of the HomePage + promo_image = models.ForeignKey( + "wagtailimages.Image", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + help_text="Promo image", + ) + promo_title = models.CharField( + blank=True, max_length=255, help_text="Title to display above the promo copy" + ) + promo_text = RichTextField( + null=True, blank=True, max_length=1000, help_text="Write some promotional copy" + ) + + # Featured sections on the HomePage + # You will see on templates/base/home_page.html that these are treated + # in different ways, and displayed in different areas of the page. + # Each list their children items that we access via the children function + # that we define on the individual Page models e.g. BlogIndexPage + featured_section_1_title = models.CharField( + blank=True, max_length=255, help_text="Title to display above the promo copy" + ) + featured_section_1 = models.ForeignKey( + "wagtailcore.Page", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + help_text="First featured section for the homepage. Will display up to " + "three child items.", + verbose_name="Featured section 1", + ) + + featured_section_2_title = models.CharField( + blank=True, max_length=255, help_text="Title to display above the promo copy" + ) + featured_section_2 = models.ForeignKey( + "wagtailcore.Page", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + help_text="Second featured section for the homepage. Will display up to " + "three child items.", + verbose_name="Featured section 2", + ) + + featured_section_3_title = models.CharField( + blank=True, max_length=255, help_text="Title to display above the promo copy" + ) + featured_section_3 = models.ForeignKey( + "wagtailcore.Page", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + help_text="Third featured section for the homepage. Will display up to " + "six child items.", + verbose_name="Featured section 3", + ) + + content_panels = Page.content_panels + [ + MultiFieldPanel( + [ + FieldPanel("image"), + FieldPanel("hero_text"), + MultiFieldPanel( + [ + FieldPanel("hero_cta"), + FieldPanel("hero_cta_link"), + ] + ), + ], + heading="Hero section", + ), + MultiFieldPanel( + [ + FieldPanel("promo_image"), + FieldPanel("promo_title"), + FieldPanel("promo_text"), + ], + heading="Promo section", + ), + FieldPanel("body"), + MultiFieldPanel( + [ + MultiFieldPanel( + [ + FieldPanel("featured_section_1_title"), + FieldPanel("featured_section_1"), + ] + ), + MultiFieldPanel( + [ + FieldPanel("featured_section_2_title"), + FieldPanel("featured_section_2"), + ] + ), + MultiFieldPanel( + [ + FieldPanel("featured_section_3_title"), + FieldPanel("featured_section_3"), + ] + ), + ], + heading="Featured homepage sections", + ), + ] + + def __str__(self): + return self.title + + +class GalleryPage(Page): + """ + This is a page to list locations from the selected Collection. We use a Q + object to list any Collection created (/admin/collections/) even if they + contain no items. In this demo we use it for a GalleryPage, + and is intended to show the extensibility of this aspect of Wagtail + """ + + introduction = models.TextField(help_text="Text to describe the page", blank=True) + image = models.ForeignKey( + "wagtailimages.Image", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + help_text="Landscape mode only; horizontal width between 1000px and " "3000px.", + ) + body = StreamField( + BaseStreamBlock(), verbose_name="Page body", blank=True, use_json_field=True + ) + collection = models.ForeignKey( + Collection, + limit_choices_to=~models.Q(name__in=["Root"]), + null=True, + blank=True, + on_delete=models.SET_NULL, + help_text="Select the image collection for this gallery.", + ) + + content_panels = Page.content_panels + [ + FieldPanel("introduction"), + FieldPanel("body"), + FieldPanel("image"), + FieldPanel("collection"), + ] + + # Defining what content type can sit under the parent. Since it's a blank + # array no subpage can be added + subpage_types = [] + + +class FormField(AbstractFormField): + """ + Wagtailforms is a module to introduce simple forms on a Wagtail site. It + isn't intended as a replacement to Django's form support but as a quick way + to generate a general purpose data-collection form or contact form + without having to write code. We use it on the site for a contact form. You + can read more about Wagtail forms at: + https://docs.wagtail.org/en/stable/reference/contrib/forms/index.html + """ + + page = ParentalKey("FormPage", related_name="form_fields", on_delete=models.CASCADE) + + +class FormPage(AbstractEmailForm): + image = models.ForeignKey( + "wagtailimages.Image", + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + ) + body = StreamField(BaseStreamBlock(), use_json_field=True) + thank_you_text = RichTextField(blank=True) + + # Note how we include the FormField object via an InlinePanel using the + # related_name value + content_panels = AbstractEmailForm.content_panels + [ + FieldPanel("image"), + FieldPanel("body"), + InlinePanel("form_fields", heading="Form fields", label="Field"), + FieldPanel("thank_you_text"), + MultiFieldPanel( + [ + FieldRowPanel( + [ + FieldPanel("from_address"), + FieldPanel("to_address"), + ] + ), + FieldPanel("subject"), + ], + "Email", + ), + ] + + +@register_setting +class GenericSettings(ClusterableModel, BaseGenericSetting): + twitter_url = models.URLField(verbose_name="Twitter URL", blank=True) + github_url = models.URLField(verbose_name="GitHub URL", blank=True) + organisation_url = models.URLField(verbose_name="Organisation URL", blank=True) + + panels = [ + MultiFieldPanel( + [ + FieldPanel("github_url"), + FieldPanel("twitter_url"), + FieldPanel("organisation_url"), + ], + "Social settings", + ) + ] + + +@register_setting +class SiteSettings(BaseSiteSetting): + title_suffix = models.CharField( + verbose_name="Title suffix", + max_length=255, + help_text="The suffix for the title meta tag e.g. ' | The Wagtail Bakery'", + default="Unblock Personality", + ) + + panels = [ + FieldPanel("title_suffix"), + ] + + +@register_snippet +class UnblocklifeLogo(models.Model): + name = models.CharField(max_length=255) + logo = models.ForeignKey( + 'wagtailimages.Image', + null=True, + blank=True, + on_delete=models.SET_NULL, + ) + + def __str__(self): + return '{}'.format(self.name) + + panels =[ + FieldPanel('name'), + FieldPanel('logo'), + ] + +@register_snippet +class UnblocklifeThankyou(models.Model): + name = models.CharField(max_length=255) + thanks = models.ForeignKey( + 'wagtailimages.Image', + null=True, + blank=True, + on_delete=models.SET_NULL, + ) + + def __str__(self): + return '{}'.format(self.name) + + panels =[ + FieldPanel('name'), + FieldPanel('thanks'), + ] + + diff --git a/home/static/css/welcome_page.css b/home/static/css/welcome_page.css new file mode 100644 index 0000000..bad2933 --- /dev/null +++ b/home/static/css/welcome_page.css @@ -0,0 +1,184 @@ +html { + box-sizing: border-box; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + max-width: 960px; + min-height: 100vh; + margin: 0 auto; + padding: 0 15px; + color: #231f20; + font-family: 'Helvetica Neue', 'Segoe UI', Arial, sans-serif; + line-height: 1.25; +} + +a { + background-color: transparent; + color: #308282; + text-decoration: underline; +} + +a:hover { + color: #ea1b10; +} + +h1, +h2, +h3, +h4, +h5, +p, +ul { + padding: 0; + margin: 0; + font-weight: 400; +} + +svg:not(:root) { + overflow: hidden; +} + +.header { + display: flex; + justify-content: space-between; + align-items: center; + padding-top: 20px; + padding-bottom: 10px; + border-bottom: 1px solid #e6e6e6; +} + +.logo { + width: 150px; + margin-inline-end: 20px; +} + +.logo a { + display: block; +} + +.figure-logo { + max-width: 150px; + max-height: 55.1px; +} + +.release-notes { + font-size: 14px; +} + +.main { + padding: 40px 0; + margin: 0 auto; + text-align: center; +} + +.figure-space { + max-width: 265px; +} + +@keyframes pos { + 0%, 100% { + transform: rotate(-6deg); + } + 50% { + transform: rotate(6deg); + } +} + +.egg { + fill: #43b1b0; + animation: pos 3s ease infinite; + transform: translateY(50px); + transform-origin: 50% 80%; +} + +.main-text { + max-width: 400px; + margin: 5px auto; +} + +.main-text h1 { + font-size: 22px; +} + +.main-text p { + margin: 15px auto 0; +} + +.footer { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border-top: 1px solid #e6e6e6; + padding: 10px; +} + +.option { + display: block; + padding: 10px 10px 10px 34px; + position: relative; + text-decoration: none; +} + +.option svg { + width: 24px; + height: 24px; + fill: gray; + border: 1px solid #d9d9d9; + padding: 5px; + border-radius: 100%; + top: 10px; + inset-inline-start: 0; + position: absolute; +} + +.option h2 { + font-size: 19px; + text-decoration: underline; +} + +.option p { + padding-top: 3px; + color: #231f20; + font-size: 15px; + font-weight: 300; +} + +@media (max-width: 996px) { + body { + max-width: 780px; + } +} + +@media (max-width: 767px) { + .option { + flex: 0 0 50%; + } +} + +@media (max-width: 599px) { + .main { + padding: 20px 0; + } + + .figure-space { + max-width: 200px; + } + + .footer { + display: block; + width: 300px; + margin: 0 auto; + } +} + +@media (max-width: 360px) { + .header-link { + max-width: 100px; + } +} diff --git a/home/static/images/hero-area.svg b/home/static/images/hero-area.svg new file mode 100644 index 0000000..9aae9c2 --- /dev/null +++ b/home/static/images/hero-area.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/home/static/images/intro-mobile-1.png b/home/static/images/intro-mobile-1.png new file mode 100644 index 0000000..6715ac4 Binary files /dev/null and b/home/static/images/intro-mobile-1.png differ diff --git a/home/templates/home/form_page.html b/home/templates/home/form_page.html new file mode 100644 index 0000000..322acd6 --- /dev/null +++ b/home/templates/home/form_page.html @@ -0,0 +1,561 @@ + +{% extends "base.html" %} +{% load wagtailcore_tags static %} + +{% block content %} +
+
+
+
+

{{ page.title }}

+
+ + {{ page.subtitle }} + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + contact us + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ {% csrf_token %} + + + + {% for field in form %} +
+ {{ field.label_tag }} + {% for error in field.errors%} +
{{ error }}
+ {% endfor %} + {{ field }} +
+ {% endfor %} + + +
+ +
+
+ +
+ +
+ + + +{% endblock %} + + diff --git a/home/templates/home/form_page_landing.html b/home/templates/home/form_page_landing.html new file mode 100644 index 0000000..1e081c3 --- /dev/null +++ b/home/templates/home/form_page_landing.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} +{% load wagtailcore_tags static wagtailimages_tags unblocklife_tags %} + +{% block content %} + +
+
+ +
+ {% unblocklifethankyou as thankyou %} + {% image thankyou.thanks width-400 %} + +
+

+ {{ page.title }} +

+
+

+ {{ page.subtitle }} +

+
+ +
+ {{ page.thank_you_text|richtext }} +
+ +
+ + +{% endblock %} + diff --git a/home/templates/home/home_page.html b/home/templates/home/home_page.html new file mode 100644 index 0000000..0281515 --- /dev/null +++ b/home/templates/home/home_page.html @@ -0,0 +1,178 @@ +{% extends "base.html" %} +{% load static wagtailimages_tags wagtailcore_tags %} + +{% block content %} + +
+
+
+
+
+
+

+ {{ page.title }} +

+

+{{ page.hero_text }} +

+ +
+
+
+
+ {% picture page.image format-{avif,webp,jpeg} fill-{800x650,1920x900} sizes="100vw" class="w-full" alt="" %} +
+
+
+
+
+ +
+
+
+
+

Our Services

+ +
+
+
+
+
+
+ +
+

+Risk Management +

+

+Our risk management training is delivered by senior business line practitioners who have managed regulatory engagements, and regulatory enforcement at the highest levels. +

+
+
+ +
+
+
+ +
+

+Financial Modeling +

+

+Our training on financial analysis, corporate and financial institution modelling and valuation varies according to what the participants need to achieve: +

+
+
+ +
+
+
+ +
+

+Financial Trainings +

+

+Our training on cash and derivative financial markets instruments is adapted to the audience depending on whether they need a conceptual understanding +

+
+
+ +
+
+
+ +
+

+Finance Market +

+

+We have collaboration with experienced Stock Market traders on regular basis. We arrange the talks & interactice sessions for our students with those traders. +

+
+
+ +
+
+
+ +
+

+Finance Tips via APP +

+

+The Finance market totally depends on current affairs and news. We do provide regular tips to our audiance on subscription basis. The people are allowed to subscribe any time of the year. +

+
+
+ +
+
+
+ +
+

+Friendly Brainstorming +

+

+We do arrange monthly meetings with out regular customers. The meeting helps discuss about current market events and consequences of those events. +

+
+
+ +
+ +
+
+ +
+
+
+
+Finance Brainstorming +

+ + {% if page.promo_title %} +

{{ page.promo_title }}

+ {% endif %} + +

+ + {% if page.promo_text %} + {{ page.promo_text|richtext }} + {% endif %} +

+ + + +Check the Courses + +
+
+
+ +{% if page.promo_image %} +
{% picture page.promo_image format-{avif,webp,jpeg} fill-590x413-c100 %}
+ {% endif %} + + +
+
+
+
+
+ +{% endblock content %} + diff --git a/home/templates/home/standard_page.html b/home/templates/home/standard_page.html new file mode 100644 index 0000000..da265e5 --- /dev/null +++ b/home/templates/home/standard_page.html @@ -0,0 +1,23 @@ +{% extends "base.html" %} +{% load wagtailimages_tags %} +{% block content %} +
+ + {% include "header-hero.html" %} +
+
+
+ {% if page.introduction %} +

+ {{ page.introduction }} +

+ {% endif %} +
+
+ + {{ page.body }} +
+
+
+{% endblock content %} +~ diff --git a/home/templatetags/__init__.py b/home/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/home/templatetags/unblocklife_tags.py b/home/templatetags/unblocklife_tags.py new file mode 100644 index 0000000..5474d09 --- /dev/null +++ b/home/templatetags/unblocklife_tags.py @@ -0,0 +1,29 @@ +from django import template +from wagtail.models import Page +from home.models import UnblocklifeLogo, UnblocklifeThankyou + +register = template.Library() + +@register.simple_tag +def unblocklifelogo(): + return UnblocklifeLogo.objects.first(); + +@register.simple_tag +def unblocklifethankyou(): + return UnblocklifeThankyou.objects.first(); + + + +@register.inclusion_tag("tags/breadcrumbs.html", takes_context=True) +def breadcrumbs(context): + self = context.get("self") + if self is None or self.depth <= 2: + # When on the home page, displaying breadcrumbs is irrelevant. + ancestors = () + else: + ancestors = Page.objects.ancestor_of(self, inclusive=True).filter(depth__gt=1) + return { + "ancestors": ancestors, + "request": context["request"], + } + diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..db2c8e9 --- /dev/null +++ b/manage.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "unblocklife.settings.dev") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/media/images/sopan_shewale.format-avif.width-150.avif b/media/images/sopan_shewale.format-avif.width-150.avif new file mode 100644 index 0000000..2bf3241 Binary files /dev/null and b/media/images/sopan_shewale.format-avif.width-150.avif differ diff --git a/media/images/sopan_shewale.format-jpeg.width-150.jpg b/media/images/sopan_shewale.format-jpeg.width-150.jpg new file mode 100644 index 0000000..2bccd07 Binary files /dev/null and b/media/images/sopan_shewale.format-jpeg.width-150.jpg differ diff --git a/media/images/sopan_shewale.format-webp.width-150.webp b/media/images/sopan_shewale.format-webp.width-150.webp new file mode 100644 index 0000000..9593c2e Binary files /dev/null and b/media/images/sopan_shewale.format-webp.width-150.webp differ diff --git a/media/images/sopan_shewale.max-165x165.jpg b/media/images/sopan_shewale.max-165x165.jpg new file mode 100644 index 0000000..5196440 Binary files /dev/null and b/media/images/sopan_shewale.max-165x165.jpg differ diff --git a/media/images/unblock_logo.2e16d0ba.fill-125x125.png b/media/images/unblock_logo.2e16d0ba.fill-125x125.png new file mode 100644 index 0000000..7c3f38e Binary files /dev/null and b/media/images/unblock_logo.2e16d0ba.fill-125x125.png differ diff --git a/media/images/unblock_logo.2e16d0ba.fill-128x128.png b/media/images/unblock_logo.2e16d0ba.fill-128x128.png new file mode 100644 index 0000000..6c25c66 Binary files /dev/null and b/media/images/unblock_logo.2e16d0ba.fill-128x128.png differ diff --git a/media/images/unblock_logo.2e16d0ba.fill-256x256.png b/media/images/unblock_logo.2e16d0ba.fill-256x256.png new file mode 100644 index 0000000..a288059 Binary files /dev/null and b/media/images/unblock_logo.2e16d0ba.fill-256x256.png differ diff --git a/media/images/unblock_logo.2e16d0ba.fill-512x512.png b/media/images/unblock_logo.2e16d0ba.fill-512x512.png new file mode 100644 index 0000000..427c0dc Binary files /dev/null and b/media/images/unblock_logo.2e16d0ba.fill-512x512.png differ diff --git a/media/images/unblock_logo.max-165x165.png b/media/images/unblock_logo.max-165x165.png new file mode 100644 index 0000000..7b809c1 Binary files /dev/null and b/media/images/unblock_logo.max-165x165.png differ diff --git a/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-128x128.png b/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-128x128.png new file mode 100644 index 0000000..1e71cc0 Binary files /dev/null and b/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-128x128.png differ diff --git a/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-128x128_8ppjKDO.png b/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-128x128_8ppjKDO.png new file mode 100644 index 0000000..1e71cc0 Binary files /dev/null and b/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-128x128_8ppjKDO.png differ diff --git a/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-256x256.png b/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-256x256.png new file mode 100644 index 0000000..1d3add4 Binary files /dev/null and b/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-256x256.png differ diff --git a/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-256x256_RR5X8ck.png b/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-256x256_RR5X8ck.png new file mode 100644 index 0000000..1d3add4 Binary files /dev/null and b/media/images/unblock_logo_Ij6Gvyj.2e16d0ba.fill-256x256_RR5X8ck.png differ diff --git a/media/images/unblock_logo_Ij6Gvyj.max-165x165.png b/media/images/unblock_logo_Ij6Gvyj.max-165x165.png new file mode 100644 index 0000000..f79afb4 Binary files /dev/null and b/media/images/unblock_logo_Ij6Gvyj.max-165x165.png differ diff --git a/media/images/unblock_logo_gUJrKCF.2e16d0ba.fill-128x128.png b/media/images/unblock_logo_gUJrKCF.2e16d0ba.fill-128x128.png new file mode 100644 index 0000000..36b17d6 Binary files /dev/null and b/media/images/unblock_logo_gUJrKCF.2e16d0ba.fill-128x128.png differ diff --git a/media/images/unblock_logo_gUJrKCF.2e16d0ba.fill-256x256.png b/media/images/unblock_logo_gUJrKCF.2e16d0ba.fill-256x256.png new file mode 100644 index 0000000..a475cdb Binary files /dev/null and b/media/images/unblock_logo_gUJrKCF.2e16d0ba.fill-256x256.png differ diff --git a/media/images/unblock_logo_gUJrKCF.max-165x165.png b/media/images/unblock_logo_gUJrKCF.max-165x165.png new file mode 100644 index 0000000..5457c51 Binary files /dev/null and b/media/images/unblock_logo_gUJrKCF.max-165x165.png differ diff --git a/media/images/unblocklife_hero.2e16d0ba.fill-840x240.jpg b/media/images/unblocklife_hero.2e16d0ba.fill-840x240.jpg new file mode 100644 index 0000000..8b58e8b Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.fill-840x240.jpg differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x600.avif b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x600.avif new file mode 100644 index 0000000..e4b5398 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x600.avif differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x900.avif b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x900.avif new file mode 100644 index 0000000..ce56ee3 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x900.avif differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x900_L2Mpu9R.avif b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x900_L2Mpu9R.avif new file mode 100644 index 0000000..ce56ee3 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-1920x900_L2Mpu9R.avif differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-590x413-c100.avif b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-590x413-c100.avif new file mode 100644 index 0000000..4532f0b Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-590x413-c100.avif differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-590x413-c100_e4xBJqy.avif b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-590x413-c100_e4xBJqy.avif new file mode 100644 index 0000000..4532f0b Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-590x413-c100_e4xBJqy.avif differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-800x650.avif b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-800x650.avif new file mode 100644 index 0000000..02d59c5 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-800x650.avif differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-800x650_AS3gGV9.avif b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-800x650_AS3gGV9.avif new file mode 100644 index 0000000..02d59c5 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-avif.fill-800x650_AS3gGV9.avif differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x600.jpg b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x600.jpg new file mode 100644 index 0000000..ffa44c0 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x600.jpg differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x900.jpg b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x900.jpg new file mode 100644 index 0000000..aad0ef3 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x900.jpg differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x900_ISYSGvv.jpg b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x900_ISYSGvv.jpg new file mode 100644 index 0000000..aad0ef3 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-1920x900_ISYSGvv.jpg differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-590x413-c100.jpg b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-590x413-c100.jpg new file mode 100644 index 0000000..9327ec6 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-590x413-c100.jpg differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-590x413-c100_zbt5zVQ.jpg b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-590x413-c100_zbt5zVQ.jpg new file mode 100644 index 0000000..9327ec6 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-590x413-c100_zbt5zVQ.jpg differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-800x650.jpg b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-800x650.jpg new file mode 100644 index 0000000..1233960 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-800x650.jpg differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-800x650_u2aVQzo.jpg b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-800x650_u2aVQzo.jpg new file mode 100644 index 0000000..1233960 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-jpeg.fill-800x650_u2aVQzo.jpg differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x600.webp b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x600.webp new file mode 100644 index 0000000..ed252b6 Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x600.webp differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x900.webp b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x900.webp new file mode 100644 index 0000000..f29b30c Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x900.webp differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x900_Rl80B79.webp b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x900_Rl80B79.webp new file mode 100644 index 0000000..f29b30c Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-1920x900_Rl80B79.webp differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-590x413-c100.webp b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-590x413-c100.webp new file mode 100644 index 0000000..ac4413f Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-590x413-c100.webp differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-590x413-c100_mQ1J2aL.webp b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-590x413-c100_mQ1J2aL.webp new file mode 100644 index 0000000..ac4413f Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-590x413-c100_mQ1J2aL.webp differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-800x650.webp b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-800x650.webp new file mode 100644 index 0000000..bc8a9fc Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-800x650.webp differ diff --git a/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-800x650_tj5neLy.webp b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-800x650_tj5neLy.webp new file mode 100644 index 0000000..bc8a9fc Binary files /dev/null and b/media/images/unblocklife_hero.2e16d0ba.format-webp.fill-800x650_tj5neLy.webp differ diff --git a/media/images/unblocklife_hero.max-165x165.jpg b/media/images/unblocklife_hero.max-165x165.jpg new file mode 100644 index 0000000..bb3fd9b Binary files /dev/null and b/media/images/unblocklife_hero.max-165x165.jpg differ diff --git a/media/original_images/sopan_shewale.jpeg b/media/original_images/sopan_shewale.jpeg new file mode 100644 index 0000000..3f22470 Binary files /dev/null and b/media/original_images/sopan_shewale.jpeg differ diff --git a/media/original_images/unblock_logo.png b/media/original_images/unblock_logo.png new file mode 100644 index 0000000..19d5409 Binary files /dev/null and b/media/original_images/unblock_logo.png differ diff --git a/media/original_images/unblock_logo_Ij6Gvyj.png b/media/original_images/unblock_logo_Ij6Gvyj.png new file mode 100644 index 0000000..4c57ffa Binary files /dev/null and b/media/original_images/unblock_logo_Ij6Gvyj.png differ diff --git a/media/original_images/unblock_logo_gUJrKCF.png b/media/original_images/unblock_logo_gUJrKCF.png new file mode 100644 index 0000000..304f946 Binary files /dev/null and b/media/original_images/unblock_logo_gUJrKCF.png differ diff --git a/media/original_images/unblocklife_hero.jpg b/media/original_images/unblocklife_hero.jpg new file mode 100644 index 0000000..d7cbbda Binary files /dev/null and b/media/original_images/unblocklife_hero.jpg differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1a0d4ca --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +Django>=4.2,<5.1 +wagtail>=6.0,<6.1 diff --git a/search/__init__.py b/search/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/search/templates/search/search.html b/search/templates/search/search.html new file mode 100644 index 0000000..476427f --- /dev/null +++ b/search/templates/search/search.html @@ -0,0 +1,38 @@ +{% extends "base.html" %} +{% load static wagtailcore_tags %} + +{% block body_class %}template-searchresults{% endblock %} + +{% block title %}Search{% endblock %} + +{% block content %} +

Search

+ +
+ + +
+ +{% if search_results %} +
    + {% for result in search_results %} +
  • +

    {{ result }}

    + {% if result.search_description %} + {{ result.search_description }} + {% endif %} +
  • + {% endfor %} +
+ +{% if search_results.has_previous %} +Previous +{% endif %} + +{% if search_results.has_next %} +Next +{% endif %} +{% elif search_query %} +No results found +{% endif %} +{% endblock %} diff --git a/search/views.py b/search/views.py new file mode 100644 index 0000000..678bb7e --- /dev/null +++ b/search/views.py @@ -0,0 +1,46 @@ +from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator +from django.template.response import TemplateResponse + +from wagtail.models import Page + +# To enable logging of search queries for use with the "Promoted search results" module +# +# uncomment the following line and the lines indicated in the search function +# (after adding wagtail.contrib.search_promotions to INSTALLED_APPS): + +# from wagtail.contrib.search_promotions.models import Query + + +def search(request): + search_query = request.GET.get("query", None) + page = request.GET.get("page", 1) + + # Search + if search_query: + search_results = Page.objects.live().search(search_query) + + # To log this query for use with the "Promoted search results" module: + + # query = Query.get(search_query) + # query.add_hit() + + else: + search_results = Page.objects.none() + + # Pagination + paginator = Paginator(search_results, 10) + try: + search_results = paginator.page(page) + except PageNotAnInteger: + search_results = paginator.page(1) + except EmptyPage: + search_results = paginator.page(paginator.num_pages) + + return TemplateResponse( + request, + "search/search.html", + { + "search_query": search_query, + "search_results": search_results, + }, + ) diff --git a/unblocklife/__init__.py b/unblocklife/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unblocklife/settings/__init__.py b/unblocklife/settings/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unblocklife/settings/base.py b/unblocklife/settings/base.py new file mode 100644 index 0000000..5aa3954 --- /dev/null +++ b/unblocklife/settings/base.py @@ -0,0 +1,176 @@ +""" +Django settings for unblocklife project. + +Generated by 'django-admin startproject' using Django 4.2.11. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.2/ref/settings/ +""" + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os + +PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +BASE_DIR = os.path.dirname(PROJECT_DIR) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + + +# Application definition + +INSTALLED_APPS = [ + "home", + "courses", + "search", + "wagtail.contrib.forms", + "wagtail.contrib.redirects", + "wagtail.embeds", + "wagtail.sites", + "wagtail.users", + "wagtail.snippets", + "wagtail.documents", + "wagtail.images", + "wagtail.search", + "wagtail.admin", + "wagtail", + "modelcluster", + "taggit", + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + "wagtail.contrib.settings", +] + +MIDDLEWARE = [ + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", + "django.middleware.security.SecurityMiddleware", + "wagtail.contrib.redirects.middleware.RedirectMiddleware", +] + +ROOT_URLCONF = "unblocklife.urls" + +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [ + os.path.join(PROJECT_DIR, "templates"), + ], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + }, + }, +] + +WSGI_APPLICATION = "unblocklife.wsgi.application" + + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": os.path.join(BASE_DIR, "db.sqlite3"), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.2/topics/i18n/ + +LANGUAGE_CODE = "en-us" + +TIME_ZONE = "UTC" + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATICFILES_FINDERS = [ + "django.contrib.staticfiles.finders.FileSystemFinder", + "django.contrib.staticfiles.finders.AppDirectoriesFinder", +] + +STATICFILES_DIRS = [ + os.path.join(PROJECT_DIR, "static"), +] + +STATIC_ROOT = os.path.join(BASE_DIR, "static") +STATIC_URL = "/static/" + +MEDIA_ROOT = os.path.join(BASE_DIR, "media") +MEDIA_URL = "/media/" + +# Default storage settings, with the staticfiles storage updated. +# See https://docs.djangoproject.com/en/4.2/ref/settings/#std-setting-STORAGES +STORAGES = { + "default": { + "BACKEND": "django.core.files.storage.FileSystemStorage", + }, + # ManifestStaticFilesStorage is recommended in production, to prevent + # outdated JavaScript / CSS assets being served from cache + # (e.g. after a Wagtail upgrade). + # See https://docs.djangoproject.com/en/4.2/ref/contrib/staticfiles/#manifeststaticfilesstorage + "staticfiles": { + "BACKEND": "django.contrib.staticfiles.storage.ManifestStaticFilesStorage", + }, +} + + +# Wagtail settings + +WAGTAIL_SITE_NAME = "unblocklife" + +# Search +# https://docs.wagtail.org/en/stable/topics/search/backends.html +WAGTAILSEARCH_BACKENDS = { + "default": { + "BACKEND": "wagtail.search.backends.database", + } +} + +# Base URL to use when referring to full URLs within the Wagtail admin backend - +# e.g. in notification emails. Don't include '/admin' or a trailing slash +WAGTAILADMIN_BASE_URL = "http://example.com" diff --git a/unblocklife/settings/dev.py b/unblocklife/settings/dev.py new file mode 100644 index 0000000..9bc64b1 --- /dev/null +++ b/unblocklife/settings/dev.py @@ -0,0 +1,20 @@ +from .base import * + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = "django-insecure-v&3ii=aku-dumm7_p**m1)wi$54c#fc)%o1e8xq(+)(2bqv(6c" + +# SECURITY WARNING: define the correct hosts in production! +ALLOWED_HOSTS = ["*"] + +EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" + + +try: + from .local import * +except ImportError: + pass + +DEFAULT_AUTO_FIELD='django.db.models.AutoField' diff --git a/unblocklife/settings/production.py b/unblocklife/settings/production.py new file mode 100644 index 0000000..9ca4ed7 --- /dev/null +++ b/unblocklife/settings/production.py @@ -0,0 +1,8 @@ +from .base import * + +DEBUG = False + +try: + from .local import * +except ImportError: + pass diff --git a/unblocklife/static/css/styles.css b/unblocklife/static/css/styles.css new file mode 100644 index 0000000..1bb2eb8 --- /dev/null +++ b/unblocklife/static/css/styles.css @@ -0,0 +1,1488 @@ +@import "https://fonts.googleapis.com/css?family=Arvo:700|Open+Sans"; + +/*! tailwindcss v2.2.7 | MIT License | https://tailwindcss.com */ + +/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */ + +/* +Document +======== +*/ + +/** +Use a better box model (opinionated). +*/ + +*, +::before, +::after { + box-sizing: border-box; +} + +/** +Use a more readable tab size (opinionated). +*/ + +html { + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; +} + +/** +1. Correct the line height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +*/ + +html { + line-height: 1.15; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/* +Sections +======== +*/ + +/** +Remove the margin in all browsers. +*/ + +body { + margin: 0; +} + +/** +Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) +*/ + +body { + font-family: + system-ui, + -apple-system, /* Firefox supports this but not yet `system-ui` */ + 'Segoe UI', + Roboto, + Helvetica, + Arial, + sans-serif, + 'Apple Color Emoji', + 'Segoe UI Emoji'; +} + +/* +Grouping content +================ +*/ + +/** +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ +} + +/* +Text-level semantics +==================== +*/ + +/** +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr[title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/** +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/** +1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) +2. Correct the odd 'em' font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: + ui-monospace, + SFMono-Regular, + Consolas, + 'Liberation Mono', + Menlo, + monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/** +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/** +Prevent 'sub' and 'sup' elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +Tabular data +============ +*/ + +/** +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ +} + +/* +Forms +===== +*/ + +/** +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} + +/** +Remove the inheritance of text transform in Edge and Firefox. +1. Remove the inheritance of text transform in Firefox. +*/ + +button, +select { + /* 1 */ + text-transform: none; +} + +/** +Correct the inability to style clickable types in iOS and Safari. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; +} + +/** +Remove the inner border and padding in Firefox. +*/ + +::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** +Restore the focus styles unset by the previous rule. +*/ + +:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** +Remove the additional ':invalid' styles in Firefox. +See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737 +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/** +Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers. +*/ + +legend { + padding: 0; +} + +/** +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/** +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/** +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/** +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to 'inherit' in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Interactive +=========== +*/ + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/** + * Manually forked from SUIT CSS Base: https://github.com/suitcss/base + * A thin layer on top of normalize.css that provides a starting point more + * suitable for web applications. + */ + +/** + * Removes the default spacing and border for appropriate elements. + */ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +button { + background-color: transparent; + background-image: none; +} + +fieldset { + margin: 0; + padding: 0; +} + +ol, +ul { + list-style: none; + margin: 0; + padding: 0; +} + +/** + * Tailwind custom reset styles + */ + +/** + * 1. Use the user's configured `sans` font-family (with Tailwind's default + * sans-serif font stack as a fallback) as a sane default. + * 2. Use Tailwind's default "normal" line-height so the user isn't forced + * to override it to ensure consistency even when using the default theme. + */ + +html { + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 1 */ + line-height: 1.5; + /* 2 */ +} + +/** + * Inherit font-family and line-height from `html` so users can set them as + * a class directly on the `html` element. + */ + +body { + font-family: inherit; + line-height: inherit; +} + +/** + * 1. Prevent padding and border from affecting element width. + * + * We used to set this in the html element and inherit from + * the parent element for everything else. This caused issues + * in shadow-dom-enhanced elements like
where the content + * is wrapped by a div with box-sizing set to `content-box`. + * + * https://github.com/mozdevs/cssremedy/issues/4 + * + * + * 2. Allow adding a border to an element by just adding a border-width. + * + * By default, the way the browser specifies that an element should have no + * border is by setting it's border-style to `none` in the user-agent + * stylesheet. + * + * In order to easily add borders to elements by just setting the `border-width` + * property, we change the default border-style for all elements to `solid`, and + * use border-width to hide them instead. This way our `border` utilities only + * need to set the `border-width` property instead of the entire `border` + * shorthand, making our border utilities much more straightforward to compose. + * + * https://github.com/tailwindcss/tailwindcss/pull/116 + */ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: currentColor; + /* 2 */ +} + +/* + * Ensure horizontal rules are visible by default + */ + +hr { + border-top-width: 1px; +} + +/** + * Undo the `border-style: none` reset that Normalize applies to images so that + * our `border-{width}` utilities have the expected effect. + * + * The Normalize reset is unnecessary for us since we default the border-width + * to 0 on all elements. + * + * https://github.com/tailwindcss/tailwindcss/issues/362 + */ + +img { + border-style: solid; +} + +textarea { + resize: vertical; +} + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + color: #9ca3af; +} + +input:-ms-input-placeholder, textarea:-ms-input-placeholder { + opacity: 1; + color: #9ca3af; +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + color: #9ca3af; +} + +button, +[role="button"] { + cursor: pointer; +} + +table { + border-collapse: collapse; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/** + * Reset links to optimize for opt-in styling instead of + * opt-out. + */ + +a { + color: inherit; + text-decoration: inherit; +} + +/** + * Reset form element properties that are easy to forget to + * style explicitly so you don't inadvertently introduce + * styles that deviate from your design system. These styles + * supplement a partial reset that is already applied by + * normalize.css. + */ + +button, +input, +optgroup, +select, +textarea { + padding: 0; + line-height: inherit; + color: inherit; +} + +/** + * Use the configured 'mono' font family for elements that + * are expected to be rendered with a monospace font, falling + * back to the system monospace stack if there is no configured + * 'mono' font family. + */ + +pre, +code, +kbd, +samp { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +/** + * 1. Make replaced elements `display: block` by default as that's + * the behavior you want almost all of the time. Inspired by + * CSS Remedy, with `svg` added as well. + * + * https://github.com/mozdevs/cssremedy/issues/14 + * + * 2. Add `vertical-align: middle` to align replaced elements more + * sensibly by default when overriding `display` by adding a + * utility like `inline`. + * + * This can trigger a poorly considered linting error in some + * tools but is included by design. + * + * https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210 + */ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/** + * Constrain images and videos to the parent width and preserve + * their intrinsic aspect ratio. + * + * https://github.com/mozdevs/cssremedy/issues/14 + */ + +img, +video { + max-width: 100%; + height: auto; +} + +/** + * Ensure the default browser behavior of the `hidden` attribute. + */ + +[hidden] { + display: none; +} + +*, ::before, ::after{ + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + --tw-border-opacity: 1; + border-color: rgba(229, 231, 235, var(--tw-border-opacity)); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; +} + +.container{ + width: 100%; +} + +@media (min-width: 640px){ + .container{ + max-width: 640px; + } +} + +@media (min-width: 768px){ + .container{ + max-width: 768px; + } +} + +@media (min-width: 1024px){ + .container{ + max-width: 1024px; + } +} + +@media (min-width: 1280px){ + .container{ + max-width: 1280px; + } +} + +@media (min-width: 1536px){ + .container{ + max-width: 1536px; + } +} + +.fixed{ + position: fixed; +} + +.absolute{ + position: absolute; +} + +.relative{ + position: relative; +} + +.sticky{ + position: sticky; +} + +.top-0{ + top: 0px; +} + +.left-0{ + left: 0px; +} + +.right-0{ + right: 0px; +} + +.top-full{ + top: 100%; +} + +.bottom-6{ + bottom: 1.5rem; +} + +.right-6{ + right: 1.5rem; +} + +.z-20{ + z-index: 20; +} + +.z-10{ + z-index: 10; +} + +.order-last{ + order: 9999; +} + +.mx-auto{ + margin-left: auto; + margin-right: auto; +} + +.my-\[6px\]{ + margin-top: 6px; + margin-bottom: 6px; +} + +.-mx-3{ + margin-left: -0.75rem; + margin-right: -0.75rem; +} + +.mb-8{ + margin-bottom: 2rem; +} + +.mb-10{ + margin-bottom: 2.5rem; +} + +.mr-4{ + margin-right: 1rem; +} + +.mb-12{ + margin-bottom: 3rem; +} + +.mb-6{ + margin-bottom: 1.5rem; +} + +.mb-4{ + margin-bottom: 1rem; +} + +.mt-12{ + margin-top: 3rem; +} + +.mb-2{ + margin-bottom: 0.5rem; +} + +.mb-1{ + margin-bottom: 0.25rem; +} + +.mb-5{ + margin-bottom: 1.25rem; +} + +.mb-3{ + margin-bottom: 0.75rem; +} + +.mr-2{ + margin-right: 0.5rem; +} + +.block{ + display: block; +} + +.inline-block{ + display: inline-block; +} + +.flex{ + display: flex; +} + +.inline-flex{ + display: inline-flex; +} + +.hidden{ + display: none; +} + +.h-0\.5{ + height: 0.125rem; +} + +.h-0{ + height: 0px; +} + +.h-20{ + height: 5rem; +} + +.h-full{ + height: 100%; +} + +.h-8{ + height: 2rem; +} + +.h-10{ + height: 2.5rem; +} + +.w-full{ + width: 100%; +} + +.w-8{ + width: 2rem; +} + +.w-64{ + width: 16rem; +} + +.w-16{ + width: 4rem; +} + +.w-20{ + width: 5rem; +} + +.w-10{ + width: 2.5rem; +} + +.max-w-full{ + max-width: 100%; +} + +.transform{ + transform: var(--tw-transform); +} + +.flex-row-reverse{ + flex-direction: row-reverse; +} + +.flex-wrap{ + flex-wrap: wrap; +} + +.items-center{ + align-items: center; +} + +.justify-end{ + justify-content: flex-end; +} + +.justify-center{ + justify-content: center; +} + +.justify-between{ + justify-content: space-between; +} + +.overflow-hidden{ + overflow: hidden; +} + +.rounded{ + border-radius: 0.25rem; +} + +.rounded-full{ + border-radius: 9999px; +} + +.rounded-md{ + border-radius: 0.375rem; +} + +.border{ + border-width: 1px; +} + +.border-0{ + border-width: 0px; +} + +.border-t{ + border-top-width: 1px; +} + +.border-red-500{ + --tw-border-opacity: 1; + border-color: rgba(239, 68, 68, var(--tw-border-opacity)); +} + +.border-gray-100{ + --tw-border-opacity: 1; + border-color: rgba(243, 244, 246, var(--tw-border-opacity)); +} + +.border-gray-300{ + --tw-border-opacity: 1; + border-color: rgba(209, 213, 219, var(--tw-border-opacity)); +} + +.bg-white{ + --tw-bg-opacity: 1; + background-color: rgba(255, 255, 255, var(--tw-bg-opacity)); +} + +.bg-gray-700{ + --tw-bg-opacity: 1; + background-color: rgba(55, 65, 81, var(--tw-bg-opacity)); +} + +.bg-red-500{ + --tw-bg-opacity: 1; + background-color: rgba(239, 68, 68, var(--tw-bg-opacity)); +} + +.bg-gray-50{ + --tw-bg-opacity: 1; + background-color: rgba(249, 250, 251, var(--tw-bg-opacity)); +} + +.bg-gray-100{ + --tw-bg-opacity: 1; + background-color: rgba(243, 244, 246, var(--tw-bg-opacity)); +} + +.bg-cover{ + background-size: cover; +} + +.bg-center{ + background-position: center; +} + +.bg-no-repeat{ + background-repeat: no-repeat; +} + +.object-cover{ + -o-object-fit: cover; + object-fit: cover; +} + +.object-center{ + -o-object-position: center; + object-position: center; +} + +.p-6{ + padding: 1.5rem; +} + +.p-4{ + padding: 1rem; +} + +.p-8{ + padding: 2rem; +} + +.px-3{ + padding-left: 0.75rem; + padding-right: 0.75rem; +} + +.py-6{ + padding-top: 1.5rem; + padding-bottom: 1.5rem; +} + +.px-6{ + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +.py-2{ + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.py-3{ + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.px-8{ + padding-left: 2rem; + padding-right: 2rem; +} + +.py-20{ + padding-top: 5rem; + padding-bottom: 5rem; +} + +.px-4{ + padding-left: 1rem; + padding-right: 1rem; +} + +.py-16{ + padding-top: 4rem; + padding-bottom: 4rem; +} + +.py-10{ + padding-top: 2.5rem; + padding-bottom: 2.5rem; +} + +.py-12{ + padding-top: 3rem; + padding-bottom: 3rem; +} + +.pt-20{ + padding-top: 5rem; +} + +.pb-20{ + padding-bottom: 5rem; +} + +.pt-3{ + padding-top: 0.75rem; +} + +.pb-4{ + padding-bottom: 1rem; +} + +.pb-16{ + padding-bottom: 4rem; +} + +.pt-40{ + padding-top: 10rem; +} + +.pr-2{ + padding-right: 0.5rem; +} + +.text-center{ + text-align: center; +} + +.text-\[34px\]{ + font-size: 34px; +} + +.text-base{ + font-size: 1rem; + line-height: 1.5rem; +} + +.text-sm{ + font-size: 0.875rem; + line-height: 1.25rem; +} + +.text-3xl{ + font-size: 1.875rem; + line-height: 2.25rem; +} + +.text-lg{ + font-size: 1.125rem; + line-height: 1.75rem; +} + +.text-2xl{ + font-size: 1.5rem; + line-height: 2rem; +} + +.text-4xl{ + font-size: 2.25rem; + line-height: 2.5rem; +} + +.text-xl{ + font-size: 1.25rem; + line-height: 1.75rem; +} + +.font-bold{ + font-weight: 700; +} + +.font-semibold{ + font-weight: 600; +} + +.uppercase{ + text-transform: uppercase; +} + +.leading-snug{ + line-height: 1.375; +} + +.leading-normal{ + line-height: 1.5; +} + +.leading-relaxed{ + line-height: 1.625; +} + +.tracking-wide{ + letter-spacing: 0.025em; +} + +.text-gray-600{ + --tw-text-opacity: 1; + color: rgba(75, 85, 99, var(--tw-text-opacity)); +} + +.text-black{ + --tw-text-opacity: 1; + color: rgba(0, 0, 0, var(--tw-text-opacity)); +} + +.text-gray-400{ + --tw-text-opacity: 1; + color: rgba(156, 163, 175, var(--tw-text-opacity)); +} + +.text-white{ + --tw-text-opacity: 1; + color: rgba(255, 255, 255, var(--tw-text-opacity)); +} + +.text-red-500{ + --tw-text-opacity: 1; + color: rgba(239, 68, 68, var(--tw-text-opacity)); +} + +.text-gray-800{ + --tw-text-opacity: 1; + color: rgba(31, 41, 55, var(--tw-text-opacity)); +} + +.text-indigo-700{ + --tw-text-opacity: 1; + color: rgba(67, 56, 202, var(--tw-text-opacity)); +} + +.text-blue-400{ + --tw-text-opacity: 1; + color: rgba(96, 165, 250, var(--tw-text-opacity)); +} + +.text-gray-700{ + --tw-text-opacity: 1; + color: rgba(55, 65, 81, var(--tw-text-opacity)); +} + +.shadow-lg{ + --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-md{ + --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow{ + --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.transition{ + transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.duration-200{ + transition-duration: 200ms; +} + +body { + font-family: open sans, sans-serif; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: arvo, serif; +} + +.container{ + margin-left: auto; + margin-right: auto; + padding-left: 1rem; + padding-right: 1rem; +} + +button:focus{ + --tw-shadow: 0 0 #0000; + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + outline: 2px solid transparent; + outline-offset: 2px; +} + +.menu-btn:focus-visible{ + --tw-shadow: 0 0 #0000; + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + outline: none; +} + +@media (max-width: 992px) { + .menu-btn.responsive { + outline: none; + } +} + +.menu-btn.active span:nth-child(1){ + top: 7px; + --tw-rotate: 45deg; + transform: var(--tw-transform); + transform: var(--tw-transform); +} + +.menu-btn.active span:nth-child(2){ + opacity: 0; +} + +.menu-btn.active span:nth-child(3){ + top: -0.5rem; + --tw-rotate: 135deg; + transform: var(--tw-transform); + transform: var(--tw-transform); +} + +.tns-nav{ + position: absolute; + bottom: 0px; + right: 0px; + left: 0px; + display: flex; + width: 100%; + align-items: center; + justify-content: center; +} + +.tns-nav button{ + margin-left: 0.25rem; + margin-right: 0.25rem; + height: 0.75rem; + width: 0.75rem; + border-radius: 9999px; + border-width: 2px; + --tw-border-opacity: 1; + border-color: rgba(255, 255, 255, var(--tw-border-opacity)); + background-color: transparent; + transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + transition-duration: 200ms; +} + +.tns-nav .tns-nav-active{ + --tw-bg-opacity: 1; + background-color: rgba(255, 255, 255, var(--tw-bg-opacity)); +} + +.hover\:bg-white:hover{ + --tw-bg-opacity: 1; + background-color: rgba(255, 255, 255, var(--tw-bg-opacity)); +} + +.hover\:bg-red-500:hover{ + --tw-bg-opacity: 1; + background-color: rgba(239, 68, 68, var(--tw-bg-opacity)); +} + +.hover\:bg-indigo-700:hover{ + --tw-bg-opacity: 1; + background-color: rgba(67, 56, 202, var(--tw-bg-opacity)); +} + +.hover\:bg-blue-400:hover{ + --tw-bg-opacity: 1; + background-color: rgba(96, 165, 250, var(--tw-bg-opacity)); +} + +.hover\:bg-blue-600:hover{ + --tw-bg-opacity: 1; + background-color: rgba(37, 99, 235, var(--tw-bg-opacity)); +} + +.hover\:text-red-600:hover{ + --tw-text-opacity: 1; + color: rgba(220, 38, 38, var(--tw-text-opacity)); +} + +.hover\:text-red-500:hover{ + --tw-text-opacity: 1; + color: rgba(239, 68, 68, var(--tw-text-opacity)); +} + +.hover\:text-white:hover{ + --tw-text-opacity: 1; + color: rgba(255, 255, 255, var(--tw-text-opacity)); +} + +.hover\:shadow-lg:hover{ + --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.group:hover .group-hover\:bg-red-500{ + --tw-bg-opacity: 1; + background-color: rgba(239, 68, 68, var(--tw-bg-opacity)); +} + +.group:hover .group-hover\:text-white{ + --tw-text-opacity: 1; + color: rgba(255, 255, 255, var(--tw-text-opacity)); +} + +@media (min-width: 640px){ + .sm\:flex{ + display: flex; + } + + .sm\:w-3\/4{ + width: 75%; + } + + .sm\:w-5\/6{ + width: 83.333333%; + } + + .sm\:text-\[40px\]{ + font-size: 40px; + } +} + +@media (min-width: 768px){ + .md\:mb-0{ + margin-bottom: 0px; + } + + .md\:block{ + display: block; + } + + .md\:w-10\/12{ + width: 83.333333%; + } + + .md\:w-1\/2{ + width: 50%; + } + + .md\:w-2\/3{ + width: 66.666667%; + } + + .md\:w-1\/3{ + width: 33.333333%; + } + + .md\:flex-row{ + flex-direction: row; + } + + .md\:text-left{ + text-align: left; + } + + .md\:text-right{ + text-align: right; + } +} + +@media (min-width: 1024px){ + .lg\:static{ + position: static; + } + + .lg\:order-2{ + order: 2; + } + + .lg\:order-3{ + order: 3; + } + + .lg\:ml-10{ + margin-left: 2.5rem; + } + + .lg\:mb-16{ + margin-bottom: 4rem; + } + + .lg\:mt-0{ + margin-top: 0px; + } + + .lg\:mb-0{ + margin-bottom: 0px; + } + + .lg\:block{ + display: block; + } + + .lg\:flex{ + display: flex; + } + + .lg\:hidden{ + display: none; + } + + .lg\:w-full{ + width: 100%; + } + + .lg\:w-1\/2{ + width: 50%; + } + + .lg\:w-1\/3{ + width: 33.333333%; + } + + .lg\:w-6\/12{ + width: 50%; + } + + .lg\:w-7\/12{ + width: 58.333333%; + } + + .lg\:w-5\/12{ + width: 41.666667%; + } + + .lg\:w-1\/4{ + width: 25%; + } + + .lg\:rounded-none{ + border-radius: 0px; + } + + .lg\:py-3{ + padding-top: 0.75rem; + padding-bottom: 0.75rem; + } + + .lg\:px-3{ + padding-left: 0.75rem; + padding-right: 0.75rem; + } + + .lg\:py-0{ + padding-top: 0px; + padding-bottom: 0px; + } + + .lg\:py-10{ + padding-top: 2.5rem; + padding-bottom: 2.5rem; + } + + .lg\:shadow-none{ + --tw-shadow: 0 0 #0000; + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + } +} + +@media (min-width: 1280px){ + .xl\:px-8{ + padding-left: 2rem; + padding-right: 2rem; + } +} + diff --git a/unblocklife/static/css/tiny-slider.css b/unblocklife/static/css/tiny-slider.css new file mode 100644 index 0000000..480c5ef --- /dev/null +++ b/unblocklife/static/css/tiny-slider.css @@ -0,0 +1,167 @@ +.tns-outer { + padding: 0 !important +} + +.tns-outer [hidden] { + display: none !important +} + +.tns-outer [aria-controls],.tns-outer [data-action] { + cursor: pointer +} + +.tns-slider { + -webkit-transition: all 0s; + -moz-transition: all 0s; + transition: all 0s +} + +.tns-slider>.tns-item { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +.tns-horizontal.tns-subpixel { + white-space: nowrap +} + +.tns-horizontal.tns-subpixel>.tns-item { + display: inline-block; + vertical-align: top; + white-space: normal +} + +.tns-horizontal.tns-no-subpixel:after { + content: ''; + display: table; + clear: both +} + +.tns-horizontal.tns-no-subpixel>.tns-item { + float: left +} + +.tns-horizontal.tns-carousel.tns-no-subpixel>.tns-item { + margin-right: -100% +} + +.tns-no-calc { + position: relative; + left: 0 +} + +.tns-gallery { + position: relative; + left: 0; + min-height: 1px +} + +.tns-gallery>.tns-item { + position: absolute; + left: -100%; + -webkit-transition: transform 0s, opacity 0s; + -moz-transition: transform 0s, opacity 0s; + transition: transform 0s, opacity 0s +} + +.tns-gallery>.tns-slide-active { + position: relative; + left: auto !important +} + +.tns-gallery>.tns-moving { + -webkit-transition: all 0.25s; + -moz-transition: all 0.25s; + transition: all 0.25s +} + +.tns-autowidth { + display: inline-block +} + +.tns-lazy-img { + -webkit-transition: opacity 0.6s; + -moz-transition: opacity 0.6s; + transition: opacity 0.6s; + opacity: 0.6 +} + +.tns-lazy-img.tns-complete { + opacity: 1 +} + +.tns-ah { + -webkit-transition: height 0s; + -moz-transition: height 0s; + transition: height 0s +} + +.tns-ovh { + overflow: hidden +} + +.tns-visually-hidden { + position: absolute; + left: -10000em +} + +.tns-transparent { + opacity: 0; + visibility: hidden +} + +.tns-fadeIn { + opacity: 1; + filter: alpha(opacity=100); + z-index: 0 +} + +.tns-normal,.tns-fadeOut { + opacity: 0; + filter: alpha(opacity=0); + z-index: -1 +} + +.tns-vpfix { + white-space: nowrap +} + +.tns-vpfix>div,.tns-vpfix>li { + display: inline-block +} + +.tns-t-subp2 { + margin: 0 auto; + width: 310px; + position: relative; + height: 10px; + overflow: hidden +} + +.tns-t-ct { + width: 2333.3333333%; + width: -webkit-calc(100% * 70 / 3); + width: -moz-calc(100% * 70 / 3); + width: calc(100% * 70 / 3); + position: absolute; + right: 0 +} + +.tns-t-ct:after { + content: ''; + display: table; + clear: both +} + +.tns-t-ct>div { + width: 1.4285714%; + width: -webkit-calc(100% / 70); + width: -moz-calc(100% / 70); + width: calc(100% / 70); + height: 10px; + float: left +} + +/*# sourceMappingURL=sourcemaps/tiny-slider.css.map */ + diff --git a/unblocklife/static/css/unblocklife.css b/unblocklife/static/css/unblocklife.css new file mode 100644 index 0000000..a5d759a --- /dev/null +++ b/unblocklife/static/css/unblocklife.css @@ -0,0 +1,2215 @@ +/*-------------------------------- + +LineIcons Web Font +Author: lineicons.com + +-------------------------------- */ +@font-face { + font-family: "LineIcons"; + src: url("../fonts/LineIcons.eot"); + src: url("../fonts/LineIcons.eot") format("embedded-opentype"), + url("../fonts/LineIcons.woff2") format("woff2"), + url("fonts/LineIcons.woff") format("woff"), + url("../fonts/LineIcons.ttf") format("truetype"), + url("../fonts/LineIcons.svg") format("svg"); + font-weight: normal; + font-style: normal; +} +/*------------------------ + base class definition +-------------------------*/ +.lni { + display: inline-block; + font: normal normal normal 1em/1 "LineIcons"; + color: inherit; + flex-shrink: 0; + speak: none; + text-transform: none; + line-height: 1; + vertical-align: -0.125em; + /* Better Font Rendering */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/*------------------------ + change icon size +-------------------------*/ +/* relative units */ +.lni-sm { + font-size: 0.8em; +} +.lni-lg { + font-size: 1.2em; +} +/* absolute units */ +.lni-16 { + font-size: 16px; +} +.lni-32 { + font-size: 32px; +} + +/*------------------------ + spinning icons +-------------------------*/ +.lni-is-spinning { + animation: lni-spin 1s infinite linear; +} +@keyframes lni-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +/*------------------------ + rotated/flipped icons +-------------------------*/ +.lni-rotate-90 { + transform: rotate(90deg); +} +.lni-rotate-180 { + transform: rotate(180deg); +} +.lni-rotate-270 { + transform: rotate(270deg); +} +.lni-flip-y { + transform: scaleY(-1); +} +.lni-flip-x { + transform: scaleX(-1); +} +/*------------------------ + icons +-------------------------*/ + +.lni-500px::before { + content: "\ea03"; +} + +.lni-add-files::before { + content: "\ea01"; +} + +.lni-adobe::before { + content: "\ea06"; +} + +.lni-agenda::before { + content: "\ea02"; +} + +.lni-airbnb::before { + content: "\ea07"; +} + +.lni-alarm-clock::before { + content: "\ea08"; +} + +.lni-alarm::before { + content: "\ea04"; +} + +.lni-amazon-original::before { + content: "\ea05"; +} + +.lni-amazon-pay::before { + content: "\ea09"; +} + +.lni-amazon::before { + content: "\ea0a"; +} + +.lni-ambulance::before { + content: "\ea0b"; +} + +.lni-amex::before { + content: "\ea0c"; +} + +.lni-anchor::before { + content: "\ea0d"; +} + +.lni-android-original::before { + content: "\ea0e"; +} + +.lni-android::before { + content: "\ea0f"; +} + +.lni-angellist::before { + content: "\ea10"; +} + +.lni-angle-double-down::before { + content: "\ea11"; +} + +.lni-angle-double-left::before { + content: "\ea12"; +} + +.lni-angle-double-right::before { + content: "\ea13"; +} + +.lni-angle-double-up::before { + content: "\ea14"; +} + +.lni-angular::before { + content: "\ea15"; +} + +.lni-apartment::before { + content: "\ea16"; +} + +.lni-app-store::before { + content: "\ea17"; +} + +.lni-apple-music::before { + content: "\ea18"; +} + +.lni-apple-pay::before { + content: "\ea19"; +} + +.lni-apple::before { + content: "\ea1a"; +} + +.lni-archive::before { + content: "\ea1f"; +} + +.lni-arrow-down-circle::before { + content: "\ea1b"; +} + +.lni-arrow-down::before { + content: "\ea1c"; +} + +.lni-arrow-left-circle::before { + content: "\ea1d"; +} + +.lni-arrow-left::before { + content: "\ea1e"; +} + +.lni-arrow-right-circle::before { + content: "\ea20"; +} + +.lni-arrow-right::before { + content: "\ea21"; +} + +.lni-arrow-top-left::before { + content: "\ea22"; +} + +.lni-arrow-top-right::before { + content: "\ea23"; +} + +.lni-arrow-up-circle::before { + content: "\ea24"; +} + +.lni-arrow-up::before { + content: "\ea25"; +} + +.lni-arrows-horizontal::before { + content: "\ea26"; +} + +.lni-arrows-vertical::before { + content: "\ea27"; +} + +.lni-atlassian::before { + content: "\ea28"; +} + +.lni-aws::before { + content: "\ea29"; +} + +.lni-azure::before { + content: "\ea2a"; +} + +.lni-backward::before { + content: "\ea2b"; +} + +.lni-baloon::before { + content: "\ea2c"; +} + +.lni-ban::before { + content: "\ea2d"; +} + +.lni-bar-chart::before { + content: "\ea2e"; +} + +.lni-basketball::before { + content: "\ea2f"; +} + +.lni-behance-original::before { + content: "\ea30"; +} + +.lni-behance::before { + content: "\ea31"; +} + +.lni-bi-cycle::before { + content: "\ea32"; +} + +.lni-bitbucket::before { + content: "\ea33"; +} + +.lni-bitcoin::before { + content: "\ea34"; +} + +.lni-blackboard::before { + content: "\ea35"; +} + +.lni-blogger::before { + content: "\ea36"; +} + +.lni-bluetooth-original::before { + content: "\ea37"; +} + +.lni-bluetooth::before { + content: "\ea38"; +} + +.lni-bold::before { + content: "\ea39"; +} + +.lni-bolt-alt::before { + content: "\ea3a"; +} + +.lni-bolt::before { + content: "\ea40"; +} + +.lni-book::before { + content: "\ea3b"; +} + +.lni-bookmark-alt::before { + content: "\ea3c"; +} + +.lni-bookmark::before { + content: "\ea3d"; +} + +.lni-bootstrap::before { + content: "\ea3e"; +} + +.lni-bricks::before { + content: "\ea3f"; +} + +.lni-bridge::before { + content: "\ea41"; +} + +.lni-briefcase::before { + content: "\ea42"; +} + +.lni-brush-alt::before { + content: "\ea43"; +} + +.lni-brush::before { + content: "\ea44"; +} + +.lni-btc::before { + content: "\ea45"; +} + +.lni-bubble::before { + content: "\ea46"; +} + +.lni-bug::before { + content: "\ea47"; +} + +.lni-bulb::before { + content: "\ea48"; +} + +.lni-bullhorn::before { + content: "\ea49"; +} + +.lni-burger::before { + content: "\ea4a"; +} + +.lni-bus::before { + content: "\ea4b"; +} + +.lni-cake::before { + content: "\ea4c"; +} + +.lni-calculator::before { + content: "\ea4d"; +} + +.lni-calendar::before { + content: "\ea4e"; +} + +.lni-camera::before { + content: "\ea4f"; +} + +.lni-candy-cane::before { + content: "\ea50"; +} + +.lni-candy::before { + content: "\ea51"; +} + +.lni-capsule::before { + content: "\ea52"; +} + +.lni-car-alt::before { + content: "\ea53"; +} + +.lni-car::before { + content: "\ea54"; +} + +.lni-caravan::before { + content: "\ea55"; +} + +.lni-cart-full::before { + content: "\ea56"; +} + +.lni-cart::before { + content: "\ea57"; +} + +.lni-certificate::before { + content: "\ea58"; +} + +.lni-check-box::before { + content: "\ea59"; +} + +.lni-checkmark-circle::before { + content: "\ea5a"; +} + +.lni-checkmark::before { + content: "\ea5b"; +} + +.lni-chef-hat::before { + content: "\ea5c"; +} + +.lni-chevron-down-circle::before { + content: "\ea5d"; +} + +.lni-chevron-down::before { + content: "\ea5e"; +} + +.lni-chevron-left-circle::before { + content: "\ea5f"; +} + +.lni-chevron-left::before { + content: "\ea60"; +} + +.lni-chevron-right-circle::before { + content: "\ea61"; +} + +.lni-chevron-right::before { + content: "\ea62"; +} + +.lni-chevron-up-circle::before { + content: "\ea63"; +} + +.lni-chevron-up::before { + content: "\ea64"; +} + +.lni-chrome::before { + content: "\ea65"; +} + +.lni-chromecast::before { + content: "\ea66"; +} + +.lni-circle-minus::before { + content: "\ea67"; +} + +.lni-circle-plus::before { + content: "\ea68"; +} + +.lni-clipboard::before { + content: "\ea69"; +} + +.lni-close::before { + content: "\ea6a"; +} + +.lni-cloud-check::before { + content: "\ea6b"; +} + +.lni-cloud-download::before { + content: "\ea6c"; +} + +.lni-cloud-network::before { + content: "\ea6d"; +} + +.lni-cloud-sync::before { + content: "\ea6e"; +} + +.lni-cloud-upload::before { + content: "\ea6f"; +} + +.lni-cloud::before { + content: "\ea70"; +} + +.lni-cloudflare::before { + content: "\ea71"; +} + +.lni-cloudy-sun::before { + content: "\ea72"; +} + +.lni-code-alt::before { + content: "\ea73"; +} + +.lni-code::before { + content: "\ea74"; +} + +.lni-codepen::before { + content: "\ea75"; +} + +.lni-coffee-cup::before { + content: "\ea76"; +} + +.lni-cog::before { + content: "\ea77"; +} + +.lni-cogs::before { + content: "\ea78"; +} + +.lni-coin::before { + content: "\ea79"; +} + +.lni-comments-alt::before { + content: "\ea7a"; +} + +.lni-comments-reply::before { + content: "\ea7b"; +} + +.lni-comments::before { + content: "\ea7c"; +} + +.lni-compass::before { + content: "\ea7d"; +} + +.lni-connectdevelop::before { + content: "\ea7e"; +} + +.lni-construction-hammer::before { + content: "\ea7f"; +} + +.lni-construction::before { + content: "\ea80"; +} + +.lni-consulting::before { + content: "\ea81"; +} + +.lni-control-panel::before { + content: "\ea82"; +} + +.lni-cool::before { + content: "\ea83"; +} + +.lni-cpanel::before { + content: "\ea84"; +} + +.lni-creative-commons::before { + content: "\ea85"; +} + +.lni-credit-cards::before { + content: "\ea86"; +} + +.lni-crop::before { + content: "\ea87"; +} + +.lni-cross-circle::before { + content: "\ea88"; +} + +.lni-crown::before { + content: "\ea89"; +} + +.lni-css3::before { + content: "\ea8a"; +} + +.lni-cup::before { + content: "\ea8b"; +} + +.lni-customer::before { + content: "\ea8c"; +} + +.lni-cut::before { + content: "\ea8d"; +} + +.lni-dashboard::before { + content: "\ea8e"; +} + +.lni-database::before { + content: "\ea8f"; +} + +.lni-delivery::before { + content: "\ea90"; +} + +.lni-dev::before { + content: "\ea91"; +} + +.lni-diamond-alt::before { + content: "\ea92"; +} + +.lni-diamond::before { + content: "\ea93"; +} + +.lni-digitalocean::before { + content: "\ea94"; +} + +.lni-diners-club::before { + content: "\ea95"; +} + +.lni-dinner::before { + content: "\ea96"; +} + +.lni-direction-alt::before { + content: "\ea97"; +} + +.lni-direction-ltr::before { + content: "\ea98"; +} + +.lni-direction-rtl::before { + content: "\ea99"; +} + +.lni-direction::before { + content: "\ea9a"; +} + +.lni-discord::before { + content: "\ea9b"; +} + +.lni-discover::before { + content: "\ea9c"; +} + +.lni-display-alt::before { + content: "\ea9d"; +} + +.lni-display::before { + content: "\ea9e"; +} + +.lni-docker::before { + content: "\ea9f"; +} + +.lni-dollar::before { + content: "\eaa0"; +} + +.lni-domain::before { + content: "\eaa1"; +} + +.lni-download::before { + content: "\eaa2"; +} + +.lni-dribbble::before { + content: "\eaa3"; +} + +.lni-drop::before { + content: "\eaa4"; +} + +.lni-dropbox-original::before { + content: "\eaa5"; +} + +.lni-dropbox::before { + content: "\eaa6"; +} + +.lni-drupal-original::before { + content: "\eaa7"; +} + +.lni-drupal::before { + content: "\eaa8"; +} + +.lni-dumbbell::before { + content: "\eaa9"; +} + +.lni-edge::before { + content: "\eaaa"; +} + +.lni-empty-file::before { + content: "\eaab"; +} + +.lni-enter::before { + content: "\eaac"; +} + +.lni-envato::before { + content: "\eaad"; +} + +.lni-envelope::before { + content: "\eaae"; +} + +.lni-eraser::before { + content: "\eaaf"; +} + +.lni-euro::before { + content: "\eab0"; +} + +.lni-exit-down::before { + content: "\eab1"; +} + +.lni-exit-up::before { + content: "\eab2"; +} + +.lni-exit::before { + content: "\eab3"; +} + +.lni-eye::before { + content: "\eab4"; +} + +.lni-facebook-filled::before { + content: "\eab5"; +} + +.lni-facebook-messenger::before { + content: "\eab6"; +} + +.lni-facebook-original::before { + content: "\eab7"; +} + +.lni-facebook-oval::before { + content: "\eab8"; +} + +.lni-facebook::before { + content: "\eab9"; +} + +.lni-figma::before { + content: "\eaba"; +} + +.lni-files::before { + content: "\eabb"; +} + +.lni-firefox-original::before { + content: "\eabc"; +} + +.lni-firefox::before { + content: "\eabd"; +} + +.lni-fireworks::before { + content: "\eabe"; +} + +.lni-first-aid::before { + content: "\eabf"; +} + +.lni-flag-alt::before { + content: "\eac0"; +} + +.lni-flag::before { + content: "\eac1"; +} + +.lni-flags::before { + content: "\eac2"; +} + +.lni-flickr::before { + content: "\eac3"; +} + +.lni-flower::before { + content: "\eac4"; +} + +.lni-folder::before { + content: "\eac5"; +} + +.lni-forward::before { + content: "\eac6"; +} + +.lni-frame-expand::before { + content: "\eac7"; +} + +.lni-fresh-juice::before { + content: "\eac8"; +} + +.lni-friendly::before { + content: "\eac9"; +} + +.lni-full-screen::before { + content: "\eaca"; +} + +.lni-funnel::before { + content: "\eacb"; +} + +.lni-gallery::before { + content: "\eacc"; +} + +.lni-game::before { + content: "\eacd"; +} + +.lni-gatsby::before { + content: "\eace"; +} + +.lni-gift::before { + content: "\eacf"; +} + +.lni-git::before { + content: "\ead0"; +} + +.lni-github-original::before { + content: "\ead1"; +} + +.lni-github::before { + content: "\ead2"; +} + +.lni-goodreads::before { + content: "\ead3"; +} + +.lni-google-drive::before { + content: "\ead4"; +} + +.lni-google-pay::before { + content: "\ead5"; +} + +.lni-google-wallet::before { + content: "\ead6"; +} + +.lni-google::before { + content: "\ead7"; +} + +.lni-graduation::before { + content: "\ead8"; +} + +.lni-graph::before { + content: "\ead9"; +} + +.lni-grid-alt::before { + content: "\eada"; +} + +.lni-grid::before { + content: "\eadb"; +} + +.lni-grow::before { + content: "\eadc"; +} + +.lni-hacker-news::before { + content: "\eadd"; +} + +.lni-hammer::before { + content: "\eade"; +} + +.lni-hand::before { + content: "\eadf"; +} + +.lni-handshake::before { + content: "\eae0"; +} + +.lni-happy::before { + content: "\eae1"; +} + +.lni-harddrive::before { + content: "\eae2"; +} + +.lni-headphone-alt::before { + content: "\eae3"; +} + +.lni-headphone::before { + content: "\eae4"; +} + +.lni-heart-filled::before { + content: "\eae5"; +} + +.lni-heart-monitor::before { + content: "\eae6"; +} + +.lni-heart::before { + content: "\eae7"; +} + +.lni-helicopter::before { + content: "\eae8"; +} + +.lni-helmet::before { + content: "\eae9"; +} + +.lni-help::before { + content: "\eaea"; +} + +.lni-highlight-alt::before { + content: "\eaeb"; +} + +.lni-highlight::before { + content: "\eaec"; +} + +.lni-home::before { + content: "\eaed"; +} + +.lni-hospital::before { + content: "\eaee"; +} + +.lni-hourglass::before { + content: "\eaef"; +} + +.lni-html5::before { + content: "\eaf0"; +} + +.lni-image::before { + content: "\eaf1"; +} + +.lni-imdb::before { + content: "\eaf2"; +} + +.lni-inbox::before { + content: "\eaf3"; +} + +.lni-indent-decrease::before { + content: "\eaf4"; +} + +.lni-indent-increase::before { + content: "\eaf5"; +} + +.lni-infinite::before { + content: "\eaf6"; +} + +.lni-information::before { + content: "\eaf7"; +} + +.lni-instagram-filled::before { + content: "\eaf8"; +} + +.lni-instagram-original::before { + content: "\eaf9"; +} + +.lni-instagram::before { + content: "\eafa"; +} + +.lni-invention::before { + content: "\eafb"; +} + +.lni-invest-monitor::before { + content: "\eafc"; +} + +.lni-investment::before { + content: "\eafd"; +} + +.lni-island::before { + content: "\eafe"; +} + +.lni-italic::before { + content: "\eaff"; +} + +.lni-java::before { + content: "\eb00"; +} + +.lni-javascript::before { + content: "\eb01"; +} + +.lni-jcb::before { + content: "\eb02"; +} + +.lni-joomla-original::before { + content: "\eb03"; +} + +.lni-joomla::before { + content: "\eb04"; +} + +.lni-jsfiddle::before { + content: "\eb05"; +} + +.lni-juice::before { + content: "\eb06"; +} + +.lni-key::before { + content: "\eb07"; +} + +.lni-keyboard::before { + content: "\eb08"; +} + +.lni-keyword-research::before { + content: "\eb09"; +} + +.lni-laptop-phone::before { + content: "\eb0a"; +} + +.lni-laptop::before { + content: "\eb0b"; +} + +.lni-laravel::before { + content: "\eb0c"; +} + +.lni-layers::before { + content: "\eb0d"; +} + +.lni-layout::before { + content: "\eb0e"; +} + +.lni-leaf::before { + content: "\eb0f"; +} + +.lni-library::before { + content: "\eb10"; +} + +.lni-license::before { + content: "\eb11"; +} + +.lni-lifering::before { + content: "\eb12"; +} + +.lni-line-dashed::before { + content: "\eb13"; +} + +.lni-line-dotted::before { + content: "\eb14"; +} + +.lni-line-double::before { + content: "\eb15"; +} + +.lni-line-spacing::before { + content: "\eb16"; +} + +.lni-line::before { + content: "\eb17"; +} + +.lni-lineicons-alt::before { + content: "\eb18"; +} + +.lni-lineicons::before { + content: "\eb19"; +} + +.lni-link::before { + content: "\eb1a"; +} + +.lni-linkedin-original::before { + content: "\eb1b"; +} + +.lni-linkedin::before { + content: "\eb1c"; +} + +.lni-list::before { + content: "\eb1d"; +} + +.lni-lock-alt::before { + content: "\eb1e"; +} + +.lni-lock::before { + content: "\eb1f"; +} + +.lni-magento::before { + content: "\eb20"; +} + +.lni-magnet::before { + content: "\eb21"; +} + +.lni-magnifier::before { + content: "\eb22"; +} + +.lni-mailchimp::before { + content: "\eb23"; +} + +.lni-map-marker::before { + content: "\eb24"; +} + +.lni-map::before { + content: "\eb25"; +} + +.lni-markdown::before { + content: "\eb26"; +} + +.lni-mashroom::before { + content: "\eb27"; +} + +.lni-mastercard::before { + content: "\eb28"; +} + +.lni-medium::before { + content: "\eb29"; +} + +.lni-menu::before { + content: "\eb2a"; +} + +.lni-mic::before { + content: "\eb2b"; +} + +.lni-microphone::before { + content: "\eb2c"; +} + +.lni-microscope::before { + content: "\eb2d"; +} + +.lni-microsoft-edge::before { + content: "\eb2e"; +} + +.lni-microsoft::before { + content: "\eb2f"; +} + +.lni-minus::before { + content: "\eb30"; +} + +.lni-mobile::before { + content: "\eb31"; +} + +.lni-money-location::before { + content: "\eb32"; +} + +.lni-money-protection::before { + content: "\eb33"; +} + +.lni-more-alt::before { + content: "\eb34"; +} + +.lni-more::before { + content: "\eb35"; +} + +.lni-mouse::before { + content: "\eb36"; +} + +.lni-move::before { + content: "\eb37"; +} + +.lni-music::before { + content: "\eb38"; +} + +.lni-netlify::before { + content: "\eb39"; +} + +.lni-network::before { + content: "\eb3a"; +} + +.lni-night::before { + content: "\eb3b"; +} + +.lni-nodejs-alt::before { + content: "\eb3c"; +} + +.lni-nodejs::before { + content: "\eb3d"; +} + +.lni-notepad::before { + content: "\eb3e"; +} + +.lni-npm::before { + content: "\eb3f"; +} + +.lni-offer::before { + content: "\eb40"; +} + +.lni-opera::before { + content: "\eb41"; +} + +.lni-package::before { + content: "\eb42"; +} + +.lni-page-break::before { + content: "\eb43"; +} + +.lni-pagination::before { + content: "\eb44"; +} + +.lni-paint-bucket::before { + content: "\eb45"; +} + +.lni-paint-roller::before { + content: "\eb46"; +} + +.lni-pallet::before { + content: "\eb47"; +} + +.lni-paperclip::before { + content: "\eb48"; +} + +.lni-patreon::before { + content: "\eb49"; +} + +.lni-pause::before { + content: "\eb4a"; +} + +.lni-paypal-original::before { + content: "\eb4b"; +} + +.lni-paypal::before { + content: "\eb4c"; +} + +.lni-pencil-alt::before { + content: "\eb4d"; +} + +.lni-pencil::before { + content: "\eb4e"; +} + +.lni-phone-set::before { + content: "\eb4f"; +} + +.lni-phone::before { + content: "\eb50"; +} + +.lni-php::before { + content: "\eb51"; +} + +.lni-pie-chart::before { + content: "\eb52"; +} + +.lni-pilcrow::before { + content: "\eb53"; +} + +.lni-pin::before { + content: "\eb54"; +} + +.lni-pinterest::before { + content: "\eb55"; +} + +.lni-pizza::before { + content: "\eb56"; +} + +.lni-plane::before { + content: "\eb57"; +} + +.lni-play-store::before { + content: "\eb58"; +} + +.lni-play::before { + content: "\eb59"; +} + +.lni-playstation::before { + content: "\eb5a"; +} + +.lni-plug::before { + content: "\eb5b"; +} + +.lni-plus::before { + content: "\eb5c"; +} + +.lni-pointer-down::before { + content: "\eb5d"; +} + +.lni-pointer-left::before { + content: "\eb5e"; +} + +.lni-pointer-right::before { + content: "\eb5f"; +} + +.lni-pointer-top::before { + content: "\eb60"; +} + +.lni-pointer::before { + content: "\eb61"; +} + +.lni-popup::before { + content: "\eb62"; +} + +.lni-postcard::before { + content: "\eb63"; +} + +.lni-pound::before { + content: "\eb64"; +} + +.lni-power-switch::before { + content: "\eb65"; +} + +.lni-printer::before { + content: "\eb66"; +} + +.lni-producthunt::before { + content: "\eb67"; +} + +.lni-protection::before { + content: "\eb68"; +} + +.lni-pulse::before { + content: "\eb69"; +} + +.lni-pyramids::before { + content: "\eb6a"; +} + +.lni-python::before { + content: "\eb6b"; +} + +.lni-question-circle::before { + content: "\eb6c"; +} + +.lni-quora::before { + content: "\eb6d"; +} + +.lni-quotation::before { + content: "\eb6e"; +} + +.lni-radio-button::before { + content: "\eb6f"; +} + +.lni-rain::before { + content: "\eb70"; +} + +.lni-react::before { + content: "\eb73"; +} + +.lni-reddit::before { + content: "\eb71"; +} + +.lni-reload::before { + content: "\eb72"; +} + +.lni-remove-file::before { + content: "\eb74"; +} + +.lni-reply::before { + content: "\eb75"; +} + +.lni-restaurant::before { + content: "\eb76"; +} + +.lni-revenue::before { + content: "\eb77"; +} + +.lni-road::before { + content: "\eb78"; +} + +.lni-rocket::before { + content: "\eb79"; +} + +.lni-rss-feed::before { + content: "\eb7a"; +} + +.lni-ruler-alt::before { + content: "\eb7b"; +} + +.lni-ruler-pencil::before { + content: "\eb7c"; +} + +.lni-ruler::before { + content: "\eb7d"; +} + +.lni-rupee::before { + content: "\eb7e"; +} + +.lni-sad::before { + content: "\eb7f"; +} + +.lni-save::before { + content: "\eb80"; +} + +.lni-school-bench-alt::before { + content: "\eb81"; +} + +.lni-school-bench::before { + content: "\eb82"; +} + +.lni-scooter::before { + content: "\eb83"; +} + +.lni-scroll-down::before { + content: "\eb84"; +} + +.lni-search-alt::before { + content: "\eb85"; +} + +.lni-search::before { + content: "\eb86"; +} + +.lni-select::before { + content: "\eb87"; +} + +.lni-seo::before { + content: "\eb88"; +} + +.lni-service::before { + content: "\eb89"; +} + +.lni-share-alt-1::before { + content: "\eb8a"; +} + +.lni-share-alt::before { + content: "\eb8b"; +} + +.lni-share::before { + content: "\eb8c"; +} + +.lni-shield::before { + content: "\eb8d"; +} + +.lni-shift-left::before { + content: "\eb8e"; +} + +.lni-shift-right::before { + content: "\eb8f"; +} + +.lni-ship::before { + content: "\eb90"; +} + +.lni-shopify::before { + content: "\eb91"; +} + +.lni-shopping-basket::before { + content: "\eb92"; +} + +.lni-shortcode::before { + content: "\eb93"; +} + +.lni-shovel::before { + content: "\eb94"; +} + +.lni-shuffle::before { + content: "\eb95"; +} + +.lni-signal::before { + content: "\eb96"; +} + +.lni-sketch::before { + content: "\eb97"; +} + +.lni-skipping-rope::before { + content: "\eb98"; +} + +.lni-skype::before { + content: "\eb99"; +} + +.lni-slack-line::before { + content: "\eb9a"; +} + +.lni-slack::before { + content: "\eb9b"; +} + +.lni-slice::before { + content: "\eb9c"; +} + +.lni-slideshare::before { + content: "\eb9d"; +} + +.lni-slim::before { + content: "\eb9e"; +} + +.lni-smile::before { + content: "\eb9f"; +} + +.lni-snapchat::before { + content: "\eba0"; +} + +.lni-sort-alpha-asc::before { + content: "\eba1"; +} + +.lni-sort-amount-asc::before { + content: "\eba2"; +} + +.lni-sort-amount-dsc::before { + content: "\eba3"; +} + +.lni-soundcloud-original::before { + content: "\eba4"; +} + +.lni-soundcloud::before { + content: "\eba5"; +} + +.lni-speechless::before { + content: "\eba6"; +} + +.lni-spellcheck::before { + content: "\eba7"; +} + +.lni-spinner-arrow::before { + content: "\eba8"; +} + +.lni-spinner-solid::before { + content: "\eba9"; +} + +.lni-spinner::before { + content: "\ebaa"; +} + +.lni-spotify-original::before { + content: "\ebab"; +} + +.lni-spotify::before { + content: "\ebac"; +} + +.lni-spray::before { + content: "\ebad"; +} + +.lni-sprout::before { + content: "\ebae"; +} + +.lni-squarespace::before { + content: "\ebaf"; +} + +.lni-stackoverflow::before { + content: "\ebb0"; +} + +.lni-stamp::before { + content: "\ebb1"; +} + +.lni-star-empty::before { + content: "\ebb2"; +} + +.lni-star-filled::before { + content: "\ebb3"; +} + +.lni-star-half::before { + content: "\ebb4"; +} + +.lni-star::before { + content: "\ebb5"; +} + +.lni-stats-down::before { + content: "\ebb6"; +} + +.lni-stats-up::before { + content: "\ebb7"; +} + +.lni-steam::before { + content: "\ebb8"; +} + +.lni-sthethoscope::before { + content: "\ebb9"; +} + +.lni-stop::before { + content: "\ebba"; +} + +.lni-strikethrough::before { + content: "\ebbb"; +} + +.lni-stripe::before { + content: "\ebbc"; +} + +.lni-stumbleupon::before { + content: "\ebbd"; +} + +.lni-sun::before { + content: "\ebbe"; +} + +.lni-support::before { + content: "\ebbf"; +} + +.lni-surf-board::before { + content: "\ebc0"; +} + +.lni-suspect::before { + content: "\ebc1"; +} + +.lni-swift::before { + content: "\ebc2"; +} + +.lni-syringe::before { + content: "\ebc3"; +} + +.lni-tab::before { + content: "\ebc4"; +} + +.lni-tag::before { + content: "\ebc5"; +} + +.lni-target-customer::before { + content: "\ebc6"; +} + +.lni-target-revenue::before { + content: "\ebc7"; +} + +.lni-target::before { + content: "\ebc8"; +} + +.lni-taxi::before { + content: "\ebc9"; +} + +.lni-teabag::before { + content: "\ebca"; +} + +.lni-telegram-original::before { + content: "\ebcb"; +} + +.lni-telegram::before { + content: "\ebcc"; +} + +.lni-text-align-center::before { + content: "\ebcd"; +} + +.lni-text-align-justify::before { + content: "\ebce"; +} + +.lni-text-align-left::before { + content: "\ebcf"; +} + +.lni-text-align-right::before { + content: "\ebd0"; +} + +.lni-text-format-remove::before { + content: "\ebd4"; +} + +.lni-text-format::before { + content: "\ebd1"; +} + +.lni-thought::before { + content: "\ebd2"; +} + +.lni-thumbs-down::before { + content: "\ebd3"; +} + +.lni-thumbs-up::before { + content: "\ebd5"; +} + +.lni-thunder-alt::before { + content: "\ebd6"; +} + +.lni-thunder::before { + content: "\ebd7"; +} + +.lni-ticket-alt::before { + content: "\ebd8"; +} + +.lni-ticket::before { + content: "\ebd9"; +} + +.lni-tiktok::before { + content: "\ebda"; +} + +.lni-timer::before { + content: "\ebdb"; +} + +.lni-tounge::before { + content: "\ebdc"; +} + +.lni-train-alt::before { + content: "\ebdd"; +} + +.lni-train::before { + content: "\ebde"; +} + +.lni-trash-can::before { + content: "\ebdf"; +} + +.lni-travel::before { + content: "\ebe0"; +} + +.lni-tree::before { + content: "\ebe1"; +} + +.lni-trees::before { + content: "\ebe2"; +} + +.lni-trello::before { + content: "\ebe3"; +} + +.lni-trowel::before { + content: "\ebe4"; +} + +.lni-tshirt::before { + content: "\ebe5"; +} + +.lni-tumblr::before { + content: "\ebe6"; +} + +.lni-twitch::before { + content: "\ebe7"; +} + +.lni-twitter-filled::before { + content: "\ebe8"; +} + +.lni-twitter-original::before { + content: "\ebe9"; +} + +.lni-twitter::before { + content: "\ebea"; +} + +.lni-ubuntu::before { + content: "\ebeb"; +} + +.lni-underline::before { + content: "\ebec"; +} + +.lni-unlink::before { + content: "\ebed"; +} + +.lni-unlock::before { + content: "\ebee"; +} + +.lni-unsplash::before { + content: "\ebef"; +} + +.lni-upload::before { + content: "\ebf0"; +} + +.lni-user::before { + content: "\ebf1"; +} + +.lni-users::before { + content: "\ebf6"; +} + +.lni-ux::before { + content: "\ebf2"; +} + +.lni-vector::before { + content: "\ebf3"; +} + +.lni-video::before { + content: "\ebf4"; +} + +.lni-vimeo::before { + content: "\ebf5"; +} + +.lni-visa::before { + content: "\ebf7"; +} + +.lni-vk::before { + content: "\ebf8"; +} + +.lni-volume-high::before { + content: "\ebf9"; +} + +.lni-volume-low::before { + content: "\ebfa"; +} + +.lni-volume-medium::before { + content: "\ebfb"; +} + +.lni-volume-mute::before { + content: "\ebfc"; +} + +.lni-volume::before { + content: "\ebfd"; +} + +.lni-wallet::before { + content: "\ebfe"; +} + +.lni-warning::before { + content: "\ebff"; +} + +.lni-website-alt::before { + content: "\ec00"; +} + +.lni-website::before { + content: "\ec01"; +} + +.lni-wechat::before { + content: "\ec02"; +} + +.lni-weight::before { + content: "\ec03"; +} + +.lni-whatsapp::before { + content: "\ec04"; +} + +.lni-wheelbarrow::before { + content: "\ec05"; +} + +.lni-wheelchair::before { + content: "\ec06"; +} + +.lni-windows::before { + content: "\ec07"; +} + +.lni-wordpress-filled::before { + content: "\ec08"; +} + +.lni-wordpress::before { + content: "\ec09"; +} + +.lni-world-alt::before { + content: "\ec0a"; +} + +.lni-world::before { + content: "\ec0c"; +} + +.lni-write::before { + content: "\ec0b"; +} + +.lni-xbox::before { + content: "\ec0d"; +} + +.lni-yahoo::before { + content: "\ec0e"; +} + +.lni-ycombinator::before { + content: "\ec0f"; +} + +.lni-yen::before { + content: "\ec10"; +} + +.lni-youtube::before { + content: "\ec13"; +} + +.lni-zip::before { + content: "\ec11"; +} + +.lni-zoom-in::before { + content: "\ec12"; +} + +.lni-zoom-out::before { + content: "\ec14"; +} + diff --git a/unblocklife/static/fonts/LineIcons.eot b/unblocklife/static/fonts/LineIcons.eot new file mode 100644 index 0000000..4cdecea Binary files /dev/null and b/unblocklife/static/fonts/LineIcons.eot differ diff --git a/unblocklife/static/fonts/LineIcons.svg b/unblocklife/static/fonts/LineIcons.svg new file mode 100644 index 0000000..3b39e8c --- /dev/null +++ b/unblocklife/static/fonts/LineIcons.svg @@ -0,0 +1,1616 @@ + + + +{ + "author": "lineicons.com", + "description": "Handcrafted Line Icons for Modern User Interfaces of Web, Android, iOS, and Desktop App Projects", + "version": "3.0", + "copyright": "https://lineicons.com/license/", + "license": "CreativeCommons", + "url": "https://lineicons.com/" +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/unblocklife/static/fonts/LineIcons.ttf b/unblocklife/static/fonts/LineIcons.ttf new file mode 100644 index 0000000..f0a9570 Binary files /dev/null and b/unblocklife/static/fonts/LineIcons.ttf differ diff --git a/unblocklife/static/fonts/LineIcons.woff b/unblocklife/static/fonts/LineIcons.woff new file mode 100644 index 0000000..e6013c7 Binary files /dev/null and b/unblocklife/static/fonts/LineIcons.woff differ diff --git a/unblocklife/static/fonts/LineIcons.woff2 b/unblocklife/static/fonts/LineIcons.woff2 new file mode 100644 index 0000000..e147716 Binary files /dev/null and b/unblocklife/static/fonts/LineIcons.woff2 differ diff --git a/unblocklife/static/js/unblocklife.js b/unblocklife/static/js/unblocklife.js new file mode 100644 index 0000000..e69de29 diff --git a/unblocklife/templates/404.html b/unblocklife/templates/404.html new file mode 100644 index 0000000..f19ab95 --- /dev/null +++ b/unblocklife/templates/404.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block title %}Page not found{% endblock %} + +{% block body_class %}template-404{% endblock %} + +{% block content %} +

Page not found

+ +

Sorry, this page could not be found.

+{% endblock %} diff --git a/unblocklife/templates/500.html b/unblocklife/templates/500.html new file mode 100644 index 0000000..77379e5 --- /dev/null +++ b/unblocklife/templates/500.html @@ -0,0 +1,13 @@ + + + + + Internal server error + + + +

Internal server error

+ +

Sorry, there seems to be an error. Please try again soon.

+ + diff --git a/unblocklife/templates/base.html b/unblocklife/templates/base.html new file mode 100644 index 0000000..1377679 --- /dev/null +++ b/unblocklife/templates/base.html @@ -0,0 +1,52 @@ +{% load static wagtailcore_tags wagtailuserbar %} + + + + + + + {% block title %} + {% if page.seo_title %}{{ page.seo_title }}{% else %}{{ page.title }}{% endif %} + {% endblock %} + {% block title_suffix %} + {% wagtail_site as current_site %} + {% if current_site and current_site.site_name %}- {{ current_site.site_name }}{% endif %} + {% endblock %} + + {% if page.search_description %} + + {% endif %} + + + {# Force all links in the live preview panel to be opened in a new tab #} + {% if request.in_preview_panel %} + + {% endif %} + + + + {# Global stylesheets #} + + + + + {% block extra_css %} + {# Override this in templates to add extra stylesheets #} + {% endblock %} + + + + {% include 'navigation.html' %} + + {% block content %}{% endblock %} + + {# Global javascript #} + + + {% block extra_js %} + {# Override this in templates to add extra javascript #} + {% include 'footer.html' %} + {% endblock %} + + + diff --git a/unblocklife/templates/blocks/heading_block.html b/unblocklife/templates/blocks/heading_block.html new file mode 100644 index 0000000..9b0051f --- /dev/null +++ b/unblocklife/templates/blocks/heading_block.html @@ -0,0 +1,17 @@ +{% comment %} + Content is coming from the StandardBlock StreamField + class within `blocks.py` +{% endcomment %} + +{% if self.size == 'h2' %} +

{{ self.heading_text }}

+ +{% elif self.size == 'h3' %} +

{{ self.heading_text }}

+ +{% elif self.size == 'h4' %} +

{{ self.heading_text }}

+ +{% endif %} + + diff --git a/unblocklife/templates/blocks/paragraph_block.html b/unblocklife/templates/blocks/paragraph_block.html new file mode 100644 index 0000000..e3125de --- /dev/null +++ b/unblocklife/templates/blocks/paragraph_block.html @@ -0,0 +1 @@ +{{ self }} diff --git a/unblocklife/templates/blocks/profile_image_block.html b/unblocklife/templates/blocks/profile_image_block.html new file mode 100644 index 0000000..58c0a17 --- /dev/null +++ b/unblocklife/templates/blocks/profile_image_block.html @@ -0,0 +1,27 @@ +{% load wagtailimages_tags %} + +
+
+
+

Instructor

+ {% picture self.image format-{avif,webp,jpeg} width-150 class="rounded rounded-full" %} +
+
+
+
+
{{ self.firstname }} {{ self.lastname }}
+ {%if self.title %}
{{ self.title }}
{% endif %} +
+ + + + + + + {{ self.linkedin }} + +
+
{{ self.short_profile }}
+
+ +
diff --git a/unblocklife/templates/footer.html b/unblocklife/templates/footer.html new file mode 100644 index 0000000..492c6ff --- /dev/null +++ b/unblocklife/templates/footer.html @@ -0,0 +1,135 @@ +{% load static wagtailimages_tags unblocklife_tags %} +
+ diff --git a/unblocklife/templates/header-hero.html b/unblocklife/templates/header-hero.html new file mode 100644 index 0000000..6e53f96 --- /dev/null +++ b/unblocklife/templates/header-hero.html @@ -0,0 +1,18 @@ +{% load wagtailcore_tags wagtailimages_tags %} +
+{% if page.image %} +
+ {% picture page.image format-{avif,webp,jpeg} fill-{800x650,1920x600} sizes="100vw" class="hero-image" alt="" %} +
+

{{ page.title }}

+
+
+{% else %} +
+
+

{{ page.title }}

+
+
+{% endif %} +
+ diff --git a/unblocklife/templates/navigation.html b/unblocklife/templates/navigation.html new file mode 100644 index 0000000..a07cb6b --- /dev/null +++ b/unblocklife/templates/navigation.html @@ -0,0 +1,40 @@ +{% load static wagtailimages_tags unblocklife_tags %} + diff --git a/unblocklife/urls.py b/unblocklife/urls.py new file mode 100644 index 0000000..c2e8a0c --- /dev/null +++ b/unblocklife/urls.py @@ -0,0 +1,35 @@ +from django.conf import settings +from django.urls import include, path +from django.contrib import admin + +from wagtail.admin import urls as wagtailadmin_urls +from wagtail import urls as wagtail_urls +from wagtail.documents import urls as wagtaildocs_urls + +from search import views as search_views + +urlpatterns = [ + path("django-admin/", admin.site.urls), + path("admin/", include(wagtailadmin_urls)), + path("documents/", include(wagtaildocs_urls)), + path("search/", search_views.search, name="search"), +] + + +if settings.DEBUG: + from django.conf.urls.static import static + from django.contrib.staticfiles.urls import staticfiles_urlpatterns + + # Serve static and media files from development server + urlpatterns += staticfiles_urlpatterns() + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + +urlpatterns = urlpatterns + [ + # For anything not caught by a more specific rule above, hand over to + # Wagtail's page serving mechanism. This should be the last pattern in + # the list: + path("", include(wagtail_urls)), + # Alternatively, if you want Wagtail pages to be served from a subpath + # of your site, rather than the site root: + # path("pages/", include(wagtail_urls)), +] diff --git a/unblocklife/wsgi.py b/unblocklife/wsgi.py new file mode 100644 index 0000000..f301b3e --- /dev/null +++ b/unblocklife/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for unblocklife project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "unblocklife.settings.dev") + +application = get_wsgi_application()