Custom Templates for DeepL backed up and EmailMonkey. GS University was also re-downloaded. Then small scripts updated like for Chubb.

This commit is contained in:
Norm Rasmussen
2025-02-25 17:01:36 -05:00
parent 74d46e88f4
commit a62a76f5d1
288 changed files with 9886 additions and 152 deletions

Binary file not shown.

View File

@ -1,4 +1,5 @@
<div class="np-card np-card-training-event">
<div class="np-card np-card-training-event" event-zone="{% if training_event.title contains "[EMEA]" %}EMEA{% elsif training_event.title contains "[Japan]" %}Japan{% elsif training_event.title contains "[US]" %}US{% endif %}">
<div class="np-card-container">
<div class="np-card-content-training-event">
<h3 class="np-card-content-title">

View File

@ -2,6 +2,7 @@
{% assign product_experience_categories = "[FEATURE] Installation ||| [FEATURE] Engagements ||| [FEATURE] Knowledge Center Bot ||| [FEATURE] Analytics ||| [FEATURE] Integrations" | downcase %}
{% assign customer_education_categories = "[FEATURE] Academy Setup ||| [FEATURE] Course Building ||| [FEATURE] Learning Management ||| [FEATURE] Customization ||| [FEATURE] Analytics ||| [FEATURE] Certification" | downcase %}
{% assign customer_communities_categories = "" | downcase %}
{% assign categories_in_catalog = categories.in_catalog | sort: "name" %}
<div class="mobile-filter-link np-hidden-desktop">Filter
<i class="fa fa-chevron-down"></i>
@ -18,7 +19,7 @@
<div class="filter-header main-header">Filters</div>
<a class="clear-filters">Clear Filters</a>
<details class="filter-dropdown">
<details class="filter-dropdown" open>
<summary>
<span class="filter-header">Type</span>
</summary>
@ -33,7 +34,7 @@
, class: "type"
, label: "Learning Paths"
%}
{% for category in categories.in_catalog %}
{% for category in categories_in_catalog %}
{% assign category_name_downcase = category.name | downcase %}
{% if category_name_downcase contains "[type]" %}
{% assign category_name = category.name | split: "]" | last | strip %}
@ -52,7 +53,7 @@
<span class="filter-header">Role</span>
</summary>
<div class="filter-links role-filters">
{% for category in categories.in_catalog %}
{% for category in categories_in_catalog %}
{% assign category_name_downcase = category.name | downcase %}
{% if category_name_downcase contains "[role]" %}
{% assign category_name = category.name | split: "]" | last | strip %}
@ -71,7 +72,7 @@
<span class="filter-header">Features</span>
</summary>
<div class="filter-links role-filters">
{% for category in categories.in_catalog %}
{% for category in categories_in_catalog %}
{% assign category_name_downcase = category.name | downcase %}
{% if category_name_downcase contains "[feature]" %}
{% if product_name == "customer success" %}
@ -121,7 +122,7 @@
<span class="filter-header">Language</span>
</summary>
<div class="filter-links language-filters">
{% for category in categories.in_catalog %}
{% for category in categories_in_catalog %}
{% assign category_name_downcase = category.name | downcase %}
{% if category_name_downcase contains "[language]" %}
{% assign category_name = category.name | split: "]" | last | strip %}

View File

@ -14,33 +14,35 @@
">
{% t shared.progress, count: course.progress %}
</div>
{% include "product_expiration_date", date: course.expiration_date %}
</div>
{% if course.learner_can_retake? %}
<form action="{% route course_retake, id: course.id %}" method="POST">
{% form_authenticity_token %}
<button type="submit" class="np-top-button np-button-font-color np-button np-button-big">
{% t .retake, key: current_school.course_vocabulary %}
</button>
</form>
{% else %}
<a
class="np-top-button np-button-font-color np-button np-button-big"
{% if course.enrolled? %}
href="{% route course_viewer, course_id: course.id, learning_path_id: params.learning_path_id %}"
<div class="np-top-cta-container">
{% if course.learner_can_retake? %}
<form action="{% route course_retake, id: course.id %}" method="POST">
{% form_authenticity_token %}
<button type="submit" class="np-top-button np-button-font-color np-button np-button-big">
{% t .retake, key: current_school.course_vocabulary %}
</button>
</form>
{% else %}
href="{% route course_enrollment, code: course.enrollment_code %}"
{% endif %}
>
{% if course.enrolled? == false %}
{% t shared.enroll %}
{% elsif course.started? == false %}
{% t shared.course.start, key: current_school.course_vocabulary %}
{% elsif course.completed? %}
{% t shared.course.view, key: current_school.course_vocabulary %}
<a
class="np-top-button np-button-font-color np-button np-button-big"
{% if course.enrolled? %}
href="{% route course_viewer, course_id: course.id, learning_path_id: params.learning_path_id %}"
{% else %}
{% t shared.continue %}
href="{% route course_enrollment, code: course.enrollment_code %}"
{% endif %}
</a>
{% endif %}
>
{% if course.enrolled? == false %}
{% t shared.enroll %}
{% elsif course.started? == false %}
{% t shared.course.start, key: current_school.course_vocabulary %}
{% elsif course.completed? %}
{% t shared.course.view, key: current_school.course_vocabulary %}
{% else %}
{% t shared.continue %}
{% endif %}
</a>
{% endif %}
</div>

View File

@ -0,0 +1,117 @@
{% assign courses_in_progress = false %}
{% assign courses_not_started = false %}
{% assign courses_completed = false %}
{% assign lp_in_progress = false %}
{% assign lp_not_started = false %}
{% assign lp_completed = false %}
{% assign zero_state = false %}
{% for course in courses.enrolled %}
{% if course.progress == 0 %}
{% assign courses_not_started = true %}
{% endif %}
{% if course.progress > 0 and course.progress < 100 %}
{% assign courses_in_progress = true %}
{% endif %}
{% if course.progress == 100 %}
{% assign courses_completed = true %}
{% endif %}
{% endfor %}
{% for learning_path in learning_paths.enrolled %}
{% if learning_path.progress == 0 %}
{% assign lp_not_started = true %}
{% endif %}
{% if learning_path.progress > 0 and learning_path.progress < 100 %}
{% assign lp_in_progress = true %}
{% endif %}
{% if learning_path.progress == 100 %}
{% assign lp_completed = 100 %}
{% endif %}
{% endfor %}
{% if courses_in_progress == false and courses_not_started == false and courses_completed == false and lp_in_progress == false and lp_not_started == false and lp_completed == false %}
{% assign zero_state = true %}
{% endif %}
<div class="dashboard-state-wrapper">
{% if lp_not_started or courses_not_started %}
<div class="state">
<div class="np-dashboard-resources-title">Not Started</div>
<div class="cards-wrapper">
{% for course in courses.enrolled %}
{% if course.progress == 0 %}
{% include "cards_course" with course %}
{% endif %}
{% endfor %}
{% for learning_path in learning_paths.enrolled %}
{% if learning_path.progress == 0 %}
{% include "cards_learning_path_vertical" with learning_path %}
{% endif %}
{% endfor %}
</div>
</div>
{% endif %}
{% if courses_in_progress or lp_in_progress %}
<div class="state">
<div class="np-dashboard-resources-title">In Progress</div>
<div class="cards-wrapper">
{% for course in courses.enrolled %}
{% if course.progress > 0 and course.progress < 100 %}
{% include "cards_course" with course %}
{% endif %}
{% endfor %}
{% for learning_path in learning_paths.enrolled %}
{% if learning_path.progress > 0 and learning_path.progress < 100 %}
{% include "cards_learning_path_vertical" with learning_path %}
{% endif %}
{% endfor %}
</div>
</div>
{% endif %}
{% if courses_completed or lp_completed %}
<div class="state">
<div class="np-dashboard-resources-title">Completed</div>
<div class="cards-wrapper">
{% for course in courses.enrolled %}
{% if course.progress == 100 %}
{% include "cards_course" with course %}
{% endif %}
{% endfor %}
{% for learning_path in learning_paths.enrolled %}
{% if learning_path.progress == 100 %}
{% include "cards_learning_path_vertical" with learning_path %}
{% endif %}
{% endfor %}
</div>
</div>
{% endif %}
{% if zero_state %}
{% include 'zero_message' %}
{% endif %}
</div>
<style>
.cards-wrapper {
display: grid;
grid-template-columns: repeat(3,1fr);
margin-left: -30px;
}
@media only screen and (max-width: 1000px) {
.cards-wrapper {
display: grid;
grid-template-columns: repeat(2,1fr);
}
}
@media only screen and (max-width: 768px) {
.cards-wrapper {
display: grid;
grid-template-columns: repeat(1,1fr);
margin-left: 0px;
}
}
</style>

View File

@ -1,3 +1,46 @@
{% if current_person.signed_in? %}
{% assign splitted_email = current_person.email | split: "@" %}
{% assign splitted_domain = splitted_email[1] | split: "." %}
{% assign account_name = splitted_domain[0] %}
<script>
document.addEventListener('DOMContentLoaded', () => {
const cookieName = 'GSUTimestamp';
const cookieValue = document.cookie.split('; ').find(row => row.startsWith(cookieName + '='));
const currentTimestamp = Date.now();
if (!cookieValue) {
document.cookie = `${cookieName}=${currentTimestamp}; path=/`;
identifyLearner();
return;
}
const cookieTimestamp = parseInt(cookieValue.split('=')[1], 10);
const thirtyMinutesInMillis = 30 * 60 * 1000;
if (currentTimestamp > cookieTimestamp + thirtyMinutesInMillis) {
document.cookie = `${cookieName}=${currentTimestamp}; path=/`;
identifyLearner();
}
});
function identifyLearner() {
aptrinsic('identify',
{
'id': "{{ current_person.id }}",
'email': "{{ current_person.email }}",
'signedUpAt': new Date("{{ current_person.created_at }}").getTime(),
'firstName': "{{ current_person.first_name }}",
'lastName': "{{ current_person.last_name }}"
},
{
'id': "{{ account_name }}",
'name': "{{ account_name }}"
}
);
}
</script>
{% endif %}
<header class="np-header np-header-color">
<div class="np-header-top np-hidden-mobile">
<ul class="np-header-top-nav">

View File

@ -7,7 +7,7 @@
{% 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>
<a href="{% route courses %}" class="np-learning-path-banner-action np-learning-path-banner-action--secondary">{% t .actions.more_courses %}</a>
</div>
</div>
</div>

View File

@ -14,7 +14,10 @@
">
{% t shared.progress, count: learning_path.progress %}
</div>
{% include "product_expiration_date", date: learning_path.expiration_date %}
</div>
{% endif %}
{% learning_path_next_step_button learning_path, class: "np-top-button np-button-font-color np-button np-button-big" %}
<div class="np-top-cta-container">
{% learning_path_next_step_button learning_path, class: "np-top-button np-button-font-color np-button np-button-big" %}
</div>

View File

@ -0,0 +1,7 @@
{% if date %}
{% capture date_format %}{% t date.formats.short_humanized %}{% endcapture %}
{% capture formatted_date %}{{ date | date: date_format }}{% endcapture %}
<time class="np-product-expiration-date" datetime="{{ date }}">
{% t .label, date: formatted_date %}
</time>
{% endif %}

View File

@ -6,5 +6,7 @@
</span>
</div>
</div>
{% commerce_add_to_cart product %}
<div class="np-top-cta-container">
{% commerce_add_to_cart product %}
{% commerce_buy_more_access product %}
</div>

View File

@ -15,24 +15,55 @@
<div class="filter-header">Regions:</div>
<div class="filter-links region-filters">
{% include "catalog_filter_checkbox"
, id: "japan"
, class: "region"
, label: "Japan"
%}
{% include "catalog_filter_checkbox"
, id: "emea"
, class: "region"
, label: "EMEA"
%}
{% include "catalog_filter_checkbox"
, id: "us"
, class: "region"
, label: "US"
%}
<div class="category-filter-checkbox">
<input type="checkbox" id="Japan">
<label class="filter-name">Japan</label>
</div>
<div class="category-filter-checkbox">
<input type="checkbox" id="EMEA">
<label class="filter-name">EMEA</label>
</div>
<div class="category-filter-checkbox">
<input type="checkbox" id="US">
<label class="filter-name">US</label>
</div>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
const checkboxes = document.querySelectorAll(".category-filter-checkbox input[type='checkbox']");
const cards = document.querySelectorAll(".np-card-training-event");
const clearButton = document.querySelector(".clear-filters");
function filterCards() {
const selectedRegions = Array.from(checkboxes)
.filter(checkbox => checkbox.checked)
.map(checkbox => checkbox.id);
if (selectedRegions.length === 0) {
cards.forEach(card => card.parentElement.style.display = "block");
} else {
cards.forEach(card => {
const cardRegion = card.getAttribute("event-zone");
card.parentElement.style.display = selectedRegions.includes(cardRegion) ? "block" : "none";
});
}
}
checkboxes.forEach(checkbox => {
checkbox.addEventListener("change", filterCards);
});
clearButton.addEventListener("click", function () {
checkboxes.forEach(checkbox => checkbox.checked = false);
filterCards();
});
filterCards();
});
</script>
<script>
window.addEventListener("DOMContentLoaded", function() {
document.querySelector(".mobile-filter-link").addEventListener("click", function() {

View File

@ -1,7 +1,6 @@
{% include "header" %}
{% include "course_version_outdated_alert", courses: courses.in_catalog %}
{% include "sub_navigation" %}
<script> console.log('The catalog.html.liquid file has been loaded successfully.') </script>
<main class="np-main np-catalog np-subpage-container np-max-width">
<div class="np-catalog-header-wrapper">
<div class="np-catalog-header">

View File

@ -1,7 +1,6 @@
{% include "header" %}
{% include "course_version_outdated_alert", courses: courses.in_catalog %}
{% include "sub_navigation" %}
<script> console.log('The commerce_catalog.html.liquid file has been loaded successfully.') </script>
<main class="np-main np-catalog np-subpage-container np-max-width">
<div class="np-catalog-header-wrapper">
<div class="np-catalog-header">
@ -30,7 +29,7 @@
<li>Adoption Explorer</li>
<li>Designing Effective Surveys</li>
</ul>
<span>Need assistance? Contact <a href="mailto:training@gainsight.com">training@gainsight.com</a></span>
</div>
</div>

View File

@ -1,7 +0,0 @@
{% include "header" %}
<main class="np-commerce-unlock-page np-main np-page-container np-max-width">
{% commerce_unlock %}
</main>
{% include "footer" %}

View File

@ -8,3 +8,13 @@
</div>
</main>
{% include "footer" %}
<script>
document.addEventListener("DOMContentLoaded", () => {
if (window.location.href.includes("learning_paths")) {
document.querySelectorAll(".np-back-button").forEach((button) => {
button.href = window.location.href.split("courses")[0];
});
}
})
</script>

View File

@ -11,7 +11,11 @@
<div class="np-resource-subtitle">
View all of your Enrollments.
</div>
{% if features.learning_paths? %}
<div class="dashboard-wrapper">
{% include 'dashboard-states' %}
</div>
{% comment %} {% if features.learning_paths? %}
<div class="np-dashboard-resources-title">
{% t shared.learning_paths %}
</div>
@ -23,7 +27,7 @@
, key: current_school.course_vocabulary %}
</div>
{% include "courses_index"
, class: "col-xs-12 col-sm-6 np-stretch-content" %}
, class: "col-xs-12 col-sm-6 np-stretch-content" %} {% endcomment %}
</div>
{% if features.training_events? %}
<div class="np-grid-spacing col-xs-12 col-sm-4">

View File

@ -1,4 +1,35 @@
{% include "header" %}
<div class="custom-page faq-page">
<div class="np-max-width">
<div class="row">
<div class="col-xs-12">
<h2>{{ custom_page.headline }}</h2>
<h3>{{ custom_page.subheadline }}</h3>
<div class="faq-content">{{ custom_page.content }}</div>
</div>
</div>
</div>
</div>
{% include "footer" %}
<style>
.faq-content {
background: #f3f3f3;
color: #000;
}
.faq-content p {
background: #f3f3f3 !important;
color: #000 !important;
}
.faq-content span {
background: #f3f3f3 !important;
color: #000 !important;
}
.faq-page {
padding: 0 20px;
}
</style>
{% comment %} {% include "header" %}
<main class="faq">
<div class="np-max-width faq" style="width: 100%;">
<div class="faq-container">
@ -346,4 +377,4 @@
}
});
});
</script>
</script> {% endcomment %}

View File

@ -18,12 +18,11 @@
<ul>
<li>Complete all NXT Admin Web-Based Trainings on <a href='https://education.gainsight.com/app/customer-success' target='_blank' rel='noopener'>Gainsight University</a></li>
<li>Complete all <a href='https://education.gainsight.com/app/catalog' target='_blank' rel='noopener'>Gainsight Admin Instructor-Led Courses</a> (strongly recommended)</li>
<li>Complete the <a href='https://education.gainsight.com/app/learning_paths/327e7a12-63d1-4617-9836-6acc4a17503a'>Level 3 Prep</a> and Review course</li>
<li>Review the topics and documentation in our <a href='https://docs.google.com/document/d/16bTwCLWiH0RGOt3qaIJ0wr6tT8Ljf8VSpXS0Wmrybzo/edit#' target='_blank' rel='noopener'>Study Guide</a></li>
<li>We recommend at least 6 months of hands-on Gainsight administration experience prior to taking the exam</li>
<li>(Optional) take the free unproctored <a href='https://www.webassessor.com/gainsight' target='_blank' rel='noopener'>Level 3 PRACTICE exam</a> to familiarize yourself with the item format and the level of difficulty</li>
<li>(Optional) Consider earning the Level 1 and Level 2 Admin certifications as part of your preparation</li>
<li>(Optional) attend the <a href='https://education.gainsight.com/gainsight-admin-certification-office-hours' target='_blank' rel='noopener'>Gainsight Admin Certification Office Hours</a> to hear more about what to expect and how to prepare.</li>
<li>If you're an Administrator for Gainsight Salesforce Edition, listen to this <a href='https://education.gainsight.com/differences-between-gainsights-salesforce-nxt-editions/505553' target='_blank' rel='noopener'>30-minute recording</a> of what's different between Salesforce Edition and NXT.</li>
</ul>
<p>If you have additional questions, please feel free to check out our <a href='https://docs.google.com/document/d/1SgAayGeeLUSxdSByPlEKaueI4bi-yE60K2LH0F2Lw4k/edit?usp=sharing'>FAQs.</a></p>
<p style='font-weight: bold'>Exam Format</p>

View File

@ -32,7 +32,7 @@
</div>
<div class="np-form-field">
<label class="np-input-label" for="learner_email">
{% t shared.email_address %} &npsb;
{% t shared.email_address %} &nbsp;
<i>We strongly recommend using your company email address</i>
</label>
<input

View File

@ -185,4 +185,4 @@ box-shadow: 0px 0px 1px 0px rgba(53, 64, 78, 0.32), 0px 2px 4px -0.8px rgba(27,
font-weight: 800;
line-height: normal;
text-transform: uppercase;
}
}

View File

@ -25,88 +25,13 @@
</main>
{% include "footer" %}
<script>
window.addEventListener("DOMContentLoaded", function() {
reorderContentAlphabetical()
document.querySelectorAll(".filter-checkbox").forEach((checkbox) => {
checkbox.addEventListener("change", () => {filterCourses()})
})
let params = new URLSearchParams(document.location.search);
params.forEach(function(param) {
document.querySelector(`.filter-checkbox[data-filter="${param}"]`).checked = true
})
document.querySelector(".clear-filters").addEventListener("click", (e) => {
e.preventDefault()
clearAllFilters()
})
})
function clearAllFilters() {
const filterableCards = document.querySelectorAll(".filterable-card");
filterableCards.forEach((card) => {
card.style.display = "flex"
})
document.querySelectorAll(".filter-checkbox").forEach((checkbox) => {
checkbox.checked = false
})
}
function reorderContentAlphabetical() {
let filterableCards = document.querySelectorAll(".filterable-card");
let filterableCardsArray = Array.from(filterableCards);
filterableCardsArray.sort((a, b) => {
let textA = a.querySelector('h3').textContent.trim().toLowerCase();
let textB = b.querySelector('h3').textContent.trim().toLowerCase();
if (textA < textB) return -1;
if (textA > textB) return 1;
return 0;
});
let parentElement = filterableCards[0].parentNode;
filterableCardsArray.forEach(element => parentElement.appendChild(element));
}
function filterCourses() {
let selectedRegionFilters = []
const checkboxFilters = document.querySelectorAll(".filter-checkbox")
checkboxFilters.forEach((checkbox) => {
if (checkbox.checked) {
if (checkbox.classList.contains("region-filter")) {
selectedRegionFilters.push(checkbox.getAttribute("data-filter"))
}
}
})
const filterableCards = document.querySelectorAll(".filterable-card")
filterableCards.forEach((card) => {
const cardTitle = card.querySelector(".np-card-content-title").textContent.trim().toLowerCase()
if
(
cardTitle.includes(selectedRegionFilters)
) {
card.style.display = "flex"
} else {
card.style.display = "none"
}
})
}
</script>
<style>
.np-training-events .np-resource-subtitle {
margin-bottom: 28px;
line-height: 1.5;
}
.np-card-training-event {
height: 100%;
}
</style>