first commit web
22
manage.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
"""Django's command-line utility for administrative tasks."""
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Run administrative tasks."""
|
||||||
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nin.settings')
|
||||||
|
try:
|
||||||
|
from django.core.management import execute_from_command_line
|
||||||
|
except ImportError as exc:
|
||||||
|
raise ImportError(
|
||||||
|
"Couldn't import Django. Are you sure it's installed and "
|
||||||
|
"available on your PYTHONPATH environment variable? Did you "
|
||||||
|
"forget to activate a virtual environment?"
|
||||||
|
) from exc
|
||||||
|
execute_from_command_line(sys.argv)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
0
nin/__init__.py
Normal file
BIN
nin/__pycache__/__init__.cpython-312.pyc
Normal file
BIN
nin/__pycache__/settings.cpython-312.pyc
Normal file
BIN
nin/__pycache__/urls.cpython-312.pyc
Normal file
BIN
nin/__pycache__/views.cpython-312.pyc
Normal file
BIN
nin/__pycache__/wsgi.cpython-312.pyc
Normal file
16
nin/asgi.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
"""
|
||||||
|
ASGI config for nin project.
|
||||||
|
|
||||||
|
It exposes the ASGI callable as a module-level variable named ``application``.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/5.1/howto/deployment/asgi/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.asgi import get_asgi_application
|
||||||
|
|
||||||
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nin.settings')
|
||||||
|
|
||||||
|
application = get_asgi_application()
|
||||||
129
nin/settings.py
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
"""
|
||||||
|
Django settings for nin project.
|
||||||
|
|
||||||
|
Generated by 'django-admin startproject' using Django 5.1.6.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/5.1/topics/settings/
|
||||||
|
|
||||||
|
For the full list of settings and their values, see
|
||||||
|
https://docs.djangoproject.com/en/5.1/ref/settings/
|
||||||
|
"""
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||||
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||||
|
|
||||||
|
|
||||||
|
# Quick-start development settings - unsuitable for production
|
||||||
|
# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/
|
||||||
|
|
||||||
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
|
SECRET_KEY = 'django-insecure-)7j8t^%*@kb9vmr#m_j(7gl0c14csp5so$zuqo3eg(eloz15x#'
|
||||||
|
|
||||||
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
|
DEBUG = True
|
||||||
|
|
||||||
|
ALLOWED_HOSTS = []
|
||||||
|
|
||||||
|
|
||||||
|
# Application definition
|
||||||
|
|
||||||
|
INSTALLED_APPS = [
|
||||||
|
'django.contrib.admin',
|
||||||
|
'django.contrib.auth',
|
||||||
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.sessions',
|
||||||
|
'django.contrib.messages',
|
||||||
|
'django.contrib.staticfiles',
|
||||||
|
]
|
||||||
|
|
||||||
|
MIDDLEWARE = [
|
||||||
|
'django.middleware.security.SecurityMiddleware',
|
||||||
|
'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',
|
||||||
|
]
|
||||||
|
|
||||||
|
ROOT_URLCONF = 'nin.urls'
|
||||||
|
|
||||||
|
TEMPLATES = [
|
||||||
|
{
|
||||||
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||||
|
'DIRS': [os.path.join(BASE_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 = 'nin.wsgi.application'
|
||||||
|
|
||||||
|
|
||||||
|
# Database
|
||||||
|
# https://docs.djangoproject.com/en/5.1/ref/settings/#databases
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
|
'NAME': BASE_DIR / 'db.sqlite3',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Password validation
|
||||||
|
# https://docs.djangoproject.com/en/5.1/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/5.1/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/5.1/howto/static-files/
|
||||||
|
|
||||||
|
STATIC_URL = 'static/'
|
||||||
|
|
||||||
|
STATICFILES_DIRS = [
|
||||||
|
os.path.join(BASE_DIR, 'static'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Default primary key field type
|
||||||
|
# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field
|
||||||
|
|
||||||
|
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||||
11
nin/urls.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from django.contrib import admin
|
||||||
|
from django.urls import path
|
||||||
|
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('admin/', admin.site.urls),
|
||||||
|
path('', views.dashboard, name='dashboard'),
|
||||||
|
path('news/', views.news, name='news'),
|
||||||
|
path('news/detail', views.news_detail, name='news_detail'),
|
||||||
|
]
|
||||||
12
nin/views.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from django.shortcuts import render, redirect
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||
|
|
||||||
|
def dashboard(request):
|
||||||
|
return render(request, 'dashboard.html')
|
||||||
|
|
||||||
|
def news(request):
|
||||||
|
return render(request, 'news.html')
|
||||||
|
|
||||||
|
def news_detail(request):
|
||||||
|
return render(request, 'news-detail.html')
|
||||||
16
nin/wsgi.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
"""
|
||||||
|
WSGI config for nin 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/5.1/howto/deployment/wsgi/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
|
||||||
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nin.settings')
|
||||||
|
|
||||||
|
application = get_wsgi_application()
|
||||||
1556
static/css/bootstrap-icons.css
vendored
Normal file
7
static/css/bootstrap.min.css
vendored
Normal file
1663
static/css/templatemo-kind-heart-charity.css
Normal file
BIN
static/fonts/Metropolis/.DS_Store
vendored
Normal file
BIN
static/fonts/Metropolis/Metropolis-Bold.woff
Normal file
BIN
static/fonts/Metropolis/Metropolis-Bold.woff2
Normal file
BIN
static/fonts/Metropolis/Metropolis-Light.woff
Normal file
BIN
static/fonts/Metropolis/Metropolis-Light.woff2
Normal file
BIN
static/fonts/Metropolis/Metropolis-Regular.woff
Normal file
BIN
static/fonts/Metropolis/Metropolis-Regular.woff2
Normal file
BIN
static/fonts/Metropolis/Metropolis-SemiBold.woff
Normal file
BIN
static/fonts/Metropolis/Metropolis-SemiBold.woff2
Normal file
BIN
static/fonts/bootstrap-icons.woff
Normal file
BIN
static/fonts/bootstrap-icons.woff2
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 30 KiB |
BIN
static/images/avatar/portrait-young-redhead-bearded-male.jpg
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 29 KiB |
BIN
static/images/avatar/studio-portrait-emotional-happy-funny.jpg
Normal file
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 165 KiB |
BIN
static/images/different-people-doing-volunteer-work.jpg
Normal file
|
After Width: | Height: | Size: 262 KiB |
BIN
static/images/founder.jpg
Normal file
|
After Width: | Height: | Size: 254 KiB |
BIN
static/images/group-people-volunteering-foodbank-poor-people.jpg
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
static/images/icons/hands.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
static/images/icons/heart.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
static/images/icons/receive.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
static/images/icons/scholarship.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
static/images/logonin.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
static/images/news/africa-humanitarian-aid-doctor.jpg
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
static/images/news/close-up-happy-people-working-together.jpg
Normal file
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 115 KiB |
BIN
static/images/news/medium-shot-people-collecting-foodstuff.jpg
Normal file
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 89 KiB |
BIN
static/images/ours.jpg
Normal file
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 100 KiB |
BIN
static/images/slide/medium-shot-people-collecting-donations.jpg
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
static/images/slide/volunteer-helping-with-donation-box.jpg
Normal file
|
After Width: | Height: | Size: 169 KiB |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 54 KiB |
BIN
static/images/social/instagram.PNG
Normal file
|
After Width: | Height: | Size: 148 KiB |
BIN
static/images/social/location.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
static/images/social/mail.PNG
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
static/images/social/whatsapp.PNG
Normal file
|
After Width: | Height: | Size: 160 KiB |
7
static/js/bootstrap.min.js
vendored
Normal file
37
static/js/click-scroll.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
//jquery-click-scroll
|
||||||
|
//by syamsul'isul' Arifin
|
||||||
|
|
||||||
|
var sectionArray = [1, 2, 3, 4, 5, 6];
|
||||||
|
|
||||||
|
$.each(sectionArray, function(index, value){
|
||||||
|
|
||||||
|
$(document).scroll(function(){
|
||||||
|
var offsetSection = $('#' + 'section_' + value).offset().top - 90;
|
||||||
|
var docScroll = $(document).scrollTop();
|
||||||
|
var docScroll1 = docScroll + 1;
|
||||||
|
|
||||||
|
|
||||||
|
if ( docScroll1 >= offsetSection ){
|
||||||
|
$('.navbar-nav .nav-item .nav-link').removeClass('active');
|
||||||
|
$('.navbar-nav .nav-item .nav-link:link').addClass('inactive');
|
||||||
|
$('.navbar-nav .nav-item .nav-link').eq(index).addClass('active');
|
||||||
|
$('.navbar-nav .nav-item .nav-link').eq(index).removeClass('inactive');
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.click-scroll').eq(index).click(function(e){
|
||||||
|
var offsetClick = $('#' + 'section_' + value).offset().top - 90;
|
||||||
|
e.preventDefault();
|
||||||
|
$('html, body').animate({
|
||||||
|
'scrollTop':offsetClick
|
||||||
|
}, 300)
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('.navbar-nav .nav-item .nav-link:link').addClass('inactive');
|
||||||
|
$('.navbar-nav .nav-item .nav-link').eq(0).addClass('active');
|
||||||
|
$('.navbar-nav .nav-item .nav-link:link').eq(0).removeClass('inactive');
|
||||||
|
});
|
||||||
89
static/js/counter.js
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* jQuery.appear
|
||||||
|
* http://code.google.com/p/jquery-appear/
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Michael Hixson
|
||||||
|
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
|
||||||
|
*/
|
||||||
|
(function($){$.fn.appear=function(f,o){var s=$.extend({one:true},o);return this.each(function(){var t=$(this);t.appeared=false;if(!f){t.trigger('appear',s.data);return;}var w=$(window);var c=function(){if(!t.is(':visible')){t.appeared=false;return;}var a=w.scrollLeft();var b=w.scrollTop();var o=t.offset();var x=o.left;var y=o.top;if(y+t.height()>=b&&y<=b+w.height()&&x+t.width()>=a&&x<=a+w.width()){if(!t.appeared)t.trigger('appear',s.data);}else{t.appeared=false;}};var m=function(){t.appeared=true;if(s.one){w.unbind('scroll',c);var i=$.inArray(c,$.fn.appear.checks);if(i>=0)$.fn.appear.checks.splice(i,1);}f.apply(this,arguments);};if(s.one)t.one('appear',s.data,m);else t.bind('appear',s.data,m);w.scroll(c);$.fn.appear.checks.push(c);(c)();});};$.extend($.fn.appear,{checks:[],timeout:null,checkAll:function(){var l=$.fn.appear.checks.length;if(l>0)while(l--)($.fn.appear.checks[l])();},run:function(){if($.fn.appear.timeout)clearTimeout($.fn.appear.timeout);$.fn.appear.timeout=setTimeout($.fn.appear.checkAll,20);}});$.each(['append','prepend','after','before','attr','removeAttr','addClass','removeClass','toggleClass','remove','css','show','hide'],function(i,n){var u=$.fn[n];if(u){$.fn[n]=function(){var r=u.apply(this,arguments);$.fn.appear.run();return r;}}});})(jQuery);
|
||||||
|
|
||||||
|
(function ($) {
|
||||||
|
$.fn.countTo = function (options) {
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
return $(this).each(function () {
|
||||||
|
// set options for current element
|
||||||
|
var settings = $.extend({}, $.fn.countTo.defaults, {
|
||||||
|
from: $(this).data('from'),
|
||||||
|
to: $(this).data('to'),
|
||||||
|
speed: $(this).data('speed'),
|
||||||
|
refreshInterval: $(this).data('refresh-interval'),
|
||||||
|
decimals: $(this).data('decimals')
|
||||||
|
}, options);
|
||||||
|
|
||||||
|
// how many times to update the value, and how much to increment the value on each update
|
||||||
|
var loops = Math.ceil(settings.speed / settings.refreshInterval),
|
||||||
|
increment = (settings.to - settings.from) / loops;
|
||||||
|
|
||||||
|
// references & variables that will change with each update
|
||||||
|
var self = this,
|
||||||
|
$self = $(this),
|
||||||
|
loopCount = 0,
|
||||||
|
value = settings.from,
|
||||||
|
data = $self.data('countTo') || {};
|
||||||
|
|
||||||
|
$self.data('countTo', data);
|
||||||
|
|
||||||
|
// if an existing interval can be found, clear it first
|
||||||
|
if (data.interval) {
|
||||||
|
clearInterval(data.interval);
|
||||||
|
}
|
||||||
|
data.interval = setInterval(updateTimer, settings.refreshInterval);
|
||||||
|
|
||||||
|
// initialize the element with the starting value
|
||||||
|
render(value);
|
||||||
|
|
||||||
|
function updateTimer() {
|
||||||
|
value += increment;
|
||||||
|
loopCount++;
|
||||||
|
|
||||||
|
render(value);
|
||||||
|
|
||||||
|
if (typeof(settings.onUpdate) == 'function') {
|
||||||
|
settings.onUpdate.call(self, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (loopCount >= loops) {
|
||||||
|
// remove the interval
|
||||||
|
$self.removeData('countTo');
|
||||||
|
clearInterval(data.interval);
|
||||||
|
value = settings.to;
|
||||||
|
|
||||||
|
if (typeof(settings.onComplete) == 'function') {
|
||||||
|
settings.onComplete.call(self, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function render(value) {
|
||||||
|
var formattedValue = settings.formatter.call(self, value, settings);
|
||||||
|
$self.text(formattedValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.countTo.defaults = {
|
||||||
|
from: 0, // the number the element should start at
|
||||||
|
to: 0, // the number the element should end at
|
||||||
|
speed: 1000, // how long it should take to count between the target numbers
|
||||||
|
refreshInterval: 100, // how often the element should be updated
|
||||||
|
decimals: 0, // the number of decimal places to show
|
||||||
|
formatter: formatter, // handler for formatting the value before rendering
|
||||||
|
onUpdate: null, // callback method for every time the element is updated
|
||||||
|
onComplete: null // callback method for when the element finishes updating
|
||||||
|
};
|
||||||
|
|
||||||
|
function formatter(value, settings) {
|
||||||
|
return value.toFixed(settings.decimals);
|
||||||
|
}
|
||||||
|
}(jQuery));
|
||||||
33
static/js/custom.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
(function ($) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// COUNTER NUMBERS
|
||||||
|
jQuery('.counter-thumb').appear(function() {
|
||||||
|
jQuery('.counter-number').countTo();
|
||||||
|
});
|
||||||
|
|
||||||
|
// CUSTOM LINK
|
||||||
|
$('.smoothscroll').click(function(){
|
||||||
|
var el = $(this).attr('href');
|
||||||
|
var elWrapped = $(el);
|
||||||
|
var header_height = $('.navbar').height();
|
||||||
|
|
||||||
|
scrollToDiv(elWrapped,header_height);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
function scrollToDiv(element,navheight){
|
||||||
|
var offset = element.offset();
|
||||||
|
var offsetTop = offset.top;
|
||||||
|
var totalScroll = offsetTop-navheight;
|
||||||
|
|
||||||
|
$('body,html').animate({
|
||||||
|
scrollTop: totalScroll
|
||||||
|
}, 300);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
})(window.jQuery);
|
||||||
|
|
||||||
|
|
||||||
4
static/js/jquery.min.js
vendored
Normal file
219
static/js/jquery.sticky.js
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
// Sticky Plugin v1.0.3 for jQuery
|
||||||
|
// =============
|
||||||
|
// Author: Anthony Garand
|
||||||
|
// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
|
||||||
|
// Improvements by Leonardo C. Daronco (daronco)
|
||||||
|
// Created: 02/14/2011
|
||||||
|
// Date: 07/20/2015
|
||||||
|
// Website: http://stickyjs.com/
|
||||||
|
// Description: Makes an element on the page stick on the screen as you scroll
|
||||||
|
// It will only set the 'top' and 'position' of your element, you
|
||||||
|
// might need to adjust the width in some cases.
|
||||||
|
|
||||||
|
(function($) {
|
||||||
|
var slice = Array.prototype.slice; // save ref to original slice()
|
||||||
|
var splice = Array.prototype.splice; // save ref to original slice()
|
||||||
|
|
||||||
|
var defaults = {
|
||||||
|
topSpacing: 0,
|
||||||
|
bottomSpacing: 0,
|
||||||
|
className: 'is-sticky',
|
||||||
|
wrapperClassName: 'sticky-wrapper',
|
||||||
|
center: false,
|
||||||
|
getWidthFrom: '',
|
||||||
|
widthFromWrapper: true, // works only when .getWidthFrom is empty
|
||||||
|
responsiveWidth: false
|
||||||
|
},
|
||||||
|
$window = $(window),
|
||||||
|
$document = $(document),
|
||||||
|
sticked = [],
|
||||||
|
windowHeight = $window.height(),
|
||||||
|
scroller = function() {
|
||||||
|
var scrollTop = $window.scrollTop(),
|
||||||
|
documentHeight = $document.height(),
|
||||||
|
dwh = documentHeight - windowHeight,
|
||||||
|
extra = (scrollTop > dwh) ? dwh - scrollTop : 0;
|
||||||
|
|
||||||
|
for (var i = 0; i < sticked.length; i++) {
|
||||||
|
var s = sticked[i],
|
||||||
|
elementTop = s.stickyWrapper.offset().top,
|
||||||
|
etse = elementTop - s.topSpacing - extra;
|
||||||
|
|
||||||
|
//update height in case of dynamic content
|
||||||
|
s.stickyWrapper.css('height', s.stickyElement.outerHeight());
|
||||||
|
|
||||||
|
if (scrollTop <= etse) {
|
||||||
|
if (s.currentTop !== null) {
|
||||||
|
s.stickyElement
|
||||||
|
.css({
|
||||||
|
'width': '',
|
||||||
|
'position': '',
|
||||||
|
'top': ''
|
||||||
|
});
|
||||||
|
s.stickyElement.parent().removeClass(s.className);
|
||||||
|
s.stickyElement.trigger('sticky-end', [s]);
|
||||||
|
s.currentTop = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var newTop = documentHeight - s.stickyElement.outerHeight()
|
||||||
|
- s.topSpacing - s.bottomSpacing - scrollTop - extra;
|
||||||
|
if (newTop < 0) {
|
||||||
|
newTop = newTop + s.topSpacing;
|
||||||
|
} else {
|
||||||
|
newTop = s.topSpacing;
|
||||||
|
}
|
||||||
|
if (s.currentTop != newTop) {
|
||||||
|
var newWidth;
|
||||||
|
if (s.getWidthFrom) {
|
||||||
|
newWidth = $(s.getWidthFrom).width() || null;
|
||||||
|
} else if (s.widthFromWrapper) {
|
||||||
|
newWidth = s.stickyWrapper.width();
|
||||||
|
}
|
||||||
|
if (newWidth == null) {
|
||||||
|
newWidth = s.stickyElement.width();
|
||||||
|
}
|
||||||
|
s.stickyElement
|
||||||
|
.css('width', newWidth)
|
||||||
|
.css('position', 'fixed')
|
||||||
|
.css('top', newTop);
|
||||||
|
|
||||||
|
s.stickyElement.parent().addClass(s.className);
|
||||||
|
|
||||||
|
if (s.currentTop === null) {
|
||||||
|
s.stickyElement.trigger('sticky-start', [s]);
|
||||||
|
} else {
|
||||||
|
// sticky is started but it have to be repositioned
|
||||||
|
s.stickyElement.trigger('sticky-update', [s]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) {
|
||||||
|
// just reached bottom || just started to stick but bottom is already reached
|
||||||
|
s.stickyElement.trigger('sticky-bottom-reached', [s]);
|
||||||
|
} else if(s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) {
|
||||||
|
// sticky is started && sticked at topSpacing && overflowing from top just finished
|
||||||
|
s.stickyElement.trigger('sticky-bottom-unreached', [s]);
|
||||||
|
}
|
||||||
|
|
||||||
|
s.currentTop = newTop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resizer = function() {
|
||||||
|
windowHeight = $window.height();
|
||||||
|
|
||||||
|
for (var i = 0; i < sticked.length; i++) {
|
||||||
|
var s = sticked[i];
|
||||||
|
var newWidth = null;
|
||||||
|
if (s.getWidthFrom) {
|
||||||
|
if (s.responsiveWidth === true) {
|
||||||
|
newWidth = $(s.getWidthFrom).width();
|
||||||
|
}
|
||||||
|
} else if(s.widthFromWrapper) {
|
||||||
|
newWidth = s.stickyWrapper.width();
|
||||||
|
}
|
||||||
|
if (newWidth != null) {
|
||||||
|
s.stickyElement.css('width', newWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods = {
|
||||||
|
init: function(options) {
|
||||||
|
var o = $.extend({}, defaults, options);
|
||||||
|
return this.each(function() {
|
||||||
|
var stickyElement = $(this);
|
||||||
|
|
||||||
|
var stickyId = stickyElement.attr('id');
|
||||||
|
var stickyHeight = stickyElement.outerHeight();
|
||||||
|
var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName
|
||||||
|
var wrapper = $('<div></div>')
|
||||||
|
.attr('id', wrapperId)
|
||||||
|
.addClass(o.wrapperClassName);
|
||||||
|
|
||||||
|
stickyElement.wrapAll(wrapper);
|
||||||
|
|
||||||
|
var stickyWrapper = stickyElement.parent();
|
||||||
|
|
||||||
|
if (o.center) {
|
||||||
|
stickyWrapper.css({width:stickyElement.outerWidth(),marginLeft:"auto",marginRight:"auto"});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stickyElement.css("float") == "right") {
|
||||||
|
stickyElement.css({"float":"none"}).parent().css({"float":"right"});
|
||||||
|
}
|
||||||
|
|
||||||
|
stickyWrapper.css('height', stickyHeight);
|
||||||
|
|
||||||
|
o.stickyElement = stickyElement;
|
||||||
|
o.stickyWrapper = stickyWrapper;
|
||||||
|
o.currentTop = null;
|
||||||
|
|
||||||
|
sticked.push(o);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
update: scroller,
|
||||||
|
unstick: function(options) {
|
||||||
|
return this.each(function() {
|
||||||
|
var that = this;
|
||||||
|
var unstickyElement = $(that);
|
||||||
|
|
||||||
|
var removeIdx = -1;
|
||||||
|
var i = sticked.length;
|
||||||
|
while (i-- > 0) {
|
||||||
|
if (sticked[i].stickyElement.get(0) === that) {
|
||||||
|
splice.call(sticked,i,1);
|
||||||
|
removeIdx = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(removeIdx != -1) {
|
||||||
|
unstickyElement.unwrap();
|
||||||
|
unstickyElement
|
||||||
|
.css({
|
||||||
|
'width': '',
|
||||||
|
'position': '',
|
||||||
|
'top': '',
|
||||||
|
'float': ''
|
||||||
|
})
|
||||||
|
;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
|
||||||
|
if (window.addEventListener) {
|
||||||
|
window.addEventListener('scroll', scroller, false);
|
||||||
|
window.addEventListener('resize', resizer, false);
|
||||||
|
} else if (window.attachEvent) {
|
||||||
|
window.attachEvent('onscroll', scroller);
|
||||||
|
window.attachEvent('onresize', resizer);
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.sticky = function(method) {
|
||||||
|
if (methods[method]) {
|
||||||
|
return methods[method].apply(this, slice.call(arguments, 1));
|
||||||
|
} else if (typeof method === 'object' || !method ) {
|
||||||
|
return methods.init.apply( this, arguments );
|
||||||
|
} else {
|
||||||
|
$.error('Method ' + method + ' does not exist on jQuery.sticky');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.unstick = function(method) {
|
||||||
|
if (methods[method]) {
|
||||||
|
return methods[method].apply(this, slice.call(arguments, 1));
|
||||||
|
} else if (typeof method === 'object' || !method ) {
|
||||||
|
return methods.unstick.apply( this, arguments );
|
||||||
|
} else {
|
||||||
|
$.error('Method ' + method + ' does not exist on jQuery.sticky');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$(function() {
|
||||||
|
setTimeout(scroller, 0);
|
||||||
|
});
|
||||||
|
})(jQuery);
|
||||||
|
|
||||||
|
$(document).ready(function(){
|
||||||
|
$(".navbar").sticky({topSpacing:0});
|
||||||
|
});
|
||||||
780
templates/dashboard.html
Normal file
@ -0,0 +1,780 @@
|
|||||||
|
{% extends "snippets/main.html" %}
|
||||||
|
{% load static %}
|
||||||
|
{% block content %}
|
||||||
|
<section class="hero-section hero-section-full-height">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12 col-12 p-0">
|
||||||
|
<div id="hero-slide" class="carousel carousel-fade slide" data-bs-ride="carousel">
|
||||||
|
<div class="carousel-inner">
|
||||||
|
<div class="carousel-item active">
|
||||||
|
<img src="{% static 'images/slide/volunteer-helping-with-donation-box.jpg' %}" class="carousel-image img-fluid" alt="...">
|
||||||
|
<div class="carousel-caption d-flex flex-column justify-content-end">
|
||||||
|
<h1>Social</h1>
|
||||||
|
<p>Social learning experience mencakup</br>budaya, interaksi, dan komunikasi sosial.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="carousel-item">
|
||||||
|
<img src="{% static 'images/slide/volunteer-selecting-organizing-clothes-donations-charity.jpg' %}" class="carousel-image img-fluid" alt="...">
|
||||||
|
<div class="carousel-caption d-flex flex-column justify-content-end">
|
||||||
|
<h1>Ecological</h1>
|
||||||
|
<p>Ecological learning experience mencerminkan</br>keseimbangan sumber daya dan ekosistem dalam </br>kegiatan Anindhaloka.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="carousel-item">
|
||||||
|
<img src="{% static 'images/slide/medium-shot-people-collecting-donations.jpg' %}" class="carousel-image img-fluid" alt="...">
|
||||||
|
<div class="carousel-caption d-flex flex-column justify-content-end">
|
||||||
|
<h1>Spiritual</h1>
|
||||||
|
<p>Spiritual learning experience menyeimbangkan</br>keyakinan, pikiran, dan pemahaman diri.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="carousel-item">
|
||||||
|
<img src="{% static 'images/slide/medium-shot-people-collecting-donations.jpg' %}" class="carousel-image img-fluid" alt="...">
|
||||||
|
<div class="carousel-caption d-flex flex-column justify-content-end">
|
||||||
|
<h1>Technological</h1>
|
||||||
|
<p>Technological learning menggambarkan</br>solusi, kemodernan, dan dampak teknologi Anindhaloka.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button class="carousel-control-prev" type="button" data-bs-target="#hero-slide" data-bs-slide="prev">
|
||||||
|
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
|
||||||
|
<span class="visually-hidden">Previous</span>
|
||||||
|
</button>
|
||||||
|
<button class="carousel-control-next" type="button" data-bs-target="#hero-slide" data-bs-slide="next">
|
||||||
|
<span class="carousel-control-next-icon" aria-hidden="true"></span>
|
||||||
|
<span class="visually-hidden">Next</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="section-padding">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-10 col-12 text-center mx-auto">
|
||||||
|
<h2 class="mb-5">Welcome to Anindhaloka</h2>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-3 col-md-6 col-12 mb-4 mb-lg-0 mb-md-4">
|
||||||
|
<div class="featured-block d-flex justify-content-center align-items-center">
|
||||||
|
<a href="donate.html" class="d-block">
|
||||||
|
<img src="{% static 'images/icons/heart.png' %}" class="featured-block-image img-fluid" alt="">
|
||||||
|
<p class="featured-block-text"><strong>Caring</strong> Earth</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-3 col-md-6 col-12 mb-4 mb-lg-0">
|
||||||
|
<div class="featured-block d-flex justify-content-center align-items-center">
|
||||||
|
<a href="donate.html" class="d-block">
|
||||||
|
<img src="{% static 'images/icons/scholarship.png' %}" class="featured-block-image img-fluid" alt="">
|
||||||
|
|
||||||
|
<p class="featured-block-text"><strong>Join a</strong> Program</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3 col-md-6 col-12 mb-4 mb-lg-0">
|
||||||
|
<div class="featured-block d-flex justify-content-center align-items-center">
|
||||||
|
<a href="donate.html" class="d-block">
|
||||||
|
<img src="{% static 'images/icons/hands.png' %}" class="featured-block-image img-fluid" alt="">
|
||||||
|
|
||||||
|
<p class="featured-block-text">Become a <strong>volunteer</strong></p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3 col-md-6 col-12 mb-4 mb-lg-0 mb-md-4">
|
||||||
|
<div class="featured-block d-flex justify-content-center align-items-center">
|
||||||
|
<a href="donate.html" class="d-block">
|
||||||
|
<img src="{% static 'images/icons/receive.png' %}" class="featured-block-image img-fluid" alt="">
|
||||||
|
|
||||||
|
<p class="featured-block-text">Be a<strong>Support</strong></p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="section-padding section-bg" id="section_2">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12 mb-5 mb-lg-0">
|
||||||
|
<img src="{% static 'images/ours.jpg' %}" class="custom-text-box-image img-fluid" alt="">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12">
|
||||||
|
<div class="custom-text-box">
|
||||||
|
<h2 class="mb-2">Our Story</h2>
|
||||||
|
|
||||||
|
<h5 class="mb-3">Anindhaloka, Rumah Gotong Royong</h5>
|
||||||
|
|
||||||
|
<p class="mb-0">Rumah terpercaya dan kesayangan yang menghubungkan pikiran-hati-tindakan Pemelajar
|
||||||
|
Bahagia untuk melahirkan mahakarya bagi kemanusiaan, kelestarian alam, dan kebijaksanaan
|
||||||
|
spiritualitas melalui kerja Gotong Royong.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-6 col-md-6 col-12">
|
||||||
|
<div class="custom-text-box mb-lg-0">
|
||||||
|
<h5 class="mb-3">Our Mission</h5>
|
||||||
|
|
||||||
|
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
|
||||||
|
|
||||||
|
<ul class="custom-list mt-2">
|
||||||
|
<li class="custom-list-item d-flex">
|
||||||
|
<i class="bi-check custom-text-box-icon me-2"></i>
|
||||||
|
Charity Theme
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="custom-list-item d-flex">
|
||||||
|
<i class="bi-check custom-text-box-icon me-2"></i>
|
||||||
|
Semantic HTML
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-md-6 col-12">
|
||||||
|
<div class="custom-text-box d-flex flex-wrap d-lg-block mb-lg-0">
|
||||||
|
<div class="counter-thumb">
|
||||||
|
<div class="d-flex">
|
||||||
|
<span class="counter-number" data-from="1" data-to="2009" data-speed="1000"></span>
|
||||||
|
<span class="counter-number-text"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<span class="counter-text">Founded</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="counter-thumb mt-4">
|
||||||
|
<div class="d-flex">
|
||||||
|
<span class="counter-number" data-from="1" data-to="120" data-speed="1000"></span>
|
||||||
|
<span class="counter-number-text">B</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<span class="counter-text">Donations</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<section class="about-section section-padding">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-md-5 col-12">
|
||||||
|
<img src="{% static 'images/founder.jpg' %}" class="about-image ms-lg-auto bg-light shadow-lg img-fluid" alt="">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-5 col-md-7 col-12">
|
||||||
|
<div class="custom-text-block">
|
||||||
|
<h2 class="mb-0">Cokorda Istri Dewi</h2>
|
||||||
|
|
||||||
|
<p class="text-muted mb-lg-4 mb-md-4">Founder Anindhaloka</p>
|
||||||
|
|
||||||
|
<p>Lorem Ipsum dolor sit amet, consectetur adipsicing kengan omeg kohm tokito Professional charity theme based</p>
|
||||||
|
|
||||||
|
<p>You are not allowed to redistribute this template ZIP file on any other template collection website. Please contact TemplateMo for more information.</p>
|
||||||
|
|
||||||
|
<ul class="social-icon mt-4">
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-twitter"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-facebook"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-instagram"></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="cta-section section-padding section-bg">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center align-items-center">
|
||||||
|
|
||||||
|
<div class="col-lg-5 col-12 ms-auto">
|
||||||
|
<h2 class="mb-0">Make an impact. <br> Save lives.</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-5 col-12">
|
||||||
|
<a href="#" class="me-4">Make a donation</a>
|
||||||
|
|
||||||
|
<a href="#section_4" class="custom-btn btn smoothscroll">Become a volunteer</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<section class="section-padding" id="section_3">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12 text-center mb-4">
|
||||||
|
<h2>Our Program / Event</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-md-6 col-12 mb-4 mb-lg-0">
|
||||||
|
<div class="custom-block-wrap">
|
||||||
|
<img src="{% static 'images/causes/group-african-kids-paying-attention-class.jpg' %}" class="custom-block-image img-fluid" alt="">
|
||||||
|
|
||||||
|
<div class="custom-block">
|
||||||
|
<div class="custom-block-body">
|
||||||
|
<h5 class="mb-3">Pencil x Nature</h5>
|
||||||
|
|
||||||
|
<p>Kelas interaktif anak-anak untuk belajar ilustrasi, cat air, dan menggambar kreatif.</p>
|
||||||
|
|
||||||
|
<div class="progress mt-4">
|
||||||
|
<div class="progress-bar w-75" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex align-items-center my-2">
|
||||||
|
<p class="mb-0">
|
||||||
|
<strong>Raised:</strong>
|
||||||
|
$18,500
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="ms-auto mb-0">
|
||||||
|
<strong>Goal:</strong>
|
||||||
|
$32,000
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href="donate.html" class="custom-btn btn">Read More</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-md-6 col-12 mb-4 mb-lg-0">
|
||||||
|
<div class="custom-block-wrap">
|
||||||
|
<img src="{% static 'images/causes/poor-child-landfill-looks-forward-with-hope.jpg' %}" class="custom-block-image img-fluid" alt="">
|
||||||
|
|
||||||
|
<div class="custom-block">
|
||||||
|
<div class="custom-block-body">
|
||||||
|
<h5 class="mb-3">Pasar Bahagia</h5>
|
||||||
|
|
||||||
|
<p>Menghadirkan kreator untuk Indonesia yang lebih bahagia dan berkelanjutan.</p>
|
||||||
|
|
||||||
|
<div class="progress mt-4">
|
||||||
|
<div class="progress-bar w-50" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex align-items-center my-2">
|
||||||
|
<p class="mb-0">
|
||||||
|
<strong>Raised:</strong>
|
||||||
|
$27,600
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="ms-auto mb-0">
|
||||||
|
<strong>Goal:</strong>
|
||||||
|
$60,000
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href="donate.html" class="custom-btn btn">Read More</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-md-6 col-12">
|
||||||
|
<div class="custom-block-wrap">
|
||||||
|
<img src="{% static 'images/causes/african-woman-pouring-water-recipient-outdoors.jpg' %}" class="custom-block-image img-fluid" alt="">
|
||||||
|
|
||||||
|
<div class="custom-block">
|
||||||
|
<div class="custom-block-body">
|
||||||
|
<h5 class="mb-3">Kelas Unik</h5>
|
||||||
|
|
||||||
|
<p>Kelas Seni Unik x Nin hadir untuk mengasah kreativitas dan ekspresi melalui berbagai seni.</p>
|
||||||
|
|
||||||
|
<div class="progress mt-4">
|
||||||
|
<div class="progress-bar w-100" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex align-items-center my-2">
|
||||||
|
<p class="mb-0">
|
||||||
|
<strong>Raised:</strong>
|
||||||
|
$84,600
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="ms-auto mb-0">
|
||||||
|
<strong>Goal:</strong>
|
||||||
|
$100,000
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href="donate.html" class="custom-btn btn">Read More</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="volunteer-section section-padding" id="section_4">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12">
|
||||||
|
<h2 class="text-white mb-4">Volunteer</h2>
|
||||||
|
|
||||||
|
<form class="custom-form volunteer-form mb-5 mb-lg-0" action="#" method="post" role="form">
|
||||||
|
<h3 class="mb-4">Become a volunteer today</h3>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-6 col-12">
|
||||||
|
<input type="text" name="volunteer-name" id="volunteer-name" class="form-control" placeholder="Jack Doe" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12">
|
||||||
|
<input type="email" name="volunteer-email" id="volunteer-email" pattern="[^ @]*@[^ @]*" class="form-control" placeholder="Jackdoe@gmail.com" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12">
|
||||||
|
<input type="text" name="volunteer-subject" id="volunteer-subject" class="form-control" placeholder="Subject" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12">
|
||||||
|
<div class="input-group input-group-file">
|
||||||
|
<input type="file" class="form-control" id="inputGroupFile02">
|
||||||
|
|
||||||
|
<label class="input-group-text" for="inputGroupFile02">Upload your CV</label>
|
||||||
|
|
||||||
|
<i class="bi-cloud-arrow-up ms-auto"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<textarea name="volunteer-message" rows="3" class="form-control" id="volunteer-message" placeholder="Comment (Optional)"></textarea>
|
||||||
|
|
||||||
|
<button type="submit" class="form-control">Submit</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12">
|
||||||
|
<img src="{% static 'images/smiling-casual-woman-dressed-volunteer-t-shirt-with-badge.jpg' %}" class="volunteer-image img-fluid" alt="">
|
||||||
|
|
||||||
|
<div class="custom-block-body text-center">
|
||||||
|
<h4 class="text-white mt-lg-3 mb-lg-3">About Volunteering</h4>
|
||||||
|
|
||||||
|
<p class="text-white">Lorem Ipsum dolor sit amet, consectetur adipsicing kengan omeg kohm tokito Professional charity theme based</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="news-section section-padding" id="section_5">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12 mb-5">
|
||||||
|
<h2>Latest News</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-7 col-12">
|
||||||
|
<div class="news-block">
|
||||||
|
<div class="news-block-top">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/medium-shot-volunteers-with-clothing-donations.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="news-category-block">
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Lifestyle,
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Clothing Donation
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-info">
|
||||||
|
<div class="d-flex mt-2">
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 12, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-author mx-5">
|
||||||
|
<p>
|
||||||
|
<i class="bi-person custom-icon me-1"></i>
|
||||||
|
By Admin
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-comment">
|
||||||
|
<p>
|
||||||
|
<i class="bi-chat-left custom-icon me-1"></i>
|
||||||
|
32 Comments
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h4><a href="news-detail.html" class="news-block-title-link">Clothing donation to urban area</a></h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-body">
|
||||||
|
<p>Lorem Ipsum dolor sit amet, consectetur adipsicing kengan omeg kohm tokito Professional charity theme based on Bootstrap</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block mt-3">
|
||||||
|
<div class="news-block-top">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/medium-shot-people-collecting-foodstuff.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="news-category-block">
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Food,
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Donation,
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Caring
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-info">
|
||||||
|
<div class="d-flex mt-2">
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 20, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-author mx-5">
|
||||||
|
<p>
|
||||||
|
<i class="bi-person custom-icon me-1"></i>
|
||||||
|
By Admin
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-comment">
|
||||||
|
<p>
|
||||||
|
<i class="bi-chat-left custom-icon me-1"></i>
|
||||||
|
35 Comments
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h4><a href="news-detail.html" class="news-block-title-link">Food donation area</a></h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-body">
|
||||||
|
<p>Sed leo nisl, posuere at molestie ac, suscipit auctor mauris. Etiam quis metus elementum, tempor risus vel, condimentum orci</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-12 mx-auto">
|
||||||
|
<form class="custom-form search-form" action="#" method="get" role="form">
|
||||||
|
<input name="search" type="search" class="form-control" id="search" placeholder="Search" aria-label="Search">
|
||||||
|
|
||||||
|
<button type="submit" class="form-control">
|
||||||
|
<i class="bi-search"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<h5 class="mt-5 mb-3">Recent news</h5>
|
||||||
|
|
||||||
|
<div class="news-block news-block-two-col d-flex mt-4">
|
||||||
|
<div class="news-block-two-col-image-wrap">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/africa-humanitarian-aid-doctor.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-two-col-info">
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h6><a href="news-detail.html" class="news-block-title-link">Food donation area</a></h6>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 16, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block news-block-two-col d-flex mt-4">
|
||||||
|
<div class="news-block-two-col-image-wrap">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/close-up-happy-people-working-together.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-two-col-info">
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h6><a href="news-detail.html" class="news-block-title-link">Volunteering Clean</a></h6>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 24, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="category-block d-flex flex-column">
|
||||||
|
<h5 class="mb-3">Categories</h5>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Drinking water
|
||||||
|
<span class="badge">20</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Food Donation
|
||||||
|
<span class="badge">30</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Children Education
|
||||||
|
<span class="badge">10</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Poverty Development
|
||||||
|
<span class="badge">15</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Clothing Donation
|
||||||
|
<span class="badge">20</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tags-block">
|
||||||
|
<h5 class="mb-3">Tags</h5>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Donation
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Clothing
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Food
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Children
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Education
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Poverty
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Clean Water
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form class="custom-form subscribe-form" action="#" method="get" role="form">
|
||||||
|
<h5 class="mb-4">Newsletter Form</h5>
|
||||||
|
|
||||||
|
<input type="email" name="subscribe-email" id="subscribe-email" pattern="[^ @]*@[^ @]*" class="form-control" placeholder="Email Address" required>
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12">
|
||||||
|
<button type="submit" class="form-control">Subscribe</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<section class="testimonial-section section-padding section-bg">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-8 col-12 mx-auto">
|
||||||
|
<h2 class="mb-lg-3">Happy Partners</h2>
|
||||||
|
|
||||||
|
<div id="testimonial-carousel" class="carousel carousel-fade slide" data-bs-ride="carousel">
|
||||||
|
|
||||||
|
<div class="carousel-inner">
|
||||||
|
<div class="carousel-item active">
|
||||||
|
<div class="carousel-caption">
|
||||||
|
<h4 class="carousel-title">Lorem Ipsum dolor sit amet, consectetur adipsicing kengan omeg kohm tokito charity theme</h4>
|
||||||
|
|
||||||
|
<small class="carousel-name"><span class="carousel-name-title">Maria</span>, Boss</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="carousel-item">
|
||||||
|
<div class="carousel-caption">
|
||||||
|
<h4 class="carousel-title">Sed leo nisl, posuere at molestie ac, suscipit auctor mauris quis metus tempor orci</h4>
|
||||||
|
|
||||||
|
<small class="carousel-name"><span class="carousel-name-title">Thomas</span>, Partner</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="carousel-item">
|
||||||
|
<div class="carousel-caption">
|
||||||
|
<h4 class="carousel-title">Lorem Ipsum dolor sit amet, consectetur adipsicing kengan omeg kohm tokito charity theme</h4>
|
||||||
|
|
||||||
|
<small class="carousel-name"><span class="carousel-name-title">Jane</span>, Advisor</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="carousel-item">
|
||||||
|
<div class="carousel-caption">
|
||||||
|
<h4 class="carousel-title">Sed leo nisl, posuere at molestie ac, suscipit auctor mauris quis metus tempor orci</h4>
|
||||||
|
|
||||||
|
<small class="carousel-name"><span class="carousel-name-title">Bob</span>, Entreprenuer</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ol class="carousel-indicators">
|
||||||
|
<li data-bs-target="#testimonial-carousel" data-bs-slide-to="0" class="active">
|
||||||
|
<img src="{% static 'images/avatar/portrait-beautiful-young-woman-standing-grey-wall.jpg' %}" class="img-fluid rounded-circle avatar-image" alt="avatar">
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li data-bs-target="#testimonial-carousel" data-bs-slide-to="1" class="">
|
||||||
|
<img src="{% static 'images/avatar/portrait-young-redhead-bearded-male.jpg' %}" class="img-fluid rounded-circle avatar-image" alt="avatar">
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li data-bs-target="#testimonial-carousel" data-bs-slide-to="2" class="">
|
||||||
|
<img src="{% static 'images/avatar/pretty-blonde-woman-wearing-white-t-shirt.jpg' %}" class="img-fluid rounded-circle avatar-image" alt="avatar">
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li data-bs-target="#testimonial-carousel" data-bs-slide-to="3" class="">
|
||||||
|
<img src="{% static 'images/avatar/studio-portrait-emotional-happy-funny.jpg' %}" class="img-fluid rounded-circle avatar-image" alt="avatar">
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<section class="contact-section section-padding" id="section_6">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-12 ms-auto mb-5 mb-lg-0">
|
||||||
|
<div class="contact-info-wrap">
|
||||||
|
<h2>Get in touch</h2>
|
||||||
|
|
||||||
|
<div class="contact-image-wrap d-flex flex-wrap">
|
||||||
|
<img src="{% static 'images/avatar/pretty-blonde-woman-wearing-white-t-shirt.jpg' %}" class="img-fluid avatar-image" alt="">
|
||||||
|
|
||||||
|
<div class="d-flex flex-column justify-content-center ms-3">
|
||||||
|
<p class="mb-0">Tri Wahyuning Rahayu</p>
|
||||||
|
<p class="mb-0"><strong>HR & Office Manager</strong></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contact-info">
|
||||||
|
<h5 class="mb-3">Contact Infomation</h5>
|
||||||
|
|
||||||
|
<p class="d-flex mb-2">
|
||||||
|
<i class="bi-geo-alt me-2"></i>
|
||||||
|
Bintaro, Jakarta, Indonesia
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="d-flex mb-2">
|
||||||
|
<i class="bi-telephone me-2"></i>
|
||||||
|
|
||||||
|
<a href="tel: 120-240-9600">
|
||||||
|
120-240-9600
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="d-flex">
|
||||||
|
<i class="bi-envelope me-2"></i>
|
||||||
|
|
||||||
|
<a href="mailto:info@yourgmail.com">
|
||||||
|
donate@charity.org
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a href="#" class="custom-btn btn mt-3">Get Direction</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-5 col-12 mx-auto">
|
||||||
|
<form class="custom-form contact-form" action="#" method="post" role="form">
|
||||||
|
<h2>Contact form</h2>
|
||||||
|
|
||||||
|
<p class="mb-4">Or, you can just send an email:
|
||||||
|
<a href="#">info@charity.org</a>
|
||||||
|
</p>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-6 col-md-6 col-12">
|
||||||
|
<input type="text" name="first-name" id="first-name" class="form-control" placeholder="Jack" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-md-6 col-12">
|
||||||
|
<input type="text" name="last-name" id="last-name" class="form-control" placeholder="Doe" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="email" name="email" id="email" pattern="[^ @]*@[^ @]*" class="form-control" placeholder="Jackdoe@gmail.com" required>
|
||||||
|
|
||||||
|
<textarea name="message" rows="5" class="form-control" id="message" placeholder="What can we help you?"></textarea>
|
||||||
|
|
||||||
|
<button type="submit" class="form-control">Send Message</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{% endblock %}
|
||||||
374
templates/donate.html
Normal file
@ -0,0 +1,374 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
|
<meta name="description" content="">
|
||||||
|
<meta name="author" content="">
|
||||||
|
|
||||||
|
<title>Kind Heart Charity - Donation</title>
|
||||||
|
|
||||||
|
<!-- CSS FILES -->
|
||||||
|
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<link href="css/bootstrap-icons.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<link href="css/templatemo-kind-heart-charity.css" rel="stylesheet">
|
||||||
|
<!--
|
||||||
|
|
||||||
|
TemplateMo 581 Kind Heart Charity
|
||||||
|
|
||||||
|
https://templatemo.com/tm-581-kind-heart-charity
|
||||||
|
|
||||||
|
-->
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header class="site-header">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-8 col-12 d-flex flex-wrap">
|
||||||
|
<p class="d-flex me-4 mb-0">
|
||||||
|
<i class="bi-geo-alt me-2"></i>
|
||||||
|
Akershusstranda 20, 0150 Oslo, Norway
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="d-flex mb-0">
|
||||||
|
<i class="bi-envelope me-2"></i>
|
||||||
|
|
||||||
|
<a href="mailto:info@company.com">
|
||||||
|
info@company.com
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3 col-12 ms-auto d-lg-block d-none">
|
||||||
|
<ul class="social-icon">
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-twitter"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-facebook"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-instagram"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-youtube"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-whatsapp"></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<nav class="navbar navbar-expand-lg bg-light shadow-lg">
|
||||||
|
<div class="container">
|
||||||
|
<a class="navbar-brand" href="index.html">
|
||||||
|
<img src="images/logo.png" class="logo img-fluid" alt="">
|
||||||
|
<span>
|
||||||
|
Kind Heart Charity
|
||||||
|
<small>Non-profit Organization</small>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="collapse navbar-collapse" id="navbarNav">
|
||||||
|
<ul class="navbar-nav ms-auto">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link click-scroll" href="index.html#section_1">Home</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link click-scroll" href="index.html#section_2">About</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link click-scroll" href="index.html#section_3">Causes</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link click-scroll" href="index.html#section_4">Volunteer</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item dropdown">
|
||||||
|
<a class="nav-link click-scroll dropdown-toggle" href="index.html#section_5" id="navbarLightDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">News</a>
|
||||||
|
|
||||||
|
<ul class="dropdown-menu dropdown-menu-light" aria-labelledby="navbarLightDropdownMenuLink">
|
||||||
|
<li><a class="dropdown-item" href="news.html">News Listing</a></li>
|
||||||
|
|
||||||
|
<li><a class="dropdown-item" href="news-detail.html">News Detail</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link click-scroll" href="index.html#section_6">Contact</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item ms-3">
|
||||||
|
<a class="nav-link custom-btn custom-border-btn btn" href="donate.html">Donate</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
|
||||||
|
<section class="donate-section">
|
||||||
|
<div class="section-overlay"></div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12 mx-auto">
|
||||||
|
<form class="custom-form donate-form" action="#" method="get" role="form">
|
||||||
|
<h3 class="mb-4">Make a donation</h3>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12 col-12">
|
||||||
|
<h5 class="mb-3">Donation Frequency</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-6 form-check-group form-check-group-donation-frequency">
|
||||||
|
<div class="form-check form-check-radio">
|
||||||
|
<input class="form-check-input" type="radio" name="DonationFrequency" id="DonationFrequencyOne" checked>
|
||||||
|
|
||||||
|
<label class="form-check-label" for="DonationFrequencyOne">
|
||||||
|
One Time
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-6 form-check-group form-check-group-donation-frequency">
|
||||||
|
<div class="form-check form-check-radio">
|
||||||
|
<input class="form-check-input" type="radio" name="DonationFrequency" id="DonationFrequencyMonthly">
|
||||||
|
|
||||||
|
<label class="form-check-label" for="DonationFrequencyMonthly">
|
||||||
|
Monthly
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12">
|
||||||
|
<h5 class="mt-2 mb-3">Select an amount</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3 col-md-6 col-6 form-check-group">
|
||||||
|
<div class="form-check form-check-radio">
|
||||||
|
<input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault1">
|
||||||
|
<label class="form-check-label" for="flexRadioDefault1">
|
||||||
|
$10
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3 col-md-6 col-6 form-check-group">
|
||||||
|
<div class="form-check form-check-radio">
|
||||||
|
<input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault2">
|
||||||
|
<label class="form-check-label" for="flexRadioDefault2">
|
||||||
|
$15
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3 col-md-6 col-6 form-check-group">
|
||||||
|
<div class="form-check form-check-radio">
|
||||||
|
<input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault3">
|
||||||
|
<label class="form-check-label" for="flexRadioDefault3">
|
||||||
|
$20
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3 col-md-6 col-6 form-check-group">
|
||||||
|
<div class="form-check form-check-radio">
|
||||||
|
<input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault4">
|
||||||
|
<label class="form-check-label" for="flexRadioDefault4">
|
||||||
|
$30
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3 col-md-6 col-6 form-check-group">
|
||||||
|
<div class="form-check form-check-radio">
|
||||||
|
<input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault5">
|
||||||
|
<label class="form-check-label" for="flexRadioDefault5">
|
||||||
|
$45
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3 col-md-6 col-6 form-check-group">
|
||||||
|
<div class="form-check form-check-radio">
|
||||||
|
<input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault6">
|
||||||
|
<label class="form-check-label" for="flexRadioDefault6">
|
||||||
|
$50
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12 form-check-group">
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-text" id="basic-addon1">$</span>
|
||||||
|
|
||||||
|
<input type="text" class="form-control" placeholder="Custom amount" aria-label="Username" aria-describedby="basic-addon1">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12">
|
||||||
|
<h5 class="mt-1">Personal Info</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12 mt-2">
|
||||||
|
<input type="text" name="donation-name" id="donation-name" class="form-control" placeholder="Jack Doe" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12 mt-2">
|
||||||
|
<input type="email" name="donation-email" id="donation-email" pattern="[^ @]*@[^ @]*" class="form-control" placeholder="Jackdoe@gmail.com" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12">
|
||||||
|
<h5 class="mt-4 pt-1">Choose Payment</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12 mt-2">
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="radio" name="DonationPayment" id="flexRadioDefault9">
|
||||||
|
<label class="form-check-label" for="flexRadioDefault9">
|
||||||
|
<i class="bi-credit-card custom-icon ms-1"></i>
|
||||||
|
Debit or Credit card
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="radio" name="DonationPayment" id="flexRadioDefault10">
|
||||||
|
<label class="form-check-label" for="flexRadioDefault10">
|
||||||
|
<i class="bi-paypal custom-icon ms-1"></i>
|
||||||
|
Paypal
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" class="form-control mt-4">Submit Donation</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer class="site-footer">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-3 col-12 mb-4">
|
||||||
|
<img src="images/logo.png" class="logo img-fluid" alt="">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-md-6 col-12 mb-4">
|
||||||
|
<h5 class="site-footer-title mb-3">Quick Links</h5>
|
||||||
|
|
||||||
|
<ul class="footer-menu">
|
||||||
|
<li class="footer-menu-item"><a href="#" class="footer-menu-link">Our Story</a></li>
|
||||||
|
|
||||||
|
<li class="footer-menu-item"><a href="#" class="footer-menu-link">Newsroom</a></li>
|
||||||
|
|
||||||
|
<li class="footer-menu-item"><a href="#" class="footer-menu-link">Causes</a></li>
|
||||||
|
|
||||||
|
<li class="footer-menu-item"><a href="#" class="footer-menu-link">Become a volunteer</a></li>
|
||||||
|
|
||||||
|
<li class="footer-menu-item"><a href="#" class="footer-menu-link">Partner with us</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-md-6 col-12 mx-auto">
|
||||||
|
<h5 class="site-footer-title mb-3">Contact Infomation</h5>
|
||||||
|
|
||||||
|
<p class="text-white d-flex mb-2">
|
||||||
|
<i class="bi-telephone me-2"></i>
|
||||||
|
|
||||||
|
<a href="tel: 120-240-9600" class="site-footer-link">
|
||||||
|
120-240-9600
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="text-white d-flex">
|
||||||
|
<i class="bi-envelope me-2"></i>
|
||||||
|
|
||||||
|
<a href="mailto:donate@charity.org" class="site-footer-link">
|
||||||
|
donate@charity.org
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="text-white d-flex mt-3">
|
||||||
|
<i class="bi-geo-alt me-2"></i>
|
||||||
|
Akershusstranda 20, 0150 Oslo, Norway
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a href="#" class="custom-btn btn mt-3">Get Direction</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="site-footer-bottom">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-md-7 col-12">
|
||||||
|
<p class="copyright-text mb-0">Copyright © 2036 <a href="#">Kind Heart</a> Charity Org.
|
||||||
|
Design: <a href="https://templatemo.com" target="_blank">TemplateMo</a></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-md-5 col-12 d-flex justify-content-center align-items-center mx-auto">
|
||||||
|
<ul class="social-icon">
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-twitter"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-facebook"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-instagram"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-linkedin"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="https://youtube.com/templatemo" class="social-icon-link bi-youtube"></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- JAVASCRIPT FILES -->
|
||||||
|
<script src="js/jquery.min.js"></script>
|
||||||
|
<script src="js/bootstrap.min.js"></script>
|
||||||
|
<script src="js/jquery.sticky.js"></script>
|
||||||
|
<script src="js/counter.js"></script>
|
||||||
|
<script src="js/custom.js"></script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1030
templates/index.html
Normal file
423
templates/news-detail.html
Normal file
@ -0,0 +1,423 @@
|
|||||||
|
{% extends 'snippets/main.html' %}
|
||||||
|
{% load static %}
|
||||||
|
{% block content %}
|
||||||
|
<section class="news-detail-header-section text-center">
|
||||||
|
<div class="section-overlay"></div>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12">
|
||||||
|
<h1 class="text-white">News Detail</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="news-section section-padding">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-7 col-12">
|
||||||
|
<div class="news-block">
|
||||||
|
<div class="news-block-top">
|
||||||
|
<img src="{% static 'images/news/medium-shot-volunteers-with-clothing-donations.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
|
||||||
|
<div class="news-category-block">
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Lifestyle,
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Clothing Donation
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-info">
|
||||||
|
<div class="d-flex mt-2">
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 12, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-author mx-5">
|
||||||
|
<p>
|
||||||
|
<i class="bi-person custom-icon me-1"></i>
|
||||||
|
By Admin
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-comment">
|
||||||
|
<p>
|
||||||
|
<i class="bi-chat-left custom-icon me-1"></i>
|
||||||
|
48 Comments
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h4>Clothing donation to urban area</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-body">
|
||||||
|
<p><strong>Lorem Ipsum</strong> dolor sit amet, consectetur adipsicing kengan omeg kohm tokito Professional charity theme based on Bootstrap</p>
|
||||||
|
|
||||||
|
<p><strong>Sed leo</strong> nisl, This is a Bootstrap 5.2.2 CSS template for charity organization websites. You can feel free to use it. Please tell your friends about TemplateMo website. Thank you.</p>
|
||||||
|
|
||||||
|
<blockquote>Sed leo nisl, posuere at molestie ac, suscipit auctor mauris. Etiam quis metus elementum, tempor risus vel, condimentum orci.</blockquote>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mt-5 mb-4">
|
||||||
|
<div class="col-lg-6 col-12 mb-4 mb-lg-0">
|
||||||
|
<img src="{% static 'images/news/africa-humanitarian-aid-doctor.jpg' %}" class="news-detail-image img-fluid" alt="">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12">
|
||||||
|
<img src="{% static 'images/news/close-up-happy-people-working-together.jpg' %}" class="news-detail-image img-fluid" alt="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>You are not allowed to redistribute this template ZIP file on any other template collection website. Please <a href="https://templatemo.com/contact" target="_blank">contact TemplateMo</a> for more information.</p>
|
||||||
|
|
||||||
|
<div class="social-share border-top mt-5 py-4 d-flex flex-wrap align-items-center">
|
||||||
|
<div class="tags-block me-auto">
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Donation
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Clothing
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Food
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex">
|
||||||
|
<a href="#" class="social-icon-link bi-facebook"></a>
|
||||||
|
|
||||||
|
<a href="#" class="social-icon-link bi-twitter"></a>
|
||||||
|
|
||||||
|
<a href="#" class="social-icon-link bi-printer"></a>
|
||||||
|
|
||||||
|
<a href="#" class="social-icon-link bi-envelope"></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="author-comment d-flex mt-3 mb-4">
|
||||||
|
<img src="{% static 'images/avatar/studio-portrait-emotional-happy-funny.jpg' %}" class="img-fluid avatar-image" alt="">
|
||||||
|
|
||||||
|
<div class="author-comment-info ms-3">
|
||||||
|
<h6 class="mb-1">Jack</h6>
|
||||||
|
|
||||||
|
<p class="mb-0">Kind Heart Charity is the most supportive organization. This is Bootstrap 5 HTML CSS template for everyone. Thank you.</p>
|
||||||
|
|
||||||
|
<div class="d-flex mt-2">
|
||||||
|
<a href="#" class="author-comment-link me-3">Like</a>
|
||||||
|
|
||||||
|
<a href="#" class="author-comment-link">Reply</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="author-comment d-flex ms-5 ps-3">
|
||||||
|
<img src="{% static 'images/avatar/pretty-blonde-woman-wearing-white-t-shirt.jpg' %}" class="img-fluid avatar-image" alt="">
|
||||||
|
|
||||||
|
<div class="author-comment-info ms-3">
|
||||||
|
<h6 class="mb-1">Daisy</h6>
|
||||||
|
|
||||||
|
<p class="mb-0">Sed leo nisl, posuere at molestie ac, suscipit auctor mauris. Etiam quis metus elementum, tempor risus vel, condimentum orci</p>
|
||||||
|
|
||||||
|
<div class="d-flex mt-2">
|
||||||
|
<a href="#" class="author-comment-link me-3">Like</a>
|
||||||
|
|
||||||
|
<a href="#" class="author-comment-link">Reply</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="author-comment d-flex mt-3 mb-4">
|
||||||
|
<img src="{% static 'images/avatar/portrait-young-redhead-bearded-male.jpg' %}" class="img-fluid avatar-image" alt="">
|
||||||
|
|
||||||
|
<div class="author-comment-info ms-3">
|
||||||
|
<h6 class="mb-1">Wilson</h6>
|
||||||
|
|
||||||
|
<p class="mb-0">Lorem Ipsum dolor sit amet, consectetur adipsicing kengan omeg kohm tokito Professional charity theme based on Bootstrap</p>
|
||||||
|
|
||||||
|
<div class="d-flex mt-2">
|
||||||
|
<a href="#" class="author-comment-link me-3">Like</a>
|
||||||
|
|
||||||
|
<a href="#" class="author-comment-link">Reply</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form class="custom-form comment-form mt-4" action="#" method="post" role="form">
|
||||||
|
<h6 class="mb-3">Write a comment</h6>
|
||||||
|
|
||||||
|
<textarea name="comment-message" rows="4" class="form-control" id="comment-message" placeholder="Your comment here"></textarea>
|
||||||
|
|
||||||
|
<div class="col-lg-3 col-md-4 col-6 ms-auto">
|
||||||
|
<button type="submit" class="form-control">Comment</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-12 mx-auto mt-4 mt-lg-0">
|
||||||
|
<form class="custom-form search-form" action="#" method="post" role="form">
|
||||||
|
<input class="form-control" type="search" placeholder="Search" aria-label="Search">
|
||||||
|
|
||||||
|
<button type="submit" class="form-control">
|
||||||
|
<i class="bi-search"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<h5 class="mt-5 mb-3">Recent news</h5>
|
||||||
|
|
||||||
|
<div class="news-block news-block-two-col d-flex mt-4">
|
||||||
|
<div class="news-block-two-col-image-wrap">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/africa-humanitarian-aid-doctor.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-two-col-info">
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h6><a href="news-detail.html" class="news-block-title-link">Food donation area</a></h6>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 16, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block news-block-two-col d-flex mt-4">
|
||||||
|
<div class="news-block-two-col-image-wrap">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/close-up-happy-people-working-together.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-two-col-info">
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h6><a href="news-detail.html" class="news-block-title-link">Volunteering Clean</a></h6>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 20, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="category-block d-flex flex-column">
|
||||||
|
<h5 class="mb-3">Categories</h5>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Drinking water
|
||||||
|
<span class="badge">20</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Food Donation
|
||||||
|
<span class="badge">30</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Children Education
|
||||||
|
<span class="badge">10</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Poverty Development
|
||||||
|
<span class="badge">15</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Clothing Donation
|
||||||
|
<span class="badge">20</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tags-block">
|
||||||
|
<h5 class="mb-3">Tags</h5>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Donation
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Clothing
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Food
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Children
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Education
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Poverty
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Clean Water
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form class="custom-form subscribe-form" action="#" method="post" role="form">
|
||||||
|
<h5 class="mb-4">Newsletter Form</h5>
|
||||||
|
|
||||||
|
<input type="email" name="subscribe-email" id="subscribe-email" pattern="[^ @]*@[^ @]*" class="form-control" placeholder="Email Address" required>
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12">
|
||||||
|
<button type="submit" class="form-control">Subscribe</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="news-section section-padding section-bg">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12 mb-4">
|
||||||
|
<h2>Related news</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12">
|
||||||
|
<div class="news-block">
|
||||||
|
<div class="news-block-top">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/medium-shot-volunteers-with-clothing-donations.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="news-category-block">
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Lifestyle,
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Clothing Donation
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-info">
|
||||||
|
<div class="d-flex mt-2">
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 16, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-author mx-5">
|
||||||
|
<p>
|
||||||
|
<i class="bi-person custom-icon me-1"></i>
|
||||||
|
By Admin
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-comment">
|
||||||
|
<p>
|
||||||
|
<i class="bi-chat-left custom-icon me-1"></i>
|
||||||
|
24 Comments
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h4><a href="news-detail.html" class="news-block-title-link">Clothing donation to urban area</a></h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-body">
|
||||||
|
<p>Lorem Ipsum dolor sit amet, consectetur adipsicing kengan omeg kohm tokito Professional charity theme based on Bootstrap</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-12">
|
||||||
|
<div class="news-block">
|
||||||
|
<div class="news-block-top">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/medium-shot-people-collecting-foodstuff.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="news-category-block">
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Food,
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Donation,
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Caring
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-info">
|
||||||
|
<div class="d-flex mt-2">
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 20, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-author mx-5">
|
||||||
|
<p>
|
||||||
|
<i class="bi-person custom-icon me-1"></i>
|
||||||
|
By Admin
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-comment">
|
||||||
|
<p>
|
||||||
|
<i class="bi-chat-left custom-icon me-1"></i>
|
||||||
|
36 Comments
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h4><a href="news-detail.html" class="news-block-title-link">Food donation area</a></h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-body">
|
||||||
|
<p>Sed leo nisl, posuere at molestie ac, suscipit auctor mauris. Etiam quis metus elementum, tempor risus vel, condimentum orci</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{% endblock%}
|
||||||
258
templates/news.html
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
{% extends 'snippets/main.html' %}
|
||||||
|
{% load static %}
|
||||||
|
{% block content %}
|
||||||
|
<section class="news-detail-header-section text-center">
|
||||||
|
<div class="section-overlay"></div>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12">
|
||||||
|
<h1 class="text-white">News Listing</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="news-section section-padding">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-7 col-12">
|
||||||
|
<div class="news-block">
|
||||||
|
<div class="news-block-top">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/medium-shot-volunteers-with-clothing-donations.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="news-category-block">
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Lifestyle,
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Clothing Donation
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-info">
|
||||||
|
<div class="d-flex mt-2">
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 18, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-author mx-5">
|
||||||
|
<p>
|
||||||
|
<i class="bi-person custom-icon me-1"></i>
|
||||||
|
By Admin
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-comment">
|
||||||
|
<p>
|
||||||
|
<i class="bi-chat-left custom-icon me-1"></i>
|
||||||
|
32 Comments
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h4><a href="news-detail.html" class="news-block-title-link">Clothing donation to urban area</a></h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-body">
|
||||||
|
<p>This is a Bootstrap 5.2.2 CSS template for charity organization websites. You can feel free to use it. Please tell your friends about TemplateMo website. Thank you.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block mt-3">
|
||||||
|
<div class="news-block-top">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/medium-shot-people-collecting-foodstuff.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="news-category-block">
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Food,
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Donation,
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Caring
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-info">
|
||||||
|
<div class="d-flex mt-2">
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 12, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-author mx-5">
|
||||||
|
<p>
|
||||||
|
<i class="bi-person custom-icon me-1"></i>
|
||||||
|
By Admin
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-comment">
|
||||||
|
<p>
|
||||||
|
<i class="bi-chat-left custom-icon me-1"></i>
|
||||||
|
35 Comments
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h4><a href="news-detail.html" class="news-block-title-link">Food donation area</a></h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-body">
|
||||||
|
<p>You are not allowed to redistribute this template ZIP file on any other template collection website. Please <a href="https://templatemo.com/contact" target="_blank">contact TemplateMo</a> for more information.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-12 mx-auto mt-4 mt-lg-0">
|
||||||
|
<form class="custom-form search-form" action="#" method="post" role="form">
|
||||||
|
<input class="form-control" type="search" placeholder="Search" aria-label="Search">
|
||||||
|
|
||||||
|
<button type="submit" class="form-control">
|
||||||
|
<i class="bi-search"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<h5 class="mt-5 mb-3">Recent news</h5>
|
||||||
|
|
||||||
|
<div class="news-block news-block-two-col d-flex mt-4">
|
||||||
|
<div class="news-block-two-col-image-wrap">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/africa-humanitarian-aid-doctor.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-two-col-info">
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h6><a href="news-detail.html" class="news-block-title-link">Food donation area</a></h6>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 16, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block news-block-two-col d-flex mt-4">
|
||||||
|
<div class="news-block-two-col-image-wrap">
|
||||||
|
<a href="news-detail.html">
|
||||||
|
<img src="{% static 'images/news/close-up-happy-people-working-together.jpg' %}" class="news-image img-fluid" alt="">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-two-col-info">
|
||||||
|
<div class="news-block-title mb-2">
|
||||||
|
<h6><a href="news-detail.html" class="news-block-title-link">Volunteering Clean</a></h6>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="news-block-date">
|
||||||
|
<p>
|
||||||
|
<i class="bi-calendar4 custom-icon me-1"></i>
|
||||||
|
October 24, 2036
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="category-block d-flex flex-column">
|
||||||
|
<h5 class="mb-3">Categories</h5>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Drinking water
|
||||||
|
<span class="badge">20</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Food Donation
|
||||||
|
<span class="badge">30</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Children Education
|
||||||
|
<span class="badge">10</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Poverty Development
|
||||||
|
<span class="badge">15</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="category-block-link">
|
||||||
|
Clothing Donation
|
||||||
|
<span class="badge">20</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tags-block">
|
||||||
|
<h5 class="mb-3">Tags</h5>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Donation
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Clothing
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Food
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Children
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Education
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Poverty
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="#" class="tags-block-link">
|
||||||
|
Clean Water
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form class="custom-form subscribe-form" action="#" method="post" role="form">
|
||||||
|
<h5 class="mb-4">Newsletter Form</h5>
|
||||||
|
|
||||||
|
<input type="email" name="subscribe-email" id="subscribe-email" pattern="[^ @]*@[^ @]*" class="form-control" placeholder="Email Address" required>
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-12">
|
||||||
|
<button type="submit" class="form-control">Subscribe</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{% endblock %}
|
||||||
90
templates/snippets/footer.html
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
{% load static %}
|
||||||
|
<footer class="site-footer">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-3 col-12 mb-4">
|
||||||
|
<img src="{% static 'images/logo.png' %}" class="logo img-fluid" alt="">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-md-6 col-12 mb-4">
|
||||||
|
<h5 class="site-footer-title mb-3">Quick Links</h5>
|
||||||
|
|
||||||
|
<ul class="footer-menu">
|
||||||
|
<li class="footer-menu-item"><a href="#" class="footer-menu-link">Our Story</a></li>
|
||||||
|
|
||||||
|
<li class="footer-menu-item"><a href="#" class="footer-menu-link">Newsroom</a></li>
|
||||||
|
|
||||||
|
<li class="footer-menu-item"><a href="#" class="footer-menu-link">Causes</a></li>
|
||||||
|
|
||||||
|
<li class="footer-menu-item"><a href="#" class="footer-menu-link">Become a volunteer</a></li>
|
||||||
|
|
||||||
|
<li class="footer-menu-item"><a href="#" class="footer-menu-link">Partner with us</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-4 col-md-6 col-12 mx-auto">
|
||||||
|
<h5 class="site-footer-title mb-3">Contact Infomation</h5>
|
||||||
|
|
||||||
|
<p class="text-white d-flex mb-2">
|
||||||
|
<i class="bi-telephone me-2"></i>
|
||||||
|
|
||||||
|
<a href="tel: 120-240-9600" class="site-footer-link">
|
||||||
|
120-240-9600
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="text-white d-flex">
|
||||||
|
<i class="bi-envelope me-2"></i>
|
||||||
|
|
||||||
|
<a href="mailto:info@yourgmail.com" class="site-footer-link">
|
||||||
|
donate@charity.org
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="text-white d-flex mt-3">
|
||||||
|
<i class="bi-geo-alt me-2"></i>
|
||||||
|
Jl. YRS No. 20, Jakarta, Indonesia
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a href="#" class="custom-btn btn mt-3">Get Direction</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="site-footer-bottom">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-md-7 col-12">
|
||||||
|
<p class="copyright-text mb-0">Copyright © 2036 <a href="#">Kind Heart</a> Charity Org.
|
||||||
|
Design: <a href="https://templatemo.com" target="_blank">TemplateMo</a></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-6 col-md-5 col-12 d-flex justify-content-center align-items-center mx-auto">
|
||||||
|
<ul class="social-icon">
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-twitter"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-facebook"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-instagram"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-linkedin"></a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="https://youtube.com/templatemo" class="social-icon-link bi-youtube"></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
83
templates/snippets/header.html
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
{% load static %}
|
||||||
|
<header class="site-header">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-8 col-12 d-flex flex-wrap">
|
||||||
|
<p class="d-flex me-4 mb-0">
|
||||||
|
<i class="bi-geo-alt me-2"></i>
|
||||||
|
Jl. YRS No. 20, Jakarta, Indonesia
|
||||||
|
</p>
|
||||||
|
<p class="d-flex mb-0">
|
||||||
|
<i class="bi-envelope me-2"></i>
|
||||||
|
|
||||||
|
<a href="mailto:info@company.com">
|
||||||
|
info@company.com
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-3 col-12 ms-auto d-lg-block d-none">
|
||||||
|
<ul class="social-icon">
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-twitter"></a>
|
||||||
|
</li>
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-facebook"></a>
|
||||||
|
</li>
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-instagram"></a>
|
||||||
|
</li>
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-youtube"></a>
|
||||||
|
</li>
|
||||||
|
<li class="social-icon-item">
|
||||||
|
<a href="#" class="social-icon-link bi-whatsapp"></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<nav class="navbar navbar-expand-lg bg-light shadow-lg">
|
||||||
|
<div class="container">
|
||||||
|
<a class="navbar-brand" href="{% url 'dashboard' %}">
|
||||||
|
<img src="{% static 'images/logonin.png' %}" class="logo img-fluid" alt="Anindhaloka">
|
||||||
|
<span>
|
||||||
|
Anindhaloka
|
||||||
|
<small>Rumah Gotong Royong</small>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
<div class="collapse navbar-collapse" id="navbarNav">
|
||||||
|
<ul class="navbar-nav ms-auto">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link click-scroll" href="{% url 'dashboard' %}">Home</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link click-scroll" href="{% url 'dashboard' %}#section_2">About</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link click-scroll" href="{% url 'dashboard' %}#section_3">Causes</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link click-scroll" href="{% url 'dashboard' %}#section_4">Volunteer</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item dropdown">
|
||||||
|
<a class="nav-link click-scroll dropdown-toggle" href="#section_5" id="navbarLightDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">News</a>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-light" aria-labelledby="navbarLightDropdownMenuLink">
|
||||||
|
<li><a class="dropdown-item" href="{% url 'news' %}">News Listing</a></li>
|
||||||
|
<li><a class="dropdown-item" href="{% url 'news_detail' %}">News Detail</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link click-scroll" href="#section_6">Contact</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item ms-3">
|
||||||
|
<a class="nav-link custom-btn custom-border-btn btn" href="donate.html">Login</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
36
templates/snippets/main.html
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{% load static %}
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="description" content="">
|
||||||
|
<meta name="author" content="">
|
||||||
|
<link rel="icon" href="{% static 'images/logonin.png' %}" type="image/x-icon">
|
||||||
|
<link rel="shortcut icon" href="{% static 'images/logonin.png' %}" type="image/x-icon">
|
||||||
|
<title>Anindhaloka</title>
|
||||||
|
|
||||||
|
<!-- CSS FILES -->
|
||||||
|
<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
|
||||||
|
<link href="{% static 'css/bootstrap-icons.css' %}" rel="stylesheet">
|
||||||
|
<link href="{% static 'css/templatemo-kind-heart-charity.css' %}" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body id="section_1">
|
||||||
|
{% include 'snippets/header.html' %}
|
||||||
|
<main>
|
||||||
|
{% block content %}{% endblock content %}
|
||||||
|
</main>
|
||||||
|
|
||||||
|
{% include 'snippets/footer.html' %}
|
||||||
|
|
||||||
|
<!-- JAVASCRIPT FILES -->
|
||||||
|
<script src="{% static 'js/jquery.min.js' %}"></script>
|
||||||
|
<script src="{% static 'js/bootstrap.min.js' %}"></script>
|
||||||
|
<script src="{% static 'js/jquery.sticky.js' %}"></script>
|
||||||
|
<script src="{% static 'js/click-scroll.js' %}"></script>
|
||||||
|
<script src="{% static 'js/counter.js' %}"></script>
|
||||||
|
<script src="{% static 'js/custom.js' %}"></script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1106
venv/Lib/site-packages/Django-5.1.6.dist-info/AUTHORS
Normal file
1
venv/Lib/site-packages/Django-5.1.6.dist-info/INSTALLER
Normal file
@ -0,0 +1 @@
|
|||||||
|
pip
|
||||||
27
venv/Lib/site-packages/Django-5.1.6.dist-info/LICENSE
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
Copyright (c) Django Software Foundation and individual contributors.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of Django nor the names of its contributors may be used
|
||||||
|
to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
288
venv/Lib/site-packages/Django-5.1.6.dist-info/LICENSE.python
Normal file
@ -0,0 +1,288 @@
|
|||||||
|
Django is licensed under the three-clause BSD license; see the file
|
||||||
|
LICENSE for details.
|
||||||
|
|
||||||
|
Django includes code from the Python standard library, which is licensed under
|
||||||
|
the Python license, a permissive open source license. The copyright and license
|
||||||
|
is included below for compliance with Python's terms.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2001-present Python Software Foundation; All Rights Reserved
|
||||||
|
|
||||||
|
A. HISTORY OF THE SOFTWARE
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Python was created in the early 1990s by Guido van Rossum at Stichting
|
||||||
|
Mathematisch Centrum (CWI, see https://www.cwi.nl) in the Netherlands
|
||||||
|
as a successor of a language called ABC. Guido remains Python's
|
||||||
|
principal author, although it includes many contributions from others.
|
||||||
|
|
||||||
|
In 1995, Guido continued his work on Python at the Corporation for
|
||||||
|
National Research Initiatives (CNRI, see https://www.cnri.reston.va.us)
|
||||||
|
in Reston, Virginia where he released several versions of the
|
||||||
|
software.
|
||||||
|
|
||||||
|
In May 2000, Guido and the Python core development team moved to
|
||||||
|
BeOpen.com to form the BeOpen PythonLabs team. In October of the same
|
||||||
|
year, the PythonLabs team moved to Digital Creations, which became
|
||||||
|
Zope Corporation. In 2001, the Python Software Foundation (PSF, see
|
||||||
|
https://www.python.org/psf/) was formed, a non-profit organization
|
||||||
|
created specifically to own Python-related Intellectual Property.
|
||||||
|
Zope Corporation was a sponsoring member of the PSF.
|
||||||
|
|
||||||
|
All Python releases are Open Source (see https://opensource.org for
|
||||||
|
the Open Source Definition). Historically, most, but not all, Python
|
||||||
|
releases have also been GPL-compatible; the table below summarizes
|
||||||
|
the various releases.
|
||||||
|
|
||||||
|
Release Derived Year Owner GPL-
|
||||||
|
from compatible? (1)
|
||||||
|
|
||||||
|
0.9.0 thru 1.2 1991-1995 CWI yes
|
||||||
|
1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
|
||||||
|
1.6 1.5.2 2000 CNRI no
|
||||||
|
2.0 1.6 2000 BeOpen.com no
|
||||||
|
1.6.1 1.6 2001 CNRI yes (2)
|
||||||
|
2.1 2.0+1.6.1 2001 PSF no
|
||||||
|
2.0.1 2.0+1.6.1 2001 PSF yes
|
||||||
|
2.1.1 2.1+2.0.1 2001 PSF yes
|
||||||
|
2.1.2 2.1.1 2002 PSF yes
|
||||||
|
2.1.3 2.1.2 2002 PSF yes
|
||||||
|
2.2 and above 2.1.1 2001-now PSF yes
|
||||||
|
|
||||||
|
Footnotes:
|
||||||
|
|
||||||
|
(1) GPL-compatible doesn't mean that we're distributing Python under
|
||||||
|
the GPL. All Python licenses, unlike the GPL, let you distribute
|
||||||
|
a modified version without making your changes open source. The
|
||||||
|
GPL-compatible licenses make it possible to combine Python with
|
||||||
|
other software that is released under the GPL; the others don't.
|
||||||
|
|
||||||
|
(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
|
||||||
|
because its license has a choice of law clause. According to
|
||||||
|
CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
|
||||||
|
is "not incompatible" with the GPL.
|
||||||
|
|
||||||
|
Thanks to the many outside volunteers who have worked under Guido's
|
||||||
|
direction to make these releases possible.
|
||||||
|
|
||||||
|
|
||||||
|
B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
|
||||||
|
===============================================================
|
||||||
|
|
||||||
|
Python software and documentation are licensed under the
|
||||||
|
Python Software Foundation License Version 2.
|
||||||
|
|
||||||
|
Starting with Python 3.8.6, examples, recipes, and other code in
|
||||||
|
the documentation are dual licensed under the PSF License Version 2
|
||||||
|
and the Zero-Clause BSD license.
|
||||||
|
|
||||||
|
Some software incorporated into Python is under different licenses.
|
||||||
|
The licenses are listed with code falling under that license.
|
||||||
|
|
||||||
|
|
||||||
|
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
1. This LICENSE AGREEMENT is between the Python Software Foundation
|
||||||
|
("PSF"), and the Individual or Organization ("Licensee") accessing and
|
||||||
|
otherwise using this software ("Python") in source or binary form and
|
||||||
|
its associated documentation.
|
||||||
|
|
||||||
|
2. Subject to the terms and conditions of this License Agreement, PSF hereby
|
||||||
|
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
|
||||||
|
analyze, test, perform and/or display publicly, prepare derivative works,
|
||||||
|
distribute, and otherwise use Python alone or in any derivative version,
|
||||||
|
provided, however, that PSF's License Agreement and PSF's notice of copyright,
|
||||||
|
i.e., "Copyright (c) 2001-2024 Python Software Foundation; All Rights Reserved"
|
||||||
|
are retained in Python alone or in any derivative version prepared by Licensee.
|
||||||
|
|
||||||
|
3. In the event Licensee prepares a derivative work that is based on
|
||||||
|
or incorporates Python or any part thereof, and wants to make
|
||||||
|
the derivative work available to others as provided herein, then
|
||||||
|
Licensee hereby agrees to include in any such work a brief summary of
|
||||||
|
the changes made to Python.
|
||||||
|
|
||||||
|
4. PSF is making Python available to Licensee on an "AS IS"
|
||||||
|
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||||
|
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
||||||
|
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||||
|
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
|
||||||
|
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||||
|
|
||||||
|
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
||||||
|
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||||
|
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
|
||||||
|
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||||
|
|
||||||
|
6. This License Agreement will automatically terminate upon a material
|
||||||
|
breach of its terms and conditions.
|
||||||
|
|
||||||
|
7. Nothing in this License Agreement shall be deemed to create any
|
||||||
|
relationship of agency, partnership, or joint venture between PSF and
|
||||||
|
Licensee. This License Agreement does not grant permission to use PSF
|
||||||
|
trademarks or trade name in a trademark sense to endorse or promote
|
||||||
|
products or services of Licensee, or any third party.
|
||||||
|
|
||||||
|
8. By copying, installing or otherwise using Python, Licensee
|
||||||
|
agrees to be bound by the terms and conditions of this License
|
||||||
|
Agreement.
|
||||||
|
|
||||||
|
|
||||||
|
BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
|
||||||
|
|
||||||
|
1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
|
||||||
|
office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
|
||||||
|
Individual or Organization ("Licensee") accessing and otherwise using
|
||||||
|
this software in source or binary form and its associated
|
||||||
|
documentation ("the Software").
|
||||||
|
|
||||||
|
2. Subject to the terms and conditions of this BeOpen Python License
|
||||||
|
Agreement, BeOpen hereby grants Licensee a non-exclusive,
|
||||||
|
royalty-free, world-wide license to reproduce, analyze, test, perform
|
||||||
|
and/or display publicly, prepare derivative works, distribute, and
|
||||||
|
otherwise use the Software alone or in any derivative version,
|
||||||
|
provided, however, that the BeOpen Python License is retained in the
|
||||||
|
Software, alone or in any derivative version prepared by Licensee.
|
||||||
|
|
||||||
|
3. BeOpen is making the Software available to Licensee on an "AS IS"
|
||||||
|
basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||||
|
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
|
||||||
|
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||||
|
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
|
||||||
|
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||||
|
|
||||||
|
4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
|
||||||
|
SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
|
||||||
|
AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
|
||||||
|
DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||||
|
|
||||||
|
5. This License Agreement will automatically terminate upon a material
|
||||||
|
breach of its terms and conditions.
|
||||||
|
|
||||||
|
6. This License Agreement shall be governed by and interpreted in all
|
||||||
|
respects by the law of the State of California, excluding conflict of
|
||||||
|
law provisions. Nothing in this License Agreement shall be deemed to
|
||||||
|
create any relationship of agency, partnership, or joint venture
|
||||||
|
between BeOpen and Licensee. This License Agreement does not grant
|
||||||
|
permission to use BeOpen trademarks or trade names in a trademark
|
||||||
|
sense to endorse or promote products or services of Licensee, or any
|
||||||
|
third party. As an exception, the "BeOpen Python" logos available at
|
||||||
|
http://www.pythonlabs.com/logos.html may be used according to the
|
||||||
|
permissions granted on that web page.
|
||||||
|
|
||||||
|
7. By copying, installing or otherwise using the software, Licensee
|
||||||
|
agrees to be bound by the terms and conditions of this License
|
||||||
|
Agreement.
|
||||||
|
|
||||||
|
|
||||||
|
CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
1. This LICENSE AGREEMENT is between the Corporation for National
|
||||||
|
Research Initiatives, having an office at 1895 Preston White Drive,
|
||||||
|
Reston, VA 20191 ("CNRI"), and the Individual or Organization
|
||||||
|
("Licensee") accessing and otherwise using Python 1.6.1 software in
|
||||||
|
source or binary form and its associated documentation.
|
||||||
|
|
||||||
|
2. Subject to the terms and conditions of this License Agreement, CNRI
|
||||||
|
hereby grants Licensee a nonexclusive, royalty-free, world-wide
|
||||||
|
license to reproduce, analyze, test, perform and/or display publicly,
|
||||||
|
prepare derivative works, distribute, and otherwise use Python 1.6.1
|
||||||
|
alone or in any derivative version, provided, however, that CNRI's
|
||||||
|
License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
|
||||||
|
1995-2001 Corporation for National Research Initiatives; All Rights
|
||||||
|
Reserved" are retained in Python 1.6.1 alone or in any derivative
|
||||||
|
version prepared by Licensee. Alternately, in lieu of CNRI's License
|
||||||
|
Agreement, Licensee may substitute the following text (omitting the
|
||||||
|
quotes): "Python 1.6.1 is made available subject to the terms and
|
||||||
|
conditions in CNRI's License Agreement. This Agreement together with
|
||||||
|
Python 1.6.1 may be located on the internet using the following
|
||||||
|
unique, persistent identifier (known as a handle): 1895.22/1013. This
|
||||||
|
Agreement may also be obtained from a proxy server on the internet
|
||||||
|
using the following URL: http://hdl.handle.net/1895.22/1013".
|
||||||
|
|
||||||
|
3. In the event Licensee prepares a derivative work that is based on
|
||||||
|
or incorporates Python 1.6.1 or any part thereof, and wants to make
|
||||||
|
the derivative work available to others as provided herein, then
|
||||||
|
Licensee hereby agrees to include in any such work a brief summary of
|
||||||
|
the changes made to Python 1.6.1.
|
||||||
|
|
||||||
|
4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
|
||||||
|
basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||||
|
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
|
||||||
|
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||||
|
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
|
||||||
|
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||||
|
|
||||||
|
5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
||||||
|
1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||||
|
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
|
||||||
|
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||||
|
|
||||||
|
6. This License Agreement will automatically terminate upon a material
|
||||||
|
breach of its terms and conditions.
|
||||||
|
|
||||||
|
7. This License Agreement shall be governed by the federal
|
||||||
|
intellectual property law of the United States, including without
|
||||||
|
limitation the federal copyright law, and, to the extent such
|
||||||
|
U.S. federal law does not apply, by the law of the Commonwealth of
|
||||||
|
Virginia, excluding Virginia's conflict of law provisions.
|
||||||
|
Notwithstanding the foregoing, with regard to derivative works based
|
||||||
|
on Python 1.6.1 that incorporate non-separable material that was
|
||||||
|
previously distributed under the GNU General Public License (GPL), the
|
||||||
|
law of the Commonwealth of Virginia shall govern this License
|
||||||
|
Agreement only as to issues arising under or with respect to
|
||||||
|
Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
|
||||||
|
License Agreement shall be deemed to create any relationship of
|
||||||
|
agency, partnership, or joint venture between CNRI and Licensee. This
|
||||||
|
License Agreement does not grant permission to use CNRI trademarks or
|
||||||
|
trade name in a trademark sense to endorse or promote products or
|
||||||
|
services of Licensee, or any third party.
|
||||||
|
|
||||||
|
8. By clicking on the "ACCEPT" button where indicated, or by copying,
|
||||||
|
installing or otherwise using Python 1.6.1, Licensee agrees to be
|
||||||
|
bound by the terms and conditions of this License Agreement.
|
||||||
|
|
||||||
|
ACCEPT
|
||||||
|
|
||||||
|
|
||||||
|
CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
|
||||||
|
The Netherlands. All rights reserved.
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Stichting Mathematisch
|
||||||
|
Centrum or CWI not be used in advertising or publicity pertaining to
|
||||||
|
distribution of the software without specific, written prior
|
||||||
|
permission.
|
||||||
|
|
||||||
|
STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||||
|
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
|
||||||
|
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||||
|
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
101
venv/Lib/site-packages/Django-5.1.6.dist-info/METADATA
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
Metadata-Version: 2.1
|
||||||
|
Name: Django
|
||||||
|
Version: 5.1.6
|
||||||
|
Summary: A high-level Python web framework that encourages rapid development and clean, pragmatic design.
|
||||||
|
Author-email: Django Software Foundation <foundation@djangoproject.com>
|
||||||
|
License: BSD-3-Clause
|
||||||
|
Project-URL: Homepage, https://www.djangoproject.com/
|
||||||
|
Project-URL: Documentation, https://docs.djangoproject.com/
|
||||||
|
Project-URL: Release notes, https://docs.djangoproject.com/en/stable/releases/
|
||||||
|
Project-URL: Funding, https://www.djangoproject.com/fundraising/
|
||||||
|
Project-URL: Source, https://github.com/django/django
|
||||||
|
Project-URL: Tracker, https://code.djangoproject.com/
|
||||||
|
Classifier: Development Status :: 5 - Production/Stable
|
||||||
|
Classifier: Environment :: Web Environment
|
||||||
|
Classifier: Framework :: Django
|
||||||
|
Classifier: Intended Audience :: Developers
|
||||||
|
Classifier: License :: OSI Approved :: BSD License
|
||||||
|
Classifier: Operating System :: OS Independent
|
||||||
|
Classifier: Programming Language :: Python
|
||||||
|
Classifier: Programming Language :: Python :: 3
|
||||||
|
Classifier: Programming Language :: Python :: 3 :: Only
|
||||||
|
Classifier: Programming Language :: Python :: 3.10
|
||||||
|
Classifier: Programming Language :: Python :: 3.11
|
||||||
|
Classifier: Programming Language :: Python :: 3.12
|
||||||
|
Classifier: Programming Language :: Python :: 3.13
|
||||||
|
Classifier: Topic :: Internet :: WWW/HTTP
|
||||||
|
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
||||||
|
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
|
||||||
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
||||||
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
||||||
|
Requires-Python: >=3.10
|
||||||
|
Description-Content-Type: text/x-rst
|
||||||
|
License-File: LICENSE
|
||||||
|
License-File: LICENSE.python
|
||||||
|
License-File: AUTHORS
|
||||||
|
Requires-Dist: asgiref<4,>=3.8.1
|
||||||
|
Requires-Dist: sqlparse>=0.3.1
|
||||||
|
Requires-Dist: tzdata; sys_platform == "win32"
|
||||||
|
Provides-Extra: argon2
|
||||||
|
Requires-Dist: argon2-cffi>=19.1.0; extra == "argon2"
|
||||||
|
Provides-Extra: bcrypt
|
||||||
|
Requires-Dist: bcrypt; extra == "bcrypt"
|
||||||
|
|
||||||
|
======
|
||||||
|
Django
|
||||||
|
======
|
||||||
|
|
||||||
|
Django is a high-level Python web framework that encourages rapid development
|
||||||
|
and clean, pragmatic design. Thanks for checking it out.
|
||||||
|
|
||||||
|
All documentation is in the "``docs``" directory and online at
|
||||||
|
https://docs.djangoproject.com/en/stable/. If you're just getting started,
|
||||||
|
here's how we recommend you read the docs:
|
||||||
|
|
||||||
|
* First, read ``docs/intro/install.txt`` for instructions on installing Django.
|
||||||
|
|
||||||
|
* Next, work through the tutorials in order (``docs/intro/tutorial01.txt``,
|
||||||
|
``docs/intro/tutorial02.txt``, etc.).
|
||||||
|
|
||||||
|
* If you want to set up an actual deployment server, read
|
||||||
|
``docs/howto/deployment/index.txt`` for instructions.
|
||||||
|
|
||||||
|
* You'll probably want to read through the topical guides (in ``docs/topics``)
|
||||||
|
next; from there you can jump to the HOWTOs (in ``docs/howto``) for specific
|
||||||
|
problems, and check out the reference (``docs/ref``) for gory details.
|
||||||
|
|
||||||
|
* See ``docs/README`` for instructions on building an HTML version of the docs.
|
||||||
|
|
||||||
|
Docs are updated rigorously. If you find any problems in the docs, or think
|
||||||
|
they should be clarified in any way, please take 30 seconds to fill out a
|
||||||
|
ticket here: https://code.djangoproject.com/newticket
|
||||||
|
|
||||||
|
To get more help:
|
||||||
|
|
||||||
|
* Join the ``#django`` channel on ``irc.libera.chat``. Lots of helpful people
|
||||||
|
hang out there. `Webchat is available <https://web.libera.chat/#django>`_.
|
||||||
|
|
||||||
|
* Join the django-users mailing list, or read the archives, at
|
||||||
|
https://groups.google.com/group/django-users.
|
||||||
|
|
||||||
|
* Join the `Django Discord community <https://chat.djangoproject.com>`_.
|
||||||
|
|
||||||
|
* Join the community on the `Django Forum <https://forum.djangoproject.com/>`_.
|
||||||
|
|
||||||
|
To contribute to Django:
|
||||||
|
|
||||||
|
* Check out https://docs.djangoproject.com/en/dev/internals/contributing/ for
|
||||||
|
information about getting involved.
|
||||||
|
|
||||||
|
To run Django's test suite:
|
||||||
|
|
||||||
|
* Follow the instructions in the "Unit tests" section of
|
||||||
|
``docs/internals/contributing/writing-code/unit-tests.txt``, published online at
|
||||||
|
https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/#running-the-unit-tests
|
||||||
|
|
||||||
|
Supporting the Development of Django
|
||||||
|
====================================
|
||||||
|
|
||||||
|
Django's development depends on your contributions.
|
||||||
|
|
||||||
|
If you depend on Django, remember to support the Django Software Foundation: https://www.djangoproject.com/fundraising/
|
||||||
4540
venv/Lib/site-packages/Django-5.1.6.dist-info/RECORD
Normal file
5
venv/Lib/site-packages/Django-5.1.6.dist-info/WHEEL
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Wheel-Version: 1.0
|
||||||
|
Generator: bdist_wheel (0.45.1)
|
||||||
|
Root-Is-Purelib: true
|
||||||
|
Tag: py3-none-any
|
||||||
|
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
[console_scripts]
|
||||||
|
django-admin = django.core.management:execute_from_command_line
|
||||||
@ -0,0 +1 @@
|
|||||||
|
django
|
||||||
1
venv/Lib/site-packages/asgiref-3.8.1.dist-info/INSTALLER
Normal file
@ -0,0 +1 @@
|
|||||||
|
pip
|
||||||
27
venv/Lib/site-packages/asgiref-3.8.1.dist-info/LICENSE
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
Copyright (c) Django Software Foundation and individual contributors.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of Django nor the names of its contributors may be used
|
||||||
|
to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
246
venv/Lib/site-packages/asgiref-3.8.1.dist-info/METADATA
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
Metadata-Version: 2.1
|
||||||
|
Name: asgiref
|
||||||
|
Version: 3.8.1
|
||||||
|
Summary: ASGI specs, helper code, and adapters
|
||||||
|
Home-page: https://github.com/django/asgiref/
|
||||||
|
Author: Django Software Foundation
|
||||||
|
Author-email: foundation@djangoproject.com
|
||||||
|
License: BSD-3-Clause
|
||||||
|
Project-URL: Documentation, https://asgi.readthedocs.io/
|
||||||
|
Project-URL: Further Documentation, https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions
|
||||||
|
Project-URL: Changelog, https://github.com/django/asgiref/blob/master/CHANGELOG.txt
|
||||||
|
Classifier: Development Status :: 5 - Production/Stable
|
||||||
|
Classifier: Environment :: Web Environment
|
||||||
|
Classifier: Intended Audience :: Developers
|
||||||
|
Classifier: License :: OSI Approved :: BSD License
|
||||||
|
Classifier: Operating System :: OS Independent
|
||||||
|
Classifier: Programming Language :: Python
|
||||||
|
Classifier: Programming Language :: Python :: 3
|
||||||
|
Classifier: Programming Language :: Python :: 3 :: Only
|
||||||
|
Classifier: Programming Language :: Python :: 3.8
|
||||||
|
Classifier: Programming Language :: Python :: 3.9
|
||||||
|
Classifier: Programming Language :: Python :: 3.10
|
||||||
|
Classifier: Programming Language :: Python :: 3.11
|
||||||
|
Classifier: Programming Language :: Python :: 3.12
|
||||||
|
Classifier: Topic :: Internet :: WWW/HTTP
|
||||||
|
Requires-Python: >=3.8
|
||||||
|
License-File: LICENSE
|
||||||
|
Requires-Dist: typing-extensions >=4 ; python_version < "3.11"
|
||||||
|
Provides-Extra: tests
|
||||||
|
Requires-Dist: pytest ; extra == 'tests'
|
||||||
|
Requires-Dist: pytest-asyncio ; extra == 'tests'
|
||||||
|
Requires-Dist: mypy >=0.800 ; extra == 'tests'
|
||||||
|
|
||||||
|
asgiref
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. image:: https://github.com/django/asgiref/actions/workflows/tests.yml/badge.svg
|
||||||
|
:target: https://github.com/django/asgiref/actions/workflows/tests.yml
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/pypi/v/asgiref.svg
|
||||||
|
:target: https://pypi.python.org/pypi/asgiref
|
||||||
|
|
||||||
|
ASGI is a standard for Python asynchronous web apps and servers to communicate
|
||||||
|
with each other, and positioned as an asynchronous successor to WSGI. You can
|
||||||
|
read more at https://asgi.readthedocs.io/en/latest/
|
||||||
|
|
||||||
|
This package includes ASGI base libraries, such as:
|
||||||
|
|
||||||
|
* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``
|
||||||
|
* Server base classes, ``asgiref.server``
|
||||||
|
* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``
|
||||||
|
|
||||||
|
|
||||||
|
Function wrappers
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
These allow you to wrap or decorate async or sync functions to call them from
|
||||||
|
the other style (so you can call async functions from a synchronous thread,
|
||||||
|
or vice-versa).
|
||||||
|
|
||||||
|
In particular:
|
||||||
|
|
||||||
|
* AsyncToSync lets a synchronous subthread stop and wait while the async
|
||||||
|
function is called on the main thread's event loop, and then control is
|
||||||
|
returned to the thread when the async function is finished.
|
||||||
|
|
||||||
|
* SyncToAsync lets async code call a synchronous function, which is run in
|
||||||
|
a threadpool and control returned to the async coroutine when the synchronous
|
||||||
|
function completes.
|
||||||
|
|
||||||
|
The idea is to make it easier to call synchronous APIs from async code and
|
||||||
|
asynchronous APIs from synchronous code so it's easier to transition code from
|
||||||
|
one style to the other. In the case of Channels, we wrap the (synchronous)
|
||||||
|
Django view system with SyncToAsync to allow it to run inside the (asynchronous)
|
||||||
|
ASGI server.
|
||||||
|
|
||||||
|
Note that exactly what threads things run in is very specific, and aimed to
|
||||||
|
keep maximum compatibility with old synchronous code. See
|
||||||
|
"Synchronous code & Threads" below for a full explanation. By default,
|
||||||
|
``sync_to_async`` will run all synchronous code in the program in the same
|
||||||
|
thread for safety reasons; you can disable this for more performance with
|
||||||
|
``@sync_to_async(thread_sensitive=False)``, but make sure that your code does
|
||||||
|
not rely on anything bound to threads (like database connections) when you do.
|
||||||
|
|
||||||
|
|
||||||
|
Threadlocal replacement
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
This is a drop-in replacement for ``threading.local`` that works with both
|
||||||
|
threads and asyncio Tasks. Even better, it will proxy values through from a
|
||||||
|
task-local context to a thread-local context when you use ``sync_to_async``
|
||||||
|
to run things in a threadpool, and vice-versa for ``async_to_sync``.
|
||||||
|
|
||||||
|
If you instead want true thread- and task-safety, you can set
|
||||||
|
``thread_critical`` on the Local object to ensure this instead.
|
||||||
|
|
||||||
|
|
||||||
|
Server base classes
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Includes a ``StatelessServer`` class which provides all the hard work of
|
||||||
|
writing a stateless server (as in, does not handle direct incoming sockets
|
||||||
|
but instead consumes external streams or sockets to work out what is happening).
|
||||||
|
|
||||||
|
An example of such a server would be a chatbot server that connects out to
|
||||||
|
a central chat server and provides a "connection scope" per user chatting to
|
||||||
|
it. There's only one actual connection, but the server has to separate things
|
||||||
|
into several scopes for easier writing of the code.
|
||||||
|
|
||||||
|
You can see an example of this being used in `frequensgi <https://github.com/andrewgodwin/frequensgi>`_.
|
||||||
|
|
||||||
|
|
||||||
|
WSGI-to-ASGI adapter
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Allows you to wrap a WSGI application so it appears as a valid ASGI application.
|
||||||
|
|
||||||
|
Simply wrap it around your WSGI application like so::
|
||||||
|
|
||||||
|
asgi_application = WsgiToAsgi(wsgi_application)
|
||||||
|
|
||||||
|
The WSGI application will be run in a synchronous threadpool, and the wrapped
|
||||||
|
ASGI application will be one that accepts ``http`` class messages.
|
||||||
|
|
||||||
|
Please note that not all extended features of WSGI may be supported (such as
|
||||||
|
file handles for incoming POST bodies).
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
|
||||||
|
``asgiref`` requires Python 3.8 or higher.
|
||||||
|
|
||||||
|
|
||||||
|
Contributing
|
||||||
|
------------
|
||||||
|
|
||||||
|
Please refer to the
|
||||||
|
`main Channels contributing docs <https://github.com/django/channels/blob/master/CONTRIBUTING.rst>`_.
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
'''''''
|
||||||
|
|
||||||
|
To run tests, make sure you have installed the ``tests`` extra with the package::
|
||||||
|
|
||||||
|
cd asgiref/
|
||||||
|
pip install -e .[tests]
|
||||||
|
pytest
|
||||||
|
|
||||||
|
|
||||||
|
Building the documentation
|
||||||
|
''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
The documentation uses `Sphinx <http://www.sphinx-doc.org>`_::
|
||||||
|
|
||||||
|
cd asgiref/docs/
|
||||||
|
pip install sphinx
|
||||||
|
|
||||||
|
To build the docs, you can use the default tools::
|
||||||
|
|
||||||
|
sphinx-build -b html . _build/html # or `make html`, if you've got make set up
|
||||||
|
cd _build/html
|
||||||
|
python -m http.server
|
||||||
|
|
||||||
|
...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload
|
||||||
|
your documentation changes automatically::
|
||||||
|
|
||||||
|
pip install sphinx-autobuild
|
||||||
|
sphinx-autobuild . _build/html
|
||||||
|
|
||||||
|
|
||||||
|
Releasing
|
||||||
|
'''''''''
|
||||||
|
|
||||||
|
To release, first add details to CHANGELOG.txt and update the version number in ``asgiref/__init__.py``.
|
||||||
|
|
||||||
|
Then, build and push the packages::
|
||||||
|
|
||||||
|
python -m build
|
||||||
|
twine upload dist/*
|
||||||
|
rm -r build/ dist/
|
||||||
|
|
||||||
|
|
||||||
|
Implementation Details
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Synchronous code & threads
|
||||||
|
''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
The ``asgiref.sync`` module provides two wrappers that let you go between
|
||||||
|
asynchronous and synchronous code at will, while taking care of the rough edges
|
||||||
|
for you.
|
||||||
|
|
||||||
|
Unfortunately, the rough edges are numerous, and the code has to work especially
|
||||||
|
hard to keep things in the same thread as much as possible. Notably, the
|
||||||
|
restrictions we are working with are:
|
||||||
|
|
||||||
|
* All synchronous code called through ``SyncToAsync`` and marked with
|
||||||
|
``thread_sensitive`` should run in the same thread as each other (and if the
|
||||||
|
outer layer of the program is synchronous, the main thread)
|
||||||
|
|
||||||
|
* If a thread already has a running async loop, ``AsyncToSync`` can't run things
|
||||||
|
on that loop if it's blocked on synchronous code that is above you in the
|
||||||
|
call stack.
|
||||||
|
|
||||||
|
The first compromise you get to might be that ``thread_sensitive`` code should
|
||||||
|
just run in the same thread and not spawn in a sub-thread, fulfilling the first
|
||||||
|
restriction, but that immediately runs you into the second restriction.
|
||||||
|
|
||||||
|
The only real solution is to essentially have a variant of ThreadPoolExecutor
|
||||||
|
that executes any ``thread_sensitive`` code on the outermost synchronous
|
||||||
|
thread - either the main thread, or a single spawned subthread.
|
||||||
|
|
||||||
|
This means you now have two basic states:
|
||||||
|
|
||||||
|
* If the outermost layer of your program is synchronous, then all async code
|
||||||
|
run through ``AsyncToSync`` will run in a per-call event loop in arbitrary
|
||||||
|
sub-threads, while all ``thread_sensitive`` code will run in the main thread.
|
||||||
|
|
||||||
|
* If the outermost layer of your program is asynchronous, then all async code
|
||||||
|
runs on the main thread's event loop, and all ``thread_sensitive`` synchronous
|
||||||
|
code will run in a single shared sub-thread.
|
||||||
|
|
||||||
|
Crucially, this means that in both cases there is a thread which is a shared
|
||||||
|
resource that all ``thread_sensitive`` code must run on, and there is a chance
|
||||||
|
that this thread is currently blocked on its own ``AsyncToSync`` call. Thus,
|
||||||
|
``AsyncToSync`` needs to act as an executor for thread code while it's blocking.
|
||||||
|
|
||||||
|
The ``CurrentThreadExecutor`` class provides this functionality; rather than
|
||||||
|
simply waiting on a Future, you can call its ``run_until_future`` method and
|
||||||
|
it will run submitted code until that Future is done. This means that code
|
||||||
|
inside the call can then run code on your thread.
|
||||||
|
|
||||||
|
|
||||||
|
Maintenance and Security
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
To report security issues, please contact security@djangoproject.com. For GPG
|
||||||
|
signatures and more security process information, see
|
||||||
|
https://docs.djangoproject.com/en/dev/internals/security/.
|
||||||
|
|
||||||
|
To report bugs or request new features, please open a new GitHub issue.
|
||||||
|
|
||||||
|
This repository is part of the Channels project. For the shepherd and maintenance team, please see the
|
||||||
|
`main Channels readme <https://github.com/django/channels/blob/master/README.rst>`_.
|
||||||
27
venv/Lib/site-packages/asgiref-3.8.1.dist-info/RECORD
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
asgiref-3.8.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||||
|
asgiref-3.8.1.dist-info/LICENSE,sha256=uEZBXRtRTpwd_xSiLeuQbXlLxUbKYSn5UKGM0JHipmk,1552
|
||||||
|
asgiref-3.8.1.dist-info/METADATA,sha256=Cbu67XPstSkMxAdA4puvY-FAzN9OrT_AasH7IuK6DaM,9259
|
||||||
|
asgiref-3.8.1.dist-info/RECORD,,
|
||||||
|
asgiref-3.8.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
||||||
|
asgiref-3.8.1.dist-info/top_level.txt,sha256=bokQjCzwwERhdBiPdvYEZa4cHxT4NCeAffQNUqJ8ssg,8
|
||||||
|
asgiref/__init__.py,sha256=kZzGpxWKY4rWDQrrrlM7bN7YKRAjy17Wv4w__djvVYU,22
|
||||||
|
asgiref/__pycache__/__init__.cpython-312.pyc,,
|
||||||
|
asgiref/__pycache__/compatibility.cpython-312.pyc,,
|
||||||
|
asgiref/__pycache__/current_thread_executor.cpython-312.pyc,,
|
||||||
|
asgiref/__pycache__/local.cpython-312.pyc,,
|
||||||
|
asgiref/__pycache__/server.cpython-312.pyc,,
|
||||||
|
asgiref/__pycache__/sync.cpython-312.pyc,,
|
||||||
|
asgiref/__pycache__/testing.cpython-312.pyc,,
|
||||||
|
asgiref/__pycache__/timeout.cpython-312.pyc,,
|
||||||
|
asgiref/__pycache__/typing.cpython-312.pyc,,
|
||||||
|
asgiref/__pycache__/wsgi.cpython-312.pyc,,
|
||||||
|
asgiref/compatibility.py,sha256=DhY1SOpOvOw0Y1lSEjCqg-znRUQKecG3LTaV48MZi68,1606
|
||||||
|
asgiref/current_thread_executor.py,sha256=EuowbT0oL_P4Fq8KTXNUyEgk3-k4Yh4E8F_anEVdeBI,3977
|
||||||
|
asgiref/local.py,sha256=bNeER_QIfw2-PAPYanqAZq6yAAEJ-aio7e9o8Up-mgI,4808
|
||||||
|
asgiref/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||||
|
asgiref/server.py,sha256=egTQhZo1k4G0F7SSBQNp_VOekpGcjBJZU2kkCoiGC_M,6005
|
||||||
|
asgiref/sync.py,sha256=Why0YQV84vSp7IBBr-JDbxYCua-InLgBjuiCMlj9WgI,21444
|
||||||
|
asgiref/testing.py,sha256=QgZgXKrwdq5xzhZqynr1msWOiTS3Kpastj7wHU2ePRY,3481
|
||||||
|
asgiref/timeout.py,sha256=LtGL-xQpG8JHprdsEUCMErJ0kNWj4qwWZhEHJ3iKu4s,3627
|
||||||
|
asgiref/typing.py,sha256=rLF3y_9OgvlQMaDm8yMw8QTgsO9Mv9YAc6Cj8xjvWo0,6264
|
||||||
|
asgiref/wsgi.py,sha256=fxBLgUE_0PEVgcp13ticz6GHf3q-aKWcB5eFPhd6yxo,6753
|
||||||
5
venv/Lib/site-packages/asgiref-3.8.1.dist-info/WHEEL
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Wheel-Version: 1.0
|
||||||
|
Generator: bdist_wheel (0.43.0)
|
||||||
|
Root-Is-Purelib: true
|
||||||
|
Tag: py3-none-any
|
||||||
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
asgiref
|
||||||
1
venv/Lib/site-packages/asgiref/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
__version__ = "3.8.1"
|
||||||
BIN
venv/Lib/site-packages/asgiref/__pycache__/local.cpython-312.pyc
Normal file
BIN
venv/Lib/site-packages/asgiref/__pycache__/sync.cpython-312.pyc
Normal file
BIN
venv/Lib/site-packages/asgiref/__pycache__/wsgi.cpython-312.pyc
Normal file
48
venv/Lib/site-packages/asgiref/compatibility.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import inspect
|
||||||
|
|
||||||
|
from .sync import iscoroutinefunction
|
||||||
|
|
||||||
|
|
||||||
|
def is_double_callable(application):
|
||||||
|
"""
|
||||||
|
Tests to see if an application is a legacy-style (double-callable) application.
|
||||||
|
"""
|
||||||
|
# Look for a hint on the object first
|
||||||
|
if getattr(application, "_asgi_single_callable", False):
|
||||||
|
return False
|
||||||
|
if getattr(application, "_asgi_double_callable", False):
|
||||||
|
return True
|
||||||
|
# Uninstanted classes are double-callable
|
||||||
|
if inspect.isclass(application):
|
||||||
|
return True
|
||||||
|
# Instanted classes depend on their __call__
|
||||||
|
if hasattr(application, "__call__"):
|
||||||
|
# We only check to see if its __call__ is a coroutine function -
|
||||||
|
# if it's not, it still might be a coroutine function itself.
|
||||||
|
if iscoroutinefunction(application.__call__):
|
||||||
|
return False
|
||||||
|
# Non-classes we just check directly
|
||||||
|
return not iscoroutinefunction(application)
|
||||||
|
|
||||||
|
|
||||||
|
def double_to_single_callable(application):
|
||||||
|
"""
|
||||||
|
Transforms a double-callable ASGI application into a single-callable one.
|
||||||
|
"""
|
||||||
|
|
||||||
|
async def new_application(scope, receive, send):
|
||||||
|
instance = application(scope)
|
||||||
|
return await instance(receive, send)
|
||||||
|
|
||||||
|
return new_application
|
||||||
|
|
||||||
|
|
||||||
|
def guarantee_single_callable(application):
|
||||||
|
"""
|
||||||
|
Takes either a single- or double-callable application and always returns it
|
||||||
|
in single-callable style. Use this to add backwards compatibility for ASGI
|
||||||
|
2.0 applications to your server/test harness/etc.
|
||||||
|
"""
|
||||||
|
if is_double_callable(application):
|
||||||
|
application = double_to_single_callable(application)
|
||||||
|
return application
|
||||||
115
venv/Lib/site-packages/asgiref/current_thread_executor.py
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
import queue
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
|
from concurrent.futures import Executor, Future
|
||||||
|
from typing import TYPE_CHECKING, Any, Callable, TypeVar, Union
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 10):
|
||||||
|
from typing import ParamSpec
|
||||||
|
else:
|
||||||
|
from typing_extensions import ParamSpec
|
||||||
|
|
||||||
|
_T = TypeVar("_T")
|
||||||
|
_P = ParamSpec("_P")
|
||||||
|
_R = TypeVar("_R")
|
||||||
|
|
||||||
|
|
||||||
|
class _WorkItem:
|
||||||
|
"""
|
||||||
|
Represents an item needing to be run in the executor.
|
||||||
|
Copied from ThreadPoolExecutor (but it's private, so we're not going to rely on importing it)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
future: "Future[_R]",
|
||||||
|
fn: Callable[_P, _R],
|
||||||
|
*args: _P.args,
|
||||||
|
**kwargs: _P.kwargs,
|
||||||
|
):
|
||||||
|
self.future = future
|
||||||
|
self.fn = fn
|
||||||
|
self.args = args
|
||||||
|
self.kwargs = kwargs
|
||||||
|
|
||||||
|
def run(self) -> None:
|
||||||
|
__traceback_hide__ = True # noqa: F841
|
||||||
|
if not self.future.set_running_or_notify_cancel():
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
result = self.fn(*self.args, **self.kwargs)
|
||||||
|
except BaseException as exc:
|
||||||
|
self.future.set_exception(exc)
|
||||||
|
# Break a reference cycle with the exception 'exc'
|
||||||
|
self = None # type: ignore[assignment]
|
||||||
|
else:
|
||||||
|
self.future.set_result(result)
|
||||||
|
|
||||||
|
|
||||||
|
class CurrentThreadExecutor(Executor):
|
||||||
|
"""
|
||||||
|
An Executor that actually runs code in the thread it is instantiated in.
|
||||||
|
Passed to other threads running async code, so they can run sync code in
|
||||||
|
the thread they came from.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self._work_thread = threading.current_thread()
|
||||||
|
self._work_queue: queue.Queue[Union[_WorkItem, "Future[Any]"]] = queue.Queue()
|
||||||
|
self._broken = False
|
||||||
|
|
||||||
|
def run_until_future(self, future: "Future[Any]") -> None:
|
||||||
|
"""
|
||||||
|
Runs the code in the work queue until a result is available from the future.
|
||||||
|
Should be run from the thread the executor is initialised in.
|
||||||
|
"""
|
||||||
|
# Check we're in the right thread
|
||||||
|
if threading.current_thread() != self._work_thread:
|
||||||
|
raise RuntimeError(
|
||||||
|
"You cannot run CurrentThreadExecutor from a different thread"
|
||||||
|
)
|
||||||
|
future.add_done_callback(self._work_queue.put)
|
||||||
|
# Keep getting and running work items until we get the future we're waiting for
|
||||||
|
# back via the future's done callback.
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
# Get a work item and run it
|
||||||
|
work_item = self._work_queue.get()
|
||||||
|
if work_item is future:
|
||||||
|
return
|
||||||
|
assert isinstance(work_item, _WorkItem)
|
||||||
|
work_item.run()
|
||||||
|
del work_item
|
||||||
|
finally:
|
||||||
|
self._broken = True
|
||||||
|
|
||||||
|
def _submit(
|
||||||
|
self,
|
||||||
|
fn: Callable[_P, _R],
|
||||||
|
*args: _P.args,
|
||||||
|
**kwargs: _P.kwargs,
|
||||||
|
) -> "Future[_R]":
|
||||||
|
# Check they're not submitting from the same thread
|
||||||
|
if threading.current_thread() == self._work_thread:
|
||||||
|
raise RuntimeError(
|
||||||
|
"You cannot submit onto CurrentThreadExecutor from its own thread"
|
||||||
|
)
|
||||||
|
# Check they're not too late or the executor errored
|
||||||
|
if self._broken:
|
||||||
|
raise RuntimeError("CurrentThreadExecutor already quit or is broken")
|
||||||
|
# Add to work queue
|
||||||
|
f: "Future[_R]" = Future()
|
||||||
|
work_item = _WorkItem(f, fn, *args, **kwargs)
|
||||||
|
self._work_queue.put(work_item)
|
||||||
|
# Return the future
|
||||||
|
return f
|
||||||
|
|
||||||
|
# Python 3.9+ has a new signature for submit with a "/" after `fn`, to enforce
|
||||||
|
# it to be a positional argument. If we ignore[override] mypy on 3.9+ will be
|
||||||
|
# happy but 3.8 will say that the ignore comment is unused, even when
|
||||||
|
# defining them differently based on sys.version_info.
|
||||||
|
# We should be able to remove this when we drop support for 3.8.
|
||||||
|
if not TYPE_CHECKING:
|
||||||
|
|
||||||
|
def submit(self, fn, *args, **kwargs):
|
||||||
|
return self._submit(fn, *args, **kwargs)
|
||||||