Getting ready for next Anthology project - the revamped searchbar. Downloaded templates. Cleaned up some todos. Added two academies to Cin7's backup of courses. Other notes
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.
@ -0,0 +1,66 @@
|
|||||||
|
<div class="np-hidden-mobile">
|
||||||
|
<p>{% t .description %}</p>
|
||||||
|
<p>{% t .requirements %}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<img
|
||||||
|
alt=""
|
||||||
|
class="np-account-avatar-image"
|
||||||
|
src="{{ form.gravatar_url }}?s=200"
|
||||||
|
id="{{version}}_gravatar_img"
|
||||||
|
{% unless form.use_gravatar? %}style="display: none"{% endunless %}
|
||||||
|
/>
|
||||||
|
<img
|
||||||
|
alt=""
|
||||||
|
class="np-account-avatar-image"
|
||||||
|
src="{{ form.secure_custom_avatar_url }}"
|
||||||
|
id="{{version}}_custom_avatar_img"
|
||||||
|
{% if form.use_gravatar? %}style="display: none"{% endif %}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class="np-account-avatar-choice">
|
||||||
|
<div class="np-form-field">
|
||||||
|
<label class="radio radio-before np-input-label" for="{{version}}_learner_use_gravatar_true">
|
||||||
|
<span class="radio__input">
|
||||||
|
<input
|
||||||
|
id="{{version}}_learner_use_gravatar_true"
|
||||||
|
name="learner[use_gravatar]"
|
||||||
|
type="radio"
|
||||||
|
value="true"
|
||||||
|
{% if form.use_gravatar? %}checked{% endif %}
|
||||||
|
/>
|
||||||
|
<span class="np-button-color radio__control"></span>
|
||||||
|
</span>
|
||||||
|
<span class="radio__label">
|
||||||
|
{% t .use_gravatar %}
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="np-form-field">
|
||||||
|
<label class="radio radio-before np-input-label" for="{{version}}_learner_use_gravatar_false">
|
||||||
|
<span class="radio__input">
|
||||||
|
<input
|
||||||
|
id="{{version}}_learner_use_gravatar_false"
|
||||||
|
name="learner[use_gravatar]"
|
||||||
|
type="radio"
|
||||||
|
value="false"
|
||||||
|
{% unless form.use_gravatar? %}checked{% endunless %}
|
||||||
|
/>
|
||||||
|
<span class="np-button-color radio__control"></span>
|
||||||
|
</span>
|
||||||
|
<span class="radio__label">
|
||||||
|
{% t .upload_custom_photo %}
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<button
|
||||||
|
id="{{version}}_upload_avatar"
|
||||||
|
type="button"
|
||||||
|
class="np-button np-button-secondary" {% if form.use_gravatar? %}style="visibility: hidden"{% endif %}
|
||||||
|
>
|
||||||
|
{% t .upload %}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -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="np-button np-button-big np-button-large-font np-form-action">
|
||||||
|
{% 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,139 @@
|
|||||||
|
<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>
|
||||||
|
{% 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>
|
||||||
|
|
||||||
|
{% if form.terms_of_service_required? %}
|
||||||
|
<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 %}
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
href={{ form.terms_of_service_url }}
|
||||||
|
>
|
||||||
|
{% t .terms_link %}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="np-margin-top">
|
||||||
|
<span class="np-form-terms ">
|
||||||
|
{% t .terms %}
|
||||||
|
<a
|
||||||
|
class="np-form-link np-button-color"
|
||||||
|
target="_blank"
|
||||||
|
href={{ form.terms_of_service_url }}
|
||||||
|
>
|
||||||
|
{% t .terms_link %}
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<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="np-button np-button-big np-button-large-font np-form-action">
|
||||||
|
{% t shared.account.save %}
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
@ -0,0 +1,70 @@
|
|||||||
|
<div class="np-card np-no-horizontal-padding">
|
||||||
|
<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">
|
||||||
|
<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 class="np-hidden-mobile np-card-content-progress
|
||||||
|
np-button-color">
|
||||||
|
{% t shared.progress, count: learning_path.progress %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="np-hidden-mobile np-card-progress-bar-container">
|
||||||
|
<div
|
||||||
|
style="width: {{ learning_path.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 class="np-card-stack">
|
||||||
|
<div class="np-card-stack-level-1"></div>
|
||||||
|
<div class="np-card-stack-level-2"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
<div class="col-xs-12 col-md-4 spacing-clear">
|
||||||
|
{% include "certificates_verification" %}
|
||||||
|
{% include "certificates_metadata" %}
|
||||||
|
</div>
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
<div class="np-card spacing-clear">
|
||||||
|
<div class="np-card-container padding-spacing-8">
|
||||||
|
<div class="row np-certificate-metadata-row">
|
||||||
|
<div class="col-xs-6 col-md-6">
|
||||||
|
<p class="np-certificate-metadata-title" >
|
||||||
|
{% t .learner %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-6">
|
||||||
|
<p class="np-certificate-metadata-value">
|
||||||
|
{{certificate.learner_name}}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="line"></div>
|
||||||
|
|
||||||
|
{% if certificate.issuer_name_enabled? %}
|
||||||
|
<div class="row np-certificate-metadata-row">
|
||||||
|
<div class="col-xs-6 col-md-6">
|
||||||
|
<p class="np-certificate-metadata-title">
|
||||||
|
{% t .issued_by %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-6">
|
||||||
|
<p class="np-certificate-metadata-value">
|
||||||
|
{{ certificate.issuer_name }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="line"></div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="row np-certificate-metadata-row">
|
||||||
|
<div class="col-xs-6 col-md-6">
|
||||||
|
<p class="np-certificate-metadata-title" >
|
||||||
|
{% t .issued_on %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-6">
|
||||||
|
<p class="np-certificate-metadata-value">
|
||||||
|
{{ certificate.issue_date }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="line"></div>
|
||||||
|
<div class="row np-certificate-metadata-row">
|
||||||
|
<div class="col-xs-6 col-md-6">
|
||||||
|
<p class="np-certificate-metadata-title" >
|
||||||
|
{% t .expires_on %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-6">
|
||||||
|
<p class="np-certificate-metadata-value">
|
||||||
|
{{ certificate.expiration_date_translation }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
<script type="text/javascript">
|
||||||
|
const resizeIframe = () => {
|
||||||
|
const combinedPadding = 16;
|
||||||
|
const previewIframe = document.getElementById("previewIframe");
|
||||||
|
const previewIFrameCard = document.getElementById("previewIFrameCard");
|
||||||
|
const templateInPreviewContainer = previewIframe.contentWindow.document.querySelector('.np-certificate-container');
|
||||||
|
const previewIframeContentHeight = templateInPreviewContainer.offsetHeight;
|
||||||
|
const previewIframeContentWidth = templateInPreviewContainer.offsetWidth;
|
||||||
|
const certificateRatio = previewIframeContentHeight / previewIframeContentWidth;
|
||||||
|
|
||||||
|
templateInPreviewContainer.style.margin = 0;
|
||||||
|
previewIFrameCard.style.height = `${previewIFrameCard.offsetWidth * certificateRatio}px`;
|
||||||
|
|
||||||
|
const scaledIframeWidth = previewIFrameCard.offsetWidth - combinedPadding;
|
||||||
|
const scaledIframeHeight = scaledIframeWidth * certificateRatio;
|
||||||
|
const scale = scaledIframeHeight / previewIframeContentHeight;
|
||||||
|
|
||||||
|
previewIframe.style.transform = `scale(${scale})`;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.onresize = resizeIframe;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-md-8 np-certificate-iframe-container">
|
||||||
|
<div class="np-card spacing-clear">
|
||||||
|
<div id="previewIFrameCard" class="np-card-container np-certificate-card">
|
||||||
|
<iframe
|
||||||
|
id="previewIframe"
|
||||||
|
onload="resizeIframe()"
|
||||||
|
class="np-certificate-iframe-preview"
|
||||||
|
srcdoc="{{ certificate.certificate_template_html }}"
|
||||||
|
></iframe>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
<div class="top-bar np-certificate-top-bar-spacing">
|
||||||
|
<div class="top-bar__container uk-container uk-container-center uk-padding-horizontal np-max-width">
|
||||||
|
<div class="top-bar__col">
|
||||||
|
<h2 class="np-certificate-title" >
|
||||||
|
{{certificate.certificate_name}}
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div class="button-container np-certificate-button-container">
|
||||||
|
{% if certificate.linkedin_sharing_enabled and current_person.signed_in? and certificate.learner_uuid == current_person.id %}
|
||||||
|
<a
|
||||||
|
class="np-button np-certificate-button np-certificate-button-secondary"
|
||||||
|
href="{{certificate.linkedin_share_url}}"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
<i class="fab fa-linkedin np-certificate-share-icon"></i>
|
||||||
|
{% t .share %}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
<button
|
||||||
|
id="print"
|
||||||
|
type="button"
|
||||||
|
class="np-button np-certificate-button np-certificate-button-secondary np-certificate-button-print"
|
||||||
|
>
|
||||||
|
{% t .print %}
|
||||||
|
</button>
|
||||||
|
{% if certificate.generating_pdf %}
|
||||||
|
<div class="np-button np-certificate-button np-certificate-button-primary np-certificate-spinner-container">
|
||||||
|
<i class="loader fad fa-spinner-third fa-spin np-certificate-spinner-icon np-button-font-color"></i>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<a
|
||||||
|
href="{{ certificate.download_url }}"
|
||||||
|
aria-label="{% t .download %}"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
download
|
||||||
|
class="np-button np-certificate-button np-certificate-button-primary np-button-font-color"
|
||||||
|
>
|
||||||
|
{% t .download %}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
<div class="np-card spacing-clear np-certificate-verification-card">
|
||||||
|
<div class="np-card-container np-certificate-verification-container">
|
||||||
|
<div class="np-certificate-verification-icon-container np-certificate-verification-icon-container-{{certificate.verification_status}}">
|
||||||
|
<i class="far fa-{{certificate.verification_icon}} np-certificate-verification-icon"></i>
|
||||||
|
</div>
|
||||||
|
<div class="np-certificate-verification-info-container">
|
||||||
|
<h2 class="np-certificate-verification-info-status spacing-clear">
|
||||||
|
{{certificate.verification_title}}
|
||||||
|
</h2>
|
||||||
|
<p class="np-certificate-verification-info-description spacing-clear">
|
||||||
|
{{certificate.verification_description}}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
<i class="far fa-lock-alt np-course-outline-content-activity-icon-locked"></i>
|
||||||
|
<span class="np-course-outline-content-activity-title">
|
||||||
|
{{ activity.title }}
|
||||||
|
</span>
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
{% 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%}
|
||||||
|
<span class="{{ class }}">
|
||||||
|
{{ activity.title }}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
<h3 class="np-card-heading">
|
||||||
|
{% t .header %}
|
||||||
|
</h3>
|
||||||
|
<div class="np-flex">
|
||||||
|
{% for category in course.categories %}
|
||||||
|
<div class="np-content-categories-content-item">
|
||||||
|
{{ category.name }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
<h3 class="np-card-heading">
|
||||||
|
{% t .header, key: current_school.course_vocabulary %}
|
||||||
|
</h3>
|
||||||
|
<div class="np-card-text">
|
||||||
|
{{ course.full_description }}
|
||||||
|
</div>
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
<h3 class="np-card-heading">
|
||||||
|
{% t .header %}
|
||||||
|
</h3>
|
||||||
|
<div class="np-flex-column">
|
||||||
|
{% for event in course.events %}
|
||||||
|
<div class="np-course-events-content-item">
|
||||||
|
<div class="np-course-events-content-date np-button-background-color">
|
||||||
|
<div class="np-course-events-content-month">
|
||||||
|
{{ event.sessions.first.abbreviated_month }}
|
||||||
|
</div>
|
||||||
|
<div class="np-course-events-content-day">
|
||||||
|
{{ event.sessions.first.day }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="np-course-events-content-details">
|
||||||
|
<div class="np-course-events-content-name">
|
||||||
|
{{ event.title }}
|
||||||
|
</div>
|
||||||
|
<div class="np-course-events-content-type np-text-light">
|
||||||
|
{% t shared.event_types, key: event.event_type %}
|
||||||
|
</div>
|
||||||
|
<div class="np-course-events-content-time np-button-color">
|
||||||
|
{{ event.sessions.first.time_period }} {{ event.sessions.first.time_zone }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
<h3 class="np-card-heading">
|
||||||
|
{% t .header %}
|
||||||
|
</h3>
|
||||||
|
<div class="np-flex">
|
||||||
|
{% 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>
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
<div class="np-course-outline">
|
||||||
|
<div class="np-text-title np-course-outline-title">
|
||||||
|
{% 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-circle np-course-outline-content-activity-icon np-button-color"></i>
|
||||||
|
{% if activity.locked? %}
|
||||||
|
{% include "course_activity_locked" %}
|
||||||
|
{% else %}
|
||||||
|
{% include "course_activity_unlocked", class: "np-course-outline-content-activity-link-completed" %}
|
||||||
|
{% endif %}
|
||||||
|
<div class="np-button-background-color np-course-outline-content-activity-list-bar"></div>
|
||||||
|
{% else %}
|
||||||
|
<i class="far fa-circle 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 %}
|
||||||
|
<div class="np-course-outline-content-activity-list-bar"></div>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
{% if courses.include_courses_to_restart? %}
|
||||||
|
<div role="alert" class="np-alert np-alert-global np-alert-info">
|
||||||
|
<div class="np-alert-container uk-container uk-container-center">
|
||||||
|
{% t .content %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
<div class="np-course-version-outdated-popup np-popup">
|
||||||
|
<div class="np-popup-positioner">
|
||||||
|
<i
|
||||||
|
class="np-course-version-outdated-popup-trigger fas fa-exclamation-circle"
|
||||||
|
data-toggle-class-on-target="np-popup-tooltip--visible"
|
||||||
|
data-toggle-target-parent=".np-popup-tooltip"
|
||||||
|
data-toggle-outside
|
||||||
|
></i>
|
||||||
|
<div
|
||||||
|
class="np-popup-tooltip"
|
||||||
|
role="tooltip"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<header class="np-popup-header">
|
||||||
|
<i class="np-popup-header-icon fas fa-exclamation-circle"></i>
|
||||||
|
<h3 class="np-popup-header-title">
|
||||||
|
{% t .title %}
|
||||||
|
</h3>
|
||||||
|
</header>
|
||||||
|
<div class="np-popup-body">
|
||||||
|
<h4>{% t .body.header %}</h4>
|
||||||
|
<p>{% t .body.content %}</p>
|
||||||
|
<a
|
||||||
|
class="np-popup-body-button"
|
||||||
|
href="{{ path }}"
|
||||||
|
>
|
||||||
|
{% t .body.button %}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="np-popup-tail"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
{% if courses.enrolled.any? %}
|
||||||
|
<div class="row row-with-thumbnails">
|
||||||
|
{% for course in courses.enrolled %}
|
||||||
|
<div class="{{ class }}">
|
||||||
|
{% include "cards_course" with course %}
|
||||||
|
</div>
|
||||||
|
{% 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,6 @@
|
|||||||
|
<div class="np-dashboard-resources-container">
|
||||||
|
<div class="np-zero-state-text">
|
||||||
|
{{ message }}
|
||||||
|
</div>
|
||||||
|
<img class="np-zero-state-courses" alt="{{ message }}" />
|
||||||
|
</div>
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
<input
|
||||||
|
id={{value}}
|
||||||
|
name={{ name }}
|
||||||
|
value={{ value }}
|
||||||
|
type="checkbox"
|
||||||
|
{% if selected %} checked="checked" {% endif %}
|
||||||
|
/>
|
||||||
|
<label for={{value}}>
|
||||||
|
{{label}}
|
||||||
|
</label>
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
<div class="np-filter">
|
||||||
|
<div class="dropdown">
|
||||||
|
<button
|
||||||
|
class="np-button dropdown-button"
|
||||||
|
data-toggle-class="is-open"
|
||||||
|
data-toggle-escape
|
||||||
|
data-toggle-outside
|
||||||
|
data-toggle-target-next
|
||||||
|
type="button"
|
||||||
|
>
|
||||||
|
{% t shared.filters.filter %}
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="dropdown-menu" data-test="modal">
|
||||||
|
<form method="get">
|
||||||
|
{%
|
||||||
|
include "filter_select",
|
||||||
|
filters: filters,
|
||||||
|
key: key,
|
||||||
|
label: label
|
||||||
|
%}
|
||||||
|
|
||||||
|
<button
|
||||||
|
class="np-button dropdown-button-apply"
|
||||||
|
data-toggle-trigger-off
|
||||||
|
type="submit"
|
||||||
|
>
|
||||||
|
{% t shared.filters.apply %}
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
{% if params.q %}
|
||||||
|
<input type="hidden" name="q" value="{{ params.q }}">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<label class="dropdown-label" for="filter[category_uuid][in][]">
|
||||||
|
{{ label }}
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<select
|
||||||
|
class="np-filter-select"
|
||||||
|
multiple
|
||||||
|
name="filter[{{ key }}][in][]"
|
||||||
|
>
|
||||||
|
{% for filter in filters %}
|
||||||
|
<option
|
||||||
|
value="{{ filter.value }}"
|
||||||
|
{% if filter.selected? %} selected="selected" {% endif %}
|
||||||
|
>
|
||||||
|
{{ filter.name }}
|
||||||
|
</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
<header class="np-box-header np-header-color">
|
||||||
|
<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,5 @@
|
|||||||
|
{% if learning_path.new_content_available? %}
|
||||||
|
{% include "learning_path_new_content_banner" %}
|
||||||
|
{% else %}
|
||||||
|
{% include "learning_path_completed_banner" %}
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
{% if learning_path.has_certificate? %}
|
||||||
|
{% if learning_path.certificate_completed? %}
|
||||||
|
<div class="np-learning-path-outline-bar np-hidden-mobile"></div>
|
||||||
|
<a
|
||||||
|
class="np-learning-path-certificate-link"
|
||||||
|
href="{{ learning_path.certificate_link }}"
|
||||||
|
>
|
||||||
|
<div class="np-learning-path-certificate">
|
||||||
|
{% include "learning_path_certificate_content" %}
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<div class="np-learning-path-certificate np-learning-path-certificate--inactive">
|
||||||
|
{% include "learning_path_certificate_content" %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
<div class="np-learning-path-certificate-content">
|
||||||
|
<div class="np-learning-path-certificate-avatar" role="img">
|
||||||
|
<i class="np-learning-path-certificate-avatar-icon fal fa-award"></i>
|
||||||
|
<h5 class="np-learning-path-certificate-avatar-title">
|
||||||
|
{% t .avatar_title %}
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<h4 class="np-learning-path-certificate-name">
|
||||||
|
{{ learning_path.certificate_name }}
|
||||||
|
</h4>
|
||||||
|
{% if learning_path.certificate_completed? %}
|
||||||
|
<time
|
||||||
|
class="np-learning-path-certificate-issue-date"
|
||||||
|
datetime="{{ learning_path.certificate_issue_date }}"
|
||||||
|
>
|
||||||
|
{{ learning_path.certificate_issue_date | date: "%B %d, %Y" }}
|
||||||
|
</time>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
<div class="np-learning-path-completed-banner np-learning-path-banner">
|
||||||
|
<img class="np-learning-path-banner-image" src="https://s3.amazonaws.com/static.northpass.com/images/stars-completed.svg"/>
|
||||||
|
<div class="np-learning-path-banner-content">
|
||||||
|
<h3 class="np-learning-path-banner-headline">{% t .headline %}</h3>
|
||||||
|
<p class="np-learning-path-banner-description">{% t .description %}</p>
|
||||||
|
<div class="np-learning-path-banner-actions">
|
||||||
|
{% if learning_path.certificate_link %}
|
||||||
|
<a href="{{ learning_path.certificate_link }}" class="np-learning-path-banner-action np-learning-path-banner-action--primary">{% t .actions.certificate %}</a>
|
||||||
|
{% endif %}
|
||||||
|
<a href="/app/courses" class="np-learning-path-banner-action np-learning-path-banner-action--secondary">{% t .actions.more_courses %}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
{% if learning_path.enrolled? and course.unlocked? %}
|
||||||
|
<div class="np-learning-path-outline-bar np-hidden-mobile"></div>
|
||||||
|
<a
|
||||||
|
class="np-learning-path-outline-item np-card-container"
|
||||||
|
href="{% route learning_path_course, learning_path_id: learning_path.id, id: course.id %}"
|
||||||
|
>
|
||||||
|
<div class="np-card-content np-card-padding">
|
||||||
|
<img
|
||||||
|
src="{{ item.image }}"
|
||||||
|
alt="{{ course.name }}"
|
||||||
|
class="np-learning-path-outline-course-image"
|
||||||
|
>
|
||||||
|
<div class="np-learning-path-outline-content">
|
||||||
|
<div class="np-learning-path-outline-name np-top-title">
|
||||||
|
{{ course.name }}
|
||||||
|
</div>
|
||||||
|
{% if course.instructors %}
|
||||||
|
<div class="np-learning-path-outline-caption">
|
||||||
|
{{ course.instructors }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="np-learning-path-outline-progress
|
||||||
|
{% if course.completed? %} np-color-success {% else %} np-button-color {% endif %}
|
||||||
|
">
|
||||||
|
{% t shared.progress, count: course.progress %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-chevron-right np-learning-path-outline-icon"></i>
|
||||||
|
{% if course.optional? %}
|
||||||
|
<div class="np-optional-ribbon">
|
||||||
|
{% t shared.optional %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<div class="np-learning-path-outline-item np-learning-path-outline-inactive-item np-card-container">
|
||||||
|
<div class="np-card-content np-card-padding">
|
||||||
|
<img
|
||||||
|
src="{{ item.image }}"
|
||||||
|
alt="{{ course.name }}"
|
||||||
|
class="np-learning-path-outline-course-image"
|
||||||
|
>
|
||||||
|
<div class="np-learning-path-outline-content">
|
||||||
|
<div class="np-learning-path-outline-name np-top-title">
|
||||||
|
{{ course.name }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% if course.optional? %}
|
||||||
|
<div class="np-optional-ribbon">
|
||||||
|
{% t shared.optional %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
<h3 class="np-card-heading">
|
||||||
|
{% t .about %}
|
||||||
|
</h3>
|
||||||
|
<div class="np-card-text">
|
||||||
|
{{ learning_path.description }}
|
||||||
|
</div>
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-sm-6">
|
||||||
|
<div class="np-card-container">
|
||||||
|
<img
|
||||||
|
src="{{ learning_path.image_url }}"
|
||||||
|
class="np-top-image"
|
||||||
|
alt="{{ learning_path.name }}"
|
||||||
|
/>
|
||||||
|
<div class="np-card-padding-dynamic">
|
||||||
|
{% include "learning_path_description" %}
|
||||||
|
{% include "learning_path_instructors" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-sm-6 np-grid-spacing">
|
||||||
|
<div class="np-top-cta">
|
||||||
|
{% include "learning_path_progress_and_cta" %}
|
||||||
|
</div>
|
||||||
|
{% include "learning_path_outline" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
<div class="np-resource-header np-resource-header-card np-card-padding-large">
|
||||||
|
<div class="np-top-vocabulary np-text-title">
|
||||||
|
{% t shared.learning_path.title %}
|
||||||
|
<i class="far fa-road np-button-color np-learning-path-icon"></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-icon-back"></i>
|
||||||
|
</a>
|
||||||
|
{{ learning_path.name }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
{% include "learning_path_desktop_header" %}
|
||||||
|
{% include "learning_path_desktop_content" %}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
{% if learning_path.instructors.any? %}
|
||||||
|
<div class="np-card-content-divider">
|
||||||
|
<h3 class="np-card-heading">
|
||||||
|
{% t shared.instructors %}
|
||||||
|
</h3>
|
||||||
|
<div class="np-content-instructors-content row">
|
||||||
|
{% for instructor in learning_path.instructors %}
|
||||||
|
<div class="np-content-instructors-content-item col-xs-12 col-lg">
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
{% if learning_path.in_progress? %}
|
||||||
|
{% include "learning_path_outline" %}
|
||||||
|
<div class="np-card-container np-card-padding np-card-spacing">
|
||||||
|
{% include "learning_path_description" %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="np-card-container np-card-padding np-card-spacing">
|
||||||
|
{% include "learning_path_description" %}
|
||||||
|
</div>
|
||||||
|
<div class="np-card-spacing">
|
||||||
|
{% include "learning_path_outline" %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if learning_path.instructors.any? %}
|
||||||
|
<div class="np-card-container np-card-padding np-card-spacing">
|
||||||
|
{% include "learning_path_instructors" %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
<div class="np-resource-header np-card-padding-vertical">
|
||||||
|
<div class="np-top-vocabulary np-text-title">
|
||||||
|
{% t shared.learning_path.title %}
|
||||||
|
<i class="far fa-road np-button-color np-learning-path-icon"></i>
|
||||||
|
</div>
|
||||||
|
<div class="np-top-title">
|
||||||
|
{{ learning_path.name }}
|
||||||
|
</div>
|
||||||
|
<img
|
||||||
|
src="{{ learning_path.image_url }}"
|
||||||
|
class="np-top-image"
|
||||||
|
alt="{{ learning_path.name }}"
|
||||||
|
/>
|
||||||
|
<div class="np-top-cta">
|
||||||
|
{% include "learning_path_progress_and_cta" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
{% include "learning_path_mobile_header" %}
|
||||||
|
{% include "learning_path_mobile_content" %}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
<div class="np-learning-path-new-content-banner np-learning-path-banner">
|
||||||
|
<div class="np-learning-path-banner-content">
|
||||||
|
<h3 class="np-learning-path-banner-headline">{% t .headline %}</h3>
|
||||||
|
<p class="np-learning-path-banner-description">{% t .description %}</p>
|
||||||
|
<div class="np-learning-path-banner-actions">
|
||||||
|
{% learning_path_next_step_button learning_path, class: "np-learning-path-banner-action np-learning-path-banner-action--primary" %}
|
||||||
|
{% if learning_path.certificate_link %}
|
||||||
|
<a href="{{ learning_path.certificate_link }}" class="np-learning-path-banner-action np-learning-path-banner-action--secondary">{% t .actions.view_certificate %}</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
<div class="np-learning-path-outline">
|
||||||
|
{% for item in learning_path.items %}
|
||||||
|
{% if item.course? %}
|
||||||
|
{% include "learning_path_course", course: item %}
|
||||||
|
{% elsif item.training_event? %}
|
||||||
|
{% include "learning_path_training_session", training_session: item %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% include "learning_path_certificate" %}
|
||||||
|
</div>
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
{% 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: {{ learning_path.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 %}
|
||||||
|
">
|
||||||
|
{% t shared.progress, count: learning_path.progress %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% learning_path_next_step_button learning_path, class: "np-top-button np-button-font-color np-button np-button-big" %}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{% include "learning_path_desktop_header" %}
|
||||||
|
{% include "learning_path_banners" %}
|
||||||
|
{% include "learning_path_desktop_content" %}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
<div class="np-card-padding">
|
||||||
|
{% include "learning_path_banners" %}
|
||||||
|
</div>
|
||||||
|
{% include "learning_path_mobile_header" %}
|
||||||
|
{% include "learning_path_mobile_content" %}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
{% if learning_path.enrolled? and training_session.unlocked? %}
|
||||||
|
<div class="np-learning-path-outline-bar np-hidden-mobile"></div>
|
||||||
|
<a
|
||||||
|
class="np-learning-path-outline-item np-card-container"
|
||||||
|
href="{% route training_session, id: training_session.id %}"
|
||||||
|
>
|
||||||
|
<div class="np-card-content np-card-padding">
|
||||||
|
<div class="np-events-content-date np-button-background-color">
|
||||||
|
<div class="np-events-content-month">
|
||||||
|
{{ training_session.month }}
|
||||||
|
</div>
|
||||||
|
<div class="np-events-content-day">
|
||||||
|
{{ training_session.day }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="np-learning-path-outline-content">
|
||||||
|
<div class="np-learning-path-outline-name np-top-title">{{ training_session.name }}</div>
|
||||||
|
<div class="np-learning-path-outline-caption">{{ training_session.instructors }}</div>
|
||||||
|
<div class="np-events-content-time np-learning-path-outline-time np-button-color">
|
||||||
|
{{ training_session.time }} {{ training_session.time_zone }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-chevron-right np-learning-path-outline-icon"></i>
|
||||||
|
{% if training_session.optional? %}
|
||||||
|
<div class="np-optional-ribbon">
|
||||||
|
{% t shared.optional %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<div class="np-learning-path-outline-item np-card-container np-learning-path-outline-inactive-item">
|
||||||
|
<div class="np-card-content np-card-padding">
|
||||||
|
<div class="np-events-content-date np-button-background-color">
|
||||||
|
<div class="np-events-content-month">
|
||||||
|
{{ training_session.month }}
|
||||||
|
</div>
|
||||||
|
<div class="np-events-content-day">
|
||||||
|
{{ training_session.day }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="np-learning-path-outline-content">
|
||||||
|
<div class="np-learning-path-outline-name np-top-title">{{ training_session.name }}</div>
|
||||||
|
<div class="np-learning-path-outline-caption">{{ training_session.caption }}</div>
|
||||||
|
</div>
|
||||||
|
{% if training_session.optional? %}
|
||||||
|
<div class="np-optional-ribbon">
|
||||||
|
{% t shared.optional %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
<div class="np-learning-paths-resources">
|
||||||
|
{% if items.any? %}
|
||||||
|
{% for learning_path in items %}
|
||||||
|
{% include "cards_learning_path" with learning_path %}
|
||||||
|
{% 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,19 @@
|
|||||||
|
{% if messages.alert.size > 0 %}
|
||||||
|
<div class="np-alert np-alert-error">
|
||||||
|
<div class="np-alert-wrapper">
|
||||||
|
{% for message in messages.alert %}
|
||||||
|
<div>{{ message }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if messages.notice.size > 0 %}
|
||||||
|
<div class="np-alert np-alert-success">
|
||||||
|
<div class="np-alert-wrapper">
|
||||||
|
{% for message in messages.notice %}
|
||||||
|
<div>{{ message }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
<div class="np-card np-search-result">
|
||||||
|
<div class="np-card-container">
|
||||||
|
<div class="np-card-content">
|
||||||
|
<img
|
||||||
|
class="np-search-result-image"
|
||||||
|
alt="{{ result.name }}"
|
||||||
|
src="{{ result.image_url }}"
|
||||||
|
/>
|
||||||
|
<div class="np-search-result-content">
|
||||||
|
<div>
|
||||||
|
<a class="np-search-result-title" href="{{ result.path }}">
|
||||||
|
{{ result.name }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="np-search-result-snippet">{{ result.description }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
<div class="np-card np-search-zero-state">
|
||||||
|
<div class="np-card-container">
|
||||||
|
<div class="np-card-content np-card-content-vertical np-search-zero-state-card">
|
||||||
|
<h3 class="np-search-zero-state-title">
|
||||||
|
{% t .nothing_found %}
|
||||||
|
</h3>
|
||||||
|
<div class="np-search-zero-state-subtitle">
|
||||||
|
{% t .empty %}
|
||||||
|
</div>
|
||||||
|
<div class="np-search-zero-state-image"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
<div class="np-filter">
|
||||||
|
<div class="dropdown">
|
||||||
|
<button
|
||||||
|
class="np-button dropdown-button"
|
||||||
|
data-toggle-class="is-open"
|
||||||
|
data-toggle-escape
|
||||||
|
data-toggle-outside
|
||||||
|
data-toggle-target-next
|
||||||
|
type="button"
|
||||||
|
>
|
||||||
|
{% t shared.filters.filter %}
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="dropdown-menu" data-test="modal">
|
||||||
|
<form method="get">
|
||||||
|
<span class="dropdown-label">
|
||||||
|
{% t shared.filters.by_event_type %}
|
||||||
|
</span>
|
||||||
|
<ul class="dropdown-checkboxes">
|
||||||
|
{% for event_type in training_events.filters.event_types %}
|
||||||
|
{% capture label %}
|
||||||
|
{% t shared.event_types, key: event_type.value %}
|
||||||
|
{% endcapture %}
|
||||||
|
<li>
|
||||||
|
{% include "filter_checkbox",
|
||||||
|
label: label,
|
||||||
|
name: event_type.name,
|
||||||
|
value: event_type.value
|
||||||
|
selected: event_type.selected?
|
||||||
|
%}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{% capture label %}{% t shared.filters.by_course %}{% endcapture %}
|
||||||
|
{%
|
||||||
|
include "filter_select",
|
||||||
|
filters: training_events.filters.courses,
|
||||||
|
key: "courses_uuid",
|
||||||
|
label: label
|
||||||
|
%}
|
||||||
|
|
||||||
|
<button
|
||||||
|
class="np-button dropdown-button-apply"
|
||||||
|
data-toggle-trigger-off
|
||||||
|
type="submit"
|
||||||
|
>
|
||||||
|
{% t shared.filters.apply %}
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
<div class="dropdown dropdown-calendar">
|
||||||
|
<button
|
||||||
|
class="np-top-button np-button-font-color np-button np-button-big dropdown-calendar-button"
|
||||||
|
data-toggle-class="is-open"
|
||||||
|
data-toggle-escape
|
||||||
|
data-toggle-outside
|
||||||
|
data-toggle-target-next
|
||||||
|
type="button"
|
||||||
|
>
|
||||||
|
{% t .add_to_calendar %}
|
||||||
|
<i class="fas fa-chevron-down dropdown-calendar-button-chevron"></i>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<ul class="dropdown-calendar-menu">
|
||||||
|
<li class="dropdown-calendar-item">
|
||||||
|
<a
|
||||||
|
class="dropdown-calendar-item-element np-button-background-color-on-hover np-button-font-color-on-hover"
|
||||||
|
href="{{ training_session.google_calendar_url }}"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
{% t .google_calendar %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="dropdown-calendar-item">
|
||||||
|
<a
|
||||||
|
class="dropdown-calendar-item-element np-button-background-color-on-hover np-button-font-color-on-hover"
|
||||||
|
href="{{ training_session.outlook_calendar_url }}"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
{% t .outlook_calendar %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="dropdown-calendar-item">
|
||||||
|
<a
|
||||||
|
class="dropdown-calendar-item-element np-button-background-color-on-hover np-button-font-color-on-hover"
|
||||||
|
href="{{ training_session.outlook_office_calendar_url }}"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
{% t .office_calendar %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="dropdown-calendar-item">
|
||||||
|
<a
|
||||||
|
class="dropdown-calendar-item-element np-button-background-color-on-hover np-button-font-color-on-hover"
|
||||||
|
href="{{ training_session.ical_calendar_url }}"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
{% t .ical_calendar %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
{% 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>
|
||||||
@ -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">
|
||||||
|
{{ 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 @@
|
|||||||
|
<h3 class="np-card-heading">
|
||||||
|
{% t .header %}
|
||||||
|
</h3>
|
||||||
|
<div class="np-card-text">
|
||||||
|
{{ training_event.description }}
|
||||||
|
</div>
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
<div class="np-resource-header np-resource-header-card np-card-padding-large">
|
||||||
|
{% include "training_session_header" %}
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-sm-7">
|
||||||
|
<div class="np-card-container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-sm-5">
|
||||||
|
{% include "training_session_details" %}
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-sm-7">
|
||||||
|
{% include "training_session_cta" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="np-card-padding-large">
|
||||||
|
<div class="np-card-content-divider">
|
||||||
|
{% include "training_session_description" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-sm-5 np-grid-spacing">
|
||||||
|
<div class="np-training-session-sessions-title">
|
||||||
|
{% t shared.more_sessions %}
|
||||||
|
</div>
|
||||||
|
{% if training_event.sessions.size > 1 %}
|
||||||
|
{% include "training_session_more_sessions" %}
|
||||||
|
{% else %}
|
||||||
|
<div class="np-training-session-zero-state">
|
||||||
|
<img
|
||||||
|
alt="{% t .empty %}"
|
||||||
|
class="np-zero-state-training-sessions"
|
||||||
|
/>
|
||||||
|
<div class="np-training-session-zero-state-text">
|
||||||
|
{% t .empty %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</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"></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"></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,22 @@
|
|||||||
|
<div class="np-card-container-training-session">
|
||||||
|
<div class="np-card-spacing-large">
|
||||||
|
{% include "training_session_header" %}
|
||||||
|
</div>
|
||||||
|
{% include "training_session_details" %}
|
||||||
|
<div class="np-card-padding-large">
|
||||||
|
{% include "training_session_cta" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="np-card-container np-card-padding np-card-spacing">
|
||||||
|
{% include "training_session_description" %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if training_event.sessions.size > 1 %}
|
||||||
|
<div class="np-card-spacing">
|
||||||
|
<div class="np-training-session-sessions-title">
|
||||||
|
{% t shared.more_sessions %}
|
||||||
|
</div>
|
||||||
|
{% include "training_session_more_sessions" %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{% for session in training_event.sessions %}
|
||||||
|
{% include "training_session_tile", current_session: training_session %}
|
||||||
|
{% endfor %}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
{% if current_session.id != session.id %}
|
||||||
|
<a
|
||||||
|
class="np-training-session-tile"
|
||||||
|
href="{% route training_session, id: session.id %}"
|
||||||
|
>
|
||||||
|
<i class="far fa-calendar-star np-training-session-tile-icon"></i>
|
||||||
|
<div>
|
||||||
|
<div class="np-training-session-tile-date">
|
||||||
|
{{ session.month }} {{ session.day }}, {{ session.year }}
|
||||||
|
</div>
|
||||||
|
<div class="np-training-session-tile-time">
|
||||||
|
{{ session.time_period }} {{ session.time_zone }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-chevron-right np-training-session-tile-chevron"></i>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
|
||||||
|
<main class="np-main np-subpage-container np-account">
|
||||||
|
<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>
|
||||||
|
|
||||||
|
{% include "footer" %}
|
||||||
|
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
<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">
|
||||||
|
{% t shared.email_address %}
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
class="np-input"
|
||||||
|
type="text"
|
||||||
|
name="email"
|
||||||
|
id="learner_email"
|
||||||
|
value="{{ form.email }}"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
type="submit"
|
||||||
|
name="commit"
|
||||||
|
value="{% t shared.enter %}"
|
||||||
|
class="np-button np-button-big np-form-action"
|
||||||
|
/>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
<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_employee_id">
|
||||||
|
{% t shared.employee_id %}
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
class="np-input"
|
||||||
|
autofocus="autofocus"
|
||||||
|
type="text"
|
||||||
|
name="employee_id"
|
||||||
|
id="learner_employee_id"
|
||||||
|
value="{{ form.employee_id }}"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="np-form-field">
|
||||||
|
<label class="np-input-label" for="learner_first_name">
|
||||||
|
{% t shared.first_name %}
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
class="np-input"
|
||||||
|
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>
|
||||||
|
<input
|
||||||
|
type="submit"
|
||||||
|
name="commit"
|
||||||
|
value="{% t shared.enter %}"
|
||||||
|
class="np-button np-button-big np-form-action"
|
||||||
|
/>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
{% form_authenticity_token %}
|
||||||
|
<div class="np-form-field">
|
||||||
|
<label class="np-input-label" for="learner_last_name">
|
||||||
|
{% t shared.last_name %}
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
class="np-input"
|
||||||
|
autofocus="autofocus"
|
||||||
|
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_phone_number">
|
||||||
|
{% t shared.phone_number %}
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
class="np-input"
|
||||||
|
type="text"
|
||||||
|
name="phone_number"
|
||||||
|
id="learner_phone_number"
|
||||||
|
value="{{ form.phone_number }}"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="np-button np-button-big np-form-action">
|
||||||
|
{% t shared.enter %}
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
{% 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="email"
|
||||||
|
id="learner_email"
|
||||||
|
value="{{ form.email }}"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="np-form-field">
|
||||||
|
<label class="np-input-label" for="learner_first_name">
|
||||||
|
{% t shared.first_name %}
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
class="np-input"
|
||||||
|
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_phone_number">
|
||||||
|
{% t shared.phone_number_optional %}
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
class="np-input"
|
||||||
|
type="text"
|
||||||
|
name="phone_number"
|
||||||
|
id="learner_phone_number"
|
||||||
|
value="{{ form.phone_number }}"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="np-form-field np-open-access-terms">
|
||||||
|
<input type="hidden" name="terms" value="0" />
|
||||||
|
<input id="terms" type="checkbox" name="terms" value="1" />
|
||||||
|
<label for="terms" class="np-open-access-terms-checkbox">
|
||||||
|
{{ current_school.custom_terms }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
type="submit"
|
||||||
|
name="commit"
|
||||||
|
value="{% t shared.enter %}"
|
||||||
|
class="np-button np-button-big np-form-action"
|
||||||
|
/>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
{% include "course_version_outdated_alert", courses: courses.in_catalog %}
|
||||||
|
{% include "sub_navigation" %}
|
||||||
|
<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">{{ catalog.headline }}</div>
|
||||||
|
<div class="np-resource-subtitle">{{ catalog.subheadline }}</div>
|
||||||
|
</div>
|
||||||
|
{% capture label %}{% t shared.filters.by_category %}{% endcapture %}
|
||||||
|
|
||||||
|
{% if courses.in_catalog.any? %}
|
||||||
|
{%
|
||||||
|
include "filter_dropdown",
|
||||||
|
filters: courses.filters,
|
||||||
|
key: "category_uuid",
|
||||||
|
label: label
|
||||||
|
%}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% include "courses_catalog" %}
|
||||||
|
</main>
|
||||||
|
{% include "footer" %}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
<main class="np-main np-max-width np-page-container">
|
||||||
|
<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>
|
||||||
|
{% include "footer" %}
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
{% include "course_version_outdated_alert", courses: courses.enrolled %}
|
||||||
|
{% include "sub_navigation" %}
|
||||||
|
<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>
|
||||||
|
{% include "footer" %}
|
||||||
@ -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">
|
||||||
|
{% t .button_label %}
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
<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>
|
||||||
|
{% include "footer" %}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
<main class="np-main np-max-width np-page-container">
|
||||||
|
<div class="np-hidden-mobile" id="learning-path-desktop">
|
||||||
|
{% include "learning_path_summary_desktop_view" %}
|
||||||
|
</div>
|
||||||
|
<div class="np-hidden-desktop" id="learning-path-mobile">
|
||||||
|
{% include "learning_path_summary_mobile_view" %}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
{% include "footer" %}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
<main class="np-main 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 login %}" 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
|
||||||
|
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">
|
||||||
|
{% 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>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{% body %}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
<main class="np-main np-max-width np-subpage-container">
|
||||||
|
<div class="np-homepage-featured-text">
|
||||||
|
<div class="np-homepage-headline">
|
||||||
|
{% t .header %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="np-homepage-featured-empty">
|
||||||
|
<img src="/images/404.svg">
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
{% include "certificates_top_bar" %}
|
||||||
|
<main class="np-main np-certificate np-max-width np-page-container clear-main-spacings">
|
||||||
|
<section class="np-certificate-content-spacing">
|
||||||
|
<div class="row">
|
||||||
|
{% include "certificates_preview" %}
|
||||||
|
{% include "certificates_info_column" %}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
{% include "certificates_top_bar" %}
|
||||||
|
<main class="np-main np-certificate np-max-width np-page-container clear-main-spacings">
|
||||||
|
<section class="np-certificate-content-spacing">
|
||||||
|
<div class="row">
|
||||||
|
{% include "certificates_preview" %}
|
||||||
|
{% include "certificates_info_column" %}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
@ -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">
|
||||||
|
{% t .change_password %}
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
<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>
|
||||||
|
{% include "footer" %}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
<main class="np-main np-training-session np-max-width np-page-container">
|
||||||
|
<div class="np-hidden-mobile" id="training-session-desktop">
|
||||||
|
{% include "training_session_desktop_view" %}
|
||||||
|
</div>
|
||||||
|
<div class="np-hidden-desktop" id="training-session-mobile">
|
||||||
|
{% include "training_session_mobile_view" %}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
{% include "footer" %}
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
<main class="np-main np-cta-page np-max-width np-subpage-container">
|
||||||
|
<div class="np-card-container np-card-padding-xlarge">
|
||||||
|
{% if token %}
|
||||||
|
<i class="np-cta-page-icon fal fa-users-class"></i>
|
||||||
|
<div class="np-form-headline">
|
||||||
|
{{ training_session.title }}
|
||||||
|
</div>
|
||||||
|
<div class="np-form-subheadline">
|
||||||
|
{% t .info,
|
||||||
|
event_name: training_session.title,
|
||||||
|
session_date: training_session.date,
|
||||||
|
session_time: training_session.time
|
||||||
|
%}
|
||||||
|
</div>
|
||||||
|
<div class="np-form-subheadline">
|
||||||
|
{% t .question %}
|
||||||
|
</div>
|
||||||
|
<form action="{% route training_session_attendance %}" method="post" class="np-cta-page-buttons">
|
||||||
|
{% form_authenticity_token %}
|
||||||
|
<input type="hidden" name="token" value="{{ token }}">
|
||||||
|
<input type="submit" name="not_attended" value="{% t .not_attended %}" class="np-button np-button-secondary">
|
||||||
|
<input type="submit" name="commit" value="{% t .attended %}" class="np-button">
|
||||||
|
</form>
|
||||||
|
<div class="np-form-subheadline">
|
||||||
|
{% t .salutation %}
|
||||||
|
</div>
|
||||||
|
<div class="np-form-subheadline">
|
||||||
|
{{ current_school.name }}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<i class="np-cta-page-icon fal fa-check-circle"></i>
|
||||||
|
<div class="np-form-headline">
|
||||||
|
{% t .success.response_text %}
|
||||||
|
</div>
|
||||||
|
<div class="np-cta-page-buttons">
|
||||||
|
<a href="{% route training_events %}" class="np-button">
|
||||||
|
{% t .success.button_text %}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
{% include "footer" %}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
{% include "header" %}
|
||||||
|
<main class="np-main np-cta-page np-max-width np-subpage-container">
|
||||||
|
<div class="np-card-container np-card-padding-xlarge">
|
||||||
|
{% if token %}
|
||||||
|
<i class="np-cta-page-icon fal fa-bell-slash"></i>
|
||||||
|
<div class="np-form-subheadline np-margin-top">
|
||||||
|
{% t .unsubscribe_text %}
|
||||||
|
</div>
|
||||||
|
<div class="np-form-subheadline np-margin-top">
|
||||||
|
{% t .resubscribe_text %}
|
||||||
|
</div>
|
||||||
|
<form
|
||||||
|
id="unsubscribe_form"
|
||||||
|
action="{% route email_unsubscribe, unsubscribe_token: token %}"
|
||||||
|
method="post"
|
||||||
|
class="np-cta-page-buttons"
|
||||||
|
>
|
||||||
|
{% form_authenticity_token %}
|
||||||
|
<input type="hidden" name="_method" value="delete">
|
||||||
|
<input type="submit" name="commit" value="{% t .resubscribe_button %}" class="np-button np-button-wide">
|
||||||
|
</form>
|
||||||
|
{% else %}
|
||||||
|
<i class="np-cta-page-icon fal fa-bell-on"></i>
|
||||||
|
<div class="np-form-subheadline np-margin-top">
|
||||||
|
{% t .resubscribed_text %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
{% include "footer" %}
|
||||||
@ -3,4 +3,4 @@
|
|||||||
{% styles custom %}
|
{% styles custom %}
|
||||||
<style>
|
<style>
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100&display=swap');
|
@import url('https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100&display=swap');
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
4
Custom_Templates/customer_templates/test.html
Normal file
4
Custom_Templates/customer_templates/test.html
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<table>
|
||||||
|
<tr></tr>
|
||||||
|
<tr></tr>
|
||||||
|
</table>
|
||||||
0
Custom_Templates/customer_templates/test.py
Normal file
0
Custom_Templates/customer_templates/test.py
Normal file
@ -197,10 +197,12 @@ Walmart Luminate SSO to transfer to Mexico School:
|
|||||||
0Auth 2.0
|
0Auth 2.0
|
||||||
|
|
||||||
Client Identifier:
|
Client Identifier:
|
||||||
826e8230-6fb4-4943-9190-41e82b401516
|
US: 826e8230-6fb4-4943-9190-41e82b401516
|
||||||
|
MX: f220a998-e34e-47f5-ac75-712a7ffd63bd
|
||||||
|
|
||||||
Client Secret Code:
|
Client Secret Code:
|
||||||
AKEeUjthNm_eAV_Ci7BBbYZmQV9cecBzChff0LZgQHKLz6e1KEct8xo6E4DfWII3wL70dLGCETDpAEx5h-Phx5Q
|
US: AKEeUjthNm_eAV_Ci7BBbYZmQV9cecBzChff0LZgQHKLz6e1KEct8xo6E4DfWII3wL70dLGCETDpAEx5h-Phx5Q
|
||||||
|
MX: Rdt_J8iowNsLTgN5ZidCA-3eOnRJVLFT43zd2yt9JTdoPDvQLlWFrNMBZL0cR75JCUkWIx6bANdsA3FQzGLSOA
|
||||||
|
|
||||||
Auth Endpoint:
|
Auth Endpoint:
|
||||||
https://login.account.wal-mart.com/authorize?nonce=wcMxdKOPfj&scope=openid%20email%20profile_deepfetch%20offline_access
|
https://login.account.wal-mart.com/authorize?nonce=wcMxdKOPfj&scope=openid%20email%20profile_deepfetch%20offline_access
|
||||||
|
|||||||
@ -0,0 +1,2 @@
|
|||||||
|
import re
|
||||||
|
from playwright.sync_api import Page, expect
|
||||||
|
|||||||
59
Scripts/GAS_GS/Cin7-Courses-List/CustomerCourses.js
Normal file
59
Scripts/GAS_GS/Cin7-Courses-List/CustomerCourses.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
const customerKey = "51BNlRsLYKQxSu1q1UQq7F63j"
|
||||||
|
|
||||||
|
function getCustomerCourses() {
|
||||||
|
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Customer Academy");
|
||||||
|
sheet.getRange(1,1,500,10).clearContent();
|
||||||
|
sheet.getRange(1,1).setValue("Course Name")
|
||||||
|
sheet.getRange(1,2).setValue("Course UUID")
|
||||||
|
sheet.getRange(1,3).setValue("Enrollments")
|
||||||
|
sheet.getRange(1,4).setValue("Created At")
|
||||||
|
sheet.getRange(1,5).setValue("Updated At")
|
||||||
|
sheet.getRange(1,6).setValue("Status")
|
||||||
|
sheet.getRange(1,7).setValue("Unpublished Changes?")
|
||||||
|
sheet.getRange(1,8).setValue("Short Description")
|
||||||
|
|
||||||
|
let page = 0
|
||||||
|
while (page >= 0) {
|
||||||
|
page++
|
||||||
|
Logger.log(page)
|
||||||
|
var apiURL = 'https://api.northpass.com/v2/courses?limit=100&page='+page;
|
||||||
|
const settings = {
|
||||||
|
async: true,
|
||||||
|
crossDomain: true,
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
accept: 'application/json',
|
||||||
|
'X-Api-Key': customerKey
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const sendMsg = UrlFetchApp.fetch(apiURL, settings);
|
||||||
|
var txtResponse = sendMsg.getContentText();
|
||||||
|
var parseProps = JSON.parse(txtResponse);
|
||||||
|
|
||||||
|
for (items of parseProps['data']) {
|
||||||
|
let courseName = items['attributes']['name']
|
||||||
|
let uuid = items['id']
|
||||||
|
let createdAt = items['attributes']['created_at']
|
||||||
|
let updatedAt = items['attributes']['updated_at']
|
||||||
|
let enrollments = items['attributes']['enrollments_count']
|
||||||
|
let status = items['attributes']['status']
|
||||||
|
let unpublished_changes = items['attributes']['unpublished_changes']
|
||||||
|
let short_description = items['attributes']['short_description']
|
||||||
|
|
||||||
|
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||||
|
sheet.insertRowAfter(lastRow);
|
||||||
|
sheet.getRange(lastRow + 1, 1).setValue(courseName);
|
||||||
|
sheet.getRange(lastRow + 1, 2).setValue(uuid);
|
||||||
|
sheet.getRange(lastRow + 1, 3).setValue(enrollments);
|
||||||
|
sheet.getRange(lastRow + 1, 4).setValue(createdAt);
|
||||||
|
sheet.getRange(lastRow + 1, 5).setValue(updatedAt);
|
||||||
|
sheet.getRange(lastRow + 1, 6).setValue(status);
|
||||||
|
sheet.getRange(lastRow + 1, 7).setValue(unpublished_changes);
|
||||||
|
sheet.getRange(lastRow + 1, 8).setValue(short_description);
|
||||||
|
|
||||||
|
}
|
||||||
|
if (parseProps["links"]["next"] == null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
59
Scripts/GAS_GS/Cin7-Courses-List/EmployeeCourses.js
Normal file
59
Scripts/GAS_GS/Cin7-Courses-List/EmployeeCourses.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
const employeeKey = "CCAEFv15S8bXSurXx1m0zE29j"
|
||||||
|
|
||||||
|
function getEmployeeCourses() {
|
||||||
|
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Employee Academy");
|
||||||
|
sheet.getRange(1,1,500,10).clearContent();
|
||||||
|
sheet.getRange(1,1).setValue("Course Name")
|
||||||
|
sheet.getRange(1,2).setValue("Course UUID")
|
||||||
|
sheet.getRange(1,3).setValue("Enrollments")
|
||||||
|
sheet.getRange(1,4).setValue("Created At")
|
||||||
|
sheet.getRange(1,5).setValue("Updated At")
|
||||||
|
sheet.getRange(1,6).setValue("Status")
|
||||||
|
sheet.getRange(1,7).setValue("Unpublished Changes?")
|
||||||
|
sheet.getRange(1,8).setValue("Short Description")
|
||||||
|
|
||||||
|
let page = 0
|
||||||
|
while (page >= 0) {
|
||||||
|
page++
|
||||||
|
Logger.log(page)
|
||||||
|
var apiURL = 'https://api.northpass.com/v2/courses?limit=100&page='+page;
|
||||||
|
const settings = {
|
||||||
|
async: true,
|
||||||
|
crossDomain: true,
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
accept: 'application/json',
|
||||||
|
'X-Api-Key': employeeKey
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const sendMsg = UrlFetchApp.fetch(apiURL, settings);
|
||||||
|
var txtResponse = sendMsg.getContentText();
|
||||||
|
var parseProps = JSON.parse(txtResponse);
|
||||||
|
|
||||||
|
for (items of parseProps['data']) {
|
||||||
|
let courseName = items['attributes']['name']
|
||||||
|
let uuid = items['id']
|
||||||
|
let createdAt = items['attributes']['created_at']
|
||||||
|
let updatedAt = items['attributes']['updated_at']
|
||||||
|
let enrollments = items['attributes']['enrollments_count']
|
||||||
|
let status = items['attributes']['status']
|
||||||
|
let unpublished_changes = items['attributes']['unpublished_changes']
|
||||||
|
let short_description = items['attributes']['short_description']
|
||||||
|
|
||||||
|
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||||
|
sheet.insertRowAfter(lastRow);
|
||||||
|
sheet.getRange(lastRow + 1, 1).setValue(courseName);
|
||||||
|
sheet.getRange(lastRow + 1, 2).setValue(uuid);
|
||||||
|
sheet.getRange(lastRow + 1, 3).setValue(enrollments);
|
||||||
|
sheet.getRange(lastRow + 1, 4).setValue(createdAt);
|
||||||
|
sheet.getRange(lastRow + 1, 5).setValue(updatedAt);
|
||||||
|
sheet.getRange(lastRow + 1, 6).setValue(status);
|
||||||
|
sheet.getRange(lastRow + 1, 7).setValue(unpublished_changes);
|
||||||
|
sheet.getRange(lastRow + 1, 8).setValue(short_description);
|
||||||
|
|
||||||
|
}
|
||||||
|
if (parseProps["links"]["next"] == null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
59
Scripts/GAS_GS/Cin7-Courses-List/PartnerCourses.js
Normal file
59
Scripts/GAS_GS/Cin7-Courses-List/PartnerCourses.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
const partnerKey = "t2aUYcwvsHPru8Ixllm0MlO6r"
|
||||||
|
|
||||||
|
function getPartnerCourses() {
|
||||||
|
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Partner Academy");
|
||||||
|
sheet.getRange(1,1,500,10).clearContent();
|
||||||
|
sheet.getRange(1,1).setValue("Course Name")
|
||||||
|
sheet.getRange(1,2).setValue("Course UUID")
|
||||||
|
sheet.getRange(1,3).setValue("Enrollments")
|
||||||
|
sheet.getRange(1,4).setValue("Created At")
|
||||||
|
sheet.getRange(1,5).setValue("Updated At")
|
||||||
|
sheet.getRange(1,6).setValue("Status")
|
||||||
|
sheet.getRange(1,7).setValue("Unpublished Changes?")
|
||||||
|
sheet.getRange(1,8).setValue("Short Description")
|
||||||
|
|
||||||
|
let page = 0
|
||||||
|
while (page >= 0) {
|
||||||
|
page++
|
||||||
|
Logger.log(page)
|
||||||
|
var apiURL = 'https://api.northpass.com/v2/courses?limit=100&page='+page;
|
||||||
|
const settings = {
|
||||||
|
async: true,
|
||||||
|
crossDomain: true,
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
accept: 'application/json',
|
||||||
|
'X-Api-Key': partnerKey
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const sendMsg = UrlFetchApp.fetch(apiURL, settings);
|
||||||
|
var txtResponse = sendMsg.getContentText();
|
||||||
|
var parseProps = JSON.parse(txtResponse);
|
||||||
|
|
||||||
|
for (items of parseProps['data']) {
|
||||||
|
let courseName = items['attributes']['name']
|
||||||
|
let uuid = items['id']
|
||||||
|
let createdAt = items['attributes']['created_at']
|
||||||
|
let updatedAt = items['attributes']['updated_at']
|
||||||
|
let enrollments = items['attributes']['enrollments_count']
|
||||||
|
let status = items['attributes']['status']
|
||||||
|
let unpublished_changes = items['attributes']['unpublished_changes']
|
||||||
|
let short_description = items['attributes']['short_description']
|
||||||
|
|
||||||
|
var lastRow = Math.max(sheet.getLastRow(),1);
|
||||||
|
sheet.insertRowAfter(lastRow);
|
||||||
|
sheet.getRange(lastRow + 1, 1).setValue(courseName);
|
||||||
|
sheet.getRange(lastRow + 1, 2).setValue(uuid);
|
||||||
|
sheet.getRange(lastRow + 1, 3).setValue(enrollments);
|
||||||
|
sheet.getRange(lastRow + 1, 4).setValue(createdAt);
|
||||||
|
sheet.getRange(lastRow + 1, 5).setValue(updatedAt);
|
||||||
|
sheet.getRange(lastRow + 1, 6).setValue(status);
|
||||||
|
sheet.getRange(lastRow + 1, 7).setValue(unpublished_changes);
|
||||||
|
sheet.getRange(lastRow + 1, 8).setValue(short_description);
|
||||||
|
|
||||||
|
}
|
||||||
|
if (parseProps["links"]["next"] == null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,26 +0,0 @@
|
|||||||
const apiKey = "51BNlRsLYKQxSu1q1UQq7F63j"
|
|
||||||
|
|
||||||
function getCourses() {
|
|
||||||
let page = 0
|
|
||||||
while (page >= 0) {
|
|
||||||
page++
|
|
||||||
Logger.log(page)
|
|
||||||
var apiURL = 'https://api.northpass.com/v2/courses?limit=100&page='+page;
|
|
||||||
const settings = {
|
|
||||||
async: true,
|
|
||||||
crossDomain: true,
|
|
||||||
method: 'GET',
|
|
||||||
headers: {
|
|
||||||
accept: 'application/json',
|
|
||||||
'X-Api-Key': apiKey
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const sendMsg = UrlFetchApp.fetch(apiURL, settings);
|
|
||||||
var txtResponse = sendMsg.getContentText();
|
|
||||||
var parseProps = JSON.parse(txtResponse);
|
|
||||||
|
|
||||||
if (parseProps["links"]["next"] == null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
32
Todos.md
32
Todos.md
@ -18,10 +18,10 @@
|
|||||||
|
|
||||||
## 2/21/2024
|
## 2/21/2024
|
||||||
|
|
||||||
- [-] Begin design of Luminate Learning Path completion page
|
- [X] Begin design of Luminate Learning Path completion page
|
||||||
- [-] Test Weglot in templates for Datasnipper
|
- [X] Test Weglot in templates for Datasnipper
|
||||||
- [-] Can we adjust where the button shows up?
|
- [X] Can we adjust where the button shows up?
|
||||||
- [ ] Can we adjust dynamic elements that translate and are too long?
|
- [X] Can we adjust dynamic elements that translate and are too long?
|
||||||
- [X] Update fonts & Continue button color for TripleSeat.
|
- [X] Update fonts & Continue button color for TripleSeat.
|
||||||
|
|
||||||
---------
|
---------
|
||||||
@ -37,18 +37,18 @@
|
|||||||
FEAT: Transcripts page - Clickable courses, Export of table "proof for learner", Last activity/last progress.
|
FEAT: Transcripts page - Clickable courses, Export of table "proof for learner", Last activity/last progress.
|
||||||
- [X] Send Sophia an overview of catalog & include Courtney on email as soft-intro.
|
- [X] Send Sophia an overview of catalog & include Courtney on email as soft-intro.
|
||||||
- [X] Update End of Quiz Screens for Courtney at BigIdeas Learning.
|
- [X] Update End of Quiz Screens for Courtney at BigIdeas Learning.
|
||||||
- [ ] Submit ticket for MATTR's requests: full-screen SCORM, progress bar not showing everything
|
- [X] Submit ticket for MATTR's requests: full-screen SCORM, progress bar not showing everything
|
||||||
|
|
||||||
## 02-23-2024
|
## 02-23-2024
|
||||||
|
|
||||||
- [X] HackerRank - Publish and force retakes on all courses in their LP.
|
- [X] HackerRank - Publish and force retakes on all courses in their LP.
|
||||||
- [X] Move HackerRank to old publishing.
|
- [X] Move HackerRank to old publishing.
|
||||||
- [ ] Anthology - Test products on Dashboard with *only* Line images and Text product.
|
- [ ] Anthology - Test products on Dashboard with *only* Line images and Text product.
|
||||||
- [ ] Anthology - Add Properties Updates to CSV Workflow.
|
- [X] Anthology - Add Properties Updates to CSV Workflow.
|
||||||
|
|
||||||
## 02-26-2024
|
## 02-26-2024
|
||||||
|
|
||||||
- [ ] Cin7: updating properties from course settings not working. Figure out fix.
|
- [X] Cin7: updating properties from course settings not working. Figure out fix.
|
||||||
- [ ] Artera: Update CustomCSS tab with Milestone language.
|
- [ ] Artera: Update CustomCSS tab with Milestone language.
|
||||||
- [ ] Create topic list doc for CE Team Meetings
|
- [ ] Create topic list doc for CE Team Meetings
|
||||||
- [X] Ask Travis to sync privately with Alaina
|
- [X] Ask Travis to sync privately with Alaina
|
||||||
@ -110,7 +110,7 @@ message](https://northpasshq.slack.com/archives/C04RER4PH09/p1709147957374999?th
|
|||||||
## 03-08-2024
|
## 03-08-2024
|
||||||
|
|
||||||
- [X] Chat with Allyson about ILTs and manager permissions.
|
- [X] Chat with Allyson about ILTs and manager permissions.
|
||||||
- [ ] Ask Charlie about a categories to courses script. - Anthology
|
- [ ] Ask Charlie about a categories to courses script - Anthology
|
||||||
- [ ] Find out if ppl roles (mgr/admin) are in any API payloads. - Anthology
|
- [ ] Find out if ppl roles (mgr/admin) are in any API payloads. - Anthology
|
||||||
- [X] Ask Lila about verbiage of LMS vs CE Product, etc.
|
- [X] Ask Lila about verbiage of LMS vs CE Product, etc.
|
||||||
|
|
||||||
@ -125,12 +125,12 @@ message](https://northpasshq.slack.com/archives/C04RER4PH09/p1709147957374999?th
|
|||||||
## 03-13-2024
|
## 03-13-2024
|
||||||
|
|
||||||
- [X] Artera: ask for DB query of all courses in HTML formatting in spreadsheet
|
- [X] Artera: ask for DB query of all courses in HTML formatting in spreadsheet
|
||||||
- This may no longer be possible due to a security flaw in how we stored RTE data.
|
- [X] This may no longer be possible due to a security flaw in how we stored RTE data.
|
||||||
- [X] Blacklane - invite Timo to sandbox
|
- [X] Blacklane - invite Timo to sandbox
|
||||||
- [X] Blacklane - Add check on login page for group, if group exists, bypass selection screen
|
- [X] Blacklane - Add check on login page for group, if group exists, bypass selection screen
|
||||||
- [X] Blacklane - Ask if there is an endpoint that shows the courses within an LP & the order
|
- [X] Blacklane - Ask if there is an endpoint that shows the courses within an LP & the order
|
||||||
- [X] HowardHanna - Send follow up email.
|
- [X] HowardHanna - Send follow up email.
|
||||||
- [ ] SPS - Send intro to Tracy email.
|
- [X] SPS - Send intro to Tracy email.
|
||||||
|
|
||||||
## 03-14-2024
|
## 03-14-2024
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ message](https://northpasshq.slack.com/archives/C04RER4PH09/p1709147957374999?th
|
|||||||
- [X] Transfer Luminate templates & properties to Mexico School
|
- [X] Transfer Luminate templates & properties to Mexico School
|
||||||
- [X] Transfer SSO Config from Luminate Prod to Mexico
|
- [X] Transfer SSO Config from Luminate Prod to Mexico
|
||||||
- [ ] Try and rip language picker from Pipedrive into Mexico
|
- [ ] Try and rip language picker from Pipedrive into Mexico
|
||||||
- [ ] Complete Downsell/Churn sheet by 3/29
|
- [X] Complete Downsell/Churn sheet by 3/29
|
||||||
|
|
||||||
## 03-25-2024
|
## 03-25-2024
|
||||||
|
|
||||||
@ -156,12 +156,4 @@ message](https://northpasshq.slack.com/archives/C04RER4PH09/p1709147957374999?th
|
|||||||
## 03-27-2024
|
## 03-27-2024
|
||||||
|
|
||||||
- [ ] Walmart - Ask if they can expose storage in Azure.
|
- [ ] Walmart - Ask if they can expose storage in Azure.
|
||||||
|
- [ ] Anthology - Presentation might be a few minutes late.
|
||||||
SPS - Note to product team re: HMAC hashes not aligning.
|
|
||||||
```text
|
|
||||||
Team - this is for and and all Ruby experts! I have a client that is having trouble verifying Northpass webhooks in their system. They are using python, if it matters, but I think both python and ruby use unicode for their encoding. So they have correctly written the function to verify the hash, but if there is a special character in the payload (accent over an é or chinese/pinyin character), the hashes don't match. From what I can read, as long as both languages are using unicode, it should have the same hash. Does anyone know if ruby does something different with encoding special characters that they should account for in their python function?
|
|
||||||
|
|
||||||
They have confirmed with me that the hashes do match if there are no special characters in the data. This seems to only happen with payloads with special characters.
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user