customer notes

This commit is contained in:
Norm Rasmussen
2022-10-03 18:59:15 -04:00
parent 8792a051ba
commit ee4d362dc0
47 changed files with 5320 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,76 @@
<div class="np-dashboard-resources" style="padding-bottom: 1rem;">
<div class="np-card">
<div class="np-card-container">
<div class="np-card-content-training-event">
<h3 class="np-card-content-title recent-achievements">
Recent Achievements
</h3>
<div style=" float: left;">
<button class="view-achievements-button" onclick="#" type="button">Total Points:{{ current_person.properties.learner_points }}</button>
</div>
</div>
<br>
<br>
<div class="achivements-carousel">
{% for course in courses.enrolled %}
{% if course.progress == 100 %}
<div>
<br>
<img src="{{course.properties.course_badge}}">
<div class="np-card-content-title recent-achievements col-12" style="text-align: center;">
<p>{{ course.name }}</p>
</div>
</div>
{% endif %}
{% endfor %}
</div>
</div>
</div>
</div>
<style>
.view-achievements-button {
background-color: #DC3713;
border: none;
color: white;
padding: 5px 8px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 12px;
cursor: pointer;
border-radius: 30px;
margin-top:12px;
}
.recent-achievements {
font-size: 16px;
}
.achievement-icon {
text-align: center;
color: #bec2c6;;
}
.horizontal-separator {
border-bottom: 1px solid grey;
}
@media screen and (max-width: 1200px) {
.recent-achievements {
font-size: 12px;
}
}
@media screen and (max-width: 800px) {
.view-achievements-button {
font-size: 9px;
}
}
</style>

View File

@ -0,0 +1,44 @@
<div id="{{ course.progress }}" class="{{ class }}">
<div class="np-card course-card">
<div class="np-card-container">
{% if course.ribbon %}
<div class="np-card-ribbon">
{{ course.ribbon }}
</div>
{% endif %}
<img class="np-card-image" alt="{{ course.name }}" src="{{ course.image_url }}">
<div class="np-card-content np-card-content-vertical np-card-padding">
<h3 class="np-card-content-title course-card-title" style="min-height: 48px;">
{{ course.name }}
</h3>
<div class="np-card-content-subtitle">
{{ course.instructor_names }}
</div>
<div class="np-card-content-footer">
<div style="display: flex; flex-direction: column-reverse;" class="np-card-content-progress np-button-color">
<span>{% t shared.progress, count: course.progress %}</span>
<span style="color: gray; text-transform: none;">{{course.properties.course_time}} Mins</span>
</div>
{% capture course_path %}{% route course, id: course.id %}{% endcapture %}
{% if course.has_to_restart? %}
{% include "course_version_outdated_popup", path: course_path %}
{% endif %}
<a class="np-button np-button-wide" href="{{ course_path }}">
{% t shared.view %}
</a>
{% if current_person.signed_in? %}
{% if course.completed? %}
<span class="progress-info" style="display: none;">Completed</span>
{% else %}
{% if course.progress == 0%}
<span class="progress-info" style="display: none;">Not started</span>
{% else %}
<span class="progress-info" style="display: none;">Started</span>
{% endif %}
{% endif %}
{% endif %}
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,88 @@
{% assign total_progress = 0 %}
{% assign completed_progress = 0 %}
{% for item in learning_path.items %}
{% if item.course? %}
{% assign total_progress = total_progress | plus: 100 %}
{% assign completed_progress = completed_progress | plus: item.progress %}
{% endif %}
{% endfor %}
{% assign total_progress = total_progress | times: 0.01 %}
{% assign calculated_progress = completed_progress | divided_by: total_progress %}
<div class="np-card-container">
<div class="np-learning-path">
<img
alt="{{ learning_path.name }}"
class="np-card-image np-learning-path-image"
src="{{ learning_path.image_url }}"
/>
<div class="np-card-text-wrapper">
<div class="np-hidden-desktop np-card-header">
<i class="np-card-header-icon far fa-road"></i>
<div class="np-card-header-type">{% t shared.learning_path.title %}</div>
<div class="np-hidden-desktop np-card-header-items-count">
{{ learning_path.items.count }} {% t .items %}
</div>
</div>
<div class="np-hidden-mobile np-card-header">
<div class="np-card-header-type">{% t shared.learning_path.title %}</div>
<i class="np-card-header-icon far fa-road"></i>
</div>
<div class="np-card-content np-card-padding np-card-content-vertical">
<div>
<h3 class="np-card-content-title">
{{ learning_path.name }}
</h3>
<div class="np-card-content-subtitle">
{{ learning_path.instructor_names }}
</div>
<div class="np-hidden-mobile np-card-content-description">
{{ learning_path.description }}
</div>
</div>
<div>
<div class="np-hidden-mobile np-card-content-progress
np-button-color">
{% comment %}{% t shared.progress, count: learning_path.progress %}{% endcomment %}
{% if calculated_progress < 1 %}
Not Started
{% else %}
{{calculated_progress | ceil }}% Completed
{% endif %}
</div>
<div class="np-hidden-mobile np-card-progress-bar-container">
<div style="width: {{ calculated_progress }}%" class="np-button-background-color np-card-progress-bar">
</div>
</div>
<div class="np-card-content-footer">
<div class="np-hidden-desktop np-card-content-progress
np-button-color">
{% t shared.progress, count: learning_path.progress %}
</div>
<a class="np-button" href="{% route learning_path, id: learning_path.id %}">
{% t shared.view %}
</a>
<span class="np-hidden-mobile np-learning-path-items">
<i class="np-button-color np-learning-path-items-icon far fa-graduation-cap"></i>
<span class="np-learning-path-items-count">
{{ learning_path.items.count }} {% t .items %}
</span>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="np-card-stack">
<div class="np-card-stack-level-1"></div>
<div class="np-card-stack-level-2"></div>
</div>

View File

@ -0,0 +1,25 @@
<script type="text/javascript">
$(document).ready(function() {
if ($('.achivements-carousel').length > 0) {
$('.achivements-carousel').slick({
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
infinite: true,
autoplay: false,
autoplaySpeed: 5000,
cssEase: 'linear',
prevArrow: '<svg viewBox="0 0 20 20" class="_1ycOA _left"><path d="M12 16a.997.997 0 0 1-.707-.293l-5-5a.999.999 0 0 1 0-1.414l5-5a.999.999 0 1 1 1.414 1.414L8.414 10l4.293 4.293A.999.999 0 0 1 12 16" fill-rule="evenodd"></path></svg>',
nextArrow: '<svg viewBox="0 0 20 20" class="_1ycOA _right"><path d="M8 16a.999.999 0 0 1-.707-1.707L11.586 10 7.293 5.707a.999.999 0 1 1 1.414-1.414l5 5a.999.999 0 0 1 0 1.414l-5 5A.997.997 0 0 1 8 16" fill-rule="evenodd"></path></svg>',
responsive: [{
breakpoint: 991,
settings: {
dots: false
}
}]
})
}
});
</script>

View File

@ -0,0 +1,60 @@
<div class="np-dashboard-resources">
{% if courses.enrolled.any? %}
<div class="np-card">
<div class="np-card-container">
<div class="np-card-content-training-event">
{% assign countComplete = 0 %}
{% assign countInProgress = 0 %}
{% assign countNotStarted = 0 %}
{% assign countTotal = 0 | times: 1.0 %}
{% for course in courses.enrolled %}
{% assign countTotal = countTotal | plus: 1 %}
{% if course.progress == 100 %}
{% assign countComplete = countComplete | plus: 1 %}
{% endif %}
{% if course.progress > 0 and course.progress < 100 %}
{% assign countInProgress = countInProgress | plus: 1 %}
{% endif %}
{% if course.progress == 0 %}
{% assign countNotStarted = countNotStarted | plus: 1 %}
{% endif %}
{% endfor %}
<ul class="circle-list">
<li>
{% include "progress_circle", name:'Completed' , count: countComplete , total: countTotal %}
</li>
<li>
{% include "progress_circle", name:'In Progress' , count: countInProgress , total: countTotal %}
</li>
<li>
{% include "progress_circle", name:'Not Started' , count: countNotStarted , total: countTotal %}
</li>
</ul>
</div>
{% else %}
{% capture message %}
{% t shared.zero_state.courses.index,
key: current_school.course_vocabulary
%}
{% endcapture %}
{% include "courses_zero_state", message: message %}
{% endif %}
</div>
</div>
</div>
<style>
.circle-list {
list-style-type: none !important;
}
.align-center {
align-items: center !important;
}
.progress-ring__circle {
transition: stroke-dashoffset 0.35s;
}
.progress-ring__circle {
transition: stroke-dashoffset 0.35s;
transform: rotate(-90deg);
transform-origin: center;
}
</style>

View File

@ -0,0 +1,17 @@
{% if course.enrolled? %}
<a
href="{% route activity_viewer,
id: activity.id,
course_id: params.course_id,
learning_path_id: params.learning_path_id
%}" class="{{ class }}"
>
{{ activity.title }}
</a>
{% else %}
<div
class="{{ class }}"
>
{{ activity.title }}
</div>
{% endif %}

View File

@ -0,0 +1,11 @@
<div class="np-hidden-mobile">
<div class="row">
<div class="carousel">
{% for course in courses.enrolled %}
<div>
{% include "cards_course" with course, class: "" %}
</div>
{% endfor %}
</div>
</div>
</div>

View File

@ -0,0 +1,11 @@
<div class="np-hidden-mobile">
<div class="row">
<div class="carousel">
{% for course in courses.in_catalog %}
<div>
{% include "cards_course" with course, class: "" %}
</div>
{% endfor %}
</div>
</div>
</div>

View File

@ -0,0 +1,26 @@
<h3 class="np-card-heading">
{% t .header %}
</h3>
<div class="np-flex instructors-container">
{% for instructor in course.instructors %}
<div class="np-content-instructors-content-item">
<img src="{{ instructor.avatar_url }}" class="np-content-instructors-content-image" alt="{{ instructor.name }}" />
<div class="np-content-instructors-content-description">
<div class="np-content-instructors-content-name">
{{ instructor.name }}
</div>
<div class="np-content-instructors-content-info np-text-light">
{{ instructor.title }}
</div>
</div>
</div>
{% endfor %}
</div>
<style>
@media (min-width: 768px) and (max-width: 1500px) {
.instructors-container {
flex-direction: column;
}
}
</style>

View File

@ -0,0 +1,87 @@
<div class="np-card-container np-card-padding-large in-course-sections in-course-condenser">
{% include "course_header" %}
<div class="np-top-cta">
{% include "course_progress_and_cta" %}
</div>
</div>
{% if course.progress == 0 %}
<div class="np-card-container np-card-padding np-card-spacing in-course-sections in-course-condenser">
{% include "course_description" %}
</div>
<div class="np-card-container np-card-padding np-card-spacing in-course-sections in-course-condenser">
{% include "course_outline" %}
</div>
{% else %}
<div class="np-card-container np-card-padding np-card-spacing in-course-sections in-course-condenser">
{% include "course_outline" %}
</div>
<div class="np-card-container np-card-padding np-card-spacing in-course-sections in-course-condenser">
{% include "course_description" %}
</div>
{% endif %}
{% if course.categories.any? %}
<div class="np-card-container np-card-padding np-card-spacing in-course-sections in-course-condenser">
{% include "course_categories" %}
</div>
{% endif %}
{% if course.instructors.any? %}
<div class="np-card-container np-card-padding np-card-spacing in-course-sections in-course-condenser">
{% include "course_instructors" %}
</div>
{% endif %}
{% if course.events.any? %}
<div class="np-card-container np-card-padding np-card-spacing in-course-sections in-course-condenser">
{% include "course_events" %}
</div>
{% endif %}
<div class="course-start-button in-course-start-button">
{% if course.learner_can_retake? %}
<form action="{% route course_retake, id: course.id %}" method="POST">
{% form_authenticity_token %}
<button type="submit" class="np-top-button np-button-font-color np-button np-button-big">
{% t .retake, key: current_school.course_vocabulary %}
</button>
</form>
{% else %}
<a
class="np-top-button np-button-font-color np-button np-button-big"
{% if course.enrolled? %}
href="{% route course_viewer, course_id: course.id, learning_path_id: params.learning_path_id %}"
{% else %}
href="{% route course_enrollment, code: course.enrollment_code %}"
{% endif %}
>
{% if course.enrolled? == false %}
{% t shared.enroll %}
{% elsif course.started? == false %}
{% t shared.course.start, key: current_school.course_vocabulary %}
{% elsif course.completed? %}
{% t shared.course.view, key: current_school.course_vocabulary %}
{% else %}
{% t shared.continue %}
{% endif %}
</a>
{% endif %}
</div>
<style>
.in-course-sections{
box-shadow: none;
}
.in-course-start-button{
width: 50%;
padding-top: 1.25rem;
margin: 0 auto;
float: none;
}
.in-course-condenser{
padding-bottom: 0;
}
</style>

View File

@ -0,0 +1,47 @@
<div class="np-top-cta-progress-content">
{%comment%}<div class="np-top-cta-progress-title np-text-title">
{% t .header %}
</div>{%endcomment%}
<div class="np-top-cta-progress-text
{% if course.completed? %} np-color-success {% else %} np-button-color {% endif %}
">
{% t shared.progress, count: course.progress %}
</div>
<div class="np-progress-bar-container">
<div
style="width: {{ course.progress }}%"
class="np-button-background-color np-card-progress-bar">
</div>
</div>
</div>
<div class="course-start-button">
{% if course.learner_can_retake? %}
<form action="{% route course_retake, id: course.id %}" method="POST">
{% form_authenticity_token %}
<button type="submit" class="np-top-button np-button-font-color np-button np-button-big">
{% t .retake, key: current_school.course_vocabulary %}
</button>
</form>
{% else %}
<a
class="np-top-button np-button-font-color np-button np-button-big"
{% if course.enrolled? %}
href="{% route course_viewer, course_id: course.id, learning_path_id: params.learning_path_id %}"
{% else %}
href="{% route course_enrollment, code: course.enrollment_code %}"
{% endif %}
>
{% if course.enrolled? == false %}
{% t shared.enroll %}
{% elsif course.started? == false %}
{% t shared.course.start, key: current_school.course_vocabulary %}
{% elsif course.completed? %}
{% t shared.course.view, key: current_school.course_vocabulary %}
{% else %}
{% t shared.continue %}
{% endif %}
</a>
{% endif %}
</div>

View File

@ -0,0 +1,28 @@
{% assign view_more_counter = 0 %}
{% if courses.in_catalog.any? %}
<div class="np-catalog-courses row row-with-thumbnails">
{% for course in courses.in_catalog %}
{% if view_more_counter < 3%}
{% assign view_more_counter = view_more_counter | plus: 1%}
<div class="col-xs-12 col-md-6 col-lg-4 np-stretch-content">
{% include "cards_course" with course, class: "" %}
</div>
{% else %}
<div class="col-xs-12 col-md-6 col-lg-4 np-stretch-content view-more-hidden">
{% include "cards_course" with course, class: "" %}
</div>
{% endif%}
{% endfor %}
{% if view_more_counter >= 3%}
<button class="np-top-button np-button-font-color np-button np-button-big view-more-button" onclick="viewMore()">View More</button>
{% endif %}
</div>
{% else %}
{% capture message %}
{% t shared.zero_state.courses.catalog,
key: current_school.course_vocabulary
%}
{% endcapture %}
{% include "courses_zero_state", message: message %}
{% endif %}

View File

@ -0,0 +1,14 @@
{% if courses.enrolled.any? %}
<div id="dash-sort" class="row row-with-thumbnails">
{% for course in courses.enrolled %}
{% include "cards_course" with course, class: "col-xs-12 col-sm-6 np-stretch-content" %}
{% endfor %}
</div>
{% else %}
{% capture message %}
{% t shared.zero_state.courses.index,
key: current_school.course_vocabulary
%}
{% endcapture %}
{% include "courses_zero_state", message: message %}
{% endif %}

View File

@ -0,0 +1,168 @@
<div class="mo-search-wrapper">
<select class="dashboard-filter-select filter-wrapper uk-text-bold mo-active-filter-prog"
id='course-by-status-select'>
<option class="mo-filter-item" value="none" style="padding-bottom:10px" selected disabled>Filter by progress
</option>
<option class="mo-filter-item" value="all">All</option>
<option class="mo-filter-item" value="not-started">Not Started</option>
<option class="mo-filter-item" value="in-progress">In Progress</option>
<option class="mo-filter-item" value="completed">Completed</option>
</select>
</div>
<script>
let selectByStatusOfCourse = document.getElementById('course-by-status-select')
selectByStatusOfCourse.addEventListener('click', filterCoursesByStatus())
function filterCoursesByStatus() {
setTimeout(() => {
if ($('.carousel').parent().parent().is(":visible"))
filterCourseCardsInCarousel()
else
filterCourseCardsInCatalog()
}, 100);
}
function filterCourseCardsInCatalog() {
$(".dashboard-filter-select").change(function () {
let numberOfCoursesInGrid = 0
hideNoCourseMessage()
showAllCardsInCatalog()
let statusOfFilter = this.value
$('.np-catalog-courses').children().each(function () {
let courseCard = $(this)
let courseProgress = courseCard.find('.progress-info').text()
courseCard.addClass('col-lg-4')
if (statusOfFilter === "in-progress") {
if (courseProgress !== "Started")
hideCardInCatalog(courseCard)
else
numberOfCoursesInGrid++
}
else if (statusOfFilter === "not-started") {
if (courseProgress !== "Not started")
hideCardInCatalog(courseCard)
else
numberOfCoursesInGrid++
}
else if (statusOfFilter === "completed") {
if (courseProgress !== "Completed")
hideCardInCatalog(courseCard)
else
numberOfCoursesInGrid++
}
})
if (numberOfCoursesInGrid === 1) {
$('.np-catalog-courses').children().each(function () {
$(this).removeClass('col-lg-4')
})
}
else if (numberOfCoursesInGrid === 0) {
if (statusOfFilter === "all") {
hideNoCourseMessage()
}
else {
showNoCourseMessage()
}
}
})
}
function showNoCourseMessage() {
$('.no-course-message').css('display', 'block')
}
function hideNoCourseMessage() {
$('.no-course-message').css('display', 'none')
}
function filterCourseCardsInCarousel() {
setTimeout(() => {
addCourseSlideClass();
}, 100);
$("#course-by-status-select").change(function () {
let numberOfCoursesInCarousel = 0
hideNoCourseMessage()
showAllCardsInCarousel()
let status = this.value
$('.carousel').slick('unslick')
$(".progress-info").each(function () {
let progress = $(this).text()
if (status === "in-progress") {
if (progress !== "Started")
hideCardInCarousel($(this))
else
numberOfCoursesInCarousel++
}
else if (status === "not-started") {
if (progress !== "Not started")
hideCardInCarousel($(this))
else
numberOfCoursesInCarousel++
}
else if (status === "completed") {
if (progress !== "Completed")
hideCardInCarousel($(this))
else
numberOfCoursesInCarousel++
}
})
if (numberOfCoursesInCarousel === 0) {
if (status === "all") {
hideNoCourseMessage()
initializeCarousel('.carousel', 3);
}
else {
showNoCourseMessage()
}
}
else
initializeCarousel('.carousel', 3);
});
}
function addCourseSlideClass() {
$(".slick-track").children().each(function () {
$(this).addClass("course-slide")
})
}
function hideCardInCarousel(progressInfo) {
progressInfo.parents().each(function () {
var courseCard = $(this)
if (courseCard.hasClass("course-slide")) {
courseCard.css("display", "none")
courseCard.appendTo(courseCard.parent().parent());
}
})
}
function showAllCardsInCarousel() {
$(".carousel").each(function () {
var carousel = $(this)
carousel.siblings().each(function () {
var sibling = $(this)
if (sibling.hasClass("course-slide")) {
sibling.css('display', 'block')
sibling.appendTo(carousel)
}
})
})
}
function hideCardInCatalog(courseCard) {
courseCard.css('display', 'none')
}
function showAllCardsInCatalog() {
$('.np-catalog-courses').children().each(function () {
$(this).css('display', 'block')
})
}
$(document).ready(function () {
hideNoCourseMessage()
});
</script>

View File

@ -0,0 +1,227 @@
<footer class="np-footer">
<div class="np-footer-top custom-footer-divider mobile-footer">
<div>
<span>© {{"now" | date: "%Y"}} Skuid, Inc.</span>
<span class="np-hidden-mobile inline-text" style="margin-left: 15px;">
<a class="policy-links" href="{{ current_school.terms_of_service_url }}">Terms of Use</a> | <a class="policy-links" href="https://www.skuid.com/legal/privacy-policy">Privacy Policy</a></span>
</div>
<div>
<nav class="np-footer-social-links">
{% if website_footer.show_social_media_links? %}
<ul class="np-footer-social-links-list">
{% for social_media_link in website_footer.social_media_links %}
<li class="np-footer-social-links-item">
<a class="np-footer-social-links-link np-button-color" href="{{ social_media_link.link }}" target="_blank"
title="{{ social_media_link.name }}">
<i class="np-footer-social-links-icon
np-button-color
fab fa-{{ social_media_link.name }}"></i>
</a>
</li>
{% endfor %}
</ul>
{% endif %}
</nav>
</div>
</div>
</footer>
{% include "carousels" %}
{% if current_person.signed_in? %}
<script>
$(document).ready(function () {
fixCorauselCrash('carousel')
fixCorauselCrash('lp-carousel')
})
function fixCorauselCrash(htmlClass) {
if ($('.' + htmlClass).width() < 150) {
setTimeout(function () {
$('.' + htmlClass).slick('setPosition');
}, 600);
}
}
</script>
<style>
@media (max-width: 2499px) {
.np-footer {
padding-left: 21%;
}
}
@media (min-width: 2500px) {
.np-footer {
padding-left: 16%;
}
}
</style>
{% endif %}
<style>
.policy-links {
font-family: Inter;
text-decoration: none;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #212529;
}
.np-footer {
background-color: transparent;
}
.custom-footer-divider {
border-top: 1px solid #D7D8DA;
}
@media (max-width: 768px) {
#ReadMoreButon {
margin-bottom: 10px;
}
.np-footer {
padding-left: 0;
width: 90%;
margin: 0 5%;
}
.custom-footer-divider {
font-size: 0.9rem !important;
flex-direction: column;
}
.np-footer-social-links-list {
margin-bottom: 0;
}
.mobile-footer {
display: flex;
flex-direction: row;
justify-content: space-between;
}
}
.popup-button-container {
display: flex;
justify-content: space-around;
}
.popup-button {
width: 160px;
height: 50px;
}
@media (max-width:768px) {
.popup-button {
margin-bottom: 0;
}
.popup-button-container {
flex-direction: column;
align-items: center;
}
}
.overlay {
z-index: 1000;
position: fixed;
top: 0;
bottom: -100%;
left: -2%;
right: -2%;
background: rgba(0, 0, 0, 0.7);
transition: opacity 500ms;
visibility: hidden;
opacity: 0;
}
.overlay:target {
visibility: visible;
opacity: 1;
}
.popup {
margin: 70px auto;
padding: 20px;
background: #fff;
border-radius: 5px;
width: 30%;
position: relative;
transition: all 5s ease-in-out;
}
.popup h2 {
margin-top: 0;
color: #333;
font-family: F37 Moon !important;;
}
.popup .close {
position: absolute;
top: 20px;
right: 30px;
transition: all 200ms;
font-size: 30px;
font-weight: bold;
text-decoration: none;
color: #333;
}
.popup .close:hover {
color: #06D85F;
}
.popup .content {
max-height: 30%;
overflow: auto;
font-family: F37 Moon !important;
}
@media screen and (max-width: 700px) {
.box {
width: 70%;
}
.popup {
width: 70%;
}
}
</style>
{%comment%} View More Styles/Scripts {%endcomment%}
<style>
.view-more-hidden{
display: block;
}
.view-more-button{
display: none;
}
@media (max-width: 767px){
.view-more-hidden{
display: none;
}
.view-more-button{
display: block;
width: 50%;
margin: 0 auto;
float: none;
}
}
</style>
<script>
let viewMore = () => {
let additionalCourses = document.querySelectorAll('.view-more-hidden');
let viewMoreButton = document.querySelector('.view-more-button');
viewMoreButton.style.display = 'none';
additionalCourses.forEach((courseNode) => {
courseNode.style.display = 'block';
})
}
</script>
<script>
window.Appcues.identify(
'{{current_person.id}}',
{
accountId: '{{current_person.id}}',
firstName: '{{current_person.first_name}}',
lastName: '{{current_person.last_name}}',
email: '{{current_person.email}}'
}
);
</script>

View File

@ -0,0 +1,23 @@
{% styles default %}
{% styles colors %}
{% styles custom %}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
<script
src="https://code.jquery.com/jquery-3.5.1.min.js"
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin="anonymous"></script>
<!-- Add the slick-theme.css if you want default styling -->
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/gh/kenwheeler/slick@1.8.1/slick/slick.css"/>
<!-- Add the slick-theme.css if you want default styling -->
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/gh/kenwheeler/slick@1.8.1/slick/slick-theme.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.4/tiny-slider.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.2/min/tiny-slider.js"></script>
<!-- Appcues code snippet -->
<script type="text/javascript">
window.AppcuesSettings = {enableURLDetection: true}
</script>
<script src="//fast.appcues.com/69414.js"></script>

View File

@ -0,0 +1,574 @@
{% assign redirect = true %}
{% if current_person.signed_in? %}
{% for group in current_person.groups %}
{% if group.id == "29ae12e6-f740-4190-a5c2-a7e12e87926f" or group.id == "aa36069f-e354-4dbe-9972-9ce70ad146d7" or group.id == "8cd6ec9c-101e-4b1a-82c7-77dac583a1f5" %}
{% assign redirect = false %}
{% break %}
{% endif %}
{% endfor %}
{% endif %}
{% if current_person.signed_in? and redirect %}
{% unless current_person.email contains '+preview-' %}
<script>
if (window.location.pathname != '/app/sign-up-follow-up' && window.location.pathname != '/terms_agreement/new'){
new_url = '/app/sign-up-follow-up'.concat('?redirect_uri=', encodeURIComponent(window.location.toString().split(window.location.hostname)[1]));
window.location.replace(new_url);
}
</script>
{% endunless %}
{% endif %}
<header id="header" class="np-header np-header-color">
<div class="np-header-content">
<div class="np-hidden-desktop np-header-mobile-menu-nav">
{% if current_person.signed_in? %}
<button data-toggle-class="np-hidden"
class="np-header-mobile-menu-nav-button fal fa-times np-hidden np-header-font-color" data-toggle-target=".np-header-mobile-avatar-menu,
.np-header-mobile-menu-content, .np-main, .np-footer"></button>
<button data-test="open-mobile-menu" data-toggle-class="np-hidden"
class="np-header-mobile-menu-nav-button np-header-mobile-avatar-menu"
data-toggle-target=".np-button-mobile-content, .fa-times, .np-header-mobile-menu-content, .np-main, .np-footer">
<i style="color: #005CB9;" class="far fa-bars"></i>
</button>
{% endif %}
</div>
{% if current_person.signed_in? %}
{% if current_school.logo_url %}
<div class="logo-container">
<h1 class="np-header-logo" style="flex-grow: 0.1 !important">
<a href="{% route home %}">
<img alt="{{ current_school.name }}" class="np-header-logo-image np-hidden-mobile" src="{{ current_school.logo_url }}" />
<img alt="{{ current_school.name }}" class="np-header-logo-image np-hidden-desktop" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/Skuid+Logomark_Primary+1.svg" />
</a>
</h1>
</div>
{% else %}
<a href="{% route home %}" class="np-school-name np-header-font-color">
{{ current_school.name }}
</a>
{% endif %}
{% endif %}
{% if current_person.signed_in? %}
<div class="np-hidden-mobile form-group has-search" style="margin-left: 3%;">
<form action="{% route search %}" method="get" data-test="desktop-search">
<span class="fa fa-search form-control-feedback"></span>
<input aria-label="{% t .search %}" class="form-control" type="text" name="q" placeholder="search courses" />
</form>
</div>
<div class="np-hidden-mobile np-header-desktop-nav">
<ul class="np-header-desktop-nav-list">
{% for website_navigation in navigations.header_navigations_external %}
<li class="np-header-desktop-nav-item">
<a href="{{ website_navigation.path }}" class="np-header-desktop-nav-link np-header-font-color"
target="_blank">
{{ website_navigation.name }}
</a>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if current_person.signed_in? %}
<div class="np-hidden-mobile np-header-avatar" style="align-items: center;">
<div class="points-badges-avatar">
{% if current_person.properties.learner_points contains "missing property" %}
<p class="points-display"> 0 Points </p>
{% else %}
<p class="points-display"> {{ current_person.properties.learner_points }} Points </p>
{% endif %}
{% if current_person.properties.learner_badges contains "missing property" %}
<p class="badges-display"> 0 Badges </p>
{% else %}
<p class="badges-display"> {{ current_person.properties.learner_badges }} Badges </p>
{% endif %}
</div>
<div class="points-badges-avatar">
<button class="np-header-avatar-button avatar-container" data-test="open-desktop-menu"
data-toggle-class-on-target="np-hidden" data-toggle-target=".np-header-avatar-tooltip" data-toggle-outside>
<i class="fal fa-angle-down" style="font-size: 20px;"></i>
<p style="margin-top: revert;"> {{current_person.display_name }} </p>
<img alt="{{ current_person.name }}" class="np-header-avatar-image avatar-image"
src="{{ current_person.avatar_url }}">
</button>
</div>
<div class="np-header-avatar-tooltip np-hidden" role="tooltip">
<span class="np-header-avatar-tooltip-arrow-up"></span>
<div class="np-header-avatar-tooltip-learner">
<div class="np-header-avatar-tooltip-learner-name">
{{ current_person.display_name }}
</div>
<div class="np-header-avatar-tooltip-learner-email">
{{ current_person.email }}
</div>
</div>
<nav class="np-header-avatar-tooltip-navigation">
{% unless current_school.sso_active? %}
<a class="np-header-avatar-tooltip-navigation-link" href="{% route account %}">
{% t .profile_settings %}
</a>
{% endunless %}
<a class="np-header-avatar-tooltip-navigation-link" href="mailto:{{ website_footer.school_customer_service_email }}">
Need help?
</a>
<a class="np-header-avatar-tooltip-navigation-link np-danger" href="{% route logout %}">
{% t .sign_out %}
</a>
</nav>
</div>
</div>
{% else %}
<div style="display: flex; align-items: center;">
<div class="logo-container">
<h1 class="np-header-logo" style="flex-grow: 0.1 !important">
<a href="{% route home %}">
<img alt="{{ current_school.name }}" class="np-header-logo-image np-hidden-mobile" src="{{ current_school.logo_url }}" />
<img alt="{{ current_school.name }}" class="np-header-logo-image np-hidden-desktop" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/Skuid+Logomark_Primary+1.svg" />
</a>
</h1>
</div>
<div class="np-hidden-mobile form-group has-search" style="margin-left: 3%;">
<form action="{% route search %}" method="get" data-test="desktop-search">
<span class="fa fa-search form-control-feedback"></span>
<input aria-label="{% t .search %}" class="form-control" type="text" name="q" />
</form>
</div>
</div>
<div style="display: flex; align-items: center;">
<a class="np-header-sign-in np-header-desktop-nav-link np-header-font-color" style="font-size: 16px;" aria-label="{% t shared.sign_in %}"
href="{% route login %}">
Login
</a>
<a class="np-header-sign-in np-header-desktop-nav-link np-header-font-color np-button" style="margin-left: 18%; color: white; border-radius: 32px; font-size: 16px;" aria-label="{% t shared.sign_up %}"
href="{% route sign_up %}">
Register
</a>
</div>
{% endif %}
</div>
</header>
<div class="np-hidden-desktop">
<div class="np-header-mobile-menu-content np-hidden">
<div class="mobile-header-dropdown">
{% if current_school.logo_url %}
<div>
<h1 class="np-header-logo" style="flex-grow: 0.1 !important">
<a href="{% route home %}">
<img alt="{{ current_school.name }}" class="np-header-logo-image" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/Skuid+Logomark_Primary+1.svg" />
</a>
</h1>
</div>
{% endif%}
<div>
<button class="np-hidden np-button-mobile-content" id='closing-button' data-test="close-mobile-menu" data-toggle-class="np-hidden" data-toggle-target=".np-header-mobile-avatar-menu, .fa-times, .np-header-mobile-menu-content, .np-main, .np-footer">
<input type="image" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/OpenNavIcon.svg" />
</button>
</div>
</div>
{% if current_person.signed_in? %}
<div class="user-container-mobile">
<a href="{% route account %}" class="np-header-mobile-menu-content-button mobile-header-link" style="border-bottom: none;">
<img alt="{{ current_person.name }}" class="np-header-mobile-menu-content-avatar"
src="{{ current_person.avatar_url }}" />
<div class="np-header-mobile-menu-content-name">
{{ current_person.name }}
</div>
</a>
</div>
{% endif %}
<div class="np-header-mobile-menu-content-nav">
<form class="np-header-search" data-test="mobile-search" method="get" action="{% route search %}">
<i class="np-header-search-icon far fa-search"></i>
<input aria-label="{% t .search %}" class="np-header-search-input" type="text" name="q"
placeholder="{% t .search %}" />
</form>
{% for link in navigations.sub_navigation %}
{% if link.label == "Events" or link.label == "Dashboard" %}
{% elsif link.label == "Catalog" %}
<a href="{{ link.url }}" class="np-header-mobile-menu-content-button mobile-header-link">
<i class="{{ link.icon }} np-button-color np-sub-navigation-content-item-icon custom-navigation-content-item-icon"></i>
Courses
</a>
{% elsif link.label == "Home" %}
<a href="{{ link.url }}" class="np-header-mobile-menu-content-button mobile-header-link">
<i class="{{ link.icon }} np-button-color np-sub-navigation-content-item-icon custom-navigation-content-item-icon"></i>
Home
</a>
{% else %}
<a href="{{ link.url }}" class="np-header-mobile-menu-content-button mobile-header-link">
<i class="{{ link.icon }} np-button-color np-sub-navigation-content-item-icon custom-navigation-content-item-icon"></i>
{{ link.label }}
</a>
{% endif %}
{% endfor %}
{%comment%}
<div class="np-header-mobile-menu-content-line"></div>
{% unless current_school.sso_active? %}
<a class="np-header-mobile-menu-content-button" href="{% route account %}">
{% t .profile_settings %}
</a>
{% endunless %}
<a class="np-header-mobile-menu-content-button np-danger" href="{% route logout %}">
{% t .sign_out %}
</a>
{%endcomment%}
</div>
</div>
</div>
{% include "messages" %}
{% if current_person.signed_in? %}
<style>
@media (min-width: 769px) and (max-width: 1024px) {
body {
transform: scaleX(0.962014);
background: linear-gradient(90deg, #ebf5ff 230px, #fff 230px);
}
}
@media (min-width: 1025px) and (max-width: 2500px) {
body {
transform: scaleX(0.962014);
background: linear-gradient(90deg, #ebf5ff 293px, #fff 293px);
}
}
@media (min-width: 2501px) {
body {
transform: scaleX(0.962014);
background: linear-gradient(90deg, #ebf5ff 350px, #fff 350px);
}
}
.np-main {
padding-left: 0;
}
@media (max-width: 768px) {
body {
background: #fff;
transform: none;
}
.np-header-content {
flex-direction: row-reverse;
}
.np-header-mobile-menu-nav {
position: relative !important;
}
}
@media (min-width: 769px) and (max-width: 1440px) {
.np-main {
margin-left: 9% !important;
}
}
@media (min-width: 1440px) and (max-width: 2500px) {
.np-main {
margin-left: 8% !important;
}
}
@media (min-width: 769px) and (max-width: 1900px) {
.np-card.np-no-horizontal-padding {
padding-left: 25px;
padding-right: 25px;
}
.np-learning-paths-main > .np-resource-title,
.np-learning-paths-main > .np-resource-subtitle,
.np-catalog-header {
padding-left: 25px;
}
}
@media (max-width: 1024px) {
.np-footer {
padding-left: 24%;
}
}
</style>
{% endif %}
{% unless current_person.signed_in? %}
<style>
@media screen and (min-width: 769px) {
.np-header {
background: transparent;
padding-left: 3%;
padding-right: 3%;
height: 85px;
}
.np-card.np-no-horizontal-padding {
padding-left: 2rem;
padding-right: 2rem;
}
.np-header-content {
justify-content: space-between;
}
.logo-container {
padding: 0px 50px 0px 5px;
}
.form-control {
border: 1px solid #005CB9 !important;
}
.np-homepage-hero-image {
max-height: fit-content;
}
.np-header-logo {
margin: 0;
}
}
@media (max-width: 768px) {
.np-header-content {
flex-direction: row;
}
.np-header-mobile-menu-nav {
display: none !important;
}
.np-header-sign-in {
position: relative;
}
}
</style>
{% endunless %}
<style>
@media (min-width: 769px) and (max-width: 1024px) {
.np-header-logo-image {
height: 40px;
}
}
@media (max-width: 768px) {
.np-header-search-input:focus {
color: black;
}
#closing-button {
border: none;
background: transparent;
}
.np-header-mobile-menu-content-nav {
padding: 0 1.25rem;
}
.mobile-header-link {
display: flex;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 25px;
margin-top: 1rem;
border-bottom: 1.08108px solid #BFD6ED;
padding-left: 6px;
padding-right: 10px;
background: transparent;
box-shadow: none;
color: black;
font-family: "F37 Moon";
font-style: normal;
font-weight: normal;
font-size: 19.4595px;
}
.np-header {
background-color: #EBF5FF;
}
.np-header-content {
justify-content: space-between;
}
.np-header-mobile-menu-content {
background-color: #EBF5FF;
padding-top: 30px;
}
.np-header-mobile-menu-content-avatar {
height: 50px;
width: 50px;
margin-top: 0;
}
.np-header-mobile-menu-content-name {
font-family: "F37 Moon";
font-style: normal;
font-weight: normal;
font-size: 19.4595px;
color: black;
}
.np-header-search-input {
font-family: "F37 Moon";
font-style: normal;
font-weight: normal;
font-size: 19.4595px;
color: black;
border: none;
padding: 0 0 0 50px;
background-color: #EBF5FF;
}
.np-header-search-input::placeholder {
color: black;
font-family: "F37 Moon";
font-style: normal;
font-weight: normal;
font-size: 19.4595px;
}
@media (max-width:425px) {
.np-header-mobile-menu-content {
background-color: #EBF5FF;
padding-top: 30px;
}
.mobile-header-dropdown {
display: flex;
align-items: center;
width: 88%;
justify-content: space-between;
}
.user-container-mobile {
display: flex;
align-items: center;
width: 88%;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
border-bottom: 1.08108px solid #BFD6ED;
}
.np-header-search {
background-color: #EBF5FF;
padding-top: 10px;
padding-bottom: 10px;
border-bottom: 1.08108px solid #BFD6ED;
}
.np-header-search-icon {
color: black;
left: 2%;
top: 2rem;
}
}
@media (min-width: 426px) and (max-width: 768px) {
.np-header-search-input {
float: none;
width: 100%;
opacity: unset;
}
.np-header-search-input:focus {
padding: 0;
margin-left: 50px;
width: 92%;
}
.np-header-search-input:focus {
padding: 0;
margin-left: 50px;
width: 92%;
}
.np-header-mobile-menu-content {
background-color: #EBF5FF;
padding-top: 0;
margin-top: -55px;
}
.mobile-header-dropdown {
display: flex;
align-items: center;
width: 95%;
justify-content: space-between;
}
.user-container-mobile {
display: flex;
align-items: center;
width: 95%;
justify-content: space-between;
padding-top: 15px;
padding-bottom: 10px;
border-bottom: 1.08108px solid #BFD6ED;
}
.np-header-search {
background-color: #EBF5FF;
padding-top: 15px;
padding-bottom: 10px;
border-bottom: 1.08108px solid #BFD6ED;
}
.np-header-search-icon {
color: black;
left: 1%;
top: 2rem;
}
.np-header-search-input::placeholder {
padding-left: 90%;
}
}
@media (max-width: 320px) {
.np-header-search-input::placeholder {
padding-left: 72%;
}
.np-header-mobile-menu-content {
padding-top: 0;
margin-top: -55px;
}
}
@media (min-width: 321px) and (max-width: 375px) {
.np-header-search-input::placeholder {
padding-left: 75%;
}
.np-header-mobile-menu-content {
padding-top: 0;
margin-top: -55px;
}
}
@media (min-width: 376px) and (max-width: 425px) {
.np-header-search-input::placeholder {
padding-left: 78%;
}
.np-header-mobile-menu-content {
padding-top: 0;
margin-top: -55px;
}
}
}
</style>

View File

@ -0,0 +1,62 @@
{% comment %}This section of code will iterate over all courses in a learning path and average out the completion per course compared to the total of the LP {% endcomment %}
{% assign total_progress = 0 %}
{% assign completed_progress = 0 %}
{% for item in learning_path.items %}
{% if item.course? %}
{% assign total_progress = total_progress | plus: 100 %}
{% unless item.progress == 0 %}
{% assign completed_progress = completed_progress | plus: item.progress %}
{% endunless %}
{% endif %}
{% endfor %}
{% assign total_progress = total_progress | times: 0.01 %}
{% assign calculated_progress = completed_progress | divided_by: total_progress %}
{% if learning_path.enrolled? %}
<div class="np-top-cta-progress-content">
<div class="np-top-cta-progress-title np-text-title">
{% t .progress %}
</div>
<div class="np-progress-bar-container">
<div
style="width: {{ calculated_progress }}%"
class="np-button-background-color np-card-progress-bar">
</div>
</div>
<div class="np-top-cta-progress-text
{% if learning_path.completed? %} np-color-success {% else %} np-button-color {% endif %}
">
{% if calculated_progress == 0 %}
{% t shared.progress, count: learning_path.progress %}
{% else %}
{{calculated_progress | ceil }}% Completed
{% endif %}
</div>
</div>
{% endif %}
<a
class="np-top-button np-button-font-color np-button np-button-big"
{% if learning_path.enrolled? %}
{% if learning_path.current_item.course? %}
href="{% route learning_path_course, id: learning_path.current_item.id, learning_path_id: learning_path.id %}"
{% elsif learning_path.current_item.training_event? %}
href="{% route training_session, id: learning_path.current_item.id %}"
{% endif %}
{% else %}
href="{% route learning_path_enrollment, code: learning_path.enrollment_code %}"
{% endif %}
>
{% if learning_path.enrolled? == false %}
{% t shared.enroll %}
{% elsif calculated_progress == 0 %}
{% t shared.learning_path.start %}
{% elsif calculated_progress == 100 %}
{% t shared.learning_path.view %}
{% else %}
{% t shared.continue %}
{% endif %}
</a>

View File

@ -0,0 +1,11 @@
<div class="np-hidden-mobile">
<div class="row">
<div class="lp-carousel">
{% for learning_path in learning_paths.available %}
<div>
{% include "cards_learning_path" with learning_path %}
</div>
{% endfor %}
</div>
</div>
</div>

View File

@ -0,0 +1,27 @@
<div class="np-learning-paths-resources">
{% if items.any? %}
{% assign view_more_counter = 0 %}
{% for learning_path in items %}
{% if view_more_counter < 1%}
{% assign view_more_counter = view_more_counter | plus: 1%}
<div class="np-card np-no-horizontal-padding">
{% include "cards_learning_path" with learning_path %}
</div>
{% else %}
<div class="np-card np-no-horizontal-padding view-more-hidden">
{% include "cards_learning_path" with learning_path %}
</div>
{% endif %}
{% endfor %}
{% if view_more_counter >= 1%}
<button class="np-top-button np-button-font-color np-button np-button-big view-more-button" onclick="viewMore()">View More</button>
{% endif %}
{% else %}
<div class="np-learning-paths-resources-container">
<div class="np-zero-state-text">
{% t .empty %}
</div>
<img class="np-zero-state-learning-paths" alt="{% t .empty %}" />
</div>
{% endif %}
</div>

View File

@ -0,0 +1,16 @@
<div class="np-learning-paths-resources lp-carousel">
{% if items.any? %}
{% for learning_path in items %}
<div>
{% include "cards_learning_path" with learning_path %}
</div>
{% endfor %}
{% else %}
<div class="np-learning-paths-resources-container">
<div class="np-zero-state-text">
{% t .empty %}
</div>
<img class="np-zero-state-learning-paths" alt="{% t .empty %}" />
</div>
{% endif %}
</div>

View File

@ -0,0 +1,39 @@
<script src="https://fast.wistia.net/embed/iframe/0m6tky9ic0?videoFoam=true" async></script>
<script src="https://fast.wistia.com/assets/external/E-v1.js" async></script>
<div class="overview-video">
<div
class="thumbnail video wistia_embed wistia_async_0m6tky9ic0 popover=true popoverAnimateThumbnail=true popoverContent=link videoFoam=true"
style="background-image:url(/wp-content/themes/altair/dist/img/ford_winner_2015.png)">
<p style="padding-top:4px;"> Not sure where to start? Watch this quick training overview video.
<a class="overview-video-link" href="javascript:void(0)">
<span class="caption">
Watch
<i class="fas fa-caret-right"></i>
</span>
</a>
</p>
</div>
</div>
<style>
.overview-video-link {
text-decoration: none;
}
.overview-video-link:hover {
text-decoration: none;
}
.overview-video {
text-align: center;
font-family: F37 Moon !important;
font-style: normal;
font-weight: normal;
padding-top: 5px;
border-radius: 5px;
margin: 15px;
margin-top: 40px;
margin-bottom: 40px;
}
</style>

View File

@ -0,0 +1,37 @@
<div class="np-card-content np-card-content-vertical np-card-padding align-center">
<h3 class="np-card-content-title">
{{name}}
</h3>
<svg
class="progress-ring"
width="120"
height="120">
<circle
class="progress-ring__circle circle-{{name}}"
stroke="#2e1e6b"
stroke-width="4"
fill="transparent"
r="52"
cx="60"
cy="60"/>
<text x="50%" y="50%" text-anchor="middle" stroke="#2e1e6b" stroke-width="2px" dy=".3em">{{count}}</text>
</svg>
</div>
<script>
$(document).ready(function(){
var circle = document.getElementsByClassName("circle-{{name}}")[0];
var radius = circle.r.baseVal.value;
var circumference = radius * 2 * Math.PI;
circle.style.strokeDasharray = `${circumference} ${circumference}`;
circle.style.strokeDashoffset = `${circumference}`;
function setProgress(percent) {
const offset = circumference - percent * circumference;
console.log(offset)
circle.style.strokeDashoffset = offset;
}
setProgress('{{ count | divided_by: total }}')
})
</script>

View File

@ -0,0 +1,52 @@
{% if courses.enrolled.any? %}
<div class="recent-container">
{% for course in courses.enrolled %}
{% if course.id == current_person.properties.last_viewed_course %}
<p class="recent-view-header">RECENTLY VIEWED</p>
{% include "cards_course" with course, class: "" %}
{% endif %}
{% endfor %}
</div>
{% endif %}
<style>
.recent-container {
display: flex;
align-items: center;
flex-direction: column;
}
.recent-container>div>div {
padding: 0px !important;
}
.recent-container>div>div>div {
box-shadow: 4px 4px 0px rgba(128, 173, 220, 0.32);
border-radius: 8px;
}
.recent-view-header {
width: 100%;
}
@media (max-width: 768px) {
.recent-view-header {
margin-bottom: 0;
background-color: #ebf5ff;
padding: 5px 114px 0px;
box-shadow: 4px 1px 0px rgb(128 173 220 / 32%);
border-radius: 14px 14px 0 0;
}
}
@media (min-width: 1025px) {
.recent-view-header {
margin-bottom: 0;
background-color: #ebf5ff;
box-shadow: 4px 1px 0px rgb(128 173 220 / 32%);
border-radius: 14px 14px 0 0;
}
}
</style>

View File

@ -0,0 +1,34 @@
<div class="statistics-container">
<div class="badges">
<p class="quantity">{{ countInProgress }}</p>
<p class="name-flag">{% if countInProgress == 1 %}Course{% else %}Courses{% endif %} in Progress</p>
</div>
<div class="badges">
<p class="quantity">{{ countComplete }}</p>
<p class="name-flag">Completed Courses</p>
</div>
<div class="badges">
{% if current_person.properties.learner_badges contains "missing property" %}
<p class="quantity">0</p>
{% else %}
<p class="quantity">{{ current_person.properties.learner_badges }}</p>
{% endif %}
<p class="name-flag">Badges</p>
</div>
<div class="badges">
{% if current_person.properties.learner_points contains "missing property" %}
<p class="quantity">0</p>
{% else %}
<p class="quantity">{{ current_person.properties.learner_points }}</p>
{% endif %}
<p class="name-flag">Points</p>
</div>
<div class="badges">
{% if current_person.properties.learner_hours contains "missing property" %}
<p class="quantity">0</p>
{% else %}
<p class="quantity">{{ current_person.properties.learner_hours }} mins</p>
{% endif %}
<p class="name-flag">Course Time</p>
</div>
</div>

View File

@ -0,0 +1,32 @@
<nav style="background: transparent;" class="np-sub-navigation custom-navigation">
<div class="np-sub-navigation-content custom-navigation-content">
{% for link in navigations.sub_navigation %}
{% if link.label == "Events" or link.label == "Dashboard" %}
{% elsif link.label == "Catalog" %}
<div class="np-sub-navigation-content-item {{ link.active_class }} custom-navigation-content-item">
<a class="np-sub-navigation-content-item-link custom-navigation-item-link" href="{{ link.url }}">
<i
class="{{ link.icon }} np-button-color np-sub-navigation-content-item-icon custom-navigation-content-item-icon"></i>
<span style="margin-left: 10px; color: #000000;">Courses</span>
</a>
</div>
{% elsif link.label == "Home" %}
<div class="np-sub-navigation-content-item {{ link.active_class }} custom-navigation-content-item">
<a class="np-sub-navigation-content-item-link custom-navigation-item-link" href="{{ link.url }}">
<i
class="{{ link.icon }} np-button-color np-sub-navigation-content-item-icon custom-navigation-content-item-icon"></i>
<span style="margin-left: 10px; color: #000000;">Dashboard</span>
</a>
</div>
{% else %}
<div class="np-sub-navigation-content-item {{ link.active_class }} custom-navigation-content-item">
<a class="np-sub-navigation-content-item-link custom-navigation-item-link" href="{{ link.url }}">
<i
class="{{ link.icon }} np-button-color np-sub-navigation-content-item-icon custom-navigation-content-item-icon"></i>
<span style="margin-left: 10px; color: #000000;">{{ link.label }}</span>
</a>
</div>
{% endif %}
{% endfor %}
</div>
</nav>

View File

@ -0,0 +1,4 @@
<div class="welcome-message">
<img class="np-homepage-hero-image np-hidden-mobile" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/SkuidSkool-Hero3.png"/>
<img class="np-homepage-hero-image np-hidden-desktop" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/skuid+skool+V3+mobile.svg">
</div>

View File

@ -0,0 +1,84 @@
{% include "header" %}
<div class="page-container account-profile">
<div class="np-hidden-mobile">
{% include "sub_navigation" %}
</div>
<main class="np-main np-subpage-container np-account account-margin">
<div class="np-hidden-desktop">
{% include "account_mobile_view", form: form %}
</div>
<div class="np-hidden-mobile np-flex np-flex-center">
{% include "account_desktop_view", form: form %}
</div>
</main>
</div>
{% include "footer" %}
<style>
.np-card-container {
box-shadow: none;
}
@media (max-width: 768px) {
.account-profile {
justify-content: center;
}
.account-margin {
margin-right: 0;
}
.np-card.np-account-form {
min-width: 100% !important;
}
.np-account-form {
padding-right: 0;
}
.np-account-avatar {
padding-left: 0;
}
}
@media (min-width: 769px) and (max-width: 2499px) {
.account-profile {
justify-content: space-between;
}
.account-margin {
margin-right: 12%;
}
.np-account-form {
padding-right: 0;
}
}
@media (min-width: 2500px) {
.np-card-container.np-card-padding > div {
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-around;
}
.account-profile {
justify-content: space-between;
}
.account-margin {
margin-right: 23%;
}
.np-account-form {
margin-right: 9%;
}
}
</style>

View File

@ -0,0 +1,54 @@
{% include "header" %}
{% include "course_version_outdated_alert", courses: courses.in_catalog %}
<div class="page-container">
<div class="np-hidden-mobile">
{% include "sub_navigation" %}
</div>
<main class="np-main np-catalog np-subpage-container np-max-width">
<div class="np-catalog-header-wrapper">
<div class="np-catalog-header">
<div class="np-resource-title np-hidden-mobile">{{ catalog.headline }}</div>
<div class="np-resource-subtitle np-hidden-mobile">{{ catalog.subheadline }}</div>
<div class="catalog-title np-hidden-desktop">Courses</div>
<div class="catalog-subtitle np-hidden-desktop">Explore currated sets of courses for a tailored learning experience.</div>
{% include 'dashboard_course_filter' %}
</div>
</div>
{% include "courses_catalog" %}
</main>
</div>
{% include "footer" %}
<style>
@media (max-width: 768px) {
.mo-search-wrapper {
margin-top: 30px;
margin-left: 0;
}
.np-catalog-header {
align-items: flex-start;
display: flex;
flex-direction: column;
margin: 0;
}
.catalog-title {
font-family: "F37 Moon";
font-style: normal;
font-weight: normal;
font-size: 36px;
}
.catalog-subtitle {
font-family: "F37 Moon";
font-style: normal;
font-weight: normal;
font-size: 18px;
}
.np-catalog {
padding: 25px 5% 0;
}
}
</style>

View File

@ -0,0 +1,47 @@
{% include "header" %}
<div class="page-container">
<div class="np-hidden-mobile">
{% include "sub_navigation" %}
</div>
<main class="np-main np-subpage-container np-max-width custom-course-page">
<div class="np-hidden-mobile" id="course-desktop">
{% include "course_desktop_view" %}
</div>
<div class="np-hidden-desktop" id="course-mobile">
{% include "course_mobile_view" %}
</div>
</main>
</div>
{% include "footer" %}
<script>
$(document).ready(function () {
setLastViewedCourse();
});
function setLastViewedCourse() {
var data = {
uuid: '{{current_person.id}}',
courseName: '{{course.id}}' // course id not name
};
$.ajax({
type: 'POST',
url: 'https://www.workato.com/webhooks/rest/bd1a1eb7-7e79-4208-a1db-8e9c7440bcc9/course-viewed', //workato link
data: JSON.stringify(data),
success: function (data) {
console.log(data);
//setTimeout(location.reload.bind(location), 700);
},
error: function (xhr, status, error) {
console.log(error)
}
});
}
</script>
<style>
.custom-course-page {
max-width: 1600px !important;
}
</style>

View File

@ -0,0 +1,15 @@
{% include "header" %}
<!-- {% include "course_version_outdated_alert", courses: courses.enrolled %} -->
<div class="page-container">
<div class="np-hidden-mobile">
{% include "sub_navigation" %}
</div>
<main class="np-main np-courses np-subpage-container np-max-width">
<div class="np-resource-title">
{% t shared.course_vocabulary.plural, key: current_school.course_vocabulary %}
</div>
<div class="np-resource-subtitle">{% t .headline, key: current_school.course_vocabulary %}</div>
{% include "courses_index", class: "col-xs-12 col-sm-6 col-lg-4 np-stretch-content" %}
</main>
</div>
{% include "footer" %}

View File

@ -0,0 +1,3 @@
<script>
window.location.replace('/app')
</script>

View File

@ -0,0 +1,773 @@
{% comment %} skip-auth {% endcomment %}
<main style="display: flex; flex-direction: column; width: 80%; font-family: Inter;">
<h1 style="font-weight: 500; font-size: 24px; margin: 30px auto; height: 30px !important; font-family: 'F37 Moon';">
TERMS OF USE FOR SKUID SKOOL<br><br><br>
</h1>
<content style="width: 80%; margin: 20px auto;">
<p
style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1rem; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
This agreement governs the use of the Skuid service. By executing an order form and/or by using the&nbsp;Skuid
service, you agree that you are authorized to bind the applicable customer to this agreement and are agreeing to be
bound by the terms contained in this agreement. You should not use this service if you cannot comply with this
agreement. This agreement is between you and Skuid, Inc. and/or its affiliates or subsidiaries as applicable.</p>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
1. Definitions</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Affiliate&rdquo;</strong> means any entity which directly
or indirectly controls, is controlled by, or is under common control with the subject entity. For purposes of this
definition, &ldquo;control&rdquo; means direct or indirect ownership or control of more than fifty percent (50%) of
the voting interests of such entity.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Agreement&rdquo;</strong> means these terms and
conditions, including any Order Forms, whether written or submitted online, and materials available on the Skuid
website (<a href="https://www.skuid.com/"
style="box-sizing: border-box; background-color: transparent; transition: color 0.3s ease 0s, background-color 0.3s ease 0s, border-color 0.3s ease 0s; text-decoration: none; color: rgb(0, 92, 185); font-weight: 600;"><strong
style="box-sizing: border-box; font-weight: 600;">www.skuid.com</strong></a>) specifically incorporated by
reference herein, including the&nbsp;<a href="https://www.skuid.com/legal/privacy-policy"
style="box-sizing: border-box; background-color: transparent; transition: color 0.3s ease 0s, background-color 0.3s ease 0s, border-color 0.3s ease 0s; text-decoration: none; color: rgb(0, 92, 185); font-weight: 600;">Skuid
Privacy Statement</a>, Skuid documentation (<a href="https://docs.skuid.com/"
style="box-sizing: border-box; background-color: transparent; transition: color 0.3s ease 0s, background-color 0.3s ease 0s, border-color 0.3s ease 0s; text-decoration: none; color: rgb(0, 92, 185); font-weight: 600;"><strong
style="box-sizing: border-box; font-weight: 600;">docs.skuid.com</strong></a>), Skuid Support terms (<a
href="https://www.skuid.com/support"
style="box-sizing: border-box; background-color: transparent; transition: color 0.3s ease 0s, background-color 0.3s ease 0s, border-color 0.3s ease 0s; text-decoration: none; color: rgb(0, 92, 185); font-weight: 600;"><strong
style="box-sizing: border-box; font-weight: 600;">www.skuid.com/support</strong></a>) as such materials may be
updated by Skuid from time to time in its sole discretion.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Content&rdquo;</strong> means the audio and visual
information, documents, software, products, and services contained or made available to You in the course of using
the Skuid Services.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Data&rdquo;</strong> means electronic data and
information submitted by You and stored in the Data Platform, and available to be processed by the Skuid Services,
not including Metadata.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Data Platform&rdquo;</strong> means the cloud or
on-premises platform upon which Your Data resides, and certain application services with which the Skuid Services
interoperate. Examples of Data Platform include Customer-maintained data platforms as well as Salesforce.com, Amazon
Web Services (&ldquo;AWS&rdquo;), Microsoft Azure, Oracle (on-premises or cloud), and SAP Hana (on-premises or
cloud) data platforms.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Data Processing Addendum&rdquo;</strong> or&nbsp;<strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;DPA&rdquo;</strong> means the addendum drafted in
compliance with the EU General Data Protection Regulation 2016/679 (&ldquo;GDPR&rdquo;), available upon request
at&nbsp;<a href="mailto:legal@skuid.com"
style="box-sizing: border-box; background-color: transparent; transition: color 0.3s ease 0s, background-color 0.3s ease 0s, border-color 0.3s ease 0s; text-decoration: none; color: rgb(0, 92, 185); font-weight: 600;"><strong
style="box-sizing: border-box; font-weight: 600;">legal@skuid.com</strong></a>, and incorporated herein by this
reference. By signing this Agreement, or by an Affiliate signing an Order Form, Customer is agreeing to the terms of
the DPA and each of its appendices. For the purposes of the Standard Contractual Clauses attached to the DPA, as
applicable, Customer and its authorized Affiliates are each the data exporter, and Skuid is the data importer.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Direct Competition&rdquo;</strong> by You is strictly
prohibited and means accessing the Skuid Services to (a) use Skuid Services for service bureau purposes or to build
Your own commercial service or commercial business; build a competitive product or service, (b) build a product
using similar ideas, features, functions or graphics of the Skuid Services, (c) copy any ideas, features, functions
or graphics of the Skuid Services; (d) modify or make derivative works based upon the Skuid Services or the Content;
(e) reverse engineer the Skuid Services or any component thereof; or (f) copy, frame, or mirror any part or Content
of the Skuid Services other than for Your own internal business purposes.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Effective Date&rdquo;</strong> means the earlier of: (1)
the date You sign an applicable Order Form; or (2) the date You click to accept the terms of this Agreement.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Intellectual Property Rights&rdquo;</strong> means
unpatented inventions, patent applications, patents, design rights, copyrights, trademarks, service marks, trade
names, domain name rights, mask work rights, know-how and other trade secret rights, licenses and all other
intellectual property rights, derivatives thereof, and forms of protection of a similar nature anywhere in the
world.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Malicious Code&rdquo;</strong> means computer viruses,
worms, time bombs, Trojan horse software and other harmful or malicious code, files, scripts, agents, or programs.
</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Metadata&rdquo;</strong> means configuration data that
describes how a Skuid application functions and how it is presented in the user experience for You.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Order Form&rdquo;</strong> means the form evidencing the
initial subscription for the Skuid Services and any subsequent Order Forms submitted online or in written form,
specifying, among other things, the number of subscriptions and other services contracted for, the applicable fees,
the billing period, and other charges as agreed to between the parties, each such Order Form to be incorporated into
and to become a part of this Agreement. In the event of any conflict between the terms of this Agreement and the
terms of any such Order Form, the terms of the Order Form shall prevail.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Purchased Skuid Services&rdquo;</strong> means Skuid
Services that You or Your affiliates purchase under an Order Form.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Service Administrator&rdquo;</strong> means those Users
designated by You who are authorized to purchase Skuid Services subscriptions and to create User accounts and
otherwise administer Your use of the Skuid Services.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Skuid Credentials&rdquo;</strong> means the username and
password that uniquely identifies a User and allows that User to access and use the Skuid Services. Skuid
Credentials are stored where the Skuid Services are installed.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Skuid Data&rdquo;</strong> means data and/or Metadata You
create with the Skuid Services to define and display Your user interfaces, such as new Skuid Pages, Skuid Page
Assignments or Skuid apps, and any customizations made to or with the Skuid Services. Skuid Data is stored where the
Skuid Services are installed.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Skuid Professional Services&rdquo;</strong> or &ldquo;Pro
Services&rdquo; means the professional services, if any, performed by Skuid for You to develop a custom application
or other solution as set forth in an applicable Statement of Work.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Skuid Services&rdquo;</strong> means the online,
Web-based applications provided by Skuid that are ordered by You as part of Purchased Skuid Services, or under an
Order Form, including any associated online or offline components, but excluding Third-Party Applications. Skuid
Services include software, Content, processes, algorithms, user interfaces, know-how, techniques, designs, and other
tangible or intangible technical material or information made available to You by Skuid in providing the Skuid
Services. Skuid Services are installed on either&nbsp;<a href="https://salesforce.com/"
style="box-sizing: border-box; background-color: transparent; transition: color 0.3s ease 0s, background-color 0.3s ease 0s, border-color 0.3s ease 0s; text-decoration: none; color: rgb(0, 92, 185); font-weight: 600;"
target="_blank"><strong style="box-sizing: border-box; font-weight: 600;">Salesforce.com</strong></a> as a
Salesforce managed application, on AWS as a Platform as a Service (PaaS) offering, or other third-party or
proprietary platform as published by Skuid.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Term&rdquo;</strong> means the contract term, beginning
on the Effective Date and ending on the Contract End Date, specified on the applicable Order Form and any extension
or continuation thereof.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Third-Party Applications&rdquo;</strong> means online,
Web-based applications and offline software products that are provided by third parties, interoperate with the Skuid
Services, and are identified as third-party applications.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;User&rdquo;</strong> or&nbsp;<strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Users&rdquo;</strong> means an individual or individuals
who are authorized by You to use the Skuid Services, for whom subscriptions to the Skuid Services have been
purchased, and who have been supplied User identifications and passwords by You (or by Skuid at Your request). Users
may include, but are not limited to, Your employees, consultants, contractors, and agents; or third parties with
which You transact business.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;User Guide&rdquo;</strong> means the online documentation
for the Skuid Services, accessible through&nbsp;<a href="https://docs.skuid.com/"
style="box-sizing: border-box; background-color: transparent; transition: color 0.3s ease 0s, background-color 0.3s ease 0s, border-color 0.3s ease 0s; text-decoration: none; color: rgb(0, 92, 185); font-weight: 600;"><strong
style="box-sizing: border-box; font-weight: 600;">docs.skuid.com</strong></a>, as updated from time to time.
</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;We&rdquo;</strong> or&nbsp;<strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Us&rdquo;</strong> means Skuid.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;You&rdquo;</strong> or&nbsp;<strong
style="box-sizing: border-box; font-weight: 600;">&ldquo;Your&rdquo;</strong> means the company or other legal
entity for which You are accepting this Agreement, and the Affiliates of that company or entity and/or the
individual entering this Agreement on behalf of such entity, as indicated by context.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
2. General Terms</h3>
<ol start=""
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">You agree to the terms of this Agreement by signing this
Agreement or an Order Form that references this Agreement. You acknowledge that an active subscription to a Data
Platform service is required for use of the Skuid Services. The person signing this Agreement represents that s/he
is entering into this Agreement on behalf of a company or legal entity, and that s/he has the authority to bind such
entity to this Agreement. If You do not have such authority, or if You do not agree with these Terms and Conditions,
You must not accept this Agreement and may not use the Skuid Services.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
3. Free Plan</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">If You register on the Service or an Affiliate&rsquo;s
website for a free plan of the Service, Skuid will make the applicable Service(s) available to Customer on a limited
basis free of charge until the end of the free usage period for which You registered to use the applicable
Service(s) or termination by Skuid in its sole discretion. Notwithstanding the foregoing, and for the avoidance of
doubt, Skuid may modify or alter the terms of such free usage, including the duration of the term, number of
permitted users or approved functionality, for which Skuid will provide notice. Additional trial terms and
conditions may appear on Order Form, and such additional terms and conditions are incorporated into this Agreement
by reference and are legally binding. Any free plan of the Service shall be provided AS-IS, with no representations
or warranties of any kind. All such free usage is subject to the restrictions set forth in this Agreement,
including, but not limited to, the restriction against using an API or in any other tool or method designed to mask
multiple users or permit non-authenticated users in contravention of the user restrictions.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
4. Purchased Skuid Services</h3>
<ul
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Provision of Purchased Skuid Services.</strong> We shall make
the Purchased Skuid Services available to You pursuant to this Agreement and the relevant Order Form(s) during the
Term. You agree that Your purchases hereunder are neither contingent on the delivery of any future functionality or
features nor dependent on any oral or written public comments made by Us regarding future functionality or features.
</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Updates to Skuid Services.</strong> Skuid may update the Skuid
Services in its sole discretion, with each update to be provided to You as is made available by Skuid to any of its
customers. Updates that are required to bring You into compliance with any applicable laws will be provided at least
thirty (30) days before compliance is required by such laws, or as soon as is practicable. Updates to the Skuid
Services will be deemed part of the Skuid Services.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">User Subscriptions. Unless otherwise specified in the
applicable Order Form:</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Skuid Services are purchased as user subscriptions and may
be accessed by no more than the specified number of Users of the subscription type(s) defined in the applicable
Order Form(s);</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Additional user subscriptions may be added during the
subscription term, the cost of which will be prorated for the remainder of the Term in effect at the time the
additional user subscriptions are added. Pricing for additional subscriptions will be the same as the preexisting
subscriptions, unless otherwise specified in the Order Form for the preexisting subscriptions;</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">The added user subscriptions shall terminate on the same
date as the preexisting subscriptions;</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">User subscriptions are for designated Users and
subscription user types and User subscriptions cannot be shared or used by more than one User;</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">User subscriptions of one type may not be assigned to user
subscriptions of another type as defined on the applicable Order Form(s); and,</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Subscriptions of the same user subscription type may be
reassigned to new Users of the same user subscription type, replacing former Users who shall have no further use of
the Skuid Services during the Term.</li>
</ul>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
5. Use of the Skuid Services</h3>
<h5
style="box-sizing: border-box; margin-top: 1.75rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.125rem; line-height: 1.28em; font-weight: 600; letter-spacing: normal; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
Skuid&rsquo;s Responsibilities</h5>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Skuid shall provide the Purchased Skuid Services only
according to applicable laws and government regulations.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">For Purchased Skuid Services, unless otherwise indicated on
an Order Form, Skuid shall provide at no additional charge during the Term (i) online access to updates of the Skuid
Services; and (ii) basic online support services, including community support webpages at&nbsp;<a
href="http://community.skuid.com/"
style="box-sizing: border-box; background-color: transparent; transition: color 0.3s ease 0s, background-color 0.3s ease 0s, border-color 0.3s ease 0s; text-decoration: none; color: rgb(0, 92, 185); font-weight: 600;"><strong
style="box-sizing: border-box; font-weight: 600;">community.skuid.com</strong></a>, online help webpages and
user documentation for the Skuid Services at&nbsp;<a href="https://docs.skuid.com/"
style="box-sizing: border-box; background-color: transparent; transition: color 0.3s ease 0s, background-color 0.3s ease 0s, border-color 0.3s ease 0s; text-decoration: none; color: rgb(0, 92, 185); font-weight: 600;"><strong
style="box-sizing: border-box; font-weight: 600;">docs.skuid.com</strong></a>.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">To the extent applicable, Skuid will provide the relevant
Support that Customer has purchased as defined and described at&nbsp;<a href="https://www.skuid.com/support"
style="box-sizing: border-box; background-color: transparent; transition: color 0.3s ease 0s, background-color 0.3s ease 0s, border-color 0.3s ease 0s; text-decoration: none; color: rgb(0, 92, 185); font-weight: 600;"><strong
style="box-sizing: border-box; font-weight: 600;">skuid.com/support</strong></a>, which may be updated from time
to time upon notice.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Skuid will maintain administrative and technical safeguards
for protection, security, confidentiality, and integrity of Skuid Data and Skuid Credentials only when deployed on a
cloud platform managed by Skuid. When Skuid is deployed on a platform managed by You or a third party, these
safeguards are provided and managed by You or such third party, as applicable. Such safeguards include measures for
preventing access, use, modification, or disclosure of Skuid Data and Skuid Credentials by anyone other than
Customer&rsquo;s personnel and Skuid&rsquo;s personnel, except (a) to provide the Skuid Services and prevent or
address service or technical problems, (b) as expressly permitted in writing by Customer, or (c) as compelled by
law. To the extent that Skuid processes any Personal Data (as defined in the DPA) on Customer&rsquo;s behalf in the
provision of Skuid Services, the terms and conditions of the DPA shall apply.</li>
</ol>
<h5
style="box-sizing: border-box; margin-top: 1.75rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.125rem; line-height: 1.28em; font-weight: 600; letter-spacing: normal; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
Your Responsibilities</h5>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">The Skuid Services are provided solely for Your benefit,
and for the benefit of any parent, subsidiary or affiliate of Yours specified on an applicable Order Form(s).</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">You acknowledge that the Skuid Services may experience
interruptions arising out of limitations, delays, and other problems commonly occurring in the use of the Internet,
use of Your Data Platform, use of other cloud platforms, and use of computer communications. You acknowledge that
Skuid is not responsible for damages, including, but not limited to, incidental or consequential damages arising
from such interruptions.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">You shall be responsible for maintaining security of Your
Data on the Data Platform(s) that You access with the Skuid Services.</li>
</ol>
<h5
style="box-sizing: border-box; margin-top: 1.75rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.125rem; line-height: 1.28em; font-weight: 600; letter-spacing: normal; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<strong style="box-sizing: border-box; font-weight: 600;">Prohibited Uses.</strong> You may not:</h5>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Make the Skuid Services available to any third party,
except as expressly permitted herein or in an Order Form;</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Access the Skuid Services in Direct Competition with Skuid,
or permit access to the Skuid Services to a person or entity that You know or should reasonably know is in Direct
Competition with Skuid;</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Sell, resell, rent, or lease the Skuid Services;</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Access the Skuid Services for purposes of monitoring their
availability, performance or functionality, or for any other benchmarking, competitive or anti-competitive purposes;
</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Use the Skuid Services to store, transmit, or publish
infringing, libelous, or otherwise unlawful or tortious material, material in violation of third-party privacy
rights, personal information in violation of any applicable law, financial information of Your members or
constituents, or material containing Malicious Code;</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Provide access to the Skuid Services to any user, parent,
affiliate or subsidiary organized or existing under the laws of a country or territory embargoed by the United
States.</li>
</ol>
<h5
style="box-sizing: border-box; margin-top: 1.75rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.125rem; line-height: 1.28em; font-weight: 600; letter-spacing: normal; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<strong style="box-sizing: border-box; font-weight: 600;">Usage Limitations.</strong>&zwj;</h5>
<ol start=""
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;">Skuid Services may be subject to other limitations as
described in the applicable agreement between You and Your Data Platform provider(s) and/or specified in Your Data
Platform provider(s) user guide, such as limits on disk storage space, or limits on the number of calls You are
permitted to make against the application programming interface. Some Data Platform providers give real-time
information to enable You to monitor Your compliance with such limitations.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
6. Third-Party Providers and Skuid Services</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Data Platform.</strong> To access the Skuid Services, You
acknowledge that You have agreed to the terms provided by Your Data Platform provider as detailed in the
provider&rsquo;s applicable license or subscription agreement (the &ldquo;Data Platform Agreement&rdquo;). You shall
be solely responsible for compliance with the terms and conditions of any such Data Platform Agreement.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Data Source.</strong> In order to use Skuid Services, You must
configure access to data source(s) (eg. Salesforce, AWS, Oracle, Microsoft Dynamics, or other) as desired. You
and/or Your data source provider(s) are responsible for ensuring proper data protection and security practices are
implemented and maintained. Skuid shall not be responsible for any damages resulting from a data breach caused by
Your data source provider or by Your failure to adhere to the terms and conditions of any applicable Data Platform
Agreement. When Skuid is deployed on cloud platform managed by Skuid, in order to connect to and authenticate Your
desired data source(s), and depending upon the authentication method used, You may be asked to provide credentials,
tokens, and/or keys to access the data sources, which, depending on Your elected admin configuration, will be stored
in Skuid&rsquo;s managed platform in a strongly encrypted form.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Third Party Applications.</strong> If You install or enable
Third-Party Applications for use with the Skuid Services, Skuid shall not be responsible for any disclosure,
modification, or deletion of Data resulting from any such access by Third-Party Application providers. Most Data
Platform services allow You to restrict such access by restricting Users from installing or enabling such
Third-Party Applications for use with the Skuid Services.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
7. Skuid Professional Services</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Engagement.</strong> When You request, Pro Services will be
implemented through one or more Statements of Work entered into from time to time by You and Skuid. If You request
additional services or modifications to the Pro Services that are outside the scope of the original SOW, Skuid will
advise You of any additional cost and/or modifications to the Delivery Schedule. Each SOW will be numbered
sequentially, will reference this Agreement, and will specify the Pro Services to be performed by Skuid.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Project Team.</strong> Each SOW shall detail the
responsibilities and obligations of both You and Skuid and, unless the parties agree otherwise, shall identify the
names and roles of each member of Your and Skuid&rsquo;s project teams.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Limited License.</strong> If You provide any of Your materials
to Skuid, then You grant Skuid a non-transferable, non-exclusive, royalty-free license for the term of this
Agreement to use Your material solely for the purpose of Skuid meeting its obligations to provide the Pro Services
to You under this Agreement.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Skuid IP.</strong> You shall not receive any ownership interest
in: (i) any ideas, concepts, designs, techniques, inventions, methods, or utilities (collectively &ldquo;Background
IP&rdquo;) used by Skuid in rendering Pro Services; or (ii) any discoveries or improvements to the Background IP,
whether patentable or not, that are conceived of or reduced to practice by Skuid or by one or more Skuid employees
or agents in the performance of services for You under this Agreement (&ldquo;Inventions&rdquo;). The Background IP
and the Inventions shall be the exclusive property of Skuid to use, copy, adapt, expand, develop, publish, change,
or sublicense.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Expenses.</strong> Customer shall reimburse Skuid for all
reasonable travel expenses as approved in advance by Customer, or as noted in the applicable SOW.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
8. Fees and Payment for Purchased Services</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">User Fees.</strong> You shall pay annually in advance all fees
specified in all Order Forms hereunder. The initial charges will be equal to the current number of total user
subscriptions requested times the user subscription fee currently in effect. Except as otherwise specified herein or
in an Order Form, (i) fees are quoted and payable in United States dollars (ii) fees are based on the Skuid Services
purchased and not actual usage, (iii) payment obligations are non-cancelable and fees paid are non-refundable, and
(iv) the number of user subscriptions purchased cannot be decreased during the relevant term. User subscription fees
are based on periods that begin on the subscription start date and every year anniversary or as otherwise mutually
agreed upon and described on an Order Form.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Fees for Pro Services.</strong> Skuid shall be compensated for
Pro Services performed under an SOW in accordance with the fee schedule set forth in the applicable SOW. Your
payment, sign-off on project work or use of such Pro Services deliverables shall reflect Your approval that Pro
Services were satisfactorily performed. Skuid shall be paid within thirty (30) days from date of invoice evidencing
work completed by Skuid.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Invoicing and Payment.</strong> You will provide Skuid with
valid and updated credit card information; or a valid purchase order or alternative documents reasonably acceptable
to Skuid. If You provide credit card information to Skuid, You authorize Skuid to charge such credit for all Skuid
Services listed in the Order Form. Such charges shall be made annually in advance annually or as otherwise stated in
the applicable Order Form. If the Order Form specifies that payment will be by a method other than a credit card,
Skuid will invoice You in advance and otherwise according to the relevant Order Form. Unless otherwise stated in the
Order Form, invoiced charges are due on receipt.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Billing Information.</strong> You agree to provide Us with
complete and accurate billing and contact information. This information includes Your legal company name, street
address, e-mail address, and name and telephone number of an authorized billing contact and Service Administrator.
You agree to update this information within thirty (30) days of any change to it. If the contact information You
have provided is fraudulent, Skuid reserves the right to terminate Your access to the Skuid Services without notice,
in addition to any other legal remedies.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Suspension of Skuid Services and Acceleration.</strong> If any
amount that You or Your authorized reseller owes under this or any other agreement for Skuid Services is thirty (30)
or more days overdue or ten (10) or more days overdue in the case of amounts authorized to be charged to Your credit
card, Skuid may, without limiting other rights and remedies, accelerate Your unpaid fee obligations so that all such
obligations become immediately due and payable, and suspend Skuid Services until such amounts are paid in full.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Payment Disputes.</strong> To receive an adjustment or credit
for any billing errors, You must contact Skuid in writing within thirty (30) days of the invoice date of the invoice
containing the amount in question. Skuid shall not exercise its rights under Section 8.5 (Suspension of Skuid
Services) if the applicable charges are under reasonable and good-faith dispute and You are cooperating diligently
to resolve the dispute.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Taxes.</strong> Unless otherwise stated, Skuid&rsquo;s fees do
not include any taxes, levies, duties, or similar governmental assessments of any nature, including, but not limited
to, value-added, sales, use, or withholding taxes, assessable by any local, state, provincial, federal, or foreign
jurisdiction (collectively, &ldquo;taxes&rdquo;). You are responsible for paying all taxes that may be associated
with Your purchases hereunder. If Skuid pays or collects taxes for which You are responsible, any amount paid, plus
all costs and expenses incurred by Skuid, relative to such taxes shall be invoiced to and paid by You. If anything
supplied under or in connection with Pro Services constitutes a taxable supply for the purposes of the applicable
goods and services tax law (&ldquo;GST&rdquo;), then Skuid may recover from You an amount on account of GST. The
amount on account of GST is: (a) equal to the value of the supply calculated in accordance with the GST Law
multiplied by the prevailing GST rate; and is payable: (b) at the same time and in the same manner as the recipient
is required to pay or provide monetary consideration for the supply to which the additional amount relates but not
before the supplying party issues the tax invoice; or (c) where the recipient is not required to pay or provide
monetary consideration for the supply, upon issue of a tax invoice by the supplying party. The supplier of a taxable
supply made in connection with this Agreement must issue a tax invoice for the supply in accordance with GST Law to
the recipient of the supply.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Reconnection Fee.</strong> We reserve the right to impose a
reconnection fee in the event (i) Your access to the Skuid Services is suspended because of nonpayment; or (ii) Your
access to Your Data Platform(s) has been suspended, and thereafter You request access using the Skuid Services.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
9. Proprietary Rights</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Reservation of Rights.</strong> Subject to the limited rights
expressly granted hereunder, Skuid reserve all rights, title, and interest in and to the Skuid Services and the
Intellectual Property Rights, including all related Intellectual Property Rights. No rights are granted to You
hereunder other than as expressly set forth herein. Skuid alone (and its licensors, where applicable) shall own all
right, title, and interest, including all related Intellectual Property Rights, in and to Skuid&rsquo;s technology,
content and the Skuid Services, and any ideas, suggestions, enhancement requests, feedback, recommendations, or
other information (collectively, the &ldquo;Ideas&rdquo;) provided by You or any other party relating to the Skuid
Services. Skuid may, in its sole discretion, incorporate any Ideas into the Skuid Services. This Agreement is not a
sale and does not convey to You any rights of ownership in or related to the Skuid Services, technology, or the
Intellectual Property Rights owned by Skuid.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Ownership of Your Data.</strong> You will retain all rights,
title, and interest in and to any Data, information, or materials provided by You, including Skuid Data.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Federal Government End Use Provisions.</strong> Skuid provides
the Skuid Services, including related software and technology, for ultimate federal government end use solely
according to the following: Government technical data and software rights related to the Skuid Services include only
those rights customarily provided to the public as defined in this Agreement. This customary commercial license is
provided according to FAR 12.211 (Technical Data) and FAR 12.212 (Software) and, for Department of Defense
transactions, DFAR 252.227-7015 (Technical Data &mdash; Commercial Items) and DFAR 227.7202-3 (Rights in Commercial
Computer Software or Computer Software Documentation). If a government agency has a need for rights not conveyed
under these terms, it must negotiate with Skuid to determine if there are acceptable terms for transferring such
rights, and a mutually acceptable written addendum specifically conveying such rights must be included in any
applicable contract or agreement.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Infringement.</strong> You will promptly notify Skuid if You
learn of a violation of any of Skuid&rsquo;s Intellectual Property Rights. Skuid may, but will not be obligated to,
prosecute such violation at Skuid&rsquo;s expense and to retain the full amount of any sums recovered as damages.
You will provide Skuid with reasonable cooperation in any such action at Skuid&rsquo;s expense. Provided, however,
if any violation relates to Your or any of Your User&rsquo;s actions or failure to act, You shall be responsible for
all expenses, including attorney fees, associated therewith as determined by a court of competent jurisdiction or
other trier of fact, to the extent that such action is finally determined to have resulted from Your negligence or
willful misconduct.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
10. Confidentiality</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Definition of Confidential Information.</strong> As used herein,
&ldquo;Confidential Information&rdquo; means all confidential information disclosed by a party (&ldquo;Disclosing
Party&rdquo;) to the other party (&ldquo;Receiving Party&rdquo;), whether orally or in writing, that is designated
as confidential or that reasonably should be understood to be confidential given the nature of the information and
the circumstances of disclosure. Without limiting the foregoing, Confidential Information of each party shall
include the terms and conditions of this Agreement and all Order Forms, as well as business and marketing plans,
technology and technical information, formulas, concepts, product plans and designs, and business processes
disclosed by such party. Your Confidential Information shall include Your Data; Skuid&rsquo;s Confidential
Information shall include the Skuid Services and all pricing terms. However, Confidential Information shall not
include any information that (i) is or becomes generally known to the public without breach of any obligation owed
to the Disclosing Party, (ii) was known to the Receiving Party prior to its disclosure by the Disclosing Party
without breach of any obligation owed to the Disclosing Party, (iii) is received from a third party without breach
of any obligation owed to the Disclosing Party, or (iv) was independently developed by the Receiving Party without
the breach of any obligation owed to the Disclosing Party.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Protection of Confidential Information.</strong> Except as
otherwise permitted in writing by the Disclosing Party, Confidential Information shall be received and maintained by
the Receiving Party in the strictest confidence in accordance with applicable law, and shall not be disclosed to any
third party. The Receiving Party shall use the same degree of care that it uses to protect the confidentiality of
its own Confidential Information of like kind (but in no event less than reasonable care) and shall limit access to
Confidential Information of the Disclosing Party to those of its employees, contractors, and agents who need such
access for purposes consistent with this Agreement and who have signed confidentiality agreements with the Receiving
Party containing protections no less stringent than those herein. Furthermore, neither party shall use such
Confidential Information for any purpose other than those purposes specified in this Agreement.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Compelled Disclosure.</strong> The Receiving Party may disclose
Confidential Information of the Disclosing Party if it is compelled by law to do so, provided the Receiving Party
gives the Disclosing Party prompt prior notice of such compelled disclosure to allow the Disclosing Party a
reasonable opportunity to contest the disclosure (to the extent legally permitted) and reasonable assistance, at the
Disclosing Party&apos;s cost, if the Disclosing Party wishes to contest the disclosure. If the Receiving Party is
compelled by law to disclose the Disclosing Party&apos;s Confidential Information as part of a civil or criminal
proceeding to which the Disclosing Party is a party, and the Disclosing Party is not contesting the disclosure, the
Disclosing Party will reimburse the Receiving Party for its reasonable cost of compiling and providing secure access
to such Confidential Information.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Privacy and Disclosure.</strong> Skuid will not access Your
networks or access or use any personal data or Your-sensitive business information under this Agreement, except when
necessary in the course of providing Skuid Services or Pro Services, and Skuid will not review, use, process,
disclose, or otherwise handle such information. To the extent applicable for the activities contemplated under this
Agreement, Skuid will comply with all applicable privacy and security laws to which it is subject, and will not, by
act or omission, place You in violation of any applicable privacy or security law.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Communications from Skuid.</strong> Users may be asked whether
or not they wish to receive marketing and other noncritical Skuid Services-related communications from Skuid from
time to time. Users may opt out of receiving such communications at that time or at any subsequent time by changing
their preference under Personal Setup. Note that because the Skuid Services is a hosted, online application, Skuid
occasionally may need to notify all Users (whether or not they have opted out as described above) of important
announcements regarding the operation of the Skuid Services.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Customer Reference; Trademark License.</strong> Each party may
display on its website and in sales presentation collateral the company logo of the other party, and may identify
Customer as a customer of Skuid in the ordinary course of business. Any other use of a party&rsquo;s logo shall be
upon prior written approval only; however, Skuid and Customer agree to discuss Customer&rsquo;s participation in the
Skuid Customer Reference Program which may include: (i) Skuid Customer Advisory board, (ii) Skuid Beta Release
program, (iii) reference calls with other companies that are evaluating Skuid, and iv) print or video testimonials.
Customer&rsquo;s approval to participate in the Skuid Customer Reference Program activities will not be unreasonably
withheld.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
11. Warranties and Disclosures</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Limited Warranty</strong>. Skuid does not guarantee or warrant
that the Skuid Services will properly function with the software of any third party unless specifically so stated
herein. Skuid warrants that the Skuid Services will perform substantially in accordance with the User Guide, so long
as You follow the instructions provided. The foregoing warranty is void if the failure of the Skuid Services is due
to Your act or failure to act (including, but not limited to, using the latest version or updates made available to
You at no cost by Skuid), the acts of others, or events beyond Skuid&rsquo;s reasonable control.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Limitation of Warranty.</strong> You understand and agree that
the Skuid Services are provided &ldquo;as is&rdquo; and, other than as expressly stated in Section 11.1, Skuid
disclaims all warranties of any kind, express or implied, including, without limitation, any warranty of
merchantability, fitness for a particular purpose or non-infringement. Skuid makes no warranty or representation
regarding the results that may be obtained from the use of the Skuid Services, regarding the accuracy or reliability
of any information obtained through the Skuid Services, or that the Skuid Service will meet Your requirements, or be
uninterrupted, timely, secure, or error free. Use of the Skuid Services is at Your sole discretion and risk. Except
with respect to breach of Section 10 (Confidentiality) and Section 12 (Indemnification by Skuid), You will be solely
responsible for any damage resulting from Your use of the Skuid Services. Except with respect to breach of Section
10 (Confidentiality), Section 11.1 (Limited Warranty) and Section 12 (Indemnification by Skuid), the entire risk
arising out of use or performance of the Skuid Services remains with You.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Warranty on Pro Services.</strong> Skuid warrants and represents
that it and its employees and agents have all training, skills, tools, and equipment necessary to competently
perform the Pro Services described herein and that such Pro Services shall be performed in a timely, professional,
and high-quality manner. To the extent permitted by law, Skuid makes no other warranties on Pro Services, whether
written, oral, or implied including without limitation the implied warranties of merchantability and fitness for a
particular purpose.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Mutual Warranties.</strong> Each party represents and warrants
that (i) it has the legal power to enter into this Agreement, and (ii) it will not transmit to the other party any
Malicious Code.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
12. Indemnification by Skuid</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Indemnification.</strong> Skuid will indemnify, defend, and hold
You harmless against any claim, demand, suit, or proceeding (&ldquo;Claim&rdquo;) made or brought against You
alleging that the use of the Skuid Services as permitted hereunder infringes or misappropriates the intellectual
property rights of a third party. Skuid&rsquo;s obligations in this Section 12 are void if You fail to (a) give
prompt written notice of the Claim; (b) give Skuid sole control of the defense and settlement of the Claim (provided
that Skuid may not, without Your prior approval, settle any Claim unless the settlement unconditionally releases You
of all liability); and (c) provided to Skuid all reasonable assistance, at Skuid&rsquo;s expense.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Injunction.</strong> If an injunction is issued against Your use
of the Skuid Services due to a covered infringement, or if in Skuid&rsquo;s judgment any Skuid Services are likely
to become the subject of a successful claim of infringement, Skuid may at its option and expense: (i) procure for
You the right to use such services, or (ii) replace or modify such services so they become non-infringing, or if
options (i) and (ii) are not available despite Skuid&rsquo;s commercially reasonable efforts, (iii) terminate the
subscriptions granted under this Agreement, disable Your access to the Skuid Services, and refund to You an amount
equal to the amortized Subscription Fee paid by You for the remainder of the term.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Limitation.</strong> This Section 12 states Skuid&rsquo;s sole
liability to You, and Your exclusive remedy against Skuid for any type of Claim described in this Section. Skuid
shall have no obligation to You to the extent a Claim arises from (i) any modification of the Skuid Services not
performed by Skuid or (ii) any failure to use corrections or enhancements made available to You that would have
rendered the Skuid Services non-infringing, or (iii) any use of the Skuid Services in combination with any product
or information not supplied or recommended by Skuid except where combination is required to utilize the Skuid
Services.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
13. Indemnification by You</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Indemnification.</strong> You will indemnify, defend, and hold
harmless Skuid against any Claim made or brought against Skuid relating to (i) the content or use of Your Data, or
(ii) Your use of the Skuid Services in violation of any term of this Agreement, provided that Skuid (a) promptly
gives You written notice of the Claim; (b) gives You sole control of the defense and settlement of the Claim
(provided that You may not, without Skuid&rsquo;s prior approval, settle any Claim unless the settlement
unconditionally release Skuid of all liability); and (c) provide to You all reasonable assistance, at Your expense.
</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
14. Limitation of Liability</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Limitation of Liability.</strong> Except with respect to a
breach of Skuid&rsquo;s obligation of confidentiality or its indemnity obligations, in no event shall Skuid be
liable for: (i) any special, indirect, incidental, exemplary, punitive, consequential damages, loss of revenues or
loss or inaccuracy of Data or cost of procurement of substitute goods, services or technology, even if Skuid has
been notified of the possibility of such damages; or (ii) damages in excess of the amount of fees paid by You under
this Agreement during the 12 months prior to the event giving rise to the claim. The foregoing limitation of
liability shall apply to any claim arising under or relating to this Agreement, the Skuid Services, Pro Services or
any other services provided by Skuid under any theory of liability including contract, strict liability, indemnity,
tort (including negligence), or otherwise. Limitation of liability for transfer, protection, storage, security, or
confidentiality of Your Data is governed by Your applicable third-party Data Platform provider agreement.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Exclusion of Consequential and Related Damages.</strong> Except
with respect to breaches of Section 10 (Confidentiality), Section 12 (Indemnification by Skuid), or Section 13
(Indemnification by You) in no event shall either party have any liability to the other party for any lost profits
or revenues or for any indirect, special, incidental, consequential, cover or punitive damages however caused,
whether in contract, tort or under any other theory of liability, and whether or not the party has been advised of
the possibility of such damages. The foregoing disclaimer shall not apply to the extent prohibited by applicable
law.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
15. Terms and Termination</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Term of Agreement.</strong> This Agreement commences on the
Effective Date and continues, unless earlier terminated, until the later of expiration or termination of all user
subscriptions granted under an Order Form.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Renewals.</strong> Skuid charges and collects in advance for use
of the Skuid Services. Unless otherwise set forth in an applicable Order Form, subscriptions will automatically
renew for additional periods equal to the shorter of the expiring subscription term or one year, unless either party
gives notice of nonrenewal at least thirty (30) days prior to the end of the Term, as it may have been previously
extended. The renewal charge will be equal to the then-current number of total user subscriptions times the
then-current, generally applicable subscription fee unless specified otherwise on an applicable Order Form.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Termination for Cause.</strong> A party may terminate this
Agreement for cause: (i) upon thirty (30) days written notice to the other party of a material breach, if the breach
remains uncured at the expiration of such period, or (ii) if the other party becomes the subject of a petition in
bankruptcy or any other proceeding relating to insolvency, receivership, liquidation, or assignment for the benefit
of creditors.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Refund or Payment upon Termination.</strong> Upon any
termination for cause by You, Skuid will refund any prepaid fees covering the remainder of the Term of all
subscriptions after the effective date of termination. Upon any termination for cause by Skuid, You will not be
entitled to a refund of any prepaid fees. You will pay any unpaid subscription fees otherwise due as of the
termination date, and You will pay any other outstanding balances owed to Skuid.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Return of Your Metadata.</strong> Skuid will provide Your
Metadata to You upon request.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Surviving Provisions.</strong> All obligations relating to
non-use and non-disclosure of Confidential Information, indemnity, limitation of liability, and such other terms
which by their nature survive termination, will survive termination of this Agreement.</li>
</ol>
<h3
style="box-sizing: border-box; margin-top: 3rem; margin-bottom: 1rem; font-family: Moon, Arial, sans-serif; font-size: 1.75rem; line-height: 1.28em; font-weight: 600; letter-spacing: -0.03em; color: rgb(27, 28, 29); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
16. Miscellaneous Provisions</h3>
<ol
style="box-sizing: border-box; margin-top: 1rem; margin-bottom: 1rem; padding-left: 40px; overflow: hidden; color: rgb(27, 28, 29); font-family: Inter, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Export Compliance.</strong> Each party shall comply with the
export laws and regulations of the United States and other applicable jurisdictions in providing and using the Skuid
Services. Without limiting the foregoing, (i) each party represents that it is not named on any U.S. government list
of persons or entities prohibited from receiving exports, (ii) You shall not permit Users to access or use the Skuid
Services in violation of any U.S. export embargo, prohibition, or restriction, and (iv) You will not export,
re-export, divert, transfer, or disclose any portion of the Skuid Services or any related technical information or
materials, directly or indirectly, in violation of any applicable export law or regulation.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Relationship of the Parties.</strong> The parties are
independent contractors. This Agreement does not create a partnership, franchise, joint venture, agency, fiduciary,
or employment relationship between the parties. There are no third-party beneficiaries to this Agreement.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Non-solicitation.</strong> Neither party shall during the term
of this Agreement and for a period of 1 year immediately following the termination of this Agreement, or any
extension of it, for any reason, either directly or indirectly, knowingly recruit or solicit for employment any of
the other party&rsquo;s employees.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Waiver and Cumulative Remedies.</strong> No waiver of any
provision of this Agreement will be effective unless in writing and signed by the party against whom such waiver is
sought to be enforced. A waiver of any provision of this Agreement by either party will not be construed as a waiver
of any other provision of this Agreement, nor will such waiver operate as or be construed as a waiver of such
provision respecting any future event or circumstance. Other than as expressly stated herein, the remedies provided
herein are in addition to, and not exclusive of, any other remedies of a party at law or in equity.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Severability.</strong> If any provision of this Agreement is
held by a court of competent jurisdiction to be contrary to law, the provision shall be modified by the court and
interpreted so as best to accomplish the objectives of the original provision to the fullest extent permitted by
law, and the remaining provisions of this Agreement shall remain in effect.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Notices.</strong> If notice or demand is required or permitted
to be given or served by either party to this Agreement to or on the other, the notice or demand must be given or
served in writing and served personally or forwarded by certified or registered mail, return receipt requested, or
by guaranteed overnight courier service, addressed to Skuid at 605 Chestnut Street, Suite 700, Chattanooga, TN 37450
or dept.legal@skuid.com, or to You at the email address You have provided. The date of service of a notice served by
mail or overnight courier service will be the date of receipt or refusal of receipt. Either party may change its
address by written notice to the other.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Governing Law and Jurisdiction.</strong> This Agreement and the
respective rights and obligations of the parties hereto shall be governed by and construed in accordance with the
laws of the State of Tennessee and controlling United States law, without giving effect to choice of law principles.
The parties hereto consent to the jurisdiction of the courts in Chattanooga, Tennessee.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Waiver of Jury Trial.</strong> Each party hereby waives any
right to jury trial in connection with any action or litigation in any way arising out of or related to this
Agreement.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Attorney Fees.</strong> Should either party bring an action to
enforce the terms of this Agreement, the prevailing party shall be entitled to recover its reasonable
attorneys&rsquo; fees and costs from the other party.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Language and Headings.</strong> This Agreement has been prepared
in the English language and such version shall be controlling in all respects and any non-English version of this
Agreement is solely for accommodation purposes. The captions and headings appearing in this Agreement are for
reference only and will not be considered in construing this Agreement.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Assignment.</strong> Neither party may assign any of its rights
or obligations hereunder, whether by operation of law or otherwise, without the prior written consent of the other
party (not to be unreasonably withheld). Notwithstanding the foregoing, Skuid may assign this Agreement in its
entirety, without Your consent, to its Affiliate or in connection with a merger, acquisition, corporate
reorganization, or sale of all or substantially all of its assets not involving a direct competitor of the other
party. A party&rsquo;s sole remedy for any purported assignment by the other party in breach of this paragraph shall
be, at the non-assigning party&rsquo;s election, termination of this Agreement upon written notice to the assigning
party. Subject to the foregoing, this Agreement shall bind and inure to the benefit of the parties, their respective
successors and permitted assigns.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Entire Agreement.</strong> This Agreement, including any Order
Forms, constitutes the entire agreement between the parties and supersedes all prior and contemporaneous agreements,
proposals, or representations, written or oral, concerning its subject matter. No modification, amendment, or waiver
of any provision of this Agreement or any Order Form, shall be effective unless in writing and either signed or
accepted electronically by the party against whom the modification, amendment or waiver is to be asserted. To the
extent of any conflict or inconsistency between the provisions in the body of this Agreement and any Order Form,
such Order Form shall prevail. Notwithstanding any language to the contrary therein, no terms or conditions stated
in forms (such as purchase orders or invoices) provided by either party with preprinted or &ldquo;boilerplate&rdquo;
language shall be incorporated into or form any part of this Agreement, and all such terms or conditions shall be
null and void.</li>
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
style="box-sizing: border-box; font-weight: 600;">Force Majeure.</strong> Except for Your payment obligations,
neither party shall be liable to the other for any loss or damage due to delay or failure to perform due to flood,
riot, insurrection, fire, earthquake, strike, communication line failure and power failure, explosion, act of God,
death or incapacitating illness or injury to key personnel, or any other force or cause beyond the reasonable
control of the party.</li>
</ol>
</content>
<button class="np-button" id='eula-button' style="width: 160px; height: 50px; margin-bottom: 30px; margin-left: 15%;">
Return to registration
</button>
</main>
<script>
$('#eula-button').click(function() {
if (!history.back()) {
close();
}
})
</script>

View File

@ -0,0 +1,25 @@
<main class="np-box-container">
<div class="np-box">
{% include "header_minimal" %}
<div class="np-box-content-container">
<form class="np-form np-box-content" action="{% route forgot_password_create %}" method="post" novalidate>
{% form_authenticity_token %}
<div class="np-form-field">
<label class="np-input-label" for="learner_email">
{% t shared.email_address %}
</label>
<input
autofocus="autofocus"
class="np-input"
id="learner_email"
name="learner[email]"
type="email"
>
</div>
<button type="submit" class="np-button np-button-big np-button-large-font np-form-action" style="border-radius: 7%/55%;">
{% t .button_label %}
</button>
</form>
</div>
</div>
</main>

View File

@ -0,0 +1,364 @@
{% comment %} skip-auth {% endcomment %}
{% if current_person.signed_in? %}
{% assign countComplete = 0 %}
{% assign countInProgress = 0 %}
{% assign countNotStarted = 0 %}
{% assign countTotal = 0 | times: 1.0 %}
{% for course in courses.enrolled %}
{% assign countTotal = countTotal | plus: 1 %}
{% if course.progress == 100 %}
{% assign countComplete = countComplete | plus: 1 %}
{% endif %}
{% if course.progress > 0 and course.progress < 100 %}
{% assign countInProgress=countInProgress | plus: 1 %}
{% endif %}
{% if course.progress==0 %}
{% assign countNotStarted=countNotStarted | plus: 1 %}
{% endif %}
{% endfor %}
{% endif %}
{% assign view_more_counter = 0 %}
{% include "header" %}
{% unless current_person.signed_in? %}
{% include 'welcome_hero' %}
{% endunless %}
<div class="page-container">
{% if current_person.signed_in? %}
<div class="np-hidden-mobile custom-sub-navigation">
{% include "sub_navigation" %}
</div>
{% endif %}
<main class="np-main np-dashboard np-subpage-container np-max-width custom-main">
{% if current_person.signed_in? %}
{% include 'welcome_hero' %}
{% include 'statistics' %}
<div class="np-hidden-mobile">
{% include 'overview_video' %}
</div>
{% endif %}
{% unless current_person.signed_in? %}
<div class="learning-path-not-logged">
{% include 'learning_paths_collection' %}
</div>
<h2 class="no-course-message" style="display: none;">No courses for this filter!</h2>
{% include "course_collection_unlogged" %}
<div class="np-hidden-desktop">
<div class="np-catalog-courses row row-with-thumbnails homepage-courses">
{% for course in courses.in_catalog %}
{% if view_more_counter < 4%}
{% assign view_more_counter = view_more_counter | plus: 1%}
<div class="col-xs-12 col-md-6 col-lg-4 np-stretch-content">
{% include "cards_course" with course, class: "" %}
</div>
{% else %}
<div class="col-xs-12 col-md-6 col-lg-4 np-stretch-content view-more-hidden">
{% include "cards_course" with course, class: "" %}
</div>
{% endif%}
{% endfor %}
{% if view_more_counter >= 4%}
<button class="np-top-button np-button-font-color np-button np-button-big view-more-button" onclick="viewMore()">View More</button>
{% endif %}
</div>
</div>
{% endunless %}
{% if current_person.signed_in? %}
<div class="row np-flex-center homepage-courses-lp-container">
<div class="col-xs-12 col-sm-8 main-dashboard">
{% if features.learning_paths? %}
<div>
<div class="lp-and-recently-completed-course-container np-hidden-mobile">
<div style="width: 64%">
{% if learning_paths.enrolled.any? %}
{% include "learning_paths_index_homepage", items: learning_paths.enrolled %}
{% endif %}
</div>
<div style="width: 31%">
{% include 'recent_course' %}
</div>
</div>
<div>
{% include 'dashboard_course_filter' %}
<h2 class="no-course-message" style="display: none;">No courses for this filter!</h2>
{% include "course_collection" %}
<div class="np-hidden-desktop">
<div class="np-catalog-courses row row-with-thumbnails homepage-courses">
{% for course in courses.enrolled %}
{% if view_more_counter < 4 %}
{% assign view_more_counter = view_more_counter | plus: 1%}
<div class="col-xs-12 col-md-6 col-lg-4 np-stretch-content">
{% include "cards_course" with course, class: "" %}
</div>
{% else %}
<div class="col-xs-12 col-md-6 col-lg-4 np-stretch-content view-more-hidden">
{% include "cards_course" with course, class: "" %}
</div>
{% endif%}
{% endfor %}
{% if view_more_counter >= 4%}
<button class="np-top-button np-button-font-color np-button np-button-big view-more-button" onclick="viewMore()">View More</button>
{% endif %}
</div>
</div>
</div>
</div>
{% endif %}
</div>
</div>
{% endif %}
</main>
</div>
<script crossorigin="anonymous" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js" type="text/javascript"></script>
{% include "footer" %}
<script>
function initializeCarousel(slickContainerClass, visibleSlides) {
$(slickContainerClass).slick({
slidesToShow: visibleSlides,
slidesToScroll: 1,
dots: false,
infinite: true,
cssEase: 'linear',
prevArrow: '<svg viewBox="0 0 20 20" class="_1ycOA _left"><path d="M12 16a.997.997 0 0 1-.707-.293l-5-5a.999.999 0 0 1 0-1.414l5-5a.999.999 0 1 1 1.414 1.414L8.414 10l4.293 4.293A.999.999 0 0 1 12 16" fill-rule="evenodd"></path></svg>',
nextArrow: '<svg viewBox="0 0 20 20" class="_1ycOA _right"><path d="M8 16a.999.999 0 0 1-.707-1.707L11.586 10 7.293 5.707a.999.999 0 1 1 1.414-1.414l5 5a.999.999 0 0 1 0 1.414l-5 5A.997.997 0 0 1 8 16" fill-rule="evenodd"></path></svg>'
});
}
$(document).ready(function () {
initializeCarousel('.carousel', 3)
var slider = tns({
container: `.lp-carousel`,
items: 1,
nav: false,
mouseDrag: true,
autoHeight: true,
autoplay: false,
controls: true,
autoplayButtonOutput: false,
navPosition: 'bottom',
controlsText: ['<i class="fas fa-chevron-left"></i>', '<i class="fas fa-chevron-right"></i>']
});
})
function textDisplayCount() {
let courseCount = $('#dash-sort').children().length;
return courseCount
}
function selectAll() {
$(".select-selected").html("All").change();
filterCourse()
$(".select-items div").each(function () {
if ($(this).text() == $(".select-selected").text()) {
$(this).addClass("same-as-selected");
} else {
$(this).removeClass("same-as-selected");
}
});
$(".missing").hide();
}
</script>
<style>
.tns-item img {
margin: auto;
}
[data-controls="prev"] {
margin-left: -3%;
}
[data-controls="next"] {
margin-right: -3%;
}
.tns-outer {
position: relative;
box-shadow: 5px 5px 0px rgb(128 173 220 / 32%);
border-radius: 8px;
}
.tns-controls {
position: absolute;
z-index: 100;
top: 50%;
transform: translate(0,-50%);
width: 100%;
display: flex;
justify-content: space-between;
}
.tns-controls > * {
border: none;
letter-spacing: 0.01em !important;
line-height: 0;
touch-action: manipulation;
user-select: none;
-webkit-tap-highlight-color: transparent;
-webkit-font-smoothing: antialiased;
text-size-adjust: 100%;
--polaris-version-number: "4.27.0";
--polaris-animation-skeleton-shimmer: polaris-SkeletonShimmerAnimation;
--toast-translate-y-out: 15rem;
--toast-translate-y-in: 0;
--global-ribbon-height: 0px;
--p-text-subdued: #6d7175;
--p-card-shadow: 0 0.2rem 0.4rem #dfe3e8;
--top-bar-background: #00848e;
--top-bar-background-lighter: #1d9ba4;
--top-bar-color: #f9fafb;
--p-frame-offset: 0px;
font-family: -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI,
Roboto, Helvetica Neue, sans-serif;
cursor: pointer;
box-sizing: border-box;
fill: #292824;
vertical-align: middle;
width: 30px;
height: 30px;
border-radius: 50%;
background: #fff;
box-shadow: 0 0 1px rgba(66, 71, 76, 0.45), 0 2px 1px rgba(0, 0, 0, 0.05);
}
@media (min-width: 769px) and (max-width: 1024px) {
.custom-sub-navigation {
width: 30%;
}
.custom-main {
width: 70%;
padding-top: 0;
}
.np-homepage-hero-image {
min-height: auto;
}
}
@media (min-width: 1025px) and (max-width: 2500px) {
.custom-sub-navigation {
width: 25%;
}
.custom-main {
width: 75%;
padding-top: 0;
}
}
/* @media (min-width: 1025px) {
.badges {
width: 19%;
}
} */
.recent-view-header {
text-align:center;
}
@media (min-width: 1025px) and (max-width: 2500px) {
.recent-view-header {
padding-top: 1%;
}
}
@media (min-width: 2501px) {
.recent-view-header {
padding: 5px 110px 0;
}
}
.learning-path-not-logged {
margin-left: auto;
margin-right: auto;
margin-bottom: 130px;
width: 94%;
}
@media (max-width: 768px) {
.homepage-courses-lp-container {
--bs-gutter-x: 0;
}
}
.homepage-courses {
max-width: 90%;
width: 90%;
margin-right: auto !important;
margin-left: auto !important;
}
.lp-carousel > .slick-list > .slick-track{
display: flex;
flex-flow: row wrap;
align-items: center;
}
@media (min-width: 1500px) {
.lp-carousel > .slick-list > .slick-track > .course-slide > .np-card-container{
box-shadow: none;
}
.lp-carousel > .slick-list {
box-shadow: 5px 5px 0px rgb(128 173 220 / 32%);
border-radius: 8px;
}
}
.lp-and-recently-completed-course-container {
margin-bottom: 30px;
display: flex;
justify-content: space-between;
align-items: center;
}
.branding-message {
padding: 55px 0;
text-align: center;
font-family: F37 Moon !important;
font-style: normal;
font-weight: normal;
}
.main-dashboard {
width: 100%;
}
.np-learning-paths-resources {
display: flex;
}
.np-learning-paths-resources > .np-card {
padding: 0;
display: flex;
}
@media(min-width: 769px) {
.np-learning-paths-resources > .np-card > .np-card-container {
height: 138%;
}
.np-learning-path {
height: 100%;
}
.np-learning-path-image {
width: 40%;
}
}
.np-card-text-wrapper {
display: flex;
}
</style>

View File

@ -0,0 +1,15 @@
{% include "header" %}
<div class="page-container">
<div class="np-hidden-mobile">
{% include "sub_navigation" %}
</div>
<main class="np-main np-max-width np-page-container">
<div class="np-hidden-mobile" id="learning-path-desktop">
{% include "learning_path_desktop_view" %}
</div>
<div class="np-hidden-desktop" id="learning-path-mobile">
{% include "learning_path_mobile_view" %}
</div>
</main>
</div>
{% include "footer" %}

View File

@ -0,0 +1,49 @@
{% include "header" %}
<div class="page-container">
<div class="np-hidden-mobile">
{% include "sub_navigation" %}
</div>
<main class="np-main np-learning-paths np-subpage-container np-max-width">
<div class="np-learning-paths-main">
<div class="np-resource-title np-hidden-mobile">
{% t shared.learning_paths %}
</div>
<div class="np-hidden-desktop lp-title">Learning Paths</div>
<div class="np-resource-subtitle np-hidden-mobile">
{% t .subtitle %}
</div>
<div class="np-hidden-desktop lp-subtitle">Explore curated sets of courses for a tailored learning experience.</div>
{% include "learning_paths_index", items: learning_paths.available %}
</div>
</main>
</div>
{% include "footer" %}
<style>
@media (max-width: 768px) {
.np-learning-paths {
padding: 25px 5% 0;
}
.lp-title {
font-family: F37 Moon;
font-style: normal;
font-weight: normal;
font-size: 36px;
}
.lp-subtitle {
font-family: F37 Moon;
font-style: normal;
font-weight: normal;
font-size: 18px;
}
}
@media (min-width: 769px) {
.np-card-content-description {
display: block;
min-height: 0;
}
}
</style>

View File

@ -0,0 +1,171 @@
<body>
{% include "header" %}
<main class="np-main np-box-container">
<div class="np-box">
<img class="hero-image-left-desktop" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/SkuidSkool-RegisterHero.svg">
<img class="hero-image-left-mobile" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/skuid+skool+V3.svg">
<div class="np-box-content-container">
<form class="np-form np-box-content" action="{% route login %}" method="post" novalidate>
<div class="np-form-title"> Welcome to Skuid Skool </div>
<div class="np-form-subtitle"> Login below </div>
{% form_authenticity_token %}
<div class="np-form-field">
<label class="np-input-label" for="learner_email">
{% t shared.email_address %}
</label>
<input
class="np-input"
autofocus="autofocus"
type="email"
name="learner[email]"
id="learner_email"
>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_password">
{% t shared.password %}
</label>
<input
class="np-input"
type="password"
name="learner[password]"
id="learner_password"
>
</div>
<button type="submit" class="np-button np-button-big np-button-large-font np-form-action" style="border-radius: 56px;">
{% t shared.sign_in %}
</button>
<a class="np-form-link np-button-color" href="{% route forgot_password_new %}">
{% t .forgot_password %}
</a>
{% if features.account_creation? %}
<a class="np-form-link np-button-color" href="{% route sign_up %}">
{% t shared.sign_up %}
</a>
{% endif %}
{% if features.request_access? %}
<a
class="np-form-link np-button-color"
target="_blank"
href="{{ current_school.request_access_link }}"
>
{{ current_school.request_access_label }}
</a>
{% endif %}
</form>
</a>
</span>
</div>
</div>
</main>
{% include "footer" %}
</body>
<style>
.np-main {
margin: 25px 0;
}
.np-box {
display: flex;
flex-direction: row;
width: unset !important;
box-shadow: none;
}
.np-box-container {
height: unset !important;
}
.hero-image-left-desktop {
width: 60%;
}
.hero-image-left-mobile {
width: 100%;
display: none;
}
.np-box-content-container {
margin-top: 0;
margin-bottom: 0;
padding: 2rem 0 2rem 2.25rem;
display: flex;
flex-direction: column;
}
.np-form-title {
font-weight: 600;
color: #1B1C1D;
font-size: 28px;
justify-content: center;
text-align: center;
margin-bottom: 0;
}
.np-form-subtitle {
color: #1B1C1D;
font-size: 16px;
justify-content: center;
text-align: center;
margin-bottom: 1.25rem;
}
.np-input {
background-color: #FFF6F0;
border: none;
border-radius: 4px;
}
.np-input::placeholder {
color: #6F7277;
font-size: 16px;
}
#default-option {
color: #6F7277;
font-size: 16px;
}
.selection-option {
font-family: Inter;
}
.body {
height: 100%;
}
#learner_role {
color: #1B1C1D;
text-align: left;
text-align-last: left;
}
@media only screen and (min-width: 1190px) {
.hero-image-left-desktop {
min-width: 60%;
}
.np-box-content-container {
margin-right: 40px;
}
}
@media only screen and (max-width: 768px) {
.np-box-content-container {
padding: 2rem 2rem 2.25rem;
}
.hero-image-left-desktop {
display: none;
}
.hero-image-left-mobile {
display: block;
}
.np-box {
flex-direction: column;
margin: 0;
}
.np-main {
margin: 0;
}
.np-box-content-container {
margin-left: 0;
}
}
#send_button {
pointer-events: none;
background-color: #6F7277;
}
</style>
<script>
document.getElementById("header").scrollIntoView();
if ($('.np-alert-wrapper>div>p>strong').text() === 'Ooops! Please try again.') {
$('.np-alert-wrapper>div>p>strong').text('Oops! Please try again.')
}
</script>

View File

@ -0,0 +1,43 @@
<main class="np-box-container">
<div class="np-box">
{% include "header_minimal" %}
<div class="np-box-content-container">
<form class="np-form np-box-content" method="post" action="{% route forgot_password_create %}">
<input type="hidden" name="_method" value="put">
<input
type="hidden"
value="{{ reset_password_token }}"
name="learner[reset_password_token]"
id="learner_reset_password_token"
>
{% form_authenticity_token %}
<div class="np-form-field">
<label class="np-input-label" for="learner_password">
{% t .new_password %}
</label>
<input
class="np-input"
autofocus="autofocus"
type="password"
name="learner[password]"
id="learner_password"
>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_password_confirmation">
{% t .confirm_new_password %}
</label>
<input
class="np-input"
type="password"
name="learner[password_confirmation]"
id="learner_password_confirmation"
>
</div>
<button type="submit" class="np-button np-button-big np-form-action" style="border-radius: 7%/55%;">
{% t .change_password %}
</button>
</form>
</div>
</div>
</main>

View File

@ -0,0 +1,45 @@
{% include "header" %}
<div class="page-container">
<div class="np-hidden-mobile">
{% include "sub_navigation" %}
</div>
<main class="np-main np-search np-subpage-container np-max-width">
<div class="np-resource-title">
{% t .title %}
</div>
<div class="np-search-header">
<div class="np-resource-subtitle">
{% t .showing %}
<span class="np-resource-subtitle-number">{{ results.count }}</span>
{% t .results_for %}
<span class="np-button-color">"{{ results.term }}"</span>
</div>
{% capture label %}{% t shared.filters.by_type %}{% endcapture %}
{%
include "filter_dropdown",
filters: results.filters,
key: "type",
label: label
%}
</div>
{% if results.items.any? %}
{% render "search_result" for results.items as result %}
{% else %}
{% include "search_zero_state" %}
{% endif %}
</main>
</div>
{% include "footer" %}
<style>
@media (max-width: 768px) {
.np-search {
padding: 25px 5% 0;
}
}
.np-filter {
display: none;
}
</style>

View File

@ -0,0 +1,302 @@
{% for group in current_person.groups %}
{% if group.id == "29ae12e6-f740-4190-a5c2-a7e12e87926f" or group.id == "aa36069f-e354-4dbe-9972-9ce70ad146d7" or group.id == "8cd6ec9c-101e-4b1a-82c7-77dac583a1f5" %}
<script>
window.location.replace('/app');
</script>
{% endif %}
{% endfor %}
<body>
{% include "header" %}
<main class="np-main np-box-container">
<div class="np-box">
<img class="hero-image-left-desktop" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/SkuidSkool-RegisterHero.svg">
<img class="hero-image-left-mobile" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/skuid+skool+V3.svg">
<div class="np-box-content-container">
<form id="register-form" class="np-form np-box-content" novalidate>
<div class="np-form-title"> Welcome to Skuid Skool </div>
<div class="np-form-subtitle"> We need a little more information to tailor the best courses to your role </div>
{% form_authenticity_token %}
<div class="np-form-field">
<label class="np-input-label" for="learner_company">
</label>
<input
class="np-input"
type="text"
name="learner[company]"
id="learner_company"
placeholder="Company"
required
>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_title">
</label>
<input
class="np-input"
type="text"
name="learner[title]"
id="learner_title"
placeholder="Job Title"
required
>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_role">
</label>
<select
class="np-input"
name="learner[role]"
id="learner_role"
required
>
<option class="default-option" disabled selected id="default-option">Your Skuid Builder Role</option>
<option class="selection-option" value="developer">Developer</option>
<option class="selection-option" value="salesforce-administrator">Salesforce Administrator</option>
<option class="selection-option" value="other">Other</option>
</select>
</div>
</form>
<button id="send_button" onclick="SendInfos()" class="np-button np-button-big np-button-large-font np-form-action" style="border-radius: 56px;">
Update Information
</button>
</div>
</div>
</main>
{% include "footer" %}
</body>
<style>
@media (min-width: 1440px) {
#password-too-short-alert {
position: absolute;
right: 25.5%;
bottom: 23%;
color: salmon;
font-size: 13px;
}
#passwords-dont-match-alert {
position: absolute;
right: 23%;
bottom: 14.5%;
color: salmon;
font-size: 13px;
}
}
@media (min-width: 769px) and (max-width: 1024px) {
#password-too-short-alert {
position: absolute;
right: 24%;
bottom: 23%;
color: salmon;
font-size: 13px;
}
#passwords-dont-match-alert {
position: absolute;
right: 21.5%;
bottom: 14.5%;
color: salmon;
font-size: 13px;
}
}
@media (min-width: 426px) and (max-width: 768px) {
.np-box-content-container {
align-items: center;
}
}
@media (min-width: 376px) and (max-width: 425px) {
.np-input {
padding: 0 0.75rem;
}
}
@media (min-width: 326px) and (max-width: 375px) {
.np-input {
padding: 0 0.75rem;
}
}
@media (max-width: 325px) {
.np-input {
padding: 0 0.75rem;
}
}
.np-main {
margin: 25px 0;
}
.np-box {
display: flex;
flex-direction: row;
width: unset !important;
box-shadow: none;
}
.np-box-container {
height: unset !important;
background: none;
}
.hero-image-left-desktop {
width: 60%;
}
.hero-image-left-mobile {
width: 100%;
display: none;
}
.np-box-content-container {
margin-top: 0;
margin-bottom: 0;
padding: 2rem 0 2rem 2.25rem;
display: flex;
flex-direction: column;
}
.np-form-title {
font-weight: 600;
color: #1B1C1D;
font-size: 28px;
justify-content: center;
text-align: center;
margin-bottom: 0;
}
.np-form-subtitle {
color: #1B1C1D;
font-size: 16px;
justify-content: center;
text-align: center;
margin-bottom: 1.25rem;
}
.np-input {
background-color: #FFF6F0;
border: none;
border-radius: 4px;
}
.np-input::placeholder {
color: #6F7277;
font-size: 16px;
}
#default-option {
color: #6F7277;
font-size: 16px;
}
.selection-option {
font-family: Inter;
}
.body {
height: 100%;
}
#learner_role {
color: #1B1C1D;
text-align: left;
text-align-last: left;
}
@media only screen and (min-width: 1190px) {
.hero-image-left-desktop {
min-width: 60%;
}
.np-box-content-container {
margin-right: 40px;
}
}
@media only screen and (max-width: 768px) {
.np-box-content-container {
padding: 2rem 2rem 2.25rem;
}
.hero-image-left-desktop {
display: none;
}
.hero-image-left-mobile {
display: block;
}
.np-box {
flex-direction: column;
margin: 0;
}
.np-main {
margin: 0;
}
.np-box-content-container {
margin-left: 0;
}
}
#send_button {
pointer-events: none;
background-color: #6F7277;
}
.loader {
border: 16px solid #f3f3f3;
border-radius: 50%;
border-top: 16px solid #00bf8f;
border-bottom: 16px solid #00bf8f;
width: 120px;
height: 120px;
-webkit-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
position: absolute;
top:0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
<script>
document.getElementById("header").scrollIntoView();
function checkIfInputsExist (){
window.setTimeout(function(){
if ($("#learner_company")[0].value.length * $("#learner_title")[0].value.length && $("#learner_role")[0].value != "Your Skuid Builder Role") {
$("#send_button").css("background-color","#005cb9");
$("#send_button").css("pointer-events","auto");
}
else {
$("#send_button").css("background-color","#6F7277");
$("#send_button").css("pointer-events","none");
}
}, 500)
}
document.addEventListener('keydown', checkIfInputsExist);
document.getElementById("learner_role").addEventListener('change', checkIfInputsExist);
function SendInfos() {
var xhr = new XMLHttpRequest();
url = "https://www.workato.com/webhooks/rest/bd1a1eb7-7e79-4208-a1db-8e9c7440bcc9/user_registration"
xhr.addEventListener("load", e => {
var a = new URLSearchParams(window.location.search);
var b = a.get('redirect_uri');
new_url = '/app/waiting-room'.concat('?redirect_uri=', b);
window.location.replace(new_url);
});
xhr.open("POST", url, true);
xhr.send(JSON.stringify({
user_id: '{{ current_person.id }}',
company: $("#learner_company")[0].value,
title: $("#learner_title")[0].value,
role: $("#learner_role")[0].value
}));
};
</script>
<style>
.np-box-container {
background: none;
}
</style>

View File

@ -0,0 +1,362 @@
{% if current_person.signed_in? %}
<script>
window.location.replace('/app')
</script>
{% endif %}
<body>
{% include "header" %}
{% include "messages" %}
<main class="np-main np-box-container">
<div class="np-box">
<img class="hero-image-left-desktop" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/SkuidSkool-RegisterHero.svg">
<img class="hero-image-left-mobile" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/skuid+skool+V3.svg">
<div class="np-box-content-container">
<form id="register-form" class="np-form np-box-content" action="{% route sign_up %}" method="post" novalidate>
<div class="np-form-title"> Welcome to Skuid Skool </div>
<div class="np-form-subtitle"> Complete your profile below </div>
{% form_authenticity_token %}
<div class="np-form-field">
<label class="np-input-label" for="learner_first_name">
</label>
<input
class="np-input"
type="text"
name="learner[first_name]"
id="learner_first_name"
placeholder="First Name"
required
>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_last_name">
</label>
<input
class="np-input"
type="text"
name="learner[last_name]"
id="learner_last_name"
placeholder="Last Name"
required
>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_email">
</label>
<input
class="np-input"
type="email"
name="learner[email]"
id="learner_email"
placeholder="Email"
required
>
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_password">
</label>
<input
class="np-input"
type="password"
name="learner[password]"
id="learner_password"
placeholder="Password"
required
>
</div>
<p style="display: none;" id="password-too-short-alert">Password must be minimum 8 characters and contain at least 1 uppercase letter, 1 number, and 1 special character</p>
<div class="np-form-field">
<label class="np-input-label" for="learner_second_password">
</label>
<input
class="np-input"
type="password"
name="learner[second-password]"
id="learner_second_password"
placeholder="Verify Password"
required
>
</div>
<div class="np-form-field">
<label class="np-input-label" for="hear_about">
</label>
<select
class="np-input"
type="text"
name="how_did_you_hear"
id="how_did_you_hear"
required
>
<option value="" selected>How did you Hear about Skuid Skool?</option>
<option value="Colleague or Team Member">Colleague or Team Member</option>
<option value="Skuid Team Member/Employee">Skuid Team Member/Employee</option>
<option value="Skuid newsletter, email, social media or other form of Skuid communication">Skuid newsletter, email, social media or other form of Skuid communication</option>
<option value="Internet Search">Internet Search</option
<option value="Other">Other</option>
</div>
<p style="display: none;" id="passwords-dont-match-alert">Passwords don't match</p>
<button type="submit" id="send_button" class="np-button np-button-big np-button-large-font np-form-action" style="border-radius: 56px;" onclick="googleReport(event)">
Register
</button>
</form>
{% comment %} <span class="np-form-terms">
By submitting this form you agree to the
<a
class="np-form-link np-button-color"
target="_blank"
href="{{ current_school.terms_of_service_url }}"
>
Northpass
</a>
and
<a
class="np-form-link np-button-color"
target="_blank"
href="/app/eula"
>
Skuid
</a>
Terms of Use
</span> {% endcomment %}
</div>
</div>
</main>
{% include "footer" %}
</body>
<style>
#password-too-short-alert {
color: salmon;
font-size: 13px;
}
#passwords-dont-match-alert {
color: salmon;
font-size: 13px;
}
@media (min-width: 426px) and (max-width: 768px) {
.np-box-content-container {
align-items: center;
}
}
@media (min-width: 376px) and (max-width: 425px) {
.np-input {
padding: 0 0.75rem;
}
}
@media (min-width: 326px) and (max-width: 375px) {
.np-input {
padding: 0 0.75rem;
}
}
@media (max-width: 325px) {
.np-input {
padding: 0 0.75rem;
}
}
.np-main {
margin: 25px 0;
}
.np-box {
display: flex;
flex-direction: row;
width: unset !important;
box-shadow: none;
}
.np-box-container {
height: unset !important;
}
.hero-image-left-desktop {
width: 60%;
}
.hero-image-left-mobile {
width: 100%;
display: none;
}
.np-box-content-container {
margin-top: 0;
margin-bottom: 0;
padding: 2rem 0 2rem 2.25rem;
display: flex;
flex-direction: column;
}
.np-form-title {
font-weight: 600;
color: #1B1C1D;
font-size: 28px;
justify-content: center;
text-align: center;
margin-bottom: 0;
}
.np-form-subtitle {
color: #1B1C1D;
font-size: 16px;
justify-content: center;
text-align: center;
margin-bottom: 1.25rem;
}
.np-input {
background-color: #FFF6F0;
border: none;
border-radius: 4px;
}
.np-input::placeholder {
color: #6F7277;
font-size: 16px;
}
#default-option {
color: #6F7277;
font-size: 16px;
}
.selection-option {
font-family: Inter;
}
.body {
height: 100%;
}
#learner_role {
color: #1B1C1D;
text-align: left;
text-align-last: left;
}
@media only screen and (min-width: 1190px) {
.hero-image-left-desktop {
min-width: 60%;
}
.np-box-content-container {
margin-right: 40px;
}
}
@media only screen and (max-width: 768px) {
.np-box-content-container {
padding: 2rem 2rem 2.25rem;
}
.hero-image-left-desktop {
display: none;
}
.hero-image-left-mobile {
display: block;
}
.np-box {
flex-direction: column;
margin: 0;
}
.np-main {
margin: 0;
}
.np-box-content-container {
margin-left: 0;
}
}
#send_button {
pointer-events: none;
background-color: #6F7277;
}
.loader {
border: 16px solid #f3f3f3;
border-radius: 50%;
border-top: 16px solid #00bf8f;
border-bottom: 16px solid #00bf8f;
width: 120px;
height: 120px;
-webkit-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
position: absolute;
top:0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.eula-info-box {
display: none;
position: absolute;
padding: 30px;
background-color: white;
opacity: 0.7;
color: black;
}
#eula-info:hover .eula-info-box {
display: block;
}
</style>
<script>
document.getElementById("header").scrollIntoView();
function checkIfInputsExist (){
window.setTimeout(function(){
if ($("#learner_email")[0].value.length >0){
if ($("#learner_email")[0].value.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)){
$("#learner_email").css("background-color", "#FFF6F0")
if ($("#learner_password")[0].value.length > 0){
if (!$("#learner_password")[0].value.match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&.#^+-/()=<>~`:;'",])[A-Za-z\d@$!%*?&.#^+-/()=<>~`:;'",]{8,}$/)) {
$("#password-too-short-alert").css("display", "block");
$("#learner_password").css("background-color", "salmon");
$("#send_button").css("background-color","#6F7277");
$("#send_button").css("pointer-events","none");
}
else {
$("#password-too-short-alert").css("display", "none");
$("#learner_password").css("background-color", "#FFF6F0");
if ($("#learner_password")[0].value == $("#learner_second_password")[0].value){
$("#passwords-dont-match-alert").css("display", "none");
$("#learner_second_password").css("background-color", "#FFF6F0")
if ($("#learner_first_name")[0].value.length * $("#learner_last_name")[0].value.length * $("#learner_email")[0].value.length * $("#learner_password")[0].value.length * $("#learner_second_password")[0].value.length != 0) {
$("#send_button").css("background-color","#005cb9");
$("#send_button").css("pointer-events","auto");
}
else {
$("#send_button").css("background-color","#6F7277");
$("#send_button").css("pointer-events","none");
}
}
else {
$("#passwords-dont-match-alert").css("display", "block");
$("#learner_second_password").css("background-color", "salmon")
$("#send_button").css("background-color","#6F7277");
$("#send_button").css("pointer-events","none");
}
}
}
else {
$("#send_button").css("background-color","#6F7277");
$("#send_button").css("pointer-events","none");
}
}
else {
$("#learner_email").css("background-color", "salmon")
$("#send_button").css("background-color","#6F7277");
$("#send_button").css("pointer-events","none");
}
}
}, 500)
}
document.addEventListener('keydown', checkIfInputsExist);
</script>
<script>
let googleReport = (event) => {
let userData = $('#how_did_you_hear')[0].value;
console.log(userData);
}
</script>

View File

@ -0,0 +1,34 @@
<script>
let enrolledCourses = {
{% for course in courses.enrolled %}
"{{ course.id }}": "{{ course.name }}",
{% endfor %}
};
if (document.referrer.length == 0) {
console.log('no referrer')
alert("Error, please contact with your's school admin");
setTimeout(history.back(), 4000)
}
else {
let previousLink = document.referrer.split('/');
previousLink.pop();
let courseUUID = previousLink.pop();
let courseName = enrolledCourses[courseUUID];
let text = `I just finished ${courseName} Course and loved it. #SkuidSkool`;
let link = 'https://skuidskool.com/app';
let urls = {
"facebook": `https://www.facebook.com/sharer/sharer.php?u=${link}`,
"twitter": `https://twitter.com/intent/tweet?url=https://www.skuidskool.com/app&text=${encodeURIComponent(text)}%0A%0A${encodeURIComponent(link)}`,
"linkedin": `https://www.linkedin.com/shareArticle?mini=true&url=${link}`
}
let platform = new URLSearchParams(window.location.search).get('platform')
if (urls[platform]) {
window.location.replace(urls[platform])
}
else {
console.log('no platform')
alert("Error, please contact with your's school admin");
setTimeout(history.back(), 4000)
}
}
</script>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,23 @@
{% include "header" %}
<div class="page-container">
<div class="np-hidden-mobile">
{% include "sub_navigation" %}
</div>
<main class="np-main np-training-events np-subpage-container np-max-width">
<div class="row">
<div class="col-xs-12 col-sm-10">
<div class="np-resource-title">
{% t .title %}
</div>
<div class="np-resource-subtitle">
{% t .subtitle %}
</div>
</div>
<div class="col-xs-12 col-sm-2">
{% include "training_events_filter" %}
</div>
</div>
{% include "training_events_index" %}
</main>
</div>
{% include "footer" %}

View File

@ -0,0 +1,46 @@
{% assign ready = false %}
{% if current_person.signed_in? %}
{% for group in current_person.groups %}
{% if group.id == "29ae12e6-f740-4190-a5c2-a7e12e87926f" or group.id == "aa36069f-e354-4dbe-9972-9ce70ad146d7" or group.id == "8cd6ec9c-101e-4b1a-82c7-77dac583a1f5" %}
{% assign ready = true %}
{% break %}
{% endif %}
{% endfor %}
{% endif %}
{% if ready %}
<script>
var a = new URLSearchParams(window.location.search);
window.location.replace(a.get('redirect_uri'));
</script>
{% else %}
<script>
window.setTimeout(function() {
window.location.reload(true);
}, 3000);
</script>
{% endif %}
<main>
<img class="image" src="https://s3.amazonaws.com/static.northpass.com/Skuid/images/SkuidSkool-Hero3.png">
<div class="text" style="background-color: #CEE8BE;">
Please wait while we're configuring the school for you.
Youll be automatically redirected when it's ready
</div>
</main>
<style>
main {
height: 90vh;
margin: auto;
}
.image {
width: 90%;
margin: 30px auto;
display: flex;
}
.text {
margin: 50px auto;
font-size: 30px;
text-align: center;
}
</style>