Initial commit
This commit is contained in:
16
templates/DEPRECATED_block_store_product_price.html
Normal file
16
templates/DEPRECATED_block_store_product_price.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<!-- Product price display with purchase options -->
|
||||
|
||||
<div class="container column">
|
||||
<h2>{{ product.output_price() }}</h2> <!-- product.price_GBP -->
|
||||
{% set form = product.form_basket_add %}
|
||||
<form {{ model.attr_form_type }}="{{ form.form_type }}" {{ model.attr_id_product }}="{{ product.id_product }}" {{ model.attr_id_permutation }}="{{ permutation.id_permutation }}" class="container column">
|
||||
{{ form.hidden_tag() }}
|
||||
{% set tmp_quantity = 1 %}
|
||||
{% include '_block_input_number_plus_minus.html' %}
|
||||
{{ form.submit() }}
|
||||
</form>
|
||||
<!--
|
||||
<button class="{{ model.flag_btn_basket_add }}" type="submit" {{ model.attr_id_product }}="{{ product.id }}">Add to basket</button>
|
||||
<button class="{{ model.flag_btn_buy_now }}" type="submit" {{ model.attr_id_product }}="{{ product.id }}">Buy it now</button>
|
||||
-->
|
||||
</div>
|
||||
26
templates/DEPRECATED_page_home.html
Normal file
26
templates/DEPRECATED_page_home.html
Normal file
@@ -0,0 +1,26 @@
|
||||
{% extends 'layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
<!-- Include Stylesheet -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/home.css') }}">
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="card">
|
||||
<div class="container column">
|
||||
<h1>Offering a full suite of software engineering services.</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Include JavaScript -->
|
||||
<script src="{{ url_for('static', filename='js/home.js') }}"></script>
|
||||
|
||||
<script>
|
||||
var hashPageCurrent = "{{ model.hash_page_home }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
hookupPageHome();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
140
templates/DEPRECATEDlayout_store.html
Normal file
140
templates/DEPRECATEDlayout_store.html
Normal file
@@ -0,0 +1,140 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8"/>
|
||||
<title>{% block title %}{% endblock %} - PARTS</title>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="{{ url_for('static', filename='js/shared.js') }}"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.js"></script> <!-- Include jQuery from a CDN -->
|
||||
|
||||
<script>
|
||||
var flagBtnOverlayClose = "{{ model.flag_btn_overlay_close }}";
|
||||
var flagBtnSubmit = "{{ model.flag_btn_submit }}";
|
||||
var flagCard = "{{ model.flag_card }}";
|
||||
var flagCollapsible = "{{ model.flag_collapsible }}";
|
||||
var flagColumn = "{{ model.flag_column }}";
|
||||
var flagContainer = "{{ model.flag_container }}";
|
||||
var flagContainerInput = "{{ model.flag_container_input }}";
|
||||
var flagRow = "{{ model.flag_row }}";
|
||||
var flagScrollable = "{{ model.flag_scrollable }}";
|
||||
var flagBtnOverlayClose = "{{ model.flag_btn_overlay_close }}";
|
||||
var flagInitialised = "{{ model.flag_initalised }}";
|
||||
var flagSubmitted = "{{ model.flag_submitted }}";
|
||||
var hashPageContact = "{{ model.hash_page_contact }}";
|
||||
var hashPageErrorNoPermission = "{{ model.hash_page_error_no_permission }}";
|
||||
var hashPageHome = "{{ model.hash_page_home }}";
|
||||
var hashPageStoreHome = "{{ model.hash_page_store_home }}";
|
||||
var hashPageStoreProduct = "{{ model.hash_page_store_product }}";
|
||||
var idFormCurrency = "#{{ model.id_form_currency }}";
|
||||
var idFormDeliveryRegion = "#{{ model.id_form_delivery_region }}";
|
||||
var idFormIsIncludedVAT = "#{{ model.id_form_is_included_VAT }}";
|
||||
var idNavContact = "#{{ model.id_nav_contact }}";
|
||||
var idNavHome = "#{{ model.id_nav_home }}";
|
||||
var idNavStoreHome = "#{{ model.id_nav_store_home }}";
|
||||
var idNavStoreProduct = "#{{ model.id_nav_store_product }}";
|
||||
var idPageBody = "#{{ model.id_page_body }}";
|
||||
var isUserLoggedIn = {{ model.output_bool(model.is_user_logged_in) }};
|
||||
var keyBasket = "{{ model.key_basket }}";
|
||||
var keyForm = "{{ model.key_form }}";
|
||||
var keyPrice = "{{ model.key_price }}";
|
||||
var keyQuantity = "{{ model.key_quantity }}";
|
||||
var keyShared = "shared";
|
||||
var _pathHost = "{{ model.url_host }}";
|
||||
</script>
|
||||
|
||||
|
||||
<!-- Stylesheets -->
|
||||
<link href="{{ url_for('static', filename='css/shared.css') }}" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div class="header card">
|
||||
<div class="container">
|
||||
<img class="header-logo" src="{{ url_for('static', filename='images/Logo.png') }}" alt="PARTS logo">
|
||||
</div>
|
||||
<div class="container">
|
||||
<h1>Precision And Research Technology Systems Limited</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="topnav container row">
|
||||
<div class="container column">
|
||||
<a id="{{ model.id_nav_home }}">Home</a> <!-- href="{{ url_for('home') }}" -->
|
||||
</div>
|
||||
<div class="container column">
|
||||
<a id="{{ model.id_nav_store_home }}">Store</a>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<!-- <a href="{ url_ for('create_price_dummy') }">Create template price</a> -->
|
||||
<form id="{{ model.id_form_is_included_VAT }}" class="container" action="{{ url_for('set_is_included_VAT') }}" method="POST">
|
||||
{{ model.form_is_included_VAT.hidden_tag() }}
|
||||
<div class="container-input">
|
||||
{{ model.form_is_included_VAT.is_included.label }}
|
||||
{{ model.form_is_included_VAT.is_included() }}
|
||||
{% for error in model.form_is_included_VAT.is_included.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<form id="{{ model.id_form_delivery_region }}" class="container" action="{{ url_for('set_delivery_region') }}" method="POST">
|
||||
{{ model.form_delivery_region.hidden_tag() }}
|
||||
<div class="container-input">
|
||||
{{ model.form_delivery_region.id_region_delivery.label }}
|
||||
{{ model.form_delivery_region.id_region_delivery() }}
|
||||
{% for error in model.form_delivery_region.id_region_delivery.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<form id="{{ model.id_form_currency }}" class="container" action="{{ url_for('set_currency') }}" method="POST">
|
||||
{{ model.form_currency.hidden_tag() }}
|
||||
<div class="container-input">
|
||||
{{ model.form_currency.id_currency.label }}
|
||||
{{ model.form_currency.id_currency() }}
|
||||
{% for error in model.form_currency.id_currency.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<a href="{{ url_for('logout') if model.is_user_logged_in else url_for('login') }}" style="float:right">{{ 'Logout' if model.is_user_logged_in else 'Login' }}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Page body -->
|
||||
<div id="{{ model.id_page_body }}" class="container" style="display: block;">
|
||||
{% block page_body %}{% endblock %}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="footer">
|
||||
<h4>Copyright (C) Precision And Research Technology Systems Limited. All rights reserved.</h4>
|
||||
<h5>Company number 13587499</h5>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<!-- Scripts --
|
||||
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
|
||||
-->
|
||||
<!-- Include jQuery from a CDN --
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
|
||||
-->
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
// alert("naughty boy");
|
||||
hookupShared();
|
||||
});
|
||||
</script>
|
||||
17
templates/_block_input_number_plus_minus.html
Normal file
17
templates/_block_input_number_plus_minus.html
Normal file
@@ -0,0 +1,17 @@
|
||||
<!-- Input Number with +/- buttons -->
|
||||
<!-- requires:
|
||||
Product product
|
||||
Form_Product form - with product id attribute for accessing input element attribute
|
||||
int tmp_quantity - placeholder
|
||||
-->
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}" style="flex: none;">
|
||||
<div class="btn-decrement" {{ model.ATTR_ID_PRODUCT }}="{{ product.id_product }}" {{ model.ATTR_ID_PERMUTATION }}="{{ permutation.id_permutation }}" {{ model.ATTR_FORM_TYPE }}="{{ form.form_type }}">-</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }}-input {{ model.FLAG_COLUMN }}" style="flex: none;">
|
||||
{{ form.quantity(value=tmp_quantity) }} <!-- model.attr_id_product=product.id -->
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}" style="flex: none;">
|
||||
<div class="btn-increment" {{ model.ATTR_ID_PRODUCT }}="{{ product.id_product }}" {{ model.ATTR_ID_PERMUTATION }}="{{ permutation.id_permutation }}" {{ model.ATTR_FORM_TYPE }}="{{ form.form_type }}">+</div>
|
||||
</div>
|
||||
</div>
|
||||
10
templates/_block_overlay_address.html
Normal file
10
templates/_block_overlay_address.html
Normal file
@@ -0,0 +1,10 @@
|
||||
{% extends '_template_overlay.html' %}
|
||||
|
||||
<!-- Requirements
|
||||
Form_Billing form
|
||||
string overlay_id
|
||||
string overlay_title
|
||||
-->
|
||||
{% block overlay_body %}
|
||||
{% include '_block_store_address.html' %}
|
||||
{% endblock %}
|
||||
79
templates/_block_store_address.html
Normal file
79
templates/_block_store_address.html
Normal file
@@ -0,0 +1,79 @@
|
||||
|
||||
<!-- Address form
|
||||
<div class="card"> -->
|
||||
<form id="{{ form.output_id() }}" class="{{ model.flag_container }}">
|
||||
{{ form.hidden_tag() }}
|
||||
|
||||
{% if form.form_type_billing_not_delivery %}
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ form.identical.label }}
|
||||
{{ form.identical(checked=True) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ form.region.label }}
|
||||
{{ form.region() }}
|
||||
{% for error in form.region.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ form.name_full.label }}
|
||||
{{ form.name_full(size=100) }}
|
||||
{% for error in form.name_full.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ form.phone_number.label }}
|
||||
{{ form.phone_number(size=20) }}
|
||||
{% for error in form.phone_number.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ form.postcode.label }}
|
||||
{{ form.postcode(size=10) }}
|
||||
{% for error in form.postcode.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ form.address_1.label }}
|
||||
{{ form.address_1(size=254) }}
|
||||
{% for error in form.address_1.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ form.address_2.label }}
|
||||
{{ form.address_2(size=254) }}
|
||||
</div>
|
||||
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ form.city.label }}
|
||||
{{ form.city(size=100) }}
|
||||
{% for error in form.city.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ form.county.label }}
|
||||
{{ form.county(size=100) }}
|
||||
{% for error in form.county.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ form.submit() }}
|
||||
</div>
|
||||
</form>
|
||||
<!--</div>-->
|
||||
18
templates/_block_store_basket.html
Normal file
18
templates/_block_store_basket.html
Normal file
@@ -0,0 +1,18 @@
|
||||
<!-- Basket -->
|
||||
{% set show_delivery_option = False %}
|
||||
<div id="{{ model.id_basket }}" class="{{ model.flag_card }} {{ model.flag_scrollable }}">
|
||||
<div class="container column">
|
||||
<div class="container row">
|
||||
<h2>Basket</h2>
|
||||
<img class="img-icon" src="{{ url_for('static', filename='images/icon_basket.png')}}" alt="Basket icon">
|
||||
</div>
|
||||
{% for basket_item in model.basket.items %}
|
||||
{% include '_block_store_basket_item.html' %}
|
||||
{% endfor %}
|
||||
<h3 id="{{ model.id_basket_total }}">Total: {{ model.output_basket_total() }}</h3>{% if not model.app.is_included_VAT %}<h4> + VAT </h4>{% endif %}
|
||||
<p id="{{ model.id_label_basket_empty}}" style="margin: 1vh;">Buy some shit dawg!</p>
|
||||
<!-- <div id="{{ model.id_basket_notices }}"> include line above
|
||||
</div> -->
|
||||
<button id="{{ model.id_btn_checkout }}" type="submit">Checkout</button>
|
||||
</div>
|
||||
</div>
|
||||
35
templates/_block_store_basket_item.html
Normal file
35
templates/_block_store_basket_item.html
Normal file
@@ -0,0 +1,35 @@
|
||||
<!-- Basket Item -->
|
||||
<!-- requires:
|
||||
Basket_Item basket_item
|
||||
bool show_delivery_option
|
||||
-->
|
||||
<div class="container row">
|
||||
{% set product = basket_item.product %}
|
||||
{% set permutation = product.get_permutation_selected() %}
|
||||
<div class="container">
|
||||
<img class="img-thumbnail" src="{{ product.get_image_from_index(0).url }}" alt="Basket icon"> <!-- model.get_many_product_image_src(product.id_product, '', True, 'THUMBNAIL') -->
|
||||
</div>
|
||||
{% set form = product.form_basket_edit %}
|
||||
<!-- <form {{ model.attr_form_type }}="{{ form.form_type }}" {{ model.attr_id_product }}="{{ product.id }}" class="container column" action="{{ url_for('basket_add') }}" method="POST"> -->
|
||||
<form {{ model.attr_form_type }}="{{ form.form_type }}" class="{{ model.flag_container }} {{ model.flag_column }}" {{ model.attr_id_product }}="{{ product.id_product}}" {{ model.attr_id_permutation }}="{{ permutation.id_permutation }}"> <!-- id="form_basket_item_id_{{ basket_item.product.id }}" -->
|
||||
{{ form.hidden_tag() }}
|
||||
<h2>{{ product.name }}</h2>
|
||||
{% if permutation.is_available %}
|
||||
<h3 style="white-space: nowrap;">{{ basket_item.quantity }} x {{ product.output_price(model.app.is_included_VAT) }} = {{ basket_item.output_subtotal() }}</h3>
|
||||
{% set tmp_quantity = basket_item.quantity %}
|
||||
{% include '_block_input_number_plus_minus.html' %}
|
||||
{% elif permutation.is_unavailable_in_currency_or_region %}
|
||||
<h3 style="white-space: nowrap;">Product not available in currency and region</h3>
|
||||
{% else %}
|
||||
<h3 style="white-space: nowrap;">Product not available</h3>
|
||||
{% endif %}
|
||||
<a class="{{ model.flag_basket_item_delete }}">Delete</a>
|
||||
{% if show_delivery_option %}
|
||||
<div class="{{ model.flag_container_input }}">
|
||||
{{ product.form_delivery_option.label }}
|
||||
{{ product.form_delivery_option() }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<script>console.log('creating basket item for:');console.log('product id: {{ product.id_product }}');console.log('permutation id: {{ product.get_id_permutation() }}');console.log('quantity: {{ basket_item.quantity }}');</script>
|
||||
</form>
|
||||
</div>
|
||||
22
templates/_block_store_product.html
Normal file
22
templates/_block_store_product.html
Normal file
@@ -0,0 +1,22 @@
|
||||
<!-- Store Product Card
|
||||
for insertion in _store_product_category_card
|
||||
-->
|
||||
{% set permutation = product.get_permutation_selected() %}
|
||||
<div class="card subcard" {{ model.attr_id_product }}="{{ product.id_product }}" {{ model.attr_id_permutation }}="{{ permutation.id_permutation }}">
|
||||
<div class="container">
|
||||
<img class="img-product" src="{{ permutation.get_image_from_index(0).url }}" alt="Template product image"> <!-- model.get_many_product_image_src(product.id_product, '', True, 'FULL') -->
|
||||
</div>
|
||||
{% set form = product.form_basket_add %}
|
||||
<form {{ model.attr_form_type }}="{{ form.form_type }}" {{ model.attr_id_product }}="{{ product.id_product }}" {{ model.attr_id_permutation }}="{{ permutation.id_permutation }}" class="container column" action="{{ url_for('basket_add') }}" method="POST">
|
||||
{{ form.hidden_tag() }}
|
||||
<h2>{{ product.name }}</h2>
|
||||
<h3>{{ permutation.output_price(model.app.is_included_VAT) }}</h3>
|
||||
{% if permutation.is_available %}
|
||||
{% set tmp_quantity = 1 %}
|
||||
{% include '_block_input_number_plus_minus.html' %}
|
||||
{{ form.submit() }}
|
||||
<p>Get it: <strong>{{ permutation.output_delivery_date() }}</strong></p>
|
||||
{% endif %}
|
||||
</form>
|
||||
<!-- { % inc !!!! broken to ignore !!!! lude '_block_store_product_price!!!! broken to ignore !!!!.html' % } -->
|
||||
</div>
|
||||
9
templates/_block_store_product_category.html
Normal file
9
templates/_block_store_product_category.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<!-- Store Product Category Card -->
|
||||
<div class="card" {{ model.attr_product_category_id }}="{{ cat.id_category }}">
|
||||
<h3 style="width: 100%; justify-self: left; margin-left: 3vh; display: inline-flex;">{{ cat.name }}</h4>
|
||||
<div class="container">
|
||||
{% for product in cat.products %}
|
||||
{% include '_block_store_product.html' %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
94
templates/_page_contact.html
Normal file
94
templates/_page_contact.html
Normal file
@@ -0,0 +1,94 @@
|
||||
{% extends 'layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
<!-- Include Stylesheet -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/store_home.css') }}">
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="card">
|
||||
<form id="{{ model.id_form_contact }}" class="container" action="{{ url_for('contact') }}" method="POST">
|
||||
<h2 class="label-title">Complete the form or find our details below.</h2>
|
||||
<!--
|
||||
<div class="container-input">
|
||||
<label for="sender_email">Email address</label> <!-- class="input-label" --
|
||||
<input type="email" id="sender_email" name="sender_email" placeholder="Please enter your email address so we can get back to you." style="width: 50%;"/>
|
||||
</div>
|
||||
<div class="container-input">
|
||||
<label for="sender_CC">
|
||||
<input type="checkbox" id="sender_CC" name="sender_CC" checked/>Uncheck this box if you do not wish to receive a copy of the email
|
||||
</label>
|
||||
</div>
|
||||
<div class="container-input">
|
||||
<label for="sender_name">Name</label> <!-- class="input-label" --
|
||||
<input type="text" id="sender_name" name="sender_name" placeholder="Please enter your preferred name." style="width: 30%;"/>
|
||||
</div>
|
||||
<div class="container-input">
|
||||
<label for="sender_message">Message</label> <!-- class="input-label" --
|
||||
<textarea id="sender_message" name="sender_message" rows="4" cols="80" placeholder="How can we help?"></textarea>
|
||||
</div>
|
||||
<button type="submit" id="submit_form_email">Submit request</button>
|
||||
-->
|
||||
{{ model.form.hidden_tag() }}
|
||||
<div class="container-input">
|
||||
{{ model.form.email.label }}
|
||||
{{ model.form.email(size=254) }}
|
||||
{% for error in model.form.email.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<!--
|
||||
<div class="container-input">
|
||||
{{ model.form.CC.label }}
|
||||
{{ model.form.CC(checked=True) }}
|
||||
{% for error in model.form.name.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
-->
|
||||
<div class="container-input">
|
||||
{{ model.form.name.label }}
|
||||
{{ model.form.name(size=50) }}
|
||||
{% for error in model.form.name.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="container-input">
|
||||
{{ model.form.msg.label }}
|
||||
{{ model.form.msg(rows=4, cols=80) }}
|
||||
{% for error in model.form.name.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="container-input">
|
||||
{{ model.form.submit() }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3 class="label-title">Contact Details</h3>
|
||||
<div class="container">
|
||||
<h4>edward.middletonsmith@gmail.com</h4>
|
||||
<a href="{{ model.url_LinkedIn }}" class="container-icon-label"><img class="img-icon" src="{{ url_for('static', filename='images/Logo_LinkedIn.png') }}"/><h4>LinkedIn</h4></a>
|
||||
<a href="{{ model.url_GitHub }}" class="container-icon-label"><img class="img-icon" src="{{ url_for('static', filename='images/Logo_GitHub.png') }}"/><h4>GitHub</h4></a>
|
||||
</div>
|
||||
<div class="container">
|
||||
<h4>Unit 12c, Somers Road</h4>
|
||||
<h4>Rugby, Warwickshire</h4>
|
||||
<h4>CV22 7DH</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Include JavaScript -->
|
||||
<script src="{{ url_for('static', filename='js/contact.js') }}"></script>
|
||||
|
||||
<script>
|
||||
var hashPageCurrent = "{{ model.hash_page_contact }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
hookupPageContact();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
142
templates/_page_home.html
Normal file
142
templates/_page_home.html
Normal file
@@ -0,0 +1,142 @@
|
||||
{% extends 'layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
<!-- Include Stylesheet -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/home.css') }}">
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="{{ model.FLAG_CARD }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<h1>Offering a full suite of software engineering services.</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CARD }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<h2>Web App & Database Design</h2>
|
||||
<p>Crafting seamless digital experiences with expertly designed web applications and robust database solutions.</p>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<!-- image
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/webapp_db_design.jpg')}}" alt="Web app and database design image">
|
||||
-->
|
||||
<!-- MP4 video --
|
||||
<video controls class="img-demo" name="Web app and database design">
|
||||
<source src="{{ url_for('static', filename='images/webapp_db_design.mp4')}}" type="video/mp4">
|
||||
Your browser does not support the video format mp4.
|
||||
</video>
|
||||
-->
|
||||
<!-- gif --
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/webapp_db_design.gif')}}" alt="Web app and database design gif">
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CARD }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<h2>Programming services (C++, Python, etc.)</h2>
|
||||
<p>Empowering businesses with efficient automation, web manipulation, and cutting-edge AI/ML solutions for complex tasks.</p>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<!-- image --
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/webapp_db_design.jpg')}}" alt="Web app and database design image">
|
||||
-->
|
||||
<!-- MP4 video -->
|
||||
<video controls class="img-demo" name="Programming services">
|
||||
<source src="{{ url_for('static', filename='images/programming_services.mp4')}}" type="video/mp4">
|
||||
Your browser does not support the video format mp4.
|
||||
</video>
|
||||
<!-- gif --
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/webapp_db_design.gif')}}" alt="Web app and database design gif">
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CARD }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<h2>MS Office Data Analysis & Automation</h2>
|
||||
<p>Unleashing the power of MS Office for streamlined data analysis, automation, and enhanced productivity across Excel, PowerPoint, and Outlook.</p>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<!-- image --
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/webapp_db_design.jpg')}}" alt="Web app and database design image">
|
||||
-->
|
||||
<!-- MP4 video -->
|
||||
<video controls class="img-demo" name="MS Office automation">
|
||||
<source src="{{ url_for('static', filename='images/ms_automation.mp4')}}" type="video/mp4">
|
||||
Your browser does not support the video format mp4.
|
||||
</video>
|
||||
<!-- gif --
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/webapp_db_design.gif')}}" alt="Web app and database design gif">
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CARD }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<h2>Mechatronics Design</h2>
|
||||
<p>Integrating mechanical and electronic components seamlessly for innovative mechatronic solutions, elevating your product design.</p>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<!-- image --
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/webapp_db_design.jpg')}}" alt="Web app and database design image">
|
||||
-->
|
||||
<!-- MP4 video --
|
||||
<video controls class="img-demo">
|
||||
<source src="{{ url_for('static', filename='images/programming_services.mp4')}}" type="video/mp4">
|
||||
Your browser does not support the video format mp4.
|
||||
</video>
|
||||
-->
|
||||
<!-- gif -->
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/mechatronics_design.gif')}}" alt="Mechatronics design gif">
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CARD }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<h2>CAD, DFM, DFAM</h2>
|
||||
<p>Transforming concepts into reality with precision CAD designs, Design for Manufacturing (DFM), and Design for Additive Manufacturing (DFAM) expertise.</p>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<!-- image --
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/webapp_db_design.jpg')}}" alt="Web app and database design image">
|
||||
-->
|
||||
<!-- MP4 video --
|
||||
<video controls class="img-demo">
|
||||
<source src="{{ url_for('static', filename='images/programming_services.mp4')}}" type="video/mp4">
|
||||
Your browser does not support the video format mp4.
|
||||
</video>
|
||||
-->
|
||||
<!-- gif -->
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/CAD.gif')}}" alt="Computer aided design gif">
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CARD }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<h2>Photopolymerisation, Materials Science, AM Advice</h2>
|
||||
<p>Navigating the forefront of materials science and additive manufacturing, providing expert advice on photopolymerisation and innovative AM solutions.</p>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<!-- image --
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/webapp_db_design.jpg')}}" alt="Web app and database design image">
|
||||
-->
|
||||
<!-- MP4 video --
|
||||
<video controls class="img-demo">
|
||||
<source src="{{ url_for('static', filename='images/programming_services.mp4')}}" type="video/mp4">
|
||||
Your browser does not support the video format mp4.
|
||||
</video>
|
||||
-->
|
||||
<!-- gif --
|
||||
<img class="img-demo" src="{{ url_for('static', filename='images/webapp_db_design.gif')}}" alt="Web app and database design gif">
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Include JavaScript -->
|
||||
<script src="{{ url_for('static', filename='js/home.js') }}"></script>
|
||||
|
||||
<script>
|
||||
var hashPageCurrent = "{{ model.hash_page_home }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
hookupPageHome();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
78
templates/_page_store_admin_home.html
Normal file
78
templates/_page_store_admin_home.html
Normal file
@@ -0,0 +1,78 @@
|
||||
{% extends 'layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
<!-- Include Stylesheet -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/home.css') }}">
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="row">
|
||||
<div class="leftcolumn">
|
||||
<div class="card">
|
||||
<div class="container column">
|
||||
<button id="{{ model.id_btn_admin_stripe_product_new }}">Add new Stripe products</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="container column">
|
||||
<button id="{{ model.id_btn_admin_stripe_price_new }}">Add new Stripe prices</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="container column">
|
||||
<button>Admin template 1</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rightcolumn">
|
||||
<div class="card">
|
||||
<div class="container">
|
||||
<h3 class="label-title">About Us</h3>
|
||||
<img class="img-featured" src="{{ url_for('static', filename='images/Tag_Molly1.jpg')}}" alt="Molly tag image">
|
||||
<p>We are open for business!</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="container">
|
||||
<h3 class="label-title">Promoted content</h3>
|
||||
<div class="card">
|
||||
<div class="container">
|
||||
<img class="img-featured" src="{{ url_for('static', filename='images/Braille_Translator_Demo.png')}}" alt="Braille translator demo image">
|
||||
</div>
|
||||
<div class="container">
|
||||
<p>Braille Keyboard Learning Tool</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="container">
|
||||
<img class="img-featured" src="{{ url_for('static', filename='images/Prosthetics_Demo.gif')}}" alt="Prosthetics demo gif">
|
||||
</div>
|
||||
<div class="container">
|
||||
<p>FREE Prosthetic Hands by e-NABLE</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="container">
|
||||
<h3 class="label-title">Where to find us</h3>
|
||||
<a href="{{ model.url_LinkedIn }}" class="container-icon-label"><img class="img-icon" src="{{ url_for('static', filename='images/Logo_LinkedIn.png') }}"/><h4>LinkedIn</h4></a>
|
||||
<a href="{{ model.url_GitHub }}" class="container-icon-label"><img class="img-icon" src="{{ url_for('static', filename='images/Logo_GitHub.png') }}"/><h4>GitHub</h4></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Include JavaScript -->
|
||||
<script src="{{ url_for('static', filename='js/store_admin.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/store_shared.js') }}"></script>
|
||||
|
||||
<script>
|
||||
var hashPageCurrent = "{{ model.hash_page_home }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
hookupPageStoreAdminHome();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
89
templates/_page_store_basket.html
Normal file
89
templates/_page_store_basket.html
Normal file
@@ -0,0 +1,89 @@
|
||||
{% extends 'layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
<!-- Include Stylesheets -->
|
||||
{% set block_id = 'styles' %}
|
||||
{% include '_shared_store.html' %}
|
||||
<!-- <link rel="stylesheet" href="{{ url_for('static', filename='css/store_home.css') }}"> css/store_basket.css -->
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="{{ model.flag_card }}">
|
||||
<div class="{{ model.flag_container }} {{ model.flag_column }}">
|
||||
<div id="{{ model.id_container_info_delivery }}" class="{{ model.flag_container }} {{ model.flag_row }}" style="border-bottom: 1px black;">
|
||||
<h2>Delivery Information</h2>
|
||||
<div class="{{ model.flag_container }} {{ model.flag_row }}">
|
||||
Valid delivery information not submitted
|
||||
</div>
|
||||
</div>
|
||||
<div id="{{ model.id_container_info_billing }}" class="{{ model.flag_container }} {{ model.flag_row }}" style="border-bottom: 1px black;">
|
||||
<h2>Billing Information</h2>
|
||||
<div class="{{ model.flag_container }} {{ model.flag_row }}">
|
||||
Valid billing information not submitted
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.flag_container }}">
|
||||
<div id="{{ model.id_basket_container }}">
|
||||
{% include '_block_store_basket.html' %}
|
||||
</div>
|
||||
<!-- Comes with basket block
|
||||
<div class="{{ model.flag_container }}">
|
||||
<!-- subtotal --
|
||||
<h2 id="id_basket_total">Order total: £{{ model.output_basket_total() }}</h2>
|
||||
<!-- checkout button - hidden unless valid details entered everywhere above --
|
||||
<button type="submit" class="{{ model.flag_btn_submit }}">Complete Purchase</button>
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% set form = model.form_delivery %}
|
||||
{% set overlay_id = model.id_overlay_info_delivery %}
|
||||
{% set overlay_title = 'Delivery Information' %}
|
||||
{% include '_block_overlay_address.html' %}
|
||||
|
||||
{% set form = model.form_billing %}
|
||||
{% set overlay_id = model.id_overlay_info_billing %}
|
||||
{% set overlay_title = 'Billing Information' %}
|
||||
{% include '_block_overlay_address.html' %}
|
||||
|
||||
|
||||
<!-- Include JavaScript -->
|
||||
{% set block_id = 'scripts' %}
|
||||
{% include '_shared_store.html' %}
|
||||
<script src="{{ url_for('static', filename='js/store_page_basket.js') }}"></script>
|
||||
|
||||
<script>
|
||||
var hashPageCurrent = "{{ model.hash_page_store_basket }}";
|
||||
var hashPageStoreCheckout = "{{ model.hash_page_store_checkout }}";
|
||||
var hashPageStoreCheckoutSession = "{{ model.hash_page_store_checkout_session }}";
|
||||
var hashStoreBasketInfo = "{{ model.hash_store_basket_info }}";
|
||||
var idOverlayInfoBilling = "#{{ model.id_overlay_info_billing }}";
|
||||
var idOverlayInfoDelivery = "#{{ model.id_overlay_info_delivery }}";
|
||||
var idContainerInfoBilling = "#{{ model.id_container_info_billing }}";
|
||||
var idContainerInfoDelivery = "#{{ model.id_container_info_delivery }}";
|
||||
var keyIdCheckout = "{{ model.key_id_checkout }}";
|
||||
var keyInfoBilling = "{{ model.key_info_billing }}";
|
||||
var keyInfoDelivery = "{{ model.key_info_delivery }}";
|
||||
var keyInfoIdentical = "{{ model.key_info_identical }}";
|
||||
var keyInfoType = "{{ model.key_info_type }}";
|
||||
var keyIsSubscription = "{{ model.key_is_subscription }}";
|
||||
var keyAddress1 = "{{ model.key_address1 }}";
|
||||
var keyAddress2 = "{{ model.key_address2 }}";
|
||||
var keyCity = "{{ model.key_city }}";
|
||||
var keyCounty = "{{ model.key_county }}";
|
||||
var keyNameFull = "{{ model.key_name_full }}";
|
||||
var keyPhoneNumber = "{{ model.key_phone_number }}";
|
||||
var keyPostcode = "{{ model.key_postcode }}";
|
||||
var keyRegion = "{{ model.key_region }}";
|
||||
var keyUrlCheckout = "{{ model.key_url_checkout }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
console.log('Hooking up store basket review page...');
|
||||
hookupStorePageBasket();
|
||||
// hookupStorePageBilling();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
63
templates/_page_store_checkout_success.html
Normal file
63
templates/_page_store_checkout_success.html
Normal file
@@ -0,0 +1,63 @@
|
||||
{% extends 'layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
<!-- Include Stylesheets -->
|
||||
{% set block_id = 'styles' %}
|
||||
{% include '_shared_store.html' %}
|
||||
<!-- <link rel="stylesheet" href="{{ url_for('static', filename='css/store_home.css') }}"> css/store_basket.css -->
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="{{ model.flag_card }}">
|
||||
<div class="{{ model.flag_container }} {{ model.flag_column }}">
|
||||
<div id="{{ model.id_container_info_delivery }}" class="{{ model.flag_container }} {{ model.flag_row }}" style="border-bottom: 1px black;">
|
||||
<h2>Order successful!</h2>
|
||||
<div class="{{ model.flag_container }} {{ model.flag_row }}">
|
||||
<div class="{{ model.flag_label }}"><strong>Order reference: {{ model.checkout_session.id }}</strong></div>
|
||||
<div class="{{ model.flag_label }}">You will receive an order acknowledgement by email</div>
|
||||
</div>
|
||||
{% if model.is_user_logged_in %}
|
||||
<div class="{{ model.flag_container }} {{ model.flag_row }}">
|
||||
<h3>Your order:</h3>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Include JavaScript -->
|
||||
{% set block_id = 'scripts' %}
|
||||
{% include '_shared_store.html' %}
|
||||
<script src="{{ url_for('static', filename='js/store_page_basket.js') }}"></script>
|
||||
|
||||
<script>
|
||||
var hashPageCurrent = "{{ model.hash_page_store_basket }}";
|
||||
var hashPageStoreCheckout = "{{ model.hash_page_store_checkout }}";
|
||||
var hashPageStoreCheckoutSession = "{{ model.hash_page_store_checkout_session }}";
|
||||
var hashStoreBasketInfo = "{{ model.hash_store_basket_info }}";
|
||||
var idOverlayInfoBilling = "#{{ model.id_overlay_info_billing }}";
|
||||
var idOverlayInfoDelivery = "#{{ model.id_overlay_info_delivery }}";
|
||||
var idContainerInfoBilling = "#{{ model.id_container_info_billing }}";
|
||||
var idContainerInfoDelivery = "#{{ model.id_container_info_delivery }}";
|
||||
var keyIdCheckout = "{{ model.key_id_checkout }}";
|
||||
var keyInfoBilling = "{{ model.key_info_billing }}";
|
||||
var keyInfoDelivery = "{{ model.key_info_delivery }}";
|
||||
var keyInfoIdentical = "{{ model.key_info_identical }}";
|
||||
var keyInfoType = "{{ model.key_info_type }}";
|
||||
var keyIsSubscription = "{{ model.key_is_subscription }}";
|
||||
var keyAddress1 = "{{ model.key_address1 }}";
|
||||
var keyAddress2 = "{{ model.key_address2 }}";
|
||||
var keyCity = "{{ model.key_city }}";
|
||||
var keyCounty = "{{ model.key_county }}";
|
||||
var keyNameFull = "{{ model.key_name_full }}";
|
||||
var keyPhoneNumber = "{{ model.key_phone_number }}";
|
||||
var keyPostcode = "{{ model.key_postcode }}";
|
||||
var keyRegion = "{{ model.key_region }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
console.log('Hooking up store checkout success page...');
|
||||
hookupStorePageCheckoutSuccess();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
37
templates/_page_store_home.html
Normal file
37
templates/_page_store_home.html
Normal file
@@ -0,0 +1,37 @@
|
||||
{% extends 'layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
{% set block_id = 'styles' %}
|
||||
{% include '_shared_store.html' %}
|
||||
<!-- Include Stylesheet -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/store_home.css') }}">
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="row">
|
||||
<div class="leftcolumn">
|
||||
{% for cat in model.category_list.categories %}
|
||||
{% include '_block_store_product_category.html' %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="{{ model.id_basket_container }}" class="rightcolumn">
|
||||
{% include '_block_store_basket.html' %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% set block_id = 'scripts' %}
|
||||
{% include '_shared_store.html' %}
|
||||
<!-- Include JavaScript -->
|
||||
<script src="{{ url_for('static', filename='js/store_home.js') }}"></script>
|
||||
|
||||
<script>
|
||||
var hashPageCurrent = "{{ model.hash_page_store_home }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
console.log('Hooking up home page...');
|
||||
hookupStorePageHome();
|
||||
// hookupStore(); // in _shared_store.html
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
53
templates/_page_store_product.html
Normal file
53
templates/_page_store_product.html
Normal file
@@ -0,0 +1,53 @@
|
||||
{% extends 'layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
{% set product = model.product %}
|
||||
{% set permutation = product.get_permutation_selected() %}
|
||||
{% set block_id = 'styles' %}
|
||||
{% include '_shared_store.html' %}
|
||||
<script>console.log("test 1");</script>
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/store_product.css') }}">
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="row">
|
||||
<div class="leftcolumn">
|
||||
<div class="card">
|
||||
<div class="container">
|
||||
<div class="card subcard">
|
||||
<div class="container column">
|
||||
<h2>{{ product.get_name() }}</h2>
|
||||
<div class="container-img-gallery">
|
||||
<img class="img-product" src="{{ product.get_image_from_index(0).url }}" alt="Template product image"> <!-- model.get_many_product_image_src(product.id, '', True, 'FULL') -->
|
||||
</div>
|
||||
</div>
|
||||
{% include '_block_store_product_price.html' %}
|
||||
</div>
|
||||
<div class="card subcard">
|
||||
<div>{{ permutation.description }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="{{ model.id_basket_container }}" class="rightcolumn">
|
||||
{% include '_block_store_basket.html' %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% set block_id = 'scripts' %}
|
||||
{% include '_shared_store.html' %}
|
||||
<!-- Include JavaScript -->
|
||||
<script src="{{ url_for('static', filename='js/store_product.js') }}"></script>
|
||||
|
||||
<script>
|
||||
// pass arguments from model to JS
|
||||
var hashPageCurrent = "{{ model.hash_page_store_product }}";
|
||||
|
||||
// hookup elements
|
||||
$(document).ready(function() {
|
||||
console.log('Hooking up store product page...');
|
||||
hookupStorePageProduct();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
51
templates/_shared_store.html
Normal file
51
templates/_shared_store.html
Normal file
@@ -0,0 +1,51 @@
|
||||
{% if block_id == 'block1' %}
|
||||
<div class="common-block" id="block1">
|
||||
<h1>Feckin common block boi</h1>
|
||||
</div>
|
||||
{% elif block_id == 'styles' %}
|
||||
<!-- Include Stylesheet -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/store_shared.css') }}">
|
||||
{% elif block_id == 'scripts' %}
|
||||
<!-- Include JavaScript -->
|
||||
<script src="{{ url_for('static', filename='js/store_shared.js') }}"></script>
|
||||
<!-- Variables from Model_View_Store + model-->
|
||||
<script>
|
||||
var attrFormType = "{{ model.attr_form_type }}";
|
||||
var attrIdPermutation = "{{ model.attr_id_permutation }}";
|
||||
var attrIdProduct = "{{ model.attr_id_product }}";
|
||||
var attrIdProductCategory = "{{ model.attr_id_product_category }}";
|
||||
var flagBasketItemDelete = "{{ model.flag_basket_item_delete }}";
|
||||
var flagBtnBasketAdd = "{{ model.flag_btn_basket_add }}";
|
||||
var flagBtnBuyNow = "{{ model.flag_btn_buy_now }}";
|
||||
var hashStoreBasketAdd = "{{ model.hash_store_basket_add }}";
|
||||
var hashStoreBasketDelete = "{{ model.hash_store_basket_delete }}";
|
||||
var hashStoreBasketEdit = "{{ model.hash_store_basket_edit }}";
|
||||
var hashStoreBasketLoad = "{{ model.hash_store_basket_load }}";
|
||||
var hashStoreSelectCurrency = "{{ model.hash_store_select_currency }}";
|
||||
var hashStoreSelectDeliveryRegion = "{{ model.hash_store_select_delivery_region }}";
|
||||
var hashStoreSetIsIncludedVAT = "{{ model.hash_store_set_is_included_VAT }}";
|
||||
var hashPageStoreBasket = "{{ model.hash_page_store_basket }}";
|
||||
var idBasket = "#{{ model.id_basket }}";
|
||||
var idBasketContainer = "#{{ model.id_basket_container }}";
|
||||
var idBasketTotal = "#{{ model.id_basket_total }}";
|
||||
var idBtnCheckout = "#{{ model.id_btn_checkout }}";
|
||||
var idLabelBasketEmpty = "#{{ model.id_label_basket_empty }}";
|
||||
var keyIdCurrency = "{{ model.KEY_ID_CURRENCY }}";
|
||||
var keyIdPermutation = "{{ model.key_id_permutation }}";
|
||||
var keyIdProduct = "{{ model.key_id_product }}";
|
||||
var keyIdRegionDelivery = "{{ model.KEY_ID_REGION_DELIVERY }}";
|
||||
var keyIsIncludedVAT = "{{ model.KEY_IS_INCLUDED_VAT }}";
|
||||
var typeFormBasketAdd = "{{ model.type_form_basket_add }}";
|
||||
var typeFormBasketEdit = "{{ model.type_form_basket_edit }}";
|
||||
|
||||
if (!isEmpty({{ model.basket.items }})) {
|
||||
localStorage.setItem(keyBasket, JSON.parse(JSON.stringify({'items': "{{ model.basket.items }}"})));
|
||||
}
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
hookupStore();
|
||||
});
|
||||
|
||||
</script>
|
||||
{% endif %}
|
||||
23
templates/_template_overlay.html
Normal file
23
templates/_template_overlay.html
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
<!-- Overlay -->
|
||||
<!-- Requires
|
||||
string overlay_id
|
||||
string overlay_title
|
||||
-->
|
||||
|
||||
<div id="{{ overlay_id }}" class="overlay">
|
||||
<div class="{{ model.flag_card }}">
|
||||
<div class="{{ model.flag_container }} {{ model.flag_row }}">
|
||||
<div class="{{ model.flag_container }} {{ model.flag_column }}">
|
||||
<h2>{{ overlay_title }}</h2>
|
||||
</div>
|
||||
<div class="{{ model.flag_container }} {{ model.flag_column }}">
|
||||
<button class="{{ model.flag_btn_overlay_close }}">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.flag_container }} {{ model.flag_row }}">
|
||||
{% block overlay_body %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
66
templates/layout - stripe.html
Normal file
66
templates/layout - stripe.html
Normal file
@@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8"/>
|
||||
<title>{% block title %}{% endblock %} - PARTS</title>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="{{ url_for('static', filename='js/shared.js') }}"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.js"></script> <!-- Include jQuery from a CDN -->
|
||||
|
||||
<!-- Stylesheets -->
|
||||
<link href="{{ url_for('static', filename='css/shared.css') }}" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header card">
|
||||
<div class="content">
|
||||
<img class="header-logo" src="{{ url_for('static', filename='images/Logo.png') }}" alt="PARTS logo">
|
||||
</div>
|
||||
<div class="content">
|
||||
<h1>Precision And Research Technology Systems Limited</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="topnav">
|
||||
<a href="{{ url_for('home') }}">Home</a> <!-- -->
|
||||
<a href="{{ url_for('store_home') }}">Store</a>
|
||||
<!--
|
||||
<a href="{{ url_for('get_publishable_key') }}">Get Key</a>
|
||||
<a href="{{ url_for('get_checkout_session') }}">Get Session</a>
|
||||
|
||||
<!-- POST request form --
|
||||
<form id="formCreateCheckoutSession" action="{{ url_for('create_checkout_session') }}" method="POST" style="display: none; visibility: hidden;">
|
||||
<!-- your form fields go here --
|
||||
<input type="submit" value="Submit">
|
||||
</form>
|
||||
<a href="#" onclick="document.getElementById('formCreateCheckoutSession').submit();">About - Post Session</a>
|
||||
-->
|
||||
<a href="{{ url_for('contact') }}" style="float:right">Contact</a>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<h4>Copyright (C) Precision And Research Technology Systems Limited. All rights reserved.</h4>
|
||||
<h5>Company number 13587499</h5>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<!-- Scripts --
|
||||
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
|
||||
-->
|
||||
<!-- Include jQuery from a CDN --
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
|
||||
-->
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
// alert("naughty boy");
|
||||
});
|
||||
</script>
|
||||
206
templates/layout.html
Normal file
206
templates/layout.html
Normal file
@@ -0,0 +1,206 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8"/>
|
||||
<title>{% block title %}{% endblock %} - PARTS</title>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="{{ url_for('static', filename='js/shared.js') }}"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.js"></script> <!-- Include jQuery from a CDN -->
|
||||
|
||||
<script>
|
||||
var flagBtnOverlayClose = "{{ model.FLAG_BTN_OVERLAY_CLOSE }}";
|
||||
var flagBtnSubmit = "{{ model.FLAG_BTN_SUBMIT }}";
|
||||
var flagCard = "{{ model.FLAG_CARD }}";
|
||||
var flagCollapsible = "{{ model.FLAG_COLLAPSIBLE }}";
|
||||
var flagColumn = "{{ model.FLAG_COLUMN }}";
|
||||
var flagContainer = "{{ model.FLAG_CONTAINER }}";
|
||||
var flagContainerInput = "{{ model.FLAG_CONTAINER_INPUT }}";
|
||||
var flagRow = "{{ model.FLAG_ROW }}";
|
||||
var flagScrollable = "{{ model.FLAG_SCROLLABLE }}";
|
||||
var flagBtnOverlayClose = "{{ model.FLAG_BTN_OVERLAY_CLOSE }}";
|
||||
var flagInitialised = "{{ model.FLAG_INITIALISED }}";
|
||||
var flagSubmitted = "{{ model.FLAG_SUBMITTED }}";
|
||||
var hashPageContact = "{{ model.HASH_PAGE_CONTACT }}";
|
||||
var hashPageErrorNoPermission = "{{ model.HASH_PAGE_ERROR_NO_PERMISSION }}";
|
||||
var hashPageHome = "{{ model.HASH_PAGE_HOME }}";
|
||||
var hashPageStoreHome = "{{ model.HASH_PAGE_STORE_HOME }}";
|
||||
var hashPageStoreProduct = "{{ model.HASH_PAGE_STORE_PRODUCT }}";
|
||||
var idFormCurrency = "#{{ model.ID_FORM_CURRENCY }}";
|
||||
var idFormDeliveryRegion = "#{{ model.ID_FORM_DELIVERY_REGION }}";
|
||||
var idFormIsIncludedVAT = "#{{ model.ID_FORM_IS_INCLUDED_VAT }}";
|
||||
var idNavContact = "#{{ model.ID_NAV_CONTACT }}";
|
||||
var idNavHome = "#{{ model.ID_NAV_HOME }}";
|
||||
var idNavStoreHome = "#{{ model.ID_NAV_STORE_HOME }}";
|
||||
var idNavStoreProduct = "#{{ model.ID_NAV_STORE_PRODUCT }}";
|
||||
var idPageBody = "#{{ model.ID_PAGE_BODY }}";
|
||||
var isUserLoggedIn = "{{ model.output_bool(model.IS_USER_LOGGED_IN) }}";
|
||||
var keyBasket = "{{ model.KEY_BASKET }}";
|
||||
var keyForm = "{{ model.KEY_FORM }}";
|
||||
var keyPrice = "{{ model.KEY_PRICE }}";
|
||||
var keyQuantity = "{{ model.KEY_QUANTITY }}";
|
||||
var keyShared = "shared";
|
||||
var _pathHost = "{{ model.URL_HOST }}";
|
||||
</script>
|
||||
|
||||
|
||||
<!-- Stylesheets -->
|
||||
<link href="{{ url_for('static', filename='css/shared.css') }}" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div class="header card">
|
||||
<div class="container">
|
||||
<img class="header-logo" src="{{ url_for('static', filename='images/Logo.png') }}" alt="PARTS logo">
|
||||
</div>
|
||||
<div class="container">
|
||||
<h1>Precision And Research Technology Systems Limited</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="topnav container row">
|
||||
<div class="container column">
|
||||
<a id="{{ model.ID_NAV_HOME }}">Home</a> <!-- href="{{ url_for('home') }}" -->
|
||||
</div>
|
||||
<div class="container column">
|
||||
<a id="{{ model.ID_NAV_SERVICES }}">Services</a>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<a id="{{ model.ID_NAV_TECHNOLOGIES }}">Technologies</a>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<a id="{{ model.ID_NAV_STORE_HOME }}">Store</a>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<a id="{{ model.ID_NAV_CONTACT }}">Contact</a> <!-- href="{{ url_for('contact') }}" -->
|
||||
</div>
|
||||
{% if model.is_page_store %}
|
||||
<div class="container column">
|
||||
<!-- <a href="{ url_ for('create_price_dummy') }">Create template price</a> -->
|
||||
<form id="{{ model.ID_FORM_IS_INCLUDED_VAT }}" class="container" action="{{ url_for('set_is_included_VAT') }}" method="POST">
|
||||
{{ model.form_is_included_VAT.hidden_tag() }}
|
||||
<div class="container-input">
|
||||
{{ model.form_is_included_VAT.is_included.label }}
|
||||
{{ model.form_is_included_VAT.is_included() }}
|
||||
{% for error in model.form_is_included_VAT.is_included.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<form id="{{ model.ID_FORM_DELIVERY_REGION }}" class="container" action="{{ url_for('set_delivery_region') }}" method="POST">
|
||||
{{ model.form_delivery_region.hidden_tag() }}
|
||||
<div class="container-input">
|
||||
{{ model.form_delivery_region.id_region_delivery.label }}
|
||||
{{ model.form_delivery_region.id_region_delivery() }}
|
||||
{% for error in model.form_delivery_region.id_region_delivery.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<form id="{{ model.ID_FORM_CURRENCY }}" class="container" action="{{ url_for('set_currency') }}" method="POST">
|
||||
{{ model.form_currency.hidden_tag() }}
|
||||
<div class="container-input">
|
||||
{{ model.form_currency.id_currency.label }}
|
||||
{{ model.form_currency.id_currency() }}
|
||||
{% for error in model.form_currency.id_currency.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<a href="{{ url_for('logout') if model.is_user_logged_in else url_for('login') }}" style="float:right">{{ 'Logout' if model.is_user_logged_in else 'Login' }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!--
|
||||
<div id="{{ model.id_modal_services }}" class="topnav-modal container column">
|
||||
<div class="container row">
|
||||
<h2>Web App & Database Design</h2>
|
||||
</div>
|
||||
<div class="container row">
|
||||
<h2>Programming services (C++, Python, etc.)</h2>
|
||||
</div>
|
||||
<div class="container row">
|
||||
<h2>MS Office Data Analysis & Automation</h2>
|
||||
</div>
|
||||
<div class="container row">
|
||||
<h2>Mechatronics Design</h2>
|
||||
</div>
|
||||
<div class="container row">
|
||||
<h2>CAD, DFM, DFAM</h2>
|
||||
</div>
|
||||
<div class="container row">
|
||||
<h2>Photopolymerisation, Materials Science, AM Advice</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="{{ model.id_modal_technologies }}" class="topnav-modal container column">
|
||||
<div class="container row">
|
||||
<div class="container row">
|
||||
<h2>Web development</h2>
|
||||
</div>
|
||||
<div class="container row">
|
||||
<div class="container row">
|
||||
<h3>JavaScript Frameworks</h3>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<h4>Angular</h4>
|
||||
<h4>React</h4>
|
||||
<h4>Vue</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container row">
|
||||
<div class="container row">
|
||||
<h3>Markup languages</h3>
|
||||
</div>
|
||||
<div class="container column">
|
||||
<h4>HTML</h4>
|
||||
<h4>CSS</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container row">
|
||||
<div class="container row">
|
||||
<h2>Desktop development</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<!-- Page body -->
|
||||
<div id="{{ model.ID_PAGE_BODY }}" class="container" style="display: block;">
|
||||
{% block page_body %}{% endblock %}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="footer">
|
||||
<h4>Copyright (C) Precision And Research Technology Systems Limited. All rights reserved.</h4>
|
||||
<h5>Company number 13587499</h5>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<!-- Scripts --
|
||||
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
|
||||
-->
|
||||
<!-- Include jQuery from a CDN --
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
|
||||
-->
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
// alert("naughty boy");
|
||||
hookupShared();
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user