1. Refactoring form objects and database objects to use inheritance and abstract base class for consistency and reduced redundancy.\n2. Contact us page button links updated to resolve error of missing link causing page refresh instead of expected functionality.
This commit is contained in:
54
templates/pages/core/_admin_home.html
Normal file
54
templates/pages/core/_admin_home.html
Normal file
@@ -0,0 +1,54 @@
|
||||
{% extends 'layouts/layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
<!-- Include Stylesheet -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/sections/core.css') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/pages/core/admin_home.css') }}">
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="{{ model.FLAG_CARD }} {{ model.FLAG_ROW }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<h2>Store</h2>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_STORE_PRODUCT_CATEGORIES }}">Product Categories</button>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_STORE_PRODUCTS }}">Products</button>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_STORE_PRODUCT_PERMUTATIONS }}">Product Permutations</button>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_STORE_PRODUCT_PRICES }}">Product Prices</button>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_STORE_STOCK_ITEMS }}">Product Stock</button>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_STORE_PRODUCT_VARIATIONS }}">Product Variations</button>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_ADMIN_STORE_STRIPE_PRODUCTS }}">Add new Stripe products</button>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_ADMIN_STORE_STRIPE_PRICES }}">Add new Stripe prices</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Include JavaScript -->
|
||||
<script type="module" src="{{ url_for('static', filename='js/sections/core.js') }}"></script>
|
||||
<script type="module" src="{{ url_for('static', filename='js/pages/core/admin_home.js') }}"></script>
|
||||
<!-- <script type="module" src="{{ url_for('static', filename='js/pages/store/base.js') }}"></script> -->
|
||||
|
||||
<!--
|
||||
<script>
|
||||
var hashPageCurrent = "{{ model.HASH_PAGE_STORE_ADMIN_HOME }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
hookupPageAdminHome();
|
||||
});
|
||||
</script>
|
||||
-->
|
||||
{% endblock %}
|
||||
105
templates/pages/core/_contact.html
Normal file
105
templates/pages/core/_contact.html
Normal file
@@ -0,0 +1,105 @@
|
||||
{% extends 'layouts/layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
<!-- Include Stylesheet -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/sections/core.css') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/pages/contact.css') }}">
|
||||
|
||||
<script src="https://www.google.com/recaptcha/enterprise.js?render=6Lf8Q8cpAAAAAFAawGu4-ma60bvbEixNVTVvRzKe"></script> <!-- reCaptcha Integration -->
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="card">
|
||||
<form id="{{ model.ID_FORM_CONTACT }}" class="container" action="{{ url_for('routes_core.contact') }}" method="POST">
|
||||
<h2 class="label-title">Complete the form or find our details below.</h2>
|
||||
<!--
|
||||
<div class="{{ model.FLAG_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="{{ model.FLAG_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="{{ model.FLAG_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="{{ model.FLAG_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_contact.hidden_tag() }}
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }}">
|
||||
{{ model.form_contact.email.label }}
|
||||
{{ model.form_contact.email(size=254) }}
|
||||
{% for error in model.form_contact.email.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<!--
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }}">
|
||||
{{ model.form_contact.CC.label }}
|
||||
{{ model.form_contact.CC(checked=True) }}
|
||||
{% for error in model.form_contact.name.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
-->
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }}">
|
||||
{{ model.form_contact.name.label }}
|
||||
{{ model.form_contact.name(size=50) }}
|
||||
{% for error in model.form_contact.name.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }}">
|
||||
{{ model.form_contact.message.label }}
|
||||
{{ model.form_contact.message(rows=4, cols=80) }}
|
||||
{% for error in model.form_contact.name.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }}">
|
||||
{{ model.form_contact.recaptcha() }}
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }}">
|
||||
{{ model.form_contact.submit() }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="{{ model.FLAG_CARD }} {{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<h3 class="label-title" style="padding-bottom: 0;">Where to find us</h3>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<h4>{{ model.app.MAIL_CONTACT_PUBLIC }}</h4>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}" style="padding-top: 0; width: fit-content;">
|
||||
<a href="{{ model.URL_LINKEDIN }}" class="container-icon-label"><img class="img-icon" src="{{ url_for('static', filename='images/Logo_LinkedIn.png') }}" alt="LinkedIn" aria-label="LinkedIn"></img><!--<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') }}" alt="GitHub" aria-label="GitHub"></img><!--<h4>GitHub</h4>--></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Include JavaScript -->
|
||||
<script type="module" src="{{ url_for('static', filename='js/sections/core.js') }}"></script>
|
||||
<script type="module" src="{{ url_for('static', filename='js/pages/contact.js') }}"></script>
|
||||
|
||||
<script>
|
||||
var idEmail = "#{{ model.ID_EMAIL }}";
|
||||
var idMessage = "#{{ model.ID_MESSAGE }}";
|
||||
var idName = "#{{ model.ID_NAME }}";
|
||||
|
||||
/*
|
||||
$(document).ready(function() {
|
||||
stylePageContact();
|
||||
hookupPageContact();
|
||||
});
|
||||
*/
|
||||
</script>
|
||||
{% endblock %}
|
||||
30
templates/pages/core/_home.html
Normal file
30
templates/pages/core/_home.html
Normal file
@@ -0,0 +1,30 @@
|
||||
<!-- v2a -->
|
||||
|
||||
{% extends 'layouts/layout.html' %}
|
||||
|
||||
{% block page_body %}
|
||||
<!-- Include Stylesheet -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/sections/core.css') }}" />
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/pages/home.css') }}" />
|
||||
|
||||
<!-- HTML content -->
|
||||
<div>
|
||||
<h2 style="font-size: 24px; color: white; font-weight: normal;">We make websites, web apps, and desktop software</h2>
|
||||
{% set block_id = 'button_get_in_touch' %}
|
||||
{% include 'layouts/_shared.html' %}
|
||||
</div>
|
||||
|
||||
<!-- Include JavaScript -->
|
||||
<script type="module" src="{{ url_for('static', filename='js/sections/core.js') }}"></script>
|
||||
<script type="module" src="{{ url_for('static', filename='js/pages/home.js') }}"></script>
|
||||
|
||||
<!--
|
||||
<script>
|
||||
var hashPageCurrent = "{{ model.HASH_PAGE_HOME }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
hookupPageHome();
|
||||
});
|
||||
</script>
|
||||
-->
|
||||
{% endblock %}
|
||||
117
templates/pages/core/_services.html
Normal file
117
templates/pages/core/_services.html
Normal file
@@ -0,0 +1,117 @@
|
||||
<!-- v2a -->
|
||||
|
||||
{% extends 'layouts/layout.html' %}
|
||||
|
||||
{% block title %}{{ model.title }}{% endblock %}
|
||||
|
||||
{% block page_body %}
|
||||
<!-- Include Stylesheet -->
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/sections/core.css') }}" />
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/pages/services.css') }}" />
|
||||
|
||||
<!-- HTML content -->
|
||||
<div class="{{ model.FLAG_CARD }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<h1>Services</h1>
|
||||
<h2>Website, Web App, & Desktop Software Development</h2>
|
||||
<ul>
|
||||
<li>Custom software tailored to your unique business needs</li>
|
||||
<li>Leverage the latest technologies for seamless, high-performance solutions</li>
|
||||
<li>Intuitive user interface design to delight your users and boost productivity</li>
|
||||
</ul>
|
||||
<h2>Cloud Migration & Architecture Design</h2>
|
||||
<ul>
|
||||
<li>Expertise to guide your cloud journey and optimize your architecture</li>
|
||||
<li>Ensure scalability, security and cost-efficiency in the cloud</li>
|
||||
<li>Unlock the power of cloud-native services, like AI, to accelerate innovation</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="{{ model.FLAG_CARD }}">
|
||||
<h1>Technologies</h1>
|
||||
<p>We are most experienced with these technologies, in case you have any requirements.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Database</th>
|
||||
<th>Server / Application</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="https://www.mysql.com/" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/MySQL.png')}}" alt="MySQL"></img></a></td>
|
||||
<td><a href="https://www.python.org/" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/python.png')}}" alt="python"></img></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://www.microsoft.com/en-us/sql-server/sql-server-2019" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/MS_SQL_Server.svg')}}" alt="Microsoft SQL Server"></img></a></td>
|
||||
<td><a href="https://dotnet.microsoft.com/en-us/languages/csharp" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/Csharp_NET.png')}}" alt="C sharp dot NET"></img></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://firebase.google.com/" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/Firebase.png')}}" alt="Firebase"></img></a></td>
|
||||
<td><a href="https://nodejs.org/en" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/Node_js.png')}}" alt="Node dot js"></img></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td><a href="https://www.java.com/en/" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/Java.png')}}" alt="Java"></img></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Web</th>
|
||||
<th>Frameworks</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="https://www.w3.org/html/" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/HTML5.png')}}" alt="HTML5"></img></a></td>
|
||||
<td><a href="https://react.dev/" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/React.png')}}" alt="React"></img></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://www.w3.org/Style/CSS/" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/CSS3.jpg')}}" alt="CSS3"></img></a></td>
|
||||
<td><a href="https://flask.palletsprojects.com/en/3.0.x/" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/Flask.png')}}" alt="Flask"></img></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/JavaScript.png')}}" alt="JavaScript"></img></a></td>
|
||||
<td><a href="https://dotnet.microsoft.com/en-us/apps/aspnet/mvc" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/MVC.png')}}" alt="Model View Controller"></img></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td><a href="https://ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" target="_blank"><img class="img-icon" src="{{ url_for('static', filename='images/REST.png')}}" alt="REST"></img></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="{{ model.FLAG_CARD }}">
|
||||
<h1>FAQs</h1>
|
||||
<h2>Websites, Web apps, and Software - what's the difference?</h2>
|
||||
<ul>
|
||||
<li>Not much! A web app is a type of website and they are both types of software that are accessed on the internet using web browser software.</li>
|
||||
<li>Web apps have more complex functionality than simple text and image pages.</li>
|
||||
<li>For example, this is a website. Google Maps is a web app. Notepad is a piece of desktop sofware.</li>
|
||||
</ul>
|
||||
<h2>Why choose us?</h2>
|
||||
<ul>
|
||||
<li>Work directly with the person responsible for delivering your project</li>
|
||||
<li>Faster decision-making process without bureaucratic hurdles</li>
|
||||
<li>Transparent pricing structure with no hidden fees</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Include JavaScript -->
|
||||
<script type="module" src="{{ url_for('static', filename='js/sections/core.js') }}"></script>
|
||||
<script type="module" src="{{ url_for('static', filename='js/pages/services.js') }}"></script>
|
||||
|
||||
<!--
|
||||
<script>
|
||||
var hashPageCurrent = "{{ model.HASH_PAGE_SERVICES }}";
|
||||
|
||||
$(document).ready(function() {
|
||||
hookupPageServices();
|
||||
});
|
||||
</script>
|
||||
-->
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user