SPS Templates, Skuid checkbox, Script for WildHealth
This commit is contained in:
BIN
Custom_Templates/customer_templates/.DS_Store
vendored
BIN
Custom_Templates/customer_templates/.DS_Store
vendored
Binary file not shown.
@ -146,7 +146,7 @@
|
||||
}
|
||||
|
||||
.np-homepage-hero .np-homepage-subheadline {
|
||||
font-weight: 400;
|
||||
font-weight: 800;
|
||||
font-size: 18px;
|
||||
line-height: 2em;
|
||||
letter-spacing: .72px;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
<div class="np-dashboard-resources">
|
||||
<div class="row row-with-thumbnails">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-4 event-card">
|
||||
{% include "cards_other_event" title: "Getting Started with Fulfillment Webinars", link:
|
||||
"https://www.spscommerce.com" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -1,13 +1,13 @@
|
||||
<div class="np-dashboard-resources">
|
||||
<div class="row row-with-thumbnails">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-4 event-card">
|
||||
{% include "cards_other_event" title: "Test Webinar 1", link: "https://google.com" %}
|
||||
{% include "cards_other_event" title: "SPS Commerce presents MAPADOC Training for Sage 100", link: "https://www.spscommerce.com/lp/mapadoc-training-sage-100/" %}
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-6 col-lg-4 event-card">
|
||||
{% include "cards_other_event" title: "Test Webinar 2", link: "https://google.com" %}
|
||||
{% include "cards_other_event" title: "SPS Commerce presents MAPADOC Training for Sage X3", link: "https://www.spscommerce.com/lp/mapadoc-training-sage-x3/" %}
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-6 col-lg-4 event-card">
|
||||
{% include "cards_other_event" title: "Test Webinar 3", link: "https://google.com" %}
|
||||
{% include "cards_other_event" title: "SPS Commerce presents MAPADOC Training for Sage 500", link: "https://www.spscommerce.com/lp/mapadoc-training-sage-500/" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -24,6 +24,14 @@
|
||||
</div>
|
||||
</div>
|
||||
{% include "other_events_index" %}
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-12">
|
||||
<div class="np-resource-title" style='font-size: 2rem;'>
|
||||
Fulfillment Webinars
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% include "fullfilment_events_index" %}
|
||||
</main>
|
||||
{% include "footer" %}
|
||||
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
<form class="np-form" action="{{ form.options.action }}" method="post" id="desktop_edit_learner" novalidate>
|
||||
<input type="hidden" name="_method" value="{{ form.options.http_method }}">
|
||||
{% form_authenticity_token %}
|
||||
<div class="np-card">
|
||||
<div class="np-card-container np-card-padding">
|
||||
<div class="row">
|
||||
<div class="col-sm-7 np-account-form">
|
||||
{% render "account_form", form: form, version: "desktop" %}
|
||||
<button type="submit" class="account-submit-button np-button np-button-big np-button-large-font np-form-action" onclick="hubspotOptOutSubmit()">
|
||||
{% t shared.account.save %}
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-sm-5 np-account-avatar">
|
||||
{% include "account_avatar", version: "desktop" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@ -0,0 +1,131 @@
|
||||
<div class="np-resource-title">
|
||||
{% t .header %}
|
||||
</div>
|
||||
<div class="np-form-field {% if form.errors contains 'email' %}np-account-form-field-error{% endif %}">
|
||||
<label class="np-input-label" for="{{version}}_learner_email">{% t shared.email %} *</label>
|
||||
<input
|
||||
{% if form.options.invite? %} disabled {% endif %}
|
||||
autofocus="autofocus"
|
||||
class="np-input"
|
||||
id="{{version}}_learner_email"
|
||||
name="learner[email]"
|
||||
type="email"
|
||||
value="{{ form.email }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="np-form-field {% if form.errors contains 'first_name' %}np-account-form-field-error{% endif %}">
|
||||
<label class="np-input-label" for="{{version}}_learner_first_name">
|
||||
{% t shared.first_name %} *
|
||||
</label>
|
||||
<input
|
||||
class="np-input"
|
||||
id="{{version}}_learner_first_name"
|
||||
name="learner[first_name]"
|
||||
value="{{ form.first_name }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="np-form-field {% if form.errors contains 'last_name' %}np-account-form-field-error{% endif %}">
|
||||
<label class="np-input-label" for="{{version}}_learner_last_name">
|
||||
{% t shared.last_name %} *
|
||||
</label>
|
||||
<input
|
||||
class="np-input"
|
||||
id="{{version}}_learner_last_name"
|
||||
name="learner[last_name]"
|
||||
value="{{ form.last_name }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="np-form-field {% if form.errors contains 'display_name' %}np-account-form-field-error{% endif %}">
|
||||
<label class="np-input-label" for="{{version}}_learner_display_name">
|
||||
{% t .display_name %}
|
||||
</label>
|
||||
<input
|
||||
class="np-input"
|
||||
id="{{version}}_learner_display_name"
|
||||
name="learner[display_name]"
|
||||
value="{{ form.display_name }}"
|
||||
/>
|
||||
</div>
|
||||
|
||||
{% unless form.options.invite? %}
|
||||
<div class="np-form-field {% if form.errors contains 'current_password' %}np-account-form-field-error{% endif %}">
|
||||
<label class="np-input-label" for="{{version}}_learner_current_password">
|
||||
{% t .current_password %} *
|
||||
</label>
|
||||
<input
|
||||
class="np-input"
|
||||
id="{{version}}_learner_current_password"
|
||||
name="learner[current_password]"
|
||||
type="password"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="np-form-field {% if form.errors contains 'password' %}np-account-form-field-error{% endif %}">
|
||||
<label class="np-input-label" for="{{version}}_learner_password">
|
||||
{% t .new_password %} *
|
||||
</label>
|
||||
<input
|
||||
class="np-input"
|
||||
id="{{version}}_learner_password"
|
||||
name="learner[password]"
|
||||
type="password"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="np-form-field {% if form.errors contains 'password_confirmation' %}np-account-form-field-error{% endif %}">
|
||||
<label class="np-input-label" for="{{version}}_learner_password_confirmation">
|
||||
{% t .confirm_new_password %} *
|
||||
</label>
|
||||
<input
|
||||
class="np-input"
|
||||
id="{{version}}_learner_password_confirmation"
|
||||
name="learner[password_confirmation]"
|
||||
type="password"
|
||||
/>
|
||||
</div>
|
||||
|
||||
{%- comment -%} <div class="np-form-field">
|
||||
<input
|
||||
class="hubspotOptOutCheckbox"
|
||||
id="hubspotOptOut"
|
||||
name="hubspotOptOutCheckbox"
|
||||
onchange="checkCheckbox(this)"
|
||||
style="margin-right: 15px;"
|
||||
type="checkbox"
|
||||
/>
|
||||
<label class="hubspotOptOutLabel" for="hubspotOptOut">
|
||||
Opt Out of Skuid Skool Email List
|
||||
</label>
|
||||
</div> {%- endcomment -%}
|
||||
{% endunless %}
|
||||
|
||||
{% if form.options.invite? %}
|
||||
<div class="np-form-field {% if form.errors contains 'password' %}np-account-form-field-error{% endif %}">
|
||||
<label class="np-input-label" for="{{version}}_learner_password">
|
||||
{% t shared.password %} *
|
||||
</label>
|
||||
<input
|
||||
class="np-input"
|
||||
id="{{version}}_learner_password"
|
||||
name="learner[password]"
|
||||
type="password"
|
||||
/>
|
||||
</div>
|
||||
<div class="np-form-field terms-of-service {% if form.errors contains 'terms_of_service_accepted' %}np-account-form-field-error{% endif %}">
|
||||
<input
|
||||
id="{{version}}_learner_terms_of_service"
|
||||
name="learner[terms_of_service_accepted]"
|
||||
type="checkbox"
|
||||
/>
|
||||
<div class="label">
|
||||
{% t .terms_of_service %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input
|
||||
id="{{version}}_invite_token"
|
||||
name="learner[token]"
|
||||
value="{{ form.invite_token }}"
|
||||
type="hidden"
|
||||
/>
|
||||
{% endif %}
|
||||
@ -0,0 +1,17 @@
|
||||
<form class="np-form" action="{{ form.options.action }}" method="post" id="mobile_edit_learner" novalidate>
|
||||
<input type="hidden" name="_method" value="{{ form.options.http_method }}">
|
||||
{% form_authenticity_token %}
|
||||
<div class="np-card np-account-form">
|
||||
<div class="np-card-container np-card-padding">
|
||||
{% render "account_form", form: form, version: "mobile" %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-card np-account-avatar">
|
||||
<div class="np-card-container np-card-padding">
|
||||
{% include "account_avatar", version: "mobile" %}
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="account-submit-button np-button np-button-big np-button-large-font np-form-action" onclick="hubspotOptOutSubmit()">
|
||||
{% t shared.account.save %}
|
||||
</button>
|
||||
</form>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -0,0 +1,102 @@
|
||||
<div class="np-card np-no-horizontal-padding">
|
||||
<div class="np-card-container">
|
||||
<div class="np-learning-path np-featured-course">
|
||||
<div class="np-featured-course-img-container">
|
||||
<div class="np-card-image-content-top">
|
||||
{% include "course_details" %}
|
||||
</div>
|
||||
<img
|
||||
class="np-card-image"
|
||||
alt="{{ course.name }}"
|
||||
src="{{ course.image_url }}"
|
||||
style="width: 100%;"
|
||||
>
|
||||
</div>
|
||||
<div class="np-card-text-wrapper" style="border: none !important;">
|
||||
|
||||
<div class="np-card-content np-card-padding np-card-content-vertical" style="border: none !important; background: #F2F2F2">
|
||||
<h3 class="np-card-content-title" style="border: none;">
|
||||
{{ course.name }}
|
||||
</h3>
|
||||
|
||||
<div class="np-card-content-description" style='font-size: 16px !important; line-height: 24px !important; color: #2c4265 !important; font-family: Lexend !important;'>
|
||||
{{ course.full_description }}
|
||||
</div>
|
||||
|
||||
<div class="np-card-content-footer" style='display: flex; justify-content: space-between;'>
|
||||
<div class='np-card-content-footer-left'style='display: flex; justify-content: left;'>
|
||||
{% comment %}<a
|
||||
class="np-top-button np-button-font-color np-button" href="{% route course_enrollment, code: course.enrollment_code %}" style='background: linear-gradient(90deg, #089FB7 0%, #15824B 100%); font-weight: 800;
|
||||
border-radius: 8px; margin-right: 24px;'
|
||||
>{% endcomment %}
|
||||
<a
|
||||
class="np-top-button np-button-font-color np-button" href="{% route course_enrollment, code: course.enrollment_code %}" style='background: linear-gradient(45deg, #2c4265 0%, #34abe2 100%); font-weight: 800;
|
||||
border-radius: 8px; margin-right: 24px;'
|
||||
>
|
||||
{% if course.enrolled? == false %}
|
||||
{% t shared.enroll %}
|
||||
{% elsif course.started? == false %}
|
||||
{% t shared.start, key: current_school.course_vocabulary %}
|
||||
{% elsif course.completed? %}
|
||||
{% t shared.course.view, key: current_school.course_vocabulary %}
|
||||
{% else %}
|
||||
{% t shared.continue %}
|
||||
{% endif %}
|
||||
</a>
|
||||
<div class="np-card-progress np-button-color" style='font-weight: 700; font-size: 12px; align-self: center; text-transform: uppercase;'>
|
||||
{% t shared.progress, count: course.progress %}
|
||||
</div>
|
||||
</div>
|
||||
{% comment %}<div class='course-detail-rating'>
|
||||
<div class='course-detail-rating-stars'>
|
||||
{% for i in (1..5) %}
|
||||
{% if course.properties.course_rating >= i %}
|
||||
<svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10 0L12.5863 6.44033L19.5106 6.90983L14.1846 11.3597L15.8779 18.0902L10 14.4L4.12215 18.0902L5.81535 11.3597L0.489435 6.90983L7.41374 6.44033L10 0Z" fill="#089FB7"/>
|
||||
</svg>
|
||||
{% else %}
|
||||
<svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.25" d="M10 0L12.5863 6.44033L19.5106 6.90983L14.1846 11.3597L15.8779 18.0902L10 14.4L4.12215 18.0902L5.81535 11.3597L0.489435 6.90983L7.41374 6.44033L10 0Z" fill="#089FB7"/>
|
||||
</svg>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<span class="np-details-label" style= 'display: flex; color: #2c4265;'>
|
||||
{{course.properties.course_rating}} <div style='font-weight: 500; padding-left: 5px; color: #2c4265;'>({{course.properties.course_rating_count}}) </div>
|
||||
</span>
|
||||
</div>{% endcomment %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.np-card-content.np-card-padding.np-card-content-vertical {
|
||||
border-radius: 0 8px 8px 0;
|
||||
}
|
||||
@media screen and (max-width: 1024px) {
|
||||
.np-card-content.np-card-padding.np-card-content-vertical {
|
||||
border-radius: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.np-card-image {
|
||||
border-top-left-radius: 8px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-left-radius: 8px;
|
||||
}
|
||||
@media screen and (max-width: 1024px) {
|
||||
.np-card-image {
|
||||
border-top-right-radius: 8px;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
$(".np-card-content-description").css('font-size','16px !important')
|
||||
$(".np-card-content-description").css('color','white !important')
|
||||
$(".np-card-content-description").css('font-family', 'Lexend !important')
|
||||
</script>
|
||||
@ -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>
|
||||
@ -0,0 +1,51 @@
|
||||
{% comment %}<div class="np-card np-event-card">{% endcomment %}
|
||||
<div class="np-event-card">
|
||||
<div class="np-card-container">
|
||||
<div class="np-card-content-training-event">
|
||||
<h3 class="np-card-content-title">
|
||||
{{ training_event.title }}
|
||||
</h3>
|
||||
<div class="np-card-content-subtitle">
|
||||
{% t shared.event_types, key: training_event.event_type %}
|
||||
</div>
|
||||
<div class="np-card-training-session">
|
||||
<span class="np-card-content-label" style='border-radius: 4px; opacity: 0.15;'>
|
||||
{% t .next_session %}
|
||||
</span>
|
||||
<div class="np-card-training-session-date">
|
||||
<div>
|
||||
<div class="np-card-training-session-date-month">
|
||||
{{ training_event.sessions.first.month }}
|
||||
</div>
|
||||
<div class="np-card-training-session-date-year np-opacity-50">
|
||||
{{ training_event.sessions.first.year }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-card-training-session-date-day">
|
||||
{% if training_event.sessions.first.day < 10 %}0{% endif %}{{ training_event.sessions.first.day }}
|
||||
</div>
|
||||
<div class="np-button-background-color np-card-training-session-date-bar" style='border-right: 16px solid #089FB7;'></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-card-content np-card-content-vertical np-card-padding">
|
||||
<div class="np-card-training-sessions">
|
||||
<span class="np-card-training-sessions-label">
|
||||
{% t .sessions, count: training_event.sessions.size %}
|
||||
</span>
|
||||
{% comment %}<a
|
||||
class="np-button"
|
||||
href="{% route training_session, id: training_event.sessions.first.id %}"
|
||||
style='background: linear-gradient(90deg, #089FB7 0%, #15824B 100%); border-radius: 8px;'
|
||||
>{% endcomment %}
|
||||
<a
|
||||
class="np-button"
|
||||
href="{% route training_session, id: training_event.sessions.first.id %}"
|
||||
style='background: linear-gradient(45deg, #2c4265 0%, #34abe2 100%); border-radius: 8px;'
|
||||
>
|
||||
{% t shared.view %}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,62 @@
|
||||
{% assign topic_classname = topic | split: " " %}
|
||||
|
||||
<div class="courses-carousel np-carousel" data-topic="{{ topic_classname | join: '-' | downcase }}">
|
||||
{% if items.any? %}
|
||||
{% assign sorted_items =items | sort: "name" %}
|
||||
{% for course in sorted_items %}
|
||||
|
||||
{% comment %} USED FOR PROGRESS FILTER {% endcomment %}
|
||||
{% assign course_status = "" %}
|
||||
|
||||
{% if course.started? == false %}
|
||||
{% assign course_status = "not-started" %}
|
||||
{% elsif course.completed? %}
|
||||
{% assign course_status = "completed" %}
|
||||
{% elsif course.started? %}
|
||||
{% assign course_status = "in-progress" %}
|
||||
{% endif %}
|
||||
|
||||
{% if topic == "Not Categorized" %}
|
||||
<div class="np-carousel-card {{course_status}}"> {% include "cards_course" with course %}</div>
|
||||
{% else %}
|
||||
{% for category in course.categories %}
|
||||
{% if category.name == topic %}
|
||||
<div class="np-carousel-card {{course_status}}"> {% include "cards_course" with course %}</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
$(".courses-carousel").not('.slick-initialized').slick({
|
||||
slidesToShow: 3,
|
||||
cssEase: 'linear',
|
||||
prevArrow: '<i class="fal fa-chevron-left"></i>',
|
||||
nextArrow: '<i class="fal fa-chevron-right"></i>',
|
||||
infinite: false,
|
||||
responsive: [
|
||||
{
|
||||
breakpoint: 1170,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
}
|
||||
},
|
||||
{
|
||||
breakpoint: 768,
|
||||
settings: {
|
||||
slidesToShow: 1,
|
||||
slidesToScroll: 1,
|
||||
dots: false,
|
||||
arrows: true,
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -0,0 +1,37 @@
|
||||
<div class="events-carousel np-carousel np-carousel-bg-blue" id="events-carousel">
|
||||
{% if items.any? %}
|
||||
{% for training_event in items %}
|
||||
<div class="np-carousel-card"> {% include "cards_training_event" with training_event %}</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
|
||||
$(".events-carousel").slick({
|
||||
slidesToShow: 3,
|
||||
prevArrow: '<i class="fal fa-chevron-left"></i>',
|
||||
nextArrow: '<i class="fal fa-chevron-right"></i>',
|
||||
infinite: false,
|
||||
dots: false,
|
||||
arrows: true,
|
||||
responsive: [
|
||||
{
|
||||
breakpoint: 1170,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
}
|
||||
},
|
||||
{
|
||||
breakpoint: 768,
|
||||
settings: {
|
||||
slidesToShow: 1,
|
||||
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -0,0 +1,136 @@
|
||||
{% assign used_instructor_names = "" %}
|
||||
|
||||
<div class="instructors-carousel np-carousel" id="instructors-carousel">
|
||||
<div class="np-carousel-card">
|
||||
<div class="instructor-slide">
|
||||
<div class="instructor-image" style='height:160px; width: 160px;'>
|
||||
<img style='height: 136px; width: 136px;' src="https://s3.amazonaws.com/static.northpass.com/NorthpassAcademy/headshot_1.jpg" />
|
||||
</div>
|
||||
<div class="instructor-info">
|
||||
<div class="instructor-name">Paula Naba</div>
|
||||
<a href="mailto:paula@northpass.com" target="_blank" class="instructor-email" style='color: #089FB7;'>paula@northpass.com</a>
|
||||
<div class="instructor-joined">Director of Customer Success</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-carousel-card">
|
||||
<div class="instructor-slide">
|
||||
<div class="instructor-image" style='height:160px; width: 160px;'>
|
||||
<img style='height: 136px; width: 136px;' src="https://s3.amazonaws.com/static.northpass.com/NorthpassAcademy/charlie+1.png" />
|
||||
</div>
|
||||
<div class="instructor-info">
|
||||
<div class="instructor-name">Charlie Bencivenga</div>
|
||||
<a href="mailto:cbencivenga@northpass.com" target="_blank" class="instructor-email" style='color: #089FB7;'>cbencivenga@northpass.com</a>
|
||||
<div class="instructor-joined">Solutions Engineering Manager</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% comment %}<div class="np-carousel-card">
|
||||
<div class="instructor-slide">
|
||||
<div class="instructor-image" style='height:160px; width: 160px;'>
|
||||
<img style='height: 136px; width: 136px;' src="https://s3.amazonaws.com/static.northpass.com/NorthpassAcademy/headshot_4.jpg" />
|
||||
</div>
|
||||
<div class="instructor-info">
|
||||
<div class="instructor-name">Rob Abrams</div>
|
||||
<a href="mailto:rabrams@northpass.com" target="_blank" class="instructor-email" style='color: #089FB7;'>rabrams@northpass.com</a>
|
||||
<div class="instructor-joined">Senior Implementation Manager</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>{% endcomment %}
|
||||
<div class="np-carousel-card">
|
||||
<div class="instructor-slide">
|
||||
<div class="instructor-image" style='height:160px; width: 160px;'>
|
||||
<img style='height: 136px; width: 136px;' src="https://s3.amazonaws.com/static.northpass.com/NorthpassAcademy/headshot_2.jpg" />
|
||||
</div>
|
||||
<div class="instructor-info">
|
||||
<div class="instructor-name">Bridget Cafaro</div>
|
||||
<a href="mailto:bcafaro@northpass.com" target="_blank" class="instructor-email" style='color: #089FB7;'>bcafaro@northpass.com</a>
|
||||
<div class="instructor-joined">Customer Success Manager</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-carousel-card">
|
||||
<div class="instructor-slide">
|
||||
<div class="instructor-image" style='height:160px; width: 160px;'>
|
||||
<img style='height: 136px; width: 136px;' src="https://s3.amazonaws.com/static.northpass.com/NorthpassAcademy/nergis2.png" />
|
||||
</div>
|
||||
<div class="instructor-info">
|
||||
<div class="instructor-name">Nergis Tepeli</div>
|
||||
<a href="mailto:ntepeli@northpass.com" target="_blank" class="instructor-email" style='color: #089FB7;'>ntepeli@northpass.com</a>
|
||||
<div class="instructor-joined">Customer Success Manager</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% comment %}<div class="np-carousel-card">
|
||||
<div class="instructor-slide">
|
||||
<div class="instructor-image" style='height:160px; width: 160px;'>
|
||||
<img style='height: 136px; width: 136px;' src="https://s3.amazonaws.com/static.northpass.com/NorthpassAcademy/eric.png" />
|
||||
</div>
|
||||
<div class="instructor-info">
|
||||
<div class="instructor-name">Eric Pavan</div>
|
||||
<a href="mailto:epavan@northpass.com" target="_blank" class="instructor-email" style='color: #089FB7;'>epavan@northpass.com</a>
|
||||
<div class="instructor-joined">Customer Success Manager</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>{% endcomment %}
|
||||
|
||||
<div class="np-carousel-card">
|
||||
<div class="instructor-slide">
|
||||
<div class="instructor-image" style='height:160px; width: 160px;'>
|
||||
<img style='height: 136px; width: 136px;' src="https://s3.amazonaws.com/static.northpass.com/NorthpassAcademy/brian.png" />
|
||||
</div>
|
||||
<div class="instructor-info">
|
||||
<div class="instructor-name">Brian Bastante</div>
|
||||
<a href="mailto:bbastante@northpass.com" target="_blank" class="instructor-email" style='color: #089FB7;'>bbastante@northpass.com</a>
|
||||
<div class="instructor-joined">Technical Support Specialist</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-carousel-card">
|
||||
<div class="instructor-slide">
|
||||
<div class="instructor-image" style='height:160px; width: 160px;'>
|
||||
<img style='height: 136px; width: 136px;' src="https://s3.amazonaws.com/static.northpass.com/NorthpassAcademy/headshot_3.png" />
|
||||
</div>
|
||||
<div class="instructor-info">
|
||||
<div class="instructor-name">Kasia Cholewa</div>
|
||||
<a href="mailto:paula@northpass.com" target="_blank" class="instructor-email" style='color: #089FB7;'>support@northpass.com</a>
|
||||
<div class="instructor-joined">Technical Support Specialist</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
|
||||
$(".instructors-carousel").slick({
|
||||
slidesToShow: 2.5,
|
||||
prevArrow: '<i class="fal fa-chevron-left"></i>',
|
||||
nextArrow: '<i class="fal fa-chevron-right"></i>',
|
||||
infinite: false,
|
||||
dots: false,
|
||||
arrows: true,
|
||||
responsive: [
|
||||
{
|
||||
breakpoint: 1170,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
}
|
||||
},
|
||||
{
|
||||
breakpoint: 768,
|
||||
settings: {
|
||||
slidesToShow: 1,
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.instructors-carousel .fa-chevron-right:before {
|
||||
right: -7px !important;
|
||||
}
|
||||
</style>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -0,0 +1,4 @@
|
||||
{% comment %} <i class="far fa-lock-alt np-course-outline-content-activity-icon-locked"></i> {% endcomment %}
|
||||
<span class="np-course-outline-content-activity-link">
|
||||
{{ activity.title }}
|
||||
</span>
|
||||
@ -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 %}
|
||||
@ -0,0 +1,21 @@
|
||||
<div class="col-xs-12 np-top-image-spacing np-course-banner">
|
||||
<div class="np-course-banner-overlay"></div>
|
||||
<img
|
||||
src="{{ course.image_url }}"
|
||||
class="np-course-banner-image"
|
||||
alt="{{ course.name }}"
|
||||
/>
|
||||
<div class="np-course-info np-course-banner-info">
|
||||
<div class="np-course-title" style="color: #34abe2">{{ course.name }}</div>
|
||||
{%- comment -%} {% include "course_details_review" %} {%- endcomment -%}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.fas.fa-star {
|
||||
color: white;
|
||||
}
|
||||
.fas.fa-star {
|
||||
line-height: 1.15;
|
||||
}
|
||||
</style>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -0,0 +1,60 @@
|
||||
<div class="np-card-container">
|
||||
<div class="row np-course-content np-card-padding-dynamic">
|
||||
{% include "course_banner" %}
|
||||
<div class="col-xs-12 col-sm-6">
|
||||
{% include "course_description" %}
|
||||
|
||||
{% comment %} {% if course.categories.any? %}
|
||||
<div class="np-card-content-divider">
|
||||
{% include "course_categories" %}
|
||||
</div>
|
||||
{% endif %} {% endcomment %}
|
||||
|
||||
{% if course.instructors.any? %}
|
||||
<div class="np-card-content-divider">
|
||||
{% include "course_instructors" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if course.events.any? %}
|
||||
<div class="np-card-content-divider">
|
||||
{% include "course_events" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="np-grid-spacing col-xs-12 col-sm-6">
|
||||
<div class="np-top-cta">
|
||||
{% include "course_progress_and_cta" %}
|
||||
</div>
|
||||
{% include "course_outline" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
@media only screen and (min-width: 768px) {
|
||||
body {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
grid-template-areas: "header" "nav" "main" "footer" "powered";
|
||||
grid-template-rows: 120px 50px 1fr 160px 60px;
|
||||
}
|
||||
header {
|
||||
grid-area: header;
|
||||
}
|
||||
nav {
|
||||
grid-area: nav;
|
||||
margin-bottom: 17px;
|
||||
}
|
||||
main {
|
||||
grid-area: main;
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
footer {
|
||||
grid-area: footer;
|
||||
}
|
||||
.np-powered-by {
|
||||
grid-area: powered;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,34 @@
|
||||
{% assign activities_count = 0 %}
|
||||
{% for course_section in course.sections %}
|
||||
{% for course_activity in course_section.activities %}
|
||||
{% assign activities_count = activities_count | plus: 1 %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
<div class="np-course-details">
|
||||
<div class="np-course-detail" style="color: #2c4265">
|
||||
<strong>{{ activities_count }}</strong>
|
||||
<span class="np-details-label" style="color: #2c4265">
|
||||
{% if activities_count == 1 %}Activity{% else %}Activities{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
<div class="np-course-detail" style="color: #2c4265">
|
||||
{% if course.properties.course_time contains 'missing property' %}
|
||||
missing property: course.properties.course_time
|
||||
{% else %}
|
||||
{% if course.properties.course_time %}
|
||||
{% if course.properties.course_time > 0 %}
|
||||
<strong>{{course.properties.course_time}}</strong> mins<span class="np-details-label" style="color: #2c4265">Duration</span>
|
||||
{% else %}
|
||||
<div> </div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
/* .np-course-details {
|
||||
text-shadow: 1px 1px #34abe2;
|
||||
} */
|
||||
</style>
|
||||
@ -0,0 +1,60 @@
|
||||
{% assign activities_count = 0 %}
|
||||
{% for course_section in course.sections %}
|
||||
{% for course_activity in course_section.activities %}
|
||||
{% assign activities_count = activities_count | plus: 1 %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
<div class="np-course-details" style="text-align: center; ">
|
||||
<div class="np-course-detail" id='hideable'>
|
||||
<strong>{{ activities_count }}</strong>
|
||||
<span class="np-details-label">
|
||||
{% if activities_count == 1 %}Activity{% else %}Activities{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
<div class="np-course-detail">
|
||||
{% if course.properties.course_time contains 'missing property' %}
|
||||
missing property: course.properties.course_time
|
||||
{% else %}
|
||||
{% if course.properties.course_time %}
|
||||
{% if course.properties.course_time > 0 %}
|
||||
<strong>{{course.properties.course_time}}</strong> mins<span class="np-details-label">Duration</span>
|
||||
{% else %}
|
||||
<div> </div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% comment %}<div class="np-course-detail course-detail-rating">
|
||||
<div class='course-detail-rating-stars' style='display: flex; flex-wrap: nowrap;'>
|
||||
{% for i in (1..5) %}
|
||||
{% if course.properties.course_rating >= i %}
|
||||
<svg width="20" height="19" viewBox="0 0 20 19" preserveAspectRatio fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10 0L12.5863 6.44033L19.5106 6.90983L14.1846 11.3597L15.8779 18.0902L10 14.4L4.12215 18.0902L5.81535 11.3597L0.489435 6.90983L7.41374 6.44033L10 0Z" fill="#089FB7"/>
|
||||
</svg>
|
||||
{% else %}
|
||||
<svg width="20" height="19" viewBox="0 0 20 19" preserveAspectRatio fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.25" d="M10 0L12.5863 6.44033L19.5106 6.90983L14.1846 11.3597L15.8779 18.0902L10 14.4L4.12215 18.0902L5.81535 11.3597L0.489435 6.90983L7.41374 6.44033L10 0Z" fill="#089FB7"/>
|
||||
</svg>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<span class="np-details-label" style= 'display: flex;'>
|
||||
{{course.properties.course_rating}} <div style='font-weight: 500; padding-left: 5px; color: #2c4265;'>({{course.properties.course_rating_count}}) </div>
|
||||
</span>
|
||||
</div>{% endcomment %}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.course-detail-rating {
|
||||
align-self: flex-end;
|
||||
}
|
||||
.course-detail-rating-stars {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.course-detail-rating-stars {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -0,0 +1,38 @@
|
||||
<div class="np-course-outline">
|
||||
<div class="np-text-title np-course-outline-title" style='color: #FFFFFF; opacity: 0.5;'>
|
||||
{% t .header, key: current_school.course_vocabulary %}
|
||||
</div>
|
||||
<div class="np-course-outline-content">
|
||||
<ol class="np-course-outline-content-section">
|
||||
{% for section in course.sections %}
|
||||
<li class="np-course-outline-content-section-list">
|
||||
<div class="np-course-outline-content-section-name np-text-title-bold np-text-title-bold">
|
||||
{{ section.name }}
|
||||
</div>
|
||||
<ol class="np-course-outline-content-activity">
|
||||
{% for activity in section.activities %}
|
||||
|
||||
<li class="np-course-outline-content-activity-list">
|
||||
{% if activity.completed? %}
|
||||
<i class="fas fa-check np-course-outline-content-activity-icon"></i>
|
||||
{% if activity.locked? %}
|
||||
{% include "course_activity_locked" %}
|
||||
{% else %}
|
||||
{% include "course_activity_unlocked", class: "np-course-outline-content-activity-link-completed" %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<i class="icon-course-not-started np-course-outline-content-activity-icon"></i>
|
||||
{% if activity.locked? %}
|
||||
{% include "course_activity_locked" %}
|
||||
{% else %}
|
||||
{% include "course_activity_unlocked", class: "np-course-outline-content-activity-link" %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
@ -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>
|
||||
@ -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 %}
|
||||
@ -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 %}
|
||||
@ -0,0 +1,124 @@
|
||||
<header class="np-header np-header-color" style="background: #fafafa; border: none; height: 3.5rem; position: fixed; margin-top: 4rem;">
|
||||
<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=".fa-times, .np-header-mobile-menu-content, .np-main, .np-footer"
|
||||
>
|
||||
<img
|
||||
alt="{{ current_person.name }}"
|
||||
class="np-header-avatar-image"
|
||||
src="{{ current_person.avatar_url }}"
|
||||
/>
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if current_school.logo_url %}
|
||||
<h1 class="np-header-logo">
|
||||
<a href="{% route home %}">
|
||||
<img
|
||||
alt="{{ current_school.name }}"
|
||||
class="np-header-logo-image"
|
||||
src="{{ current_school.logo_url }}"
|
||||
/>
|
||||
</a>
|
||||
</h1>
|
||||
{% else %}
|
||||
<a href="{% route home %}" class="np-school-name np-header-font-color">
|
||||
{{ current_school.name }}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<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>
|
||||
|
||||
{% if current_person.signed_in? %}
|
||||
<div class="np-hidden-mobile np-header-search np-header-search-expanded">
|
||||
<form action="{% route search %}" method="get" data-test="desktop-search">
|
||||
<input
|
||||
aria-label="{% t .search %}"
|
||||
class="np-header-search-input np-header-font-background-color"
|
||||
type="text"
|
||||
name="q"
|
||||
placeholder="{% t .search %}"
|
||||
/>
|
||||
<i class="np-header-search-icon far fa-search"></i>
|
||||
</form>
|
||||
</div>
|
||||
<div class="np-hidden-mobile np-header-avatar">
|
||||
<button
|
||||
class="np-header-avatar-button"
|
||||
data-test="open-desktop-menu"
|
||||
data-toggle-class-on-target="np-hidden"
|
||||
data-toggle-target=".np-header-avatar-tooltip"
|
||||
data-toggle-outside
|
||||
>
|
||||
<img
|
||||
alt="{{ current_person.name }}"
|
||||
class="np-header-avatar-image"
|
||||
src="{{ current_person.avatar_url }}"
|
||||
>
|
||||
</button>
|
||||
<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.name }}
|
||||
</div>
|
||||
<div class="np-header-avatar-tooltip-learner-email">
|
||||
{{ current_person.email }}
|
||||
</div>
|
||||
</div>
|
||||
<nav class="np-header-avatar-tooltip-navigation">
|
||||
<a class="np-header-avatar-tooltip-navigation-link" onclick="buildURL(window.location.pathname)" style="cursor:pointer">
|
||||
Default
|
||||
</a>
|
||||
{% unless current_school.sso_active? %}
|
||||
<a
|
||||
class="np-header-avatar-tooltip-navigation-link"
|
||||
href="{% route account %}"
|
||||
>
|
||||
Profile Settings
|
||||
</a>
|
||||
{% endunless %}
|
||||
<a
|
||||
class="np-header-avatar-tooltip-navigation-link np-danger"
|
||||
href="{% route logout %}"
|
||||
>
|
||||
Sign Out
|
||||
</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<a
|
||||
class="np-header-sign-in np-header-desktop-nav-link np-header-font-color"
|
||||
href="{% route login %}"
|
||||
>
|
||||
{% t shared.sign_in %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</header>
|
||||
@ -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>
|
||||
@ -0,0 +1,112 @@
|
||||
{% assign topic_classname = topic | split: " " %}
|
||||
|
||||
<div class="np-progress-filter-wrapper">
|
||||
{% if label %}
|
||||
<div class="np-progress-filter-label">{{ label }}</div>
|
||||
{% endif %}
|
||||
<div class="progress-filter filter-select-wrapper select-wrapper np-button" data-topic="{{ topic_classname | join: '-' | downcase }}" style="border-radius: 8px;">
|
||||
<select >
|
||||
<option selected disabled hidden>{{ default_option}}</option>
|
||||
<option value="a">All Courses</option>
|
||||
<option value="n">Not Started</option>
|
||||
<option value="i">In Progress</option>
|
||||
<option value="c">Completed</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.np-progress-filter-label {
|
||||
color: #2c4265;
|
||||
padding-right: 7px;
|
||||
text-transform: none;
|
||||
font-weight:500;
|
||||
font-size:0.812rem;
|
||||
}
|
||||
.np-progress-filter-wrapper {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
}
|
||||
.filter-select-wrapper {
|
||||
position: relative;
|
||||
padding:0;
|
||||
border: 2px solid #2c4265;
|
||||
color: #fff;
|
||||
height:auto;
|
||||
text-transform: none;
|
||||
background: transparent;
|
||||
border-radius:0;
|
||||
}
|
||||
.filter-select-wrapper:hover {
|
||||
background:transparent;
|
||||
color:#fff;
|
||||
}
|
||||
.select-items {
|
||||
position: absolute;
|
||||
background-color: #FFFFFF;
|
||||
top: 105%;
|
||||
left: -2px;
|
||||
z-index: 99;
|
||||
width: 102%;
|
||||
border: 2px solid #2c4265;
|
||||
border-top:none;
|
||||
}
|
||||
.select-items div {
|
||||
color: #2c4265;
|
||||
border-top:none;
|
||||
cursor: pointer;
|
||||
width:100%;
|
||||
padding: 12px 16px;
|
||||
}
|
||||
|
||||
.select-items div:hover { color: rgba(255, 255, 255, 1); }
|
||||
.select-selected {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 9px 66px 9px 20px;
|
||||
position: relative;
|
||||
color:#2c4265;
|
||||
}
|
||||
.select-selected::after {
|
||||
content:"\f078";
|
||||
font-family: "Font Awesome 5 Pro";
|
||||
position: absolute;
|
||||
width:20px;
|
||||
height:100%;
|
||||
color:#2c4265;
|
||||
right:10px;
|
||||
top:0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size:1rem;
|
||||
}
|
||||
.select-selected::before {
|
||||
content:"";
|
||||
position: absolute;
|
||||
width:20px;
|
||||
height:100%;
|
||||
border-left:2px solid #2c4265;
|
||||
right:20px;
|
||||
top:0;
|
||||
}
|
||||
.select-selected.select-arrow-active::after { transform: rotate(180deg); }
|
||||
.same-as-selected,
|
||||
.filter-select-wrapper select,
|
||||
.select-hide {
|
||||
display: none;
|
||||
}
|
||||
.mo-filter-wrapper {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.select-items div:hover,
|
||||
.same-as-selected {
|
||||
background-color: #062531;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,232 @@
|
||||
<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>
|
||||
{% if current_person.signed_in? %}
|
||||
<script>
|
||||
console.log('Appcues Identifying')
|
||||
window.Appcues.identify(
|
||||
'{{current_person.id}}',
|
||||
{
|
||||
accountId: '{{current_person.id}}',
|
||||
firstName: '{{current_person.first_name}}',
|
||||
lastName: '{{current_person.last_name}}',
|
||||
email: '{{current_person.email}}',
|
||||
createdAt: '{{current_person.created_at}}'
|
||||
}
|
||||
);
|
||||
</script>
|
||||
{% endif %}
|
||||
@ -0,0 +1,25 @@
|
||||
{% 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">
|
||||
console.log('Apppcues Enabled')
|
||||
window.AppcuesSettings = {enableURLDetection: true}
|
||||
</script>
|
||||
<script src="//fast.appcues.com/69414.js"></script>
|
||||
@ -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>
|
||||
@ -0,0 +1,17 @@
|
||||
<header class="np-box-header">
|
||||
<a class="np-box-header-link" href="{% route home %}">
|
||||
{% if current_school.logo_url %}
|
||||
<img
|
||||
alt="{{ current_school.name }}"
|
||||
src="{{ current_school.logo_url }}"
|
||||
class="np-box-header-logo"
|
||||
/>
|
||||
{% else %}
|
||||
<span class="np-school-name np-header-font-color">
|
||||
{{ current_school.name }}
|
||||
</span>
|
||||
{% endif %}
|
||||
</a>
|
||||
</header>
|
||||
|
||||
{% include "messages" %}
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -0,0 +1,148 @@
|
||||
<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=".fa-times, .np-header-mobile-menu-content, .np-main, .np-footer"
|
||||
>
|
||||
<img
|
||||
alt="{{ current_person.name }}"
|
||||
class="np-header-avatar-image"
|
||||
src="{{ current_person.avatar_url }}"
|
||||
/>
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if current_school.logo_url %}
|
||||
<h1 class="np-header-logo">
|
||||
<a href="{% route home %}">
|
||||
<img
|
||||
alt="{{ current_school.name }}"
|
||||
class="np-header-logo-image"
|
||||
src="{{ current_school.logo_url }}"
|
||||
/>
|
||||
</a>
|
||||
</h1>
|
||||
{% else %}
|
||||
<a href="{% route home %}" class="np-school-name np-header-font-color">
|
||||
{{ current_school.name }}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<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>
|
||||
|
||||
{% if current_person.signed_in? %}
|
||||
<div class="np-hidden-mobile np-header-search np-header-search-expanded">
|
||||
<form action="{% route search %}" method="get" data-test="desktop-search">
|
||||
<input
|
||||
aria-label="{% t .search %}"
|
||||
class="np-header-search-input np-header-font-background-color"
|
||||
type="text"
|
||||
name="q"
|
||||
placeholder="{% t .search %}"
|
||||
/>
|
||||
<i class="np-header-search-icon far fa-search"></i>
|
||||
</form>
|
||||
</div>
|
||||
<div>
|
||||
<a class='help-guide-link' href="https://help.scenariocloud.com/ENTERPRISE/" target="_blank">Help Guide</a>
|
||||
</div>
|
||||
<div class="np-hidden-mobile np-header-avatar">
|
||||
<button
|
||||
class="np-header-avatar-button"
|
||||
data-test="open-desktop-menu"
|
||||
data-toggle-class-on-target="np-hidden"
|
||||
data-toggle-target=".np-header-avatar-tooltip"
|
||||
data-toggle-outside
|
||||
>
|
||||
<img
|
||||
alt="{{ current_person.name }}"
|
||||
class="np-header-avatar-image"
|
||||
src="{{ current_person.avatar_url }}"
|
||||
>
|
||||
</button>
|
||||
<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.name }}
|
||||
</div>
|
||||
<div class="np-header-avatar-tooltip-learner-email">
|
||||
{{ current_person.email }}
|
||||
</div>
|
||||
</div>
|
||||
<nav class="np-header-avatar-tooltip-navigation">
|
||||
<a class="np-header-avatar-tooltip-navigation-link" onclick="buildURL(window.location.pathname)" style="cursor:pointer">
|
||||
Default
|
||||
</a>
|
||||
{% unless current_school.sso_active? %}
|
||||
<a
|
||||
class="np-header-avatar-tooltip-navigation-link"
|
||||
href="{% route account %}"
|
||||
>
|
||||
Profile Settings
|
||||
</a>
|
||||
{% endunless %}
|
||||
<a
|
||||
class="np-header-avatar-tooltip-navigation-link np-danger"
|
||||
href="{% route logout %}"
|
||||
>
|
||||
Sign Out
|
||||
</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<a
|
||||
class="np-header-sign-in np-header-desktop-nav-link np-header-font-color"
|
||||
href="{% route login %}"
|
||||
>
|
||||
{% t shared.sign_in %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</header>
|
||||
<style>
|
||||
.np-header{
|
||||
background: #fafafa;
|
||||
border: none;
|
||||
height: 3.5rem;
|
||||
margin-top: 4rem;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.help-guide-link {
|
||||
color: #2c4265;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
margin: 0 15px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.help-guide-link:hover{
|
||||
color: rgb(4, 173, 240);
|
||||
}
|
||||
</style>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -0,0 +1,106 @@
|
||||
<div class="np-homepage-featured np-faq np-max-width">
|
||||
<div class="np-homepage-featured-text">
|
||||
<div class="np-homepage-headline">
|
||||
Frequently Asked Questions
|
||||
</div>
|
||||
</div>
|
||||
<div class="row np-faqs" style='margin:0;'>
|
||||
<div class="col-md-6">
|
||||
<div class="np-accordion">
|
||||
<div class="accordion-btn">
|
||||
<i class="fal fa-plus"></i>
|
||||
<div class="accordion-title"><strong>Q:</strong> Do I need to be a customer before creating a course on Northpass?</div>
|
||||
</div>
|
||||
<div class="accordion-panel">
|
||||
<div class="accordion-panel-content">
|
||||
<p><strong>A:</strong> Absolutely not! We often set up trials for folks shopping for an LMS. To set up your trial, click the following link and you’ll be intro’d to the correct reps to get started.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-accordion">
|
||||
<div class="accordion-btn">
|
||||
<i class="fal fa-plus"></i>
|
||||
<div class="accordion-title"><strong>Q:</strong> Do I need to sign up for an advanced package option?</div>
|
||||
</div>
|
||||
<div class="accordion-panel">
|
||||
<div class="accordion-panel-content">
|
||||
<p><strong>A:</strong> No, Northpass product packages have a variety of services. Our Essentials package is great to get started, especially with internal training. Looking for something more, both our Premium and Enterprise packages allow for advanced options including custom design and data connections via webhooks and API. To learn more, please contact your rep or support@northpass.com.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-accordion">
|
||||
<div class="accordion-btn">
|
||||
<i class="fal fa-plus"></i>
|
||||
<div class="accordion-title"><strong>Q:</strong> There are a lot of courses, which one should I start with as a new admin?</div>
|
||||
</div>
|
||||
<div class="accordion-panel">
|
||||
<div class="accordion-panel-content">
|
||||
<p><strong>A:</strong> We recommend starting with the Getting Started with Northpass Learning Path. It has all the foundational information needed to become familiar with our platform. Even more, you can pick and choose which information you’d like to view in the Learning Path.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="np-accordion">
|
||||
<div class="accordion-btn">
|
||||
<i class="fal fa-plus"></i>
|
||||
<div class="accordion-title"><strong>Q:</strong> I cannot find a course on a topic, how should I share this feedback?</div>
|
||||
</div>
|
||||
<div class="accordion-panel">
|
||||
<div class="accordion-panel-content">
|
||||
<p><strong>A:</strong> Thank you for letting us know that you’d like to learn something more. Please reach out to our support team at support@northpass.com and our service team is happy to assist.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-accordion">
|
||||
<div class="accordion-btn">
|
||||
<i class="fal fa-plus"></i>
|
||||
<div class="accordion-title"><strong>Q:</strong> I'm having a billing issue, who should I contact?</div>
|
||||
</div>
|
||||
<div class="accordion-panel">
|
||||
<div class="accordion-panel-content">
|
||||
<p><strong>A:</strong> Great question and happy to help! For all billing inquiries, please reach out to billing@northpass.com, and our finance and operations team is happy to assist.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-accordion">
|
||||
<div class="accordion-btn">
|
||||
<i class="fal fa-plus"></i>
|
||||
<div class="accordion-title"><strong>Q:</strong> I'm interested in setting up an integration that's not listed. What should I do?</div>
|
||||
</div>
|
||||
<div class="accordion-panel">
|
||||
<div class="accordion-panel-content">
|
||||
<p><strong>A:</strong> Excellent, we always look forward to new integrations. Please reach out to support@northpass.com and your assigned rep when applicable. They will be happy to help further and loop in the respective folks to scope out the integration further.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.clicked {
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
.accordion-panel {
|
||||
border-radius: 0 0 8px 8px;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
let accordions = document.getElementsByClassName("accordion-btn");
|
||||
|
||||
for (let i = 0; i < accordions.length; i++) {
|
||||
accordions[i].addEventListener("click", function() {
|
||||
this.querySelector('.fal').classList.toggle("fa-plus");
|
||||
this.querySelector('.fal').classList.toggle("fa-minus");
|
||||
this.classList.toggle("clicked");
|
||||
let panel = this.nextElementSibling;
|
||||
panel.classList.toggle("panel-open");
|
||||
if (panel.style.maxHeight) {
|
||||
panel.style.maxHeight = null;
|
||||
} else {
|
||||
panel.style.maxHeight = panel.scrollHeight + "px";
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
@ -0,0 +1,26 @@
|
||||
<div class="np-homepage-featured np-homepage-topics np-max-width">
|
||||
<div class="np-homepage-featured-text">
|
||||
<div class="np-homepage-headline">
|
||||
Popular Topics
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-topics-list row">
|
||||
<div class="col-xs-12 np-stretch-content" style="justify-content: space-evenly; flex-direction: row-reverse;">
|
||||
{% for category in current_school.filterable_categories %}
|
||||
<a class="np-top-button np-button np-button-secondary topic-button col-xs-2" href="/app/catalog?filter[category_uuid][in][]={{category.id}}">{{category.name}}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.topic-button {
|
||||
border-radius: 8px;
|
||||
color: #2c4265 !important;
|
||||
border: 1px solid #2c4265 !important;
|
||||
}
|
||||
|
||||
.topic-button:hover{
|
||||
color: #34abe2 !important;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,76 @@
|
||||
{% capture quotes %}
|
||||
<svg width="52" height="40" viewBox="0 0 52 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12.656 39.76C9.072 39.76 6.048 38.3787 3.584 35.616C1.19467 32.7787 0 29.12 0 24.64C0 21.056 0.858667 17.584 2.576 14.224C4.29333 10.864 6.68267 7.91467 9.744 5.376C12.0458 3.46723 14.5797 1.98056 17.3458 0.916004C19.0264 0.269172 20.8915 0.900303 22.0271 2.29798C23.9806 4.70233 22.9585 8.2866 20.493 10.1624C19.6235 10.8239 18.8405 11.5431 18.144 12.32C16.2027 14.4853 15.232 16.3147 15.232 17.808C15.232 18.48 15.3813 19.2267 15.68 20.048C16.0533 20.7947 16.9493 21.5787 18.368 22.4C20.2347 23.5947 21.5413 24.9013 22.288 26.32C23.0347 27.664 23.408 29.232 23.408 31.024C23.408 33.712 22.4 35.84 20.384 37.408C18.368 38.976 15.792 39.76 12.656 39.76ZM40.32 39.76C36.736 39.76 33.712 38.3787 31.248 35.616C28.8587 32.7787 27.664 29.12 27.664 24.64C27.664 21.056 28.5227 17.584 30.24 14.224C31.9573 10.864 34.3467 7.91467 37.408 5.376C39.7098 3.46723 42.2437 1.98056 45.0098 0.916003C46.6904 0.269172 48.5555 0.900303 49.6911 2.29797C51.6446 4.70233 50.6225 8.2866 48.157 10.1624C47.2875 10.8239 46.5045 11.5431 45.808 12.32C43.8667 14.4853 42.896 16.3147 42.896 17.808C42.896 18.48 43.0453 19.2267 43.344 20.048C43.7173 20.7947 44.6133 21.5787 46.032 22.4C47.8987 23.5947 49.2053 24.9013 49.952 26.32C50.6987 27.664 51.072 29.232 51.072 31.024C51.072 33.712 50.064 35.84 48.048 37.408C46.032 38.976 43.456 39.76 40.32 39.76Z" fill="url(#paint0_linear_2_541)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_2_541" x1="1.24909e-07" y1="19.88" x2="53.648" y2="19.88" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#089FB7"/>
|
||||
<stop offset="1" stop-color="#15824B"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
{% endcapture %}
|
||||
|
||||
<div class="np-homepage-featured np-homepage-tips-tricks np-max-width">
|
||||
<div class="np-homepage-featured-text">
|
||||
<div class="np-homepage-headline">
|
||||
Testimonials From Our Customers
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tips-tricks-carousel np-carousel" id="tips-tricks-carousel">
|
||||
<div class="np-carousel-card">
|
||||
<div class="quote-block np-carousel-bg-blue">
|
||||
<i class="quotes-left"> {{quotes}} </i>
|
||||
<div class="quote">
|
||||
Northpass is an easy-to-manage LMS with the freedom to create and scale learning programs the way we want. Ultra-fast authoring and intelligent administration, along with integrated learning experiences. Plus, responsive support.
|
||||
</div>
|
||||
</div>
|
||||
<div class="quote-author-info">
|
||||
Administrator in Real Estate<br>
|
||||
<span>> 1000 employees</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-carousel-card">
|
||||
<div class="quote-block np-carousel-bg-blue">
|
||||
<i class="quotes-left"> {{quotes}} </i>
|
||||
<div class="quote ">
|
||||
Northpass is an LMS with the learner experience front and center. Their UI principles lead to a clean and focused learner experience that removes the typical distractions of finding and beginning courses in an LMS. They have over the years made significant investments into the admin experience and platform integrations which have helped it grow into areas where other established players would have had a leg up. Their customer success management approach is excellent and one that I routinely use as the bar with other software vendors we utilize.
|
||||
</div>
|
||||
</div>
|
||||
<div class="quote-author-info">
|
||||
Executive Sponsor in Retail<br>
|
||||
<span>> 1000 employees</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="np-carousel-card">
|
||||
<div class="quote-block np-carousel-bg-blue">
|
||||
<i class="quotes-left"> {{quotes}} </i>
|
||||
<div class="quote ">
|
||||
The ability to build a learning management for both internal employees and external clients is harder to find than I would have thought. Because Northpass is focused solely on the ability to build on-demand training, it's simplicity allows you to use those courses in whatever way you want/need.
|
||||
</div>
|
||||
</div>
|
||||
<div class="quote-author-info">
|
||||
Client Enablement Manager Mid-Market<br>
|
||||
<span>51-1000 employees</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
|
||||
$("#tips-tricks-carousel").slick({
|
||||
slidesToShow: 1,
|
||||
slidesToScroll: 1,
|
||||
cssEase: 'linear',
|
||||
prevArrow: '<i class="fal fa-chevron-left"></i>',
|
||||
nextArrow: '<i class="fal fa-chevron-right"></i>',
|
||||
infinite: true,
|
||||
adaptiveHeight: true
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
@ -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>
|
||||
@ -0,0 +1,49 @@
|
||||
<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 class="np-sub-navigation-content-item np-sub-navigation-content-item-inactive custom-navigation-content-item" id="certification-sub-nav-item">
|
||||
<a class="np-sub-navigation-content-item-link custom-navigation-item-link" href="/app/certification">
|
||||
<i
|
||||
class="far fa-diploma np-button-color np-sub-navigation-content-item-icon custom-navigation-content-item-icon"></i>
|
||||
<span style="margin-left: 10px; color: #000000;">Certification</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<script>
|
||||
if(window.location.href.indexOf('/app/certification') > -1){
|
||||
document.querySelector('#certification-sub-nav-item').classList.remove('np-sub-navigation-content-item-inactive');
|
||||
document.querySelector('#certification-sub-nav-item').classList.add('np-sub-navigation-content-item-active');
|
||||
} else {
|
||||
document.querySelector('#certification-sub-nav-item').classList.remove('np-sub-navigation-content-item-active');
|
||||
document.querySelector('#certification-sub-nav-item').classList.add('np-sub-navigation-content-item-inactive');
|
||||
}
|
||||
</script>
|
||||
@ -0,0 +1,61 @@
|
||||
{% if training_session.approved? %}
|
||||
<div class="np-training-session-cta-note">
|
||||
<i class="far fa-check np-training-session-icon"></i>
|
||||
{% t .registered %}
|
||||
</div>
|
||||
{% elsif training_session.pending? %}
|
||||
<div class="np-training-session-cta-note np-training-session-cta-note-error">
|
||||
{% t .pending %}
|
||||
</div>
|
||||
{% elsif training_session.denied? %}
|
||||
<div class="np-training-session-cta-note np-training-session-cta-note-error">
|
||||
{% t .denied %}
|
||||
</div>
|
||||
{% elsif training_session.too_late? %}
|
||||
<div class="np-training-session-cta-note np-training-session-cta-note-error">
|
||||
{% t .too_late %}
|
||||
</div>
|
||||
{% elsif training_session.no_seats? %}
|
||||
<div class="np-training-session-cta-note np-training-session-cta-note-error">
|
||||
{% t .no_seats %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="np-training-session-cta">
|
||||
<div class="np-training-session-cta-buttons">
|
||||
<form
|
||||
action="{% route training_session_registration, id: training_session.id %}"
|
||||
method="post"
|
||||
>
|
||||
{% form_authenticity_token %}
|
||||
|
||||
{% if training_session.internal? and training_session.approved? %}
|
||||
{% if features.training_events_google_calendar? %}
|
||||
{% include "training_session_calendars" %}
|
||||
<button type="submit" class="np-top-button np-button np-button-big np-button-secondary">
|
||||
{% t .unregister %}
|
||||
</button>
|
||||
{% else %}
|
||||
<button type="submit" class="np-top-button np-button-font-color np-button np-button-big">
|
||||
{% t .unregister %}
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
<input type="hidden" name="_method" value="delete" />
|
||||
{% endif %}
|
||||
|
||||
{% if training_session.not_registered? %}
|
||||
<button type="submit" class="np-top-button np-button np-button-big">
|
||||
{% t .register %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.np-button-big {
|
||||
/* background: linear-gradient(90deg, #089FB7 0%, #15824B 100%) !important; */
|
||||
background: linear-gradient(45deg, #2c4265 0%, #34abe2 100%) !important;
|
||||
border-radius: 8px !important;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,14 @@
|
||||
<div class="np-card-training-session-date">
|
||||
<div class="np-button-background-color np-card-training-session-date-bar"></div>
|
||||
<div class="np-card-training-session-date-day" style='margin-right: 5px;'>
|
||||
{{ training_session.day }}
|
||||
</div>
|
||||
<div>
|
||||
<div class="np-card-training-session-date-month">
|
||||
{{ training_session.month }}
|
||||
</div>
|
||||
<div class="np-card-training-session-date-year">
|
||||
{{ training_session.year }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,6 @@
|
||||
{%comment%}<h3 class="np-card-heading">
|
||||
{% t .header %}
|
||||
</h3>{%endcomment%}
|
||||
<div class="np-card-text">
|
||||
{{ training_event.description }}
|
||||
</div>
|
||||
@ -0,0 +1,24 @@
|
||||
<div class="np-card-spacing-large">
|
||||
{% include "training_session_date" %}
|
||||
|
||||
<div class="np-training-session-time">
|
||||
<i class="fal fa-clock np-button-color np-training-session-icon" style='color: #089FB7;'></i>
|
||||
{{ training_session.time_period }} {{ training_session.time_zone }}
|
||||
</div>
|
||||
|
||||
{% if training_session.location %}
|
||||
<div class="np-training-session-location">
|
||||
<i class="fal fa-map-marker-alt np-button-color np-training-session-icon"></i>
|
||||
{{ training_session.location }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if training_session.session_url %}
|
||||
<div class="np-training-session-location">
|
||||
<i class="fal fa-map-marker-alt np-button-color np-training-session-icon"></i>
|
||||
<a href="{{ training_session.session_url }}" class="np-button-color" target="_blank" >
|
||||
{{ training_session.session_url }}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
@ -0,0 +1,10 @@
|
||||
<div class="np-top-vocabulary np-text-title">
|
||||
{% t shared.event_types, key: training_event.event_type %}
|
||||
<i class="fal fa-users-class np-button-color np-training-session-icon" style='color: #089FB7;'></i>
|
||||
</div>
|
||||
<div class="np-top-title">
|
||||
<a href="{% route home %}" class="np-back-button" aria-label="{% t shared.go_back %}">
|
||||
<i class="far fa-arrow-left np-hidden-mobile np-icon-back"></i>
|
||||
</a>
|
||||
{{ training_event.title }}
|
||||
</div>
|
||||
@ -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>
|
||||
@ -0,0 +1,123 @@
|
||||
{% 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>
|
||||
<script>
|
||||
let checkboxFlag = false;
|
||||
|
||||
let checkCheckbox = (element) => {
|
||||
if(element.checked){
|
||||
checkboxFlag = true;
|
||||
} else {
|
||||
checkboxFlag = false;
|
||||
}
|
||||
}
|
||||
|
||||
let hubspotOptOutSubmit = (e) => {
|
||||
let learner_email;
|
||||
let learner_name;
|
||||
|
||||
if(window.innerWidth > 768){
|
||||
learner_email = $('#desktop_learner_email')[0].value;
|
||||
learner_name = `${$('#desktop_learner_first_name')[0].value} ${$('#desktop_learner_last_name')[0].value}`;
|
||||
} else {
|
||||
learner_email = $('#mobile_learner_email').value;
|
||||
learner_name = `${$('#mobile_learner_first_name')} ${$('#mobile_learner_last_name')}`;
|
||||
}
|
||||
|
||||
if(checkboxFlag){
|
||||
alert('sending http req')
|
||||
|
||||
let xhr = new XMLHttpRequest();
|
||||
let url = 'https://www.workato.com/webhooks/rest/bd1a1eb7-7e79-4208-a1db-8e9c7440bcc9/hubspot_opt_out';
|
||||
|
||||
xhr.open("POST", url, true);
|
||||
xhr.send(JSON.stringify({
|
||||
learner_email,
|
||||
learner_name,
|
||||
checkboxFlag: checkboxFlag
|
||||
}));
|
||||
}
|
||||
return;
|
||||
}
|
||||
</script>
|
||||
@ -0,0 +1,101 @@
|
||||
<main class="np-box-container np-open-access">
|
||||
<div class="np-box">
|
||||
{% include "header_minimal" %}
|
||||
<div class="np-box-content-container">
|
||||
<form class="np-form np-box-content" action="{{ form.url }}" method="get" novalidate>
|
||||
{% form_authenticity_token %}
|
||||
<div class="np-form-headline">
|
||||
{% t shared.welcome_to_school, school_name: current_school.name %}
|
||||
</div>
|
||||
<div class="np-form-subheadline">
|
||||
{% t .headline, key: current_school.course_vocabulary %}
|
||||
</div>
|
||||
<div class="np-form-field">
|
||||
<label class="np-input-label" for="learner_first_name">
|
||||
{% t shared.first_name %}
|
||||
</label>
|
||||
<input
|
||||
class="np-input"
|
||||
autofocus="autofocus"
|
||||
type="text"
|
||||
name="first_name"
|
||||
id="learner_first_name"
|
||||
value="{{ form.first_name }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="np-form-field">
|
||||
<label class="np-input-label" for="learner_last_name">
|
||||
{% t shared.last_name %}
|
||||
</label>
|
||||
<input
|
||||
class="np-input"
|
||||
type="text"
|
||||
name="last_name"
|
||||
id="learner_last_name"
|
||||
value="{{ form.last_name }}"
|
||||
/>
|
||||
</div>
|
||||
<div class="np-form-field">
|
||||
<label class="np-input-label" for="learner_email">
|
||||
Company Email
|
||||
</label>
|
||||
<input
|
||||
class="np-input"
|
||||
type="text"
|
||||
name="email"
|
||||
id="learner_email"
|
||||
value="{{ form.email }}"
|
||||
/>
|
||||
</div>
|
||||
<p style="display: none;" id="bad_email_alert">PLEASE ENTER YOUR COMPANY EMAIL</p>
|
||||
<input
|
||||
type="submit"
|
||||
name="commit"
|
||||
value="{% t shared.enter %}"
|
||||
id="submit_button"
|
||||
class="np-button np-button-big np-form-action"
|
||||
/>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<script>
|
||||
// document.getElementById("header").scrollIntoView();
|
||||
|
||||
function checkIfInputsExist (){
|
||||
window.setTimeout(function(){
|
||||
// Regular expression to check if string is email
|
||||
const regexExp = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
||||
|
||||
// Grabs Email Address Value
|
||||
const learnerEmail = $("#learner_email")[0].value;
|
||||
|
||||
if ($("#learner_email")[0].value.length > 0){
|
||||
if(regexExp.test(learnerEmail) == true){
|
||||
if ($("#learner_email")[0].value.includes('@scenariocloud.com')){
|
||||
$("#learner_email").css("background", "#f2f4f5");
|
||||
$("#bad_email_alert").css("display", "none");
|
||||
$("#submit_button").css("pointer-events", "auto");
|
||||
}
|
||||
else {
|
||||
$("#learner_email").css("background", "salmon");
|
||||
$("#bad_email_alert").css("color", "#f2f4f5");
|
||||
$("#bad_email_alert").css("display", "block");
|
||||
$("#submit_button").css("pointer-events","none");
|
||||
}
|
||||
} else {
|
||||
$("#learner_email").css("background", "#f2f4f5");
|
||||
$("#bad_email_alert").css("display", "none");
|
||||
$("#submit_button").css("pointer-events", "auto");
|
||||
}
|
||||
}
|
||||
}, 500)
|
||||
}
|
||||
document.addEventListener('keyup', checkIfInputsExist);
|
||||
console.log(123213213);
|
||||
</script>
|
||||
<style>
|
||||
.np-input-label{
|
||||
color: #ffffff;
|
||||
}
|
||||
</style>
|
||||
@ -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>
|
||||
@ -0,0 +1,747 @@
|
||||
{% comment %} skip-auth {% endcomment %}
|
||||
{% include "header" %}
|
||||
<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-subpage-container np-max-width certification-page">
|
||||
{% comment %}================================================ REGISTRATION HEADER ============================================={% endcomment %}
|
||||
|
||||
{%- comment -%} <div class="base-state">
|
||||
<div class="np-resource-title">Getting Started</div>
|
||||
<div class="register-button">Register Now</div>
|
||||
</div> {%- endcomment -%}
|
||||
|
||||
{% comment %}=================================================== TEXT HEADER ==================================================={% endcomment %}
|
||||
|
||||
{%- comment -%} <div class="np-resource-title skuid-cert-reg-header">Skuid Certification Registration</div> {%- endcomment -%}
|
||||
|
||||
{% comment %}================================================= HEADER BUBBLES ==================================================={% endcomment %}
|
||||
|
||||
<div class="cert-step-bubbles col-xs-12">
|
||||
<div class="cert-bubble col-xs-3">GET STARTED</div>
|
||||
<div class="cert-bubble col-xs-3">EXAM PREP</div>
|
||||
<div class="cert-bubble col-xs-3">COMPLETION STATUS</div>
|
||||
<div class="cert-bubble col-xs-3">RECERTIFICATION</div>
|
||||
</div>
|
||||
|
||||
{% comment %}=================================================== IFRAME =========================================================={% endcomment %}
|
||||
|
||||
{%- comment -%} <iframe></iframe> {%- endcomment -%}
|
||||
|
||||
{% comment %}=========================================== CERTIFICATION REGISTRATION =============================================={% endcomment %}
|
||||
|
||||
<div class="cert-content-container col-xs-12">
|
||||
<div class="np-resource-title cert-header">Ready to be Skuid Certified?</div>
|
||||
<div class="np-resource-subtitle cert-sub-header registration-sub-header">
|
||||
{%- comment -%} <div>The Skuid - Certified Builder Exam assumes knowledge in topics from Levels 1 and 2 of Skuid Skool.</div> {%- endcomment -%}
|
||||
<div>The Skuid - Certified Builder Exam assumes knowledge in topics from <a href="https://www.skuidskool.com/app/learning_paths/46ae5253-8c64-426b-a638-e80c08ce29da" class="registration-sub-header-link" target="_blank">Level 1</a>, <a href="https://www.skuidskool.com/app/learning_paths/e7d6e7ca-39ad-4a40-b75c-83d382715c4a" class="registration-sub-header-link" target="_blank">Level 2</a>, <a href="https://www.skuidskool.com/app/learning_paths/e15cd738-8681-4171-9d09-ba3d31c02005" class="registration-sub-header-link" target="_blank">Deploy and Manage Skuid Apps in Salesforce</a>, and the <a href="https://www.skuidskool.com/app/learning_paths/e76d07d4-984b-41a9-b53f-2c300f8eeba9" class="registration-sub-header-link" target="_blank">Explore More</a> learning paths within <a href="/app" class="registration-sub-header-link" target="_blank">Skuid Skool</a>.</div>
|
||||
<br>
|
||||
<div>Click below to register for your exam.</div>
|
||||
</div>
|
||||
|
||||
<a class="cert-button-big register-cert-button" href="#">Register Now</a>
|
||||
|
||||
<img src="https://cdn.northpass.io/Skuid/images/cert_registration.svg" alt="exam-registration-image" class="exam-status-image exam-registration-image">
|
||||
</img>
|
||||
</div>
|
||||
|
||||
|
||||
{% comment %}================================================ EXAM PREP ==================================================={% endcomment %}
|
||||
|
||||
<div class="cert-content-container col-xs-12">
|
||||
<div class="np-resource-title cert-header">Skuid Certification Exam Prep</div>
|
||||
<div class="np-resource-subtitle cert-sub-header">Prep, practice, or schedule you exam.</div>
|
||||
|
||||
<div class="cert-exam-prep-cards col-xs-9 col-sm-12">
|
||||
<div class="cert-card col-xs-12 col-md-3">
|
||||
<a class="cert-button" href="#">Prep Guide</a>
|
||||
<div class="cert-card-blurb">
|
||||
View courses, documentation, and other resources to prep for the certification exam.
|
||||
</div>
|
||||
</div>
|
||||
<div class="cert-card col-xs-12 col-md-3">
|
||||
<a class="cert-button" href="#">Practice Exam</a>
|
||||
<div class="cert-card-blurb">
|
||||
Take a practice exam to test what you've learned.
|
||||
</div>
|
||||
</div>
|
||||
<div class="cert-card col-xs-12 col-md-3">
|
||||
<a class="cert-button" href="#">Schedule Exam</a>
|
||||
<div class="cert-card-blurb">
|
||||
Ready? Schedule your exam to become certified.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% comment %}============================================ EXAM NOT STARTED =================================================={% endcomment %}
|
||||
|
||||
<div class="cert-content-container col-xs-12">
|
||||
<div class="np-resource-title cert-header">Exam not started</div>
|
||||
<div class="np-resource-subtitle cert-sub-header">See email for instructions or schedule your exam below</div>
|
||||
|
||||
<div class="cert-card col-xs-9 col-sm-5">
|
||||
<a class="cert-button completion-status-card-button" href="#">Schedule Exam</a>
|
||||
<div class="cert-card-blurb completion-status-card-blurb">
|
||||
Ready? Schedule your exam to become certified.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% comment %}============================================ EXAM COMPLETE ===================================================={% endcomment %}
|
||||
|
||||
{%- comment -%} <div class="np-resource-title cert-header">Exam complete</div>
|
||||
<div class="np-resource-subtitle cert-sub-header">Results are still pending. Check back in 10 business days from your exam date.</div> {%- endcomment -%}
|
||||
|
||||
<div class="cert-content-container col-xs-12 exam-status-container">
|
||||
<img src="https://cdn.northpass.io/Skuid/images/exam_complete_background.svg" alt="exam-complete-background" class="exam-status-image">
|
||||
</div>
|
||||
|
||||
{% comment %}============================================== PASSED ========================================================{% endcomment %}
|
||||
|
||||
<div class="cert-content-container col-xs-12 exam-status-container">
|
||||
<img src="https://cdn.northpass.io/Skuid/images/exam_passed_background.svg" alt="exam-passed-background" class="exam-status-image">
|
||||
<a class="cert-button-big share-cert-button" href="#">Share your certification</a>
|
||||
</img>
|
||||
</div>
|
||||
|
||||
{% comment %}=============================================== FAILED ======================================================{% endcomment %}
|
||||
|
||||
<div class="cert-content-container col-xs-12">
|
||||
<div class="np-resource-title cert-header">Exam failed.</div>
|
||||
<div class="np-resource-subtitle cert-sub-header">If you'd like to try again, register to retake the exam below.</div>
|
||||
|
||||
<a class="cert-button-big retake-cert-button" href="#">Register to retake the exam</a>
|
||||
</div>
|
||||
|
||||
{% comment %}============================================= CERTIFIED ======================================================{% endcomment %}
|
||||
|
||||
<div class="cert-content-container col-xs-12 exam-status-container">
|
||||
<img src="https://cdn.northpass.io/Skuid/images/cert_recert.svg" alt="cert-recert-background" class="exam-status-image">
|
||||
<div class="cert-recert-content-container">
|
||||
<div class="np-resource-subtitle cert-sub-header">Recertification is due on 1/1/2024</div>
|
||||
<a class="cert-button-med download-cert-button" href="#">Download Certificate</a>
|
||||
</div>
|
||||
</img>
|
||||
</div>
|
||||
|
||||
{%- comment -%} <div class="cert-content-container col-xs-12">
|
||||
<div class="np-resource-title cert-header">Congratulations you're certified!</div>
|
||||
<div class="np-resource-subtitle cert-sub-header">Recertification is due on 1/1/2024</div>
|
||||
|
||||
<a class="cert-button-med download-cert-button" href="#">Download Certificate</a>
|
||||
</div> {%- endcomment -%}
|
||||
|
||||
{% comment %}============================================ RECERTIFIED ====================================================={% endcomment %}
|
||||
|
||||
<div class="cert-content-container col-xs-12">
|
||||
<div class="np-resource-title cert-header">Time for your recertification!</div>
|
||||
<div class="np-resource-subtitle cert-sub-header">Recertification is due on 1/1/2024</div>
|
||||
|
||||
<a class="cert-button-med re-cert-button" href="#">Get recertified</a>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{% include "footer" %}
|
||||
|
||||
<!-- Hotjar Tracking Code for Skool Staging/test site -->
|
||||
<script>
|
||||
(function(h,o,t,j,a,r){
|
||||
h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
|
||||
h._hjSettings={hjid:3393511,hjsv:6};
|
||||
a=o.getElementsByTagName('head')[0];
|
||||
r=o.createElement('script');r.async=1;
|
||||
r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
|
||||
a.appendChild(r);
|
||||
})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.certification-page{
|
||||
height: 100%;
|
||||
padding: 40px 15px 20px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cert-header,
|
||||
.cert-sub-header{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.cert-sub-header{
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.register-cert-button{
|
||||
margin-top: -4px !important;
|
||||
}
|
||||
|
||||
.cert-recert-content-container{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
padding-top: 12%;
|
||||
left: -5px;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.cert-recert-content-container .cert-sub-header{
|
||||
font-size: 8px;
|
||||
}
|
||||
|
||||
.registration-sub-header-link{
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 450px){
|
||||
.cert-recert-content-container{
|
||||
padding-top: 13%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 550px){
|
||||
.cert-recert-content-container{
|
||||
padding-top: 14%;
|
||||
}
|
||||
|
||||
.cert-recert-content-container .cert-sub-header{
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px){
|
||||
.certification-page{
|
||||
padding: 30px 3% 75px;
|
||||
}
|
||||
|
||||
.cert-recert-content-container{
|
||||
left: unset;
|
||||
margin-right: 10px;
|
||||
padding-top: 8%;
|
||||
}
|
||||
|
||||
.cert-recert-content-container .cert-sub-header{
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 900px){
|
||||
.cert-recert-content-container{
|
||||
padding-top: 9%;
|
||||
}
|
||||
|
||||
.cert-recert-content-container .cert-sub-header{
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1150px){
|
||||
.cert-recert-content-container{
|
||||
padding-top: 10%;
|
||||
}
|
||||
|
||||
.cert-recert-content-container .cert-sub-header{
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1280px){
|
||||
.cert-recert-content-container .cert-sub-header{
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1440px){
|
||||
.cert-recert-content-container{
|
||||
padding-top: 11%;
|
||||
}
|
||||
|
||||
.cert-recert-content-container .cert-sub-header{
|
||||
font-size: 22px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1950px){
|
||||
.cert-recert-content-container{
|
||||
padding-top: 10%;
|
||||
}
|
||||
|
||||
.cert-recert-content-container .cert-sub-header{
|
||||
font-size: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 2150px){
|
||||
.cert-recert-content-container{
|
||||
padding-top: 200px;
|
||||
}
|
||||
|
||||
.cert-recert-content-container .cert-sub-header{
|
||||
font-size: 26px;
|
||||
}
|
||||
}
|
||||
|
||||
/* TOP ELEMENT STYLES */
|
||||
|
||||
.base-state{
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.base-state .np-resources-title{
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.register-button{
|
||||
background: #603DD8;
|
||||
color: #FFFFFF;
|
||||
border-radius: 16px;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
height: 35px;
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
.cert-step-bubbles{
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
height: 73px;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 12px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.cert-bubble{
|
||||
align-items: center;
|
||||
background: #B195F4;
|
||||
border-radius: 8px;
|
||||
color: #FFFFFF;
|
||||
display: flex;
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
max-width: 24%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.current-cert-bubble{
|
||||
background: #603DD8;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 450px){
|
||||
.cert-bubble{
|
||||
font-size: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 650px){
|
||||
.cert-bubble{
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 750px){
|
||||
.cert-bubble{
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px){
|
||||
.base-state{
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.cert-bubble{
|
||||
font-size: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 850px){
|
||||
.cert-bubble{
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1100px){
|
||||
.cert-bubble{
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1200px){
|
||||
.cert-bubble{
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* CONTENT STYLES ===================================================================================================================================================== */
|
||||
iframe,
|
||||
.cert-content-container{
|
||||
background: #F7F5FD;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cert-content-container{
|
||||
align-items: center;
|
||||
border-radius: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding-bottom: 127px;
|
||||
padding-top: 91px;
|
||||
}
|
||||
|
||||
.exam-status-container{
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.exam-status-image{
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.exam-registration-image{
|
||||
margin-left: -15%;
|
||||
}
|
||||
|
||||
.cert-exam-prep-cards{
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-evenly;
|
||||
}
|
||||
|
||||
.cert-card{
|
||||
align-items: center;
|
||||
background: #E7E3F4;
|
||||
border-radius: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.cert-button{
|
||||
margin-bottom: 24px;
|
||||
margin-top: 40px;
|
||||
width: 55%;
|
||||
}
|
||||
|
||||
.cert-button-med{
|
||||
width: 45%;
|
||||
}
|
||||
|
||||
.cert-button-big{
|
||||
font-size: 18px;
|
||||
height: 40px;
|
||||
padding: 5px;
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
.cert-button,
|
||||
.cert-button-med{
|
||||
font-size: 14px;
|
||||
height: 35px;
|
||||
padding: 7px
|
||||
}
|
||||
|
||||
.cert-button-med,
|
||||
.cert-button-big{
|
||||
margin-top: 25px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.cert-button,
|
||||
.cert-button-med,
|
||||
.cert-button-big{
|
||||
background: #603DD8;
|
||||
border-radius: 16px;
|
||||
color: #FFFFFF;
|
||||
font-weight: 500;
|
||||
margin-bottom: 24px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.retake-cert-button{
|
||||
font-size: 16px;
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
.cert-button:hover,
|
||||
.cert-button-big:hover{
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.cert-card-blurb{
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
min-height: 100px;
|
||||
margin-bottom: 19px;
|
||||
padding: 0 25px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.completion-status-card-blurb{
|
||||
min-height: 70px;
|
||||
}
|
||||
|
||||
.share-cert-button{
|
||||
font-size: 12px !important;
|
||||
height: 40px;
|
||||
margin-top: -38%;
|
||||
margin-bottom: calc(38% + 24px);
|
||||
max-width: 275px;
|
||||
padding: 11px 0px;
|
||||
width: 38% !important;
|
||||
}
|
||||
|
||||
.download-cert-button{
|
||||
font-size: 12px;
|
||||
height: 27px;
|
||||
margin-top: -25px;
|
||||
max-width: 210px;
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 450px){
|
||||
.cert-button{
|
||||
font-size: 16px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.cert-button-med{
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.cert-button-big{
|
||||
width: 55%;
|
||||
}
|
||||
|
||||
.download-cert-button{
|
||||
font-size: 14px;
|
||||
height: unset;
|
||||
margin-top: -15px;
|
||||
width: 40%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 500px){
|
||||
.retake-cert-button{
|
||||
font-size: 18px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.share-cert-button{
|
||||
font-size: 14px;
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 550px){
|
||||
.cert-button-med{
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
.cert-button-big{
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 600px){
|
||||
.cert-button-med{
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
.cert-button-big{
|
||||
width: 45%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 650px){
|
||||
.cert-button-big{
|
||||
width: 40%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 700px){
|
||||
.cert-button-med{
|
||||
width: 27%;
|
||||
}
|
||||
|
||||
.cert-button-big{
|
||||
width: 35%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px){
|
||||
.cert-exam-prep-cards{
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cert-card-blurb{
|
||||
min-height: 130px;
|
||||
}
|
||||
|
||||
.completion-status-card-button{
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.cert-button-med{
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
.cert-button-big{
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.retake-cert-button{
|
||||
font-size: 16px;
|
||||
padding: 7px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 850px){
|
||||
.completion-status-card-button{
|
||||
width: 65%;
|
||||
}
|
||||
|
||||
.cert-button-med{
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
.cert-button-big{
|
||||
width: 45%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 900px){
|
||||
.completion-status-card-button{
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
.share-cert-button{
|
||||
font-size: 18px !important;
|
||||
padding: 5px !important;
|
||||
}
|
||||
|
||||
.cert-button-big{
|
||||
width: 40%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 950px){
|
||||
.cert-button-med{
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.completion-status-card-button{
|
||||
width: 55%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1000px){
|
||||
.cert-button-big{
|
||||
width: 35%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1024px){
|
||||
.cert-exam-prep-cards{
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.cert-button{
|
||||
font-size: 14px;
|
||||
padding: 0;
|
||||
padding-top: 7px;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.cert-card-blurb{
|
||||
min-height: 190px;
|
||||
}
|
||||
|
||||
.completion-status-card-blurb{
|
||||
min-height: 80px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1100px){
|
||||
.cert-button{
|
||||
font-size: 14px;
|
||||
padding: 7px;
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.cert-button-med{
|
||||
width: 22%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1150px){
|
||||
.cert-button-big{
|
||||
width: 30%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1200px){
|
||||
.cert-button{
|
||||
width: 70%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1300px){
|
||||
.cert-button{
|
||||
width: 65%;
|
||||
}
|
||||
|
||||
.cert-button-med{
|
||||
max-width: 170px;
|
||||
}
|
||||
|
||||
.cert-button-big{
|
||||
max-width: 230px;
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.download-cert-button{
|
||||
margin-top: 25px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1350px){
|
||||
.cert-button{
|
||||
font-size: 16px;
|
||||
padding: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1440px){
|
||||
.cert-button{
|
||||
width: 55%;
|
||||
}
|
||||
|
||||
.cert-card-blurb{
|
||||
min-height: 140px;
|
||||
}
|
||||
|
||||
.completion-status-card-blurb{
|
||||
min-height: 80px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,66 @@
|
||||
{% 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();
|
||||
addTargetBlankToLinksInCourseDescription();
|
||||
});
|
||||
|
||||
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)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function addTargetBlankToLinksInCourseDescription() {
|
||||
let rte = document.getElementsByClassName("np-card-text")[0];
|
||||
let links;
|
||||
|
||||
if (rte) {
|
||||
links = rte.querySelectorAll("a");
|
||||
if (links) {
|
||||
for (i = 0; i < links.length; i++) {
|
||||
links[i].setAttribute("target", "_blank");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.custom-course-page {
|
||||
max-width: 1600px !important;
|
||||
}
|
||||
|
||||
/* Based on how things are setup, at the course cover page, the footer is entirely blocked due to all of the customizations */
|
||||
.np-footer{
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
@ -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" %}
|
||||
@ -0,0 +1,3 @@
|
||||
<script>
|
||||
window.location.replace('/app')
|
||||
</script>
|
||||
@ -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 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;">“Affiliate”</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, “control” 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;">“Agreement”</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 <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;">“Content”</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;">“Data”</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;">“Data Platform”</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 (“AWS”), 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;">“Data Processing Addendum”</strong> or <strong
|
||||
style="box-sizing: border-box; font-weight: 600;">“DPA”</strong> means the addendum drafted in
|
||||
compliance with the EU General Data Protection Regulation 2016/679 (“GDPR”), available upon request
|
||||
at <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;">“Direct Competition”</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;">“Effective Date”</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;">“Intellectual Property Rights”</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;">“Malicious Code”</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;">“Metadata”</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;">“Order Form”</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;">“Purchased Skuid Services”</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;">“Service Administrator”</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;">“Skuid Credentials”</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;">“Skuid Data”</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;">“Skuid Professional Services”</strong> or “Pro
|
||||
Services” 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;">“Skuid Services”</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 <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;">“Term”</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;">“Third-Party Applications”</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;">“User”</strong> or <strong
|
||||
style="box-sizing: border-box; font-weight: 600;">“Users”</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;">“User Guide”</strong> means the online documentation
|
||||
for the Skuid Services, accessible through <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;">“We”</strong> or <strong
|
||||
style="box-sizing: border-box; font-weight: 600;">“Us”</strong> means Skuid.</li>
|
||||
<li style="box-sizing: border-box; margin-bottom: 1.5rem;"><strong
|
||||
style="box-sizing: border-box; font-weight: 600;">“You”</strong> or <strong
|
||||
style="box-sizing: border-box; font-weight: 600;">“Your”</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’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’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 <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 <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 <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’s personnel and Skuid’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’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>‍</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’s applicable license or subscription agreement (the “Data Platform Agreement”). 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’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’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 “Background
|
||||
IP”) 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 (“Inventions”). 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’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, “taxes”). 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 (“GST”), 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’s technology,
|
||||
content and the Skuid Services, and any ideas, suggestions, enhancement requests, feedback, recommendations, or
|
||||
other information (collectively, the “Ideas”) 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 — 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’s Intellectual Property Rights. Skuid may, but will not be obligated to,
|
||||
prosecute such violation at Skuid’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’s expense. Provided, however,
|
||||
if any violation relates to Your or any of Your User’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,
|
||||
“Confidential Information” means all confidential information disclosed by a party (“Disclosing
|
||||
Party”) to the other party (“Receiving Party”), 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’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's cost, if the Disclosing Party wishes to contest the disclosure. If the Receiving Party is
|
||||
compelled by law to disclose the Disclosing Party'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’s logo shall be
|
||||
upon prior written approval only; however, Skuid and Customer agree to discuss Customer’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’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’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 “as is” 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 (“Claim”) 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’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’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’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’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’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’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’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’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’ 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’s sole remedy for any purported assignment by the other party in breach of this paragraph shall
|
||||
be, at the non-assigning party’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 “boilerplate”
|
||||
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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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" %}
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -0,0 +1,12 @@
|
||||
<div class="uk-container uk-container-center uk-padding-large-horizontal uk-margin-large-top uk-margin-bottom">
|
||||
<hgroup class="uk-text-center vertical-align uk-padding-large-top">
|
||||
<h1 class="page-head">{% t .headline %}</h1>
|
||||
</hgroup>
|
||||
|
||||
<div class="uk-width-small-1-1 uk-width-medium-1-2 uk-container-center uk-padding-large-top">
|
||||
<div class="school-website-custom-page-content uk-text-center uk-padding-large-bottom uk-margin-large-bottom">
|
||||
<h3 class="uk-margin-top-remove uk-margin-large-bottom">{% t .subheadline %}</h3>
|
||||
<p><a href="/" class="uk-button uk-button-primary">{% t .home %}</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,324 @@
|
||||
{% 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"
|
||||
type="text"
|
||||
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>
|
||||
<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="My Colleague or Team Member">My Colleague or Team Member</option>
|
||||
<option value="Skuid Team Member/Skuid Employee">Skuid Team Member/Skuid 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>
|
||||
</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;
|
||||
}
|
||||
@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" && $("#how_did_you_hear")[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");
|
||||
}
|
||||
}, 500)
|
||||
}
|
||||
document.addEventListener('keydown', checkIfInputsExist);
|
||||
document.getElementById("learner_role").addEventListener('change', checkIfInputsExist);
|
||||
$("#how_did_you_hear")[0].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,
|
||||
email: '{{ current_person.email }}',
|
||||
name: '{{ current_person.first_name }} {{ current_person.last_name }}',
|
||||
howDidYouHear: $('#how_did_you_hear')[0].value
|
||||
}));
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.np-box-container {
|
||||
background: none;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,409 @@
|
||||
{% 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>
|
||||
<p style="display: none; color: salmon;" id="skuid-domain-alert">Skuid team members please login to <a href="https://www.skuadskool.com/" style="text-decoration: none;">skuadskool.com</a></p>
|
||||
<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 checkbox-field">
|
||||
<label class="checkbox-container">
|
||||
<input type="checkbox" id="attestationCheckbox">
|
||||
I have read and agree to the <a href="http://www.skuid.com/legal/privacy-policy">privacy policy</a> and <a
|
||||
href="http://www.skuid.com/legal/terms-of-use">terms of use</a>.
|
||||
<span class="checkmark"></span>
|
||||
</label>
|
||||
</div>
|
||||
{%- comment -%} <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"
|
||||
style="text-align-last: left;"
|
||||
required
|
||||
>
|
||||
<option value="" selected disabled>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>
|
||||
</select>
|
||||
</div> {%- endcomment -%}
|
||||
|
||||
{% comment %}<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>
|
||||
</select>
|
||||
</div>{% endcomment %}
|
||||
<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>
|
||||
<div class="err-required" style="display:none;">Please complete all required fields.</div>
|
||||
</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")[0].value.includes('@skuid') == false){
|
||||
$("#skuid-domain-alert").css("display", "none");
|
||||
$("#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) {
|
||||
$("#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")[0].value.includes('@skuid') ? $("#skuid-domain-alert").css("display", "block") : $("#skuid-domain-alert").css("display", "none");
|
||||
$("#learner_email").css("background-color", "salmon")
|
||||
$("#send_button").css("background-color","#6F7277");
|
||||
$("#send_button").css("pointer-events","none");
|
||||
}
|
||||
}
|
||||
}, 500)
|
||||
}
|
||||
document.addEventListener('keydown', checkIfInputsExist);
|
||||
$("#learner_email")[0].addEventListener('change', checkIfInputsExist);
|
||||
</script>
|
||||
|
||||
<script>
|
||||
//validate the checkbox is selected
|
||||
|
||||
$('.np-form-action').click(function(e) {
|
||||
e.preventDefault()
|
||||
console.log("clicked")
|
||||
|
||||
if($("#attestationCheckbox").is(":checked")) {
|
||||
$('.np-form').submit()
|
||||
} else {
|
||||
console.log("Checkbox is not checked")
|
||||
$('.checkbox-field').addClass('has-err')
|
||||
$('.err-required').show();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@ -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>
|
||||
1023
Custom_Templates/customer_templates/Skuid_Sandbox/styles.css.liquid
Normal file
1023
Custom_Templates/customer_templates/Skuid_Sandbox/styles.css.liquid
Normal file
File diff suppressed because it is too large
Load Diff
@ -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" %}
|
||||
@ -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.
|
||||
You’ll 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>
|
||||
@ -311,4 +311,4 @@ Offer certs to anyone who has already completed all courses but before the LPs a
|
||||
BDR team is launching their own academy/cert program. It's an internal program and LMS.
|
||||
They will be the QA tester in May
|
||||
|
||||
TODO: Send Katlin and Erin examples of customized login pages, forms, learning paths/dashboards, etc.
|
||||
DONE: Send Katlin and Erin examples of customized login pages, forms, learning paths/dashboards, etc.
|
||||
|
||||
@ -16,3 +16,9 @@ Mural board is already laid out. They have resources and ready to go.
|
||||
|
||||
Phase 2: Cross functional, deeper training for clients who also have CSMs.
|
||||
~ 6 months from today
|
||||
|
||||
## 03/20/2023
|
||||
|
||||
### Chat with Paul
|
||||
|
||||
Name, Email, Company Name & Company ID - IDEAL parameters.
|
||||
|
||||
@ -154,4 +154,3 @@ How much:
|
||||
* How many became new accounts
|
||||
* Are they interacting with new core-functionality
|
||||
* Have they added new users?
|
||||
|
||||
|
||||
@ -110,3 +110,11 @@ Driving down registrations.
|
||||
Kayla has made all the events discoverable and accessible, but it is restricting the full functionality of Northpass.
|
||||
|
||||
Kayla thought it could be the webinar template in Zoom.
|
||||
|
||||
## 03/15/2023
|
||||
|
||||
### Matt joined
|
||||
|
||||
Default- expanded sections
|
||||
course prop boolean
|
||||
t/F - collapsed sections
|
||||
|
||||
@ -178,7 +178,7 @@ She is concerned if someone claims they completed something how can she confirm?
|
||||
|
||||
### Upgrading to Comms
|
||||
|
||||
TODO: Password Reset, Academy Invitation (Mgr+Admin+Learners). Alexa doesn't have to do anything, Marek will change the
|
||||
DONE: Password Reset, Academy Invitation (Mgr+Admin+Learners). Alexa doesn't have to do anything, Marek will change the
|
||||
format and enable them.
|
||||
|
||||
Any interruptions? No. Alexa will not see any difference. Well, MOST won't see any changes. By early next week, the old emails will disappear and the new ones will become the standard. They will say "NEW" next to them.
|
||||
|
||||
@ -382,3 +382,16 @@ Krystal to speak to lead designer to give Cam insight as to how they design thei
|
||||
## 03/01/2023
|
||||
|
||||
### Meeting Cassie, Lauren Hand off
|
||||
|
||||
## 03/16/2023
|
||||
|
||||
TODO: Show MJ how to do Show Transcript for bullet points. Here is the code:
|
||||
|
||||
```html
|
||||
<div id="transcriptToggle">Show Transcript</div>
|
||||
|
||||
<div id="transcriptContent">
|
||||
<p>Hey everyone, this is Ally with Tripleseat and in this video we are going to go over how to create an event and the different options you have to do so. The quickest way to add an event right to your calendar is by clicking on the new event button on the top right corner of your screen in Tripleseat. Detailing this page out and clicking create will add the event right to our calendar as well as store the contact information within Tripleseat. </p>
|
||||
```
|
||||
|
||||
TODO: Show MJ example of Video+Article as two activities example.
|
||||
|
||||
@ -181,13 +181,20 @@ DONE: Submit ticket for font changes & iFrame the calendar.
|
||||
### Certs for Completion of Courses in Group
|
||||
|
||||
TODO: Create "hidden" course where a cert will live. Submit ticket for course to show up only after all 10 courses in PM Fundamentals group is complete.
|
||||
TODO: Ask Product about custom certs for Enterprise. Wild Health needs it for accreditation/legal healthcare reasons.
|
||||
DONE: Ask Product about custom certs for Enterprise. Wild Health needs it for accreditation/legal healthcare reasons.
|
||||
Education Portal > PM Fundamentals Group > Must complete all courses.
|
||||
Date for custom cert: end of month, if possible. If not 2-3 months.
|
||||
|
||||
WHAcademy: Abby fixed an embed issue but is trying to embed a different website, but it is showing Northpass. www.wildhealth.com\education. It is not working, it is just showing the
|
||||
TODO: Ask about embeds not working - not loading or just showing the current Northpass page in the iFrame.
|
||||
DONE: Ask about embeds not working - not loading or just showing the current Northpass page in the iFrame.
|
||||
|
||||
WHAcademy again:
|
||||
TODO: Check out the "Sleep" course, Bear Chronotype image, rounded corners not working, they image is staying sharp
|
||||
DONE: Check out the "Sleep" course, Bear Chronotype image, rounded corners not working, they image is staying sharp
|
||||
This previously worked.
|
||||
|
||||
## 03/20/2023
|
||||
|
||||
### Trei & Analytics
|
||||
|
||||
Updated Abby on LPs, Certs, eCommerce and road map
|
||||
TODO: Get Abby a list of requirements for design of certs
|
||||
|
||||
@ -3,16 +3,18 @@ import pandas as pd
|
||||
|
||||
apiKey = "HWxj6VTNPwbc3WghFTPzr7SjE"
|
||||
# Wild Health
|
||||
groupid = "504c4771-223a-447f-9ec6-08e51bc9ca23"
|
||||
groupurl = f"https://api.northpass.com/v2/groups/{groupid}/memberships"
|
||||
|
||||
jan_groupid = "504c4771-223a-447f-9ec6-08e51bc9ca23"
|
||||
july_groupid = "a988c9b0-d9f7-400e-a859-48a0fb167da7"
|
||||
groupurl = f"https://api.northpass.com/v2/groups/{jan_groupid}/memberships"
|
||||
|
||||
|
||||
def getemailsfromGroup(apiKey, groupid, groupurl):
|
||||
def getemailsfromGroup(apiKey, jan_groupid, groupurl):
|
||||
x = 0
|
||||
emaillist = []
|
||||
while True:
|
||||
x += 1
|
||||
url = f"https://api.northpass.com/v2/groups/{groupid}/memberships?page={x}"
|
||||
url = f"https://api.northpass.com/v2/groups/{jan_groupid}/memberships?page={x}"
|
||||
headers = {"accept": "application/json", "X-Api-Key": apiKey}
|
||||
response = requests.get(url, headers=headers)
|
||||
jsonResponse = response.json()
|
||||
@ -30,4 +32,4 @@ def getemailsfromGroup(apiKey, groupid, groupurl):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
getemailsfromGroup(apiKey, groupid, groupurl)
|
||||
getemailsfromGroup(apiKey, jan_groupid, groupurl)
|
||||
|
||||
308
Scripts/GoogleScripts/MizunoPGA/LongRun.gs
Normal file
308
Scripts/GoogleScripts/MizunoPGA/LongRun.gs
Normal file
@ -0,0 +1,308 @@
|
||||
// Compiled using ts2gas 3.6.5 (TypeScript 4.3.2)
|
||||
var exports = exports || {};
|
||||
var module = module || { exports: exports };
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.executeLongRun = exports.LongRun = void 0;
|
||||
//import Properties = GoogleAppsScript.Properties.Properties;
|
||||
/**
|
||||
* Long-Running Support
|
||||
*/
|
||||
var LongRun = /** @class */ (function () {
|
||||
/**
|
||||
* Private constructor
|
||||
* @private
|
||||
*/
|
||||
function LongRun() {
|
||||
/** start time map */
|
||||
this.startTimeMap = {};
|
||||
}
|
||||
Object.defineProperty(LongRun, "instance", {
|
||||
/**
|
||||
* Returns singleton instance.
|
||||
*/
|
||||
get: function () {
|
||||
if (!this._instance) {
|
||||
this._instance = new LongRun();
|
||||
}
|
||||
return this._instance;
|
||||
},
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
/**
|
||||
* Returns if function is running now.
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.isRunning = function (funcName) {
|
||||
// get spreadsheet properties
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
var running = properties.getProperty(LongRun.PREFIX_RUNNING + funcName);
|
||||
return !(running == null || running === '');
|
||||
};
|
||||
/**
|
||||
* Sets the function is running
|
||||
* @param funcName
|
||||
* @param running
|
||||
*/
|
||||
LongRun.prototype.setRunning = function (funcName, running) {
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
var key = LongRun.PREFIX_RUNNING + funcName;
|
||||
if (running) {
|
||||
properties.setProperty(key, "running");
|
||||
}
|
||||
else {
|
||||
properties.deleteProperty(key);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Sets max execution seconds
|
||||
* @param seconds
|
||||
*/
|
||||
LongRun.prototype.setMaxExecutionSeconds = function (seconds) {
|
||||
LongRun.RUNNING_MAX_SECONDS = seconds;
|
||||
};
|
||||
/**
|
||||
* Sets the trigger's delay minutes
|
||||
* @param minutes
|
||||
*/
|
||||
LongRun.prototype.setTriggerDelayMinutes = function (minutes) {
|
||||
LongRun.RUNNING_DELAY_MINUTES = minutes;
|
||||
};
|
||||
/**
|
||||
* Returns the function parameters
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.getParameters = function (funcName) {
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
var parameters = properties.getProperty(LongRun.PREFIX_OPTION + funcName);
|
||||
if (parameters != null) {
|
||||
return parameters.split(',');
|
||||
}
|
||||
else {
|
||||
return [];
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Sets the function parameters.
|
||||
* @param funcName
|
||||
* @param parameters
|
||||
*/
|
||||
LongRun.prototype.setParameters = function (funcName, parameters) {
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
if (parameters != null) {
|
||||
properties.setProperty(LongRun.PREFIX_OPTION + funcName, parameters.join(','));
|
||||
}
|
||||
else {
|
||||
properties.deleteProperty(LongRun.PREFIX_OPTION + funcName);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Starts or Resumes Long-Run process.
|
||||
* @param funcName
|
||||
* @returns start index ( 0 for the first time )
|
||||
*/
|
||||
LongRun.prototype.startOrResume = function (funcName) {
|
||||
// save start time
|
||||
this.startTimeMap[funcName] = new Date().getTime();
|
||||
// get properties of spreadsheet
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
// set running-flag
|
||||
this.setRunning(funcName, true);
|
||||
// if the trigger exists, delete it.
|
||||
this.deleteTrigger(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
// get start index
|
||||
var startPos = parseInt(properties.getProperty(LongRun.PREFIX_START_POS + funcName));
|
||||
if (!startPos) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return startPos;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Determines whether the process should be suspended.
|
||||
* If it should be suspended, the next trigger will be registered.
|
||||
* @param funcName
|
||||
* @param nextIndex - start position when resuming
|
||||
* @return true - it should be suspended
|
||||
*/
|
||||
LongRun.prototype.checkShouldSuspend = function (funcName, nextIndex) {
|
||||
var startTime = this.startTimeMap[funcName];
|
||||
var diff = (new Date().getTime() - startTime) / 1000;
|
||||
// If it's past the specified time, suspend the process
|
||||
if (diff >= LongRun.RUNNING_MAX_SECONDS) {
|
||||
// register the next trigger and set running-flag off
|
||||
this.registerNextTrigger(funcName, nextIndex);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Resets Long-Running variables
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.reset = function (funcName) {
|
||||
// delete trigger
|
||||
this.deleteTrigger(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
// delete spreadsheet properties
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
properties.deleteProperty(LongRun.PREFIX_START_POS + funcName);
|
||||
properties.deleteProperty(LongRun.PREFIX_OPTION + funcName);
|
||||
properties.deleteProperty(LongRun.PREFIX_RUNNING + funcName);
|
||||
properties.deleteProperty(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
};
|
||||
/**
|
||||
* Resets Long-Running variables if there is no next trigger.
|
||||
* Returns whether the command has finished or not.
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.end = function (funcName) {
|
||||
var ret = false;
|
||||
if (!this.existsNextTrigger(funcName)) {
|
||||
this.reset(funcName);
|
||||
ret = true;
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
/**
|
||||
* Returns if there is next trigger.
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.existsNextTrigger = function (funcName) {
|
||||
var triggerId = PropertiesService.getScriptProperties().getProperty(LongRun.PREFIX_TRIGGER_KEY + funcName);
|
||||
return triggerId != null;
|
||||
};
|
||||
/**
|
||||
* register the next trigger and set running-flag off
|
||||
* @param funcName
|
||||
* @param nextIndex - start position when resuming
|
||||
*/
|
||||
LongRun.prototype.registerNextTrigger = function (funcName, nextIndex) {
|
||||
// get spreadsheet properties
|
||||
var properties = PropertiesService.getScriptProperties();
|
||||
properties.setProperty(LongRun.PREFIX_START_POS + funcName, String(nextIndex)); // save next start position
|
||||
this.setTrigger(LongRun.PREFIX_TRIGGER_KEY + funcName, funcName); // set trigger
|
||||
// turn off running-flag
|
||||
properties.deleteProperty(LongRun.PREFIX_RUNNING + funcName);
|
||||
};
|
||||
/**
|
||||
* Deletes the trigger
|
||||
* @param triggerKey
|
||||
*/
|
||||
LongRun.prototype.deleteTrigger = function (triggerKey) {
|
||||
var triggerId = PropertiesService.getScriptProperties().getProperty(triggerKey);
|
||||
if (!triggerId)
|
||||
return;
|
||||
ScriptApp.getProjectTriggers().filter(function (trigger) {
|
||||
return trigger.getUniqueId() == triggerId;
|
||||
})
|
||||
.forEach(function (trigger) {
|
||||
ScriptApp.deleteTrigger(trigger);
|
||||
});
|
||||
PropertiesService.getScriptProperties().deleteProperty(triggerKey);
|
||||
};
|
||||
/**
|
||||
* Sets a trigger
|
||||
* @param triggerKey
|
||||
* @param funcName
|
||||
*/
|
||||
LongRun.prototype.setTrigger = function (triggerKey, funcName) {
|
||||
this.deleteTrigger(triggerKey); // delete if exists.
|
||||
var dt = new Date();
|
||||
dt.setMinutes(dt.getMinutes() + LongRun.RUNNING_DELAY_MINUTES); // will execute after the specified time
|
||||
var triggerId = ScriptApp.newTrigger(funcName).timeBased().at(dt).create().getUniqueId();
|
||||
// save the trigger id to delete the trigger later.
|
||||
PropertiesService.getScriptProperties().setProperty(triggerKey, triggerId);
|
||||
};
|
||||
// constants
|
||||
LongRun.PREFIX_RUNNING = "running_";
|
||||
LongRun.PREFIX_TRIGGER_KEY = "trigger_";
|
||||
LongRun.PREFIX_START_POS = "start_";
|
||||
LongRun.PREFIX_OPTION = "option_";
|
||||
LongRun.RUNNING_MAX_SECONDS = 4 * 60;
|
||||
LongRun.RUNNING_DELAY_MINUTES = 1;
|
||||
LongRun.EXECUTE_LONGRUN_FUNCNAME = "_executeLongRun";
|
||||
return LongRun;
|
||||
}());
|
||||
exports.LongRun = LongRun;
|
||||
/**
|
||||
* A function allows you to easily execute long-run task using the LongRun class.
|
||||
*
|
||||
* @param mainFuncName - Name of the function to be executed each time.
|
||||
* @param loopCount - Number of times to execute the main function.
|
||||
* @param params - Parameters passed to each function (string[]). (optional)
|
||||
* @param initializerName - Name of the first function to be executed on first or restart. (optional)
|
||||
* @param finalizerName - Name of the function to be called on interruption or when all processing is complete. (optional)
|
||||
*
|
||||
* The definition of each function to be passed should be as follows.
|
||||
* - Main function: function [function name](index: number, params: string[]) {...}
|
||||
* - Initializer: function [function name](startIndex: number, params: string[]) {...}
|
||||
* - Finalizer: function [function name](isFinished: boolean, params: string[]) {...}
|
||||
*
|
||||
* Note that it is not possible to use executeLongRun() to execute different long-time processes simultaneously.
|
||||
*/
|
||||
function executeLongRun(mainFuncName, loopCount, params, initializerName, finalizerName) {
|
||||
if (params === void 0) { params = null; }
|
||||
if (initializerName === void 0) { initializerName = null; }
|
||||
if (finalizerName === void 0) { finalizerName = null; }
|
||||
var longRunParams = [];
|
||||
longRunParams.push(mainFuncName);
|
||||
longRunParams.push(String(loopCount));
|
||||
longRunParams.push(initializerName === null ? '' : initializerName);
|
||||
longRunParams.push(finalizerName === null ? '' : finalizerName);
|
||||
if (params != null && params.length > 0) {
|
||||
longRunParams.push(params.join(','));
|
||||
}
|
||||
LongRun.instance.setParameters(LongRun.EXECUTE_LONGRUN_FUNCNAME, longRunParams);
|
||||
_executeLongRun();
|
||||
}
|
||||
exports.executeLongRun = executeLongRun;
|
||||
/**
|
||||
* The main body of executeLongRun
|
||||
*/
|
||||
function _executeLongRun() {
|
||||
var longRun = LongRun.instance;
|
||||
// get parameters
|
||||
var longRunParams = longRun.getParameters(LongRun.EXECUTE_LONGRUN_FUNCNAME);
|
||||
var mainFuncName = longRunParams[0];
|
||||
var loopCount = parseInt(longRunParams[1]);
|
||||
var initializerName = longRunParams[2];
|
||||
var finalizerName = longRunParams[3];
|
||||
var params = [];
|
||||
for (var i = 4; i < longRunParams.length; i++) {
|
||||
params.push('"' + longRunParams[i] + '"');
|
||||
}
|
||||
var paramsLiteral = '[' + params.join(',') + ']';
|
||||
var startIndex = longRun.startOrResume(LongRun.EXECUTE_LONGRUN_FUNCNAME);
|
||||
try {
|
||||
// *** call initializer ***
|
||||
if (initializerName != null && initializerName.length > 0) {
|
||||
eval(initializerName + '(' + startIndex + ',' + paramsLiteral + ')');
|
||||
}
|
||||
// execute the iterative process.
|
||||
for (var i = startIndex; i < loopCount; i++) {
|
||||
// Each time before executing a process, you need to check if it should be stopped or not.
|
||||
if (longRun.checkShouldSuspend(LongRun.EXECUTE_LONGRUN_FUNCNAME, i)) {
|
||||
// if checkShouldSuspend() returns true, the next trigger has been set
|
||||
// and you should get out of the loop.
|
||||
console.log('*** The process has been suspended. ***');
|
||||
break;
|
||||
}
|
||||
// *** call main process ***
|
||||
eval(mainFuncName + '(' + i + ',' + paramsLiteral + ')');
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.log(e.message);
|
||||
}
|
||||
finally {
|
||||
// you must always call end() to reset the long-running variables if there is no next trigger.
|
||||
var finished = longRun.end(LongRun.EXECUTE_LONGRUN_FUNCNAME);
|
||||
// *** call finalizer ***
|
||||
if (finalizerName != null && finalizerName.length > 0) {
|
||||
eval(finalizerName + '(' + finished + ',' + paramsLiteral + ')');
|
||||
}
|
||||
}
|
||||
}
|
||||
62
Scripts/GoogleScripts/MizunoPGA/Test1.gs
Normal file
62
Scripts/GoogleScripts/MizunoPGA/Test1.gs
Normal file
@ -0,0 +1,62 @@
|
||||
// Compiled using ts2gas 3.6.5 (TypeScript 4.3.2)
|
||||
var exports = exports || {};
|
||||
var module = module || { exports: exports };
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
//import {LongRun} from "../LongRun";
|
||||
function executeTest1() {
|
||||
var params = [];
|
||||
params.push(3); // How many times the process should be executed
|
||||
params.push(1); // How long does it take to process one case? (in seconds)
|
||||
params.push(1); // Maximum acceptable run time in seconds (less than 6 minutes, of course)
|
||||
params.push(1); // How many minutes later the next trigger will be activated
|
||||
LongRun.instance.setParameters('LongRunTask', params);
|
||||
LongRunTask();
|
||||
}
|
||||
function LongRunTask(
|
||||
// there must be no arguments, because the parameters must be retrieved from LongRun class.
|
||||
/* times: number, funcExecutionSeconds: number, maxExecutionSeconds: number, triggerDelayMinutes: number */
|
||||
) {
|
||||
var longRun = LongRun.instance;
|
||||
// funcName must equal this function's name.
|
||||
var funcName = 'LongRunTask';
|
||||
// you can get the parameters from LongRun class.
|
||||
var params = longRun.getParameters(funcName);
|
||||
var times = parseInt(params[0]);
|
||||
var funcExecutionSeconds = parseInt(params[1]);
|
||||
var maxExecutionSeconds = parseInt(params[2]);
|
||||
var triggerDelayMinutes = parseInt(params[3]);
|
||||
// you can set the long-running configurations. of course you can use the default values.
|
||||
longRun.setMaxExecutionSeconds(maxExecutionSeconds); // default is 240 seconds
|
||||
longRun.setTriggerDelayMinutes(triggerDelayMinutes); // default is 1 minute
|
||||
// you should get the index to resume(zero for the first time)
|
||||
var startIndex = longRun.startOrResume(funcName);
|
||||
if (startIndex === 0) {
|
||||
console.log('--- LongRunTask started. ---');
|
||||
}
|
||||
try {
|
||||
// Execute the iterative process.
|
||||
for (var i = startIndex; i < times; i++) {
|
||||
console.log('Processing: ' + i);
|
||||
// Each time before executing a process, you need to check if it should be stopped or not.
|
||||
if (longRun.checkShouldSuspend(funcName, i)) {
|
||||
// if checkShouldSuspend() returns true, the next trigger has been set
|
||||
// and you should get out of the loop.
|
||||
console.log('*** The process has been suspended. ***');
|
||||
break;
|
||||
}
|
||||
// *** code your main process here! ***
|
||||
Utilities.sleep(funcExecutionSeconds * 1000); // demonstrate the process
|
||||
console.log('Processing Done!: ' + i);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.log(e.message);
|
||||
}
|
||||
finally {
|
||||
// you must always call end() to reset the long-running variables if there is no next trigger.
|
||||
var finished = longRun.end(funcName);
|
||||
if (finished) {
|
||||
console.log('--- LongRunTask finished. ---');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user