Some notes and file clean up. JJSV Templates

This commit is contained in:
Norm Rasmussen
2023-02-06 15:07:51 -05:00
parent b9a39a8164
commit 3ab8bc6ff4
62 changed files with 880 additions and 163 deletions

View File

@ -1,8 +1,15 @@
{% assign content_expired = false %}
{% assign now = "now" | date: "%m/%d/%Y" %}
{% if now >= course.properties.content_expiration %}
{% assign content_expired = true %}
{% endif %}
{% assign categories = '' | split: '' %}
{% for cat in course.categories %}
{% if cat.name contains "~" %}
{% assign cat_name = cat.name | remove: "~" %}
{% assign cat_name = cat_name | split: "]" %}
{% assign cat_name = cat_name | split: "]" %}
{% assign str_parts_size = cat_name | size %}
{% assign cat_name = cat_name | slice: 1, 2 %}
{% else %}
@ -12,8 +19,15 @@
{% assign categories = categories | concat: cat_name %}
{% endfor %}
<div class="catalog-card" data-category="{{categories | join: '+'}}" href="{% route course_enrollment, code: course.enrollment_code %}" >
{% unless content_expired %}
{% capture course_path %}{% route course, id: course.id %}{% endcapture %}
<div class="catalog-card" data-category="{{categories | join: '+'}}" href="{{course_path}}" >
<div class="catalog-card-img-container">
{% if course.ribbon %}
<div class="np-card-ribbon">
{{ course.ribbon }}
</div>
{% endif %}
<img
class="np-card-image"
alt="{{ course.name }}"
@ -28,7 +42,7 @@
<div class="catalog-card-desc">
{{ course.full_description }}
</div>
{% comment %} {% for course_category in course.categories %}
<div class="catalog-card-category">{{course_category.name}}</div>
{% endfor %} {% endcomment %}
@ -42,17 +56,23 @@
{% else %}
Not viewed
{% endif %}
</div>
<div class="card-details">
{% unless course.properties.course_length contains 'NULL' %}
<strong>{{course.properties.course_length}}</strong>
<span style="margin-right:16px;">|</span> <strong>{{course.properties.course_length}}</strong>
{% endunless %}
</div>
</div>
{% capture course_path %}{% route course, id: course.id %}{% endcapture %}
<a class="np-button np-button-wide" href="{{ course_path }}">
{% t shared.view %}
{% if course.started? == false %}
Start
{% elsif course.progress > 0 and course.progress < 100 %}
{% t shared.continue %}
{% elsif course.completed? %}
Resume
{% endif %}
</a>
{% if course.has_to_restart? %}
{% include "course_version_outdated_popup", path: course_path %}
@ -60,30 +80,22 @@
</div>
</div>
</div>
{% endunless %}
<style>
.catalog-card {
background: #f3f3f3;
margin-bottom: 32px;
display:flex;
}
.catalog-card-img-container {
width:33%;
min-width: 33%;
position:relative;
}
.np-card-image {
border-radius: 0;
width: 100%;
height: 100%;
height: auto;
overflow: hidden;
position: absolute;
top: 0;
left: 0;
max-width:unset;
}
.catalog-card-content {
@ -101,7 +113,7 @@
line-height:20px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
-webkit-box-orient: vertical;
overflow: hidden;
}
@ -127,6 +139,29 @@
margin:0 16px 0 0;
}
.card-details {
font-size:14px;
}
@media (min-width: 1170px) {
.catalog-card {
display:flex;
min-height:200px;
}
.catalog-card-img-container {
width:36%;
min-width: 36%;
position:relative;
}
.np-card-image {
height: 100%;
position: absolute;
max-width:unset;
}
}
</style>

View File

@ -1,17 +1,32 @@
<div class="np-card">
{% assign content_expired = false %}
{% assign now = "now" | date: "%m/%d/%Y" %}
{% if now >= course.properties.content_expiration %}
{% assign content_expired = true %}
{% endif %}
{% unless content_expired %}
<div class="np-card">
<div class="np-card-container">
<div class="np-card-image-content-top">
{% if course.ribbon %}
<div class="np-card-ribbon">
{{ course.ribbon }}
</div>
<img
class="np-card-image"
alt="{{ course.name }}"
src="{{ course.image_url }}"
>
</div>
{% endif %}
<div class="np-card-image-content-top"></div>
<img
class="np-card-image"
alt="{{ course.name }}"
src="{{ course.image_url }}"
>
</div>
<div class="np-card-content np-card-content-vertical np-card-padding course-card-content">
<p class="course-title-vision">
<div class="course-title-vision">
{{ course.name }}
</p>
</div>
<div class="course-desc">
{{ course.full_description }}
</div>
<div class="np-card-content-footer">
<div class="np-card-content-progress np-button-color">
{% if course.progress > 0 and course.progress < 100 %}
@ -21,25 +36,24 @@
{% else %}
Not viewed
{% endif %}
</div>
{% capture course_path %}{% route course, id: course.id %}{% endcapture %}
<a
class="np-button-font-color np-button" href="{% route course_enrollment, code: course.enrollment_code %}"
class="np-button-font-color np-button" href="{{course_path}}"
>
{% if course.enrolled? == false %}
{% t shared.enroll %}
{% elsif course.started? == false %}
View
{% elsif course.completed? %}
{% t shared.course.view, key: current_school.course_vocabulary %}
{% else %}
{% if course.started? == false %}
Start
{% elsif course.progress > 0 and course.progress < 100 %}
{% t shared.continue %}
{% elsif course.completed? %}
Resume
{% endif %}
</a>
</div>
</div>
</div>
</div>
{% endunless %}
<style>
@ -54,11 +68,20 @@
.np-card {
margin-bottom: 10px!important;
height: 100%;
display: flex;
flex-direction: column;
}
.course-title-vision {
font-family: "PlusJakartaSans-Bold", !important;
font-family: "PlusJakartaSans-Bold", sans-serif!important;
font-weight: 700;
margin-bottom:8px;
font-size:18px;
}
.course-desc {
flex:2;
}
.np-card .np-card-content-footer .np-button {

View File

@ -0,0 +1,182 @@
{% assign content_expired = false %}
{% assign now = "now" | date: "%m/%d/%Y" %}
{% if now >= course.properties.content_expiration %}
{% assign content_expired = true %}
{% endif %}
{% unless content_expired %}
{% capture course_path %}{% route course, id: course.id %}{% endcapture %}
<div class="catalog-card" href="{{course_path}}" >
<div class="catalog-card-img-container">
{% if course.ribbon %}
<div class="np-card-ribbon">
{{ course.ribbon }}
</div>
{% endif %}
<img
class="np-card-image"
alt="{{ course.name }}"
src="{{ course.image_url }}"
>
</div>
<div class="catalog-card-content np-card-content-vertical">
<div class="catalog-card-title">
{{ course.name }}
</div>
<div class="catalog-card-desc">
{{ course.full_description }}
</div>
{% comment %} {% for course_category in course.categories %}
<div class="catalog-card-category">{{course_category.name}}</div>
{% endfor %} {% endcomment %}
<div class="np-card-content-footer">
<div style="display:flex; align-items:center;">
<div class="np-card-content-progress np-button-color">
{% if course.progress > 0 and course.progress < 100 %}
{% t shared.progress, count: course.progress %}
{% elsif course.progress == 100 %}
Viewed
{% else %}
Not viewed
{% endif %}
</div>
<div class="card-details">
{% unless course.properties.course_length contains 'NULL' %}
<span style="margin-right:16px;">|</span><strong>{{course.properties.course_length}}</strong>
{% endunless %}
</div>
</div>
{% capture course_path %}{% route course, id: course.id %}{% endcapture %}
<a class="np-button np-button-wide" href="{{ course_path }}">
{% if course.started? == false %}
Start
{% elsif course.progress > 0 and course.progress < 100 %}
{% t shared.continue %}
{% elsif course.completed? %}
Resume
{% endif %}
</a>
{% if course.has_to_restart? %}
{% include "course_version_outdated_popup", path: course_path %}
{% endif %}
</div>
</div>
</div>
{% endunless %}
<style>
.catalog-card {
background: #f3f3f3;
margin-bottom: 32px;
}
.catalog-card-img-container {
position:relative;
}
.np-card-image {
border-radius: 0;
width: 100%;
height: auto;
overflow: hidden;
}
.catalog-card-content {
padding: 24px 32px;
width:100%;
}
.catalog-card-title {
font-size: 20px;
line-height: 24px;
margin-bottom:16px;
}
.catalog-card-desc {
font-size:16px;
line-height:20px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.np-button.np-button-wide {
background-color: #cc0033;
color: white;
display: inline-flex;
width: auto;
height: 40px;
}
.catalog-card-category {
margin-right:8px;
display: inline-block;
background: rgba(0, 153, 153, 0.8);
padding: 3px 6px;
color: #fff;
font-size: 12px;
font-weight:700;
}
.np-card-content-progress {
margin:0 16px 0 0;
}
.card-details {
font-size:14px;
}
@media (min-width: 992px) {
.catalog-card {
display:flex;
min-height:200px;
}
.catalog-card-img-container {
width:45%;
min-width: 45%;
}
.np-card-image {
height: 100%;
position: absolute;
max-width:unset;
top: 0;
left: 0;
}
.catalog-card-content {
padding: 16px 24px;
display:flex;
/*width:100%;*/
}
.np-card-content-footer {
flex:2;
}
}
@media (min-width:1200px) {
.catalog-card-img-container {
width:36%;
min-width: 36%;
}
.catalog-card-content {
padding: 20px 24px;
}
.catalog-card-title {
font-size: 22px;
}
}
</style>

View File

@ -4,12 +4,12 @@
{% for course in catalog_courses %}
{% for cat in course.categories %}
{% assign cat_name = cat.name | split: '!@#$%^&*()' %}
{% if cat.name contains "~" %}
{% assign second_level_course_categories = second_level_course_categories | concat: cat_name %}
{% else %}
{% assign top_level_course_categories = top_level_course_categories | concat: cat_name %}
{% endif %}
{% assign cat_name = cat.name | split: '!@#$%^&*()' %}
{% if cat.name contains "~" %}
{% assign second_level_course_categories = second_level_course_categories | concat: cat_name %}
{% else %}
{% assign top_level_course_categories = top_level_course_categories | concat: cat_name %}
{% endif %}
{% endfor %}
{% endfor %}
@ -118,12 +118,4 @@
}
}
</style>
<script>
$('document').ready(function() {
$('.has-sub-categories .top-level-filter').click(function() {
$(this).parent().toggleClass('filter-open')
})
})
</script>
</style>

View File

@ -0,0 +1,120 @@
{% assign product_education_course_categories = '' | split: '' %}
{% assign top_level_course_categories = '' | split: '' %}
{% assign second_level_course_categories = '' | split: '' %}
{% for course in catalog_courses %}
{% for cat in course.categories %}
{% assign cat_name = cat.name | split: '!@#$%^&*()' %}
{% if cat.name contains "~[Product Education]" %}
{% assign product_education_course_categories = product_education_course_categories | concat: cat_name %}
{% endif %}
{% comment %} {% if cat.name contains "Product Education" %}
{% assign cat_name = cat.name | split: '!@#$%^&*()' %}
{% if cat.name contains "~[Product Education]" %}
{% assign second_level_course_categories = product_education_course_categories | concat: cat_name %}
{% else %}
{% assign top_level_course_categories = top_level_course_categories | concat: cat_name %}
{% endif %}
{% endif %} {% endcomment %}
{% endfor %}
{% endfor %}
{% assign unique_product_education_course_categories = product_education_course_categories | uniq | sort %}
{% assign unique_top_level_course_categories = top_level_course_categories | uniq | sort %}
{% assign unique_second_level_course_categories = second_level_course_categories | uniq | sort %}
<div class="categories-filter">
<div class='filter-section'>
<div class='filter-title'>
TOPICS
</div>
<div class='filter-element-category category-selected' data-category='all'>
All
</div>
{% for cat in unique_product_education_course_categories %}
<div class='filter-element-category' data-category='{{cat | remove: "~[Product Education] " }}'>
<div class="top-level-filter">{{cat | remove: "~[Product Education] " }}</div>
</div>
{% endfor %}
</div>
</div>
<style>
.filter-title {
font-weight: 500;
letter-spacing: 3px;
opacity: 0.7;
margin-bottom: 16px;
}
.filter-section {
margin-bottom: 30px;
}
.filter-element-category {
margin-bottom: 16px;
cursor: pointer;
font-weight: 400;
font-size: 18px;
line-height: 24px;
}
.top-level-filter .fa-caret-right {
margin-left:8px;
}
.filter-item-sub-categories {
margin-left:24px;
height: 0;
opacity: 0;
overflow: hidden;
transition:all 0.2s;
}
.filter-element-category.has-sub-categories.filter-open .fa-caret-right {
transform:rotate(90deg)
}
.filter-element-category.has-sub-categories.filter-open .filter-item-sub-categories {
height: auto;
opacity: 1;
overflow: visible;
}
.filter-item-sub-category {
font-size: 16px;
line-height: 20px;
margin-top: 12px;
}
.filter-element-category:not(.has-sub-categories).category-selected,
.filter-item-sub-category.category-selected {
font-weight: 800 !important;
}
@media (min-width:768px) {
.categories-filter {
border-right: 1px solid #ddd;
padding-right: 16px;
padding-bottom: 32px;
margin-right:16px;
}
}
</style>
{% comment %}
<script>
$('document').ready(function() {
$('.has-sub-categories .top-level-filter').click(function() {
$(this).parent().toggleClass('filter-open')
})
})
</script> {% endcomment %}

View File

@ -29,32 +29,4 @@
{% include "course_outline" %}
</div>
</div>
</div>
<style>
@media only screen and (min-width: 768px) {
body {
display: grid;
grid-template-columns: 1fr;
grid-template-areas: "header" "nav" "main" "footer" "powered";
grid-template-rows: 120px 50px 1fr 160px 60px;
}
header {
grid-area: header;
}
nav {
grid-area: nav;
margin-bottom: 17px;
}
main {
grid-area: main;
margin-top: 0 !important;
}
footer {
grid-area: footer;
}
.np-powered-by {
grid-area: powered;
}
}
</style>
</div>

View File

@ -1,9 +1,18 @@
{% if courses.in_catalog.any? %}
<div class="np-catalog-courses row row-with-thumbnails">
{% for course in courses.in_catalog %}
<div class="col-xs-12">
{% include "cards_catalog" %}
</div>
{% assign is_product_education_course = false %}
{% for cat in course.categories %}
{% if cat.name contains "Product Education" %}
{% assign is_product_education_course = true %}
{% endif %}
{% endfor %}
<div class="col-xs-12">
{% include "cards_catalog" %}
</div>
{% endfor %}
</div>
{% else %}

View File

@ -0,0 +1,22 @@
{% if courses.in_catalog.any? %}
<div class="np-catalog-courses row row-with-thumbnails">
{% for course in courses.in_catalog %}
{% assign is_product_education_course = false %}
{% for cat in course.categories %}
{% if cat.name contains "Product Education" %}
{% assign is_product_education_course = true %}
{% endif %}
{% endfor %}
{% if is_product_education_course %}
<div class="col-xs-12">
{% include "cards_catalog" %}
</div>
{% endif %}
{% endfor %}
</div>
{% else %}
{% include "catalog_zero_state" %}
{% endif %}

View File

@ -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_horizontal" 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 %}

View File

@ -1,9 +1,10 @@
<div class="footer-terms">
<hr />
<p>Please see our <a href="#" target="_blank" onclick="return false;">Privacy Policy</a>. Use of this site constitutes your consent to the application of such laws and regulations and to our Privacy Policy. Your use of the information on this site is subject to the terms of our <a href="#" target="_blank" onclick="return false;">Terms of Use</a>.
{% comment %} <a href="#" target="_blank">Contact Us</a> with any questions or search this site for more information.</p> {% endcomment %}
<p>Please see our <a href="https://jjsvbucket.s3.us-east-
2.amazonaws.com/Vision+Excellence+Institute+Privacy+Policy+Jan+2023.pdf" target="_blank">Privacy Policy</a>. Use of this site constitutes your consent to the application of such laws and regulations and to our <a href="https://jjsvbucket.s3.us-east-
2.amazonaws.com/Vision+Excellence+Institute+Privacy+Policy+Jan+2023.pdf" target="_blank">Privacy Policy</a>. Your use of the information on this site is subject to the terms of our <a href="https://jjsvbucket.s3.us-east-2.amazonaws.com/Vision+Excellence+Terms+Of+Service.pdf">Terms of Use</a>. </p>
<p>This website is published by Johnson &amp; Johnson Services, Inc., which is solely responsible for its content. This website is intended for visitors in the United States. Third-party trademarks used herein are trademarks of their respective owners. Portions of this website are intended for visitors from certain geographical regions only and will be indicated as such.</p>
<p>This website is published by Johnson & Johnson Services, Inc., which is solely responsible for its content. This website is intended for visitors in the United States. Third-party trademarks used herein are trademarks of their respective owners. Portions of this website are intended for visitors from certain geographical regions only and will be indicated as such.</p>
<p>The materials on this website are intended to provide information about products of the Johnson & Johnson Medical Devices Companies. Each product has its own labeling, which may include specific limitations relevant to the use of the product and which may vary from country to country. Please remember to check the local labeling of each product you plan to use to be aware of these limitations. If you have any questions on the use of these products, please contact your sales consultant.</p>
@ -30,6 +31,7 @@
<div class="links-col-link">
<a href="https://jnjinstitute.com/" target="_blank">Johnson & Johnson Institute</a>
<a href="https://www.jnjvisionpro.com/" target="_blank">Johnson & Johnson Vision Pro</a>
<a href="https://www.jnjvisionpro.com/important-safety-information" target="_blank">Important Safety Information</a>
<a href="https://www.jnjvisionpro.com/products/experience-all-benefits-direct-ordering" target="_blank">Direct Ordering</a>
<a href="https://www.jnjvisionpro.com/discontinued-products" target="_blank">Discontinued Products</a>
</div>
@ -38,10 +40,16 @@
<div class="links-col-header">Legal</div>
<hr style="width:40px;"/>
<div class="links-col-link">
<a href="https://www.northpass.com/privacy-policy" target="_blank" onclick="return false;">Privacy Policy</a>
<a href="https://www.jnjvisionpro.com/internal-page/california-compliance" target="_blank" onclick="return false;">California Compliance</a>
<a href="https://www.jnjvisionpro.com/important-safety-information" target="_blank" onclick="return false;">Important Safety Information</a>
<a href="https://www.northpass.com/legal" target="_blank" onclick="return false;">Legal Policy</a>
<a href="https://jjsvbucket.s3.us-east-
2.amazonaws.com/Vision+Excellence+Institute+Privacy+Policy+Jan+2023.pdf" target="_blank">Privacy Policy</a>
<a href="https://jjsvbucket.s3.us-east-
2.amazonaws.com/California+Compliance+Vision+Excellence+Institute.pdf" target="_blank">California Compliance</a>
<a href="https://jjsvbucket.s3.us-east-2.amazonaws.com/Vision+Excellence+Terms+Of+Service.pdf">Terms of Service</a>
<a href="https://jjsvbucket.s3.us-east-2.amazonaws.com/Vision+Excellence+Institute+Cookie+Policy.pdf" target="_blank">Cookie Policy</a>
<a href="https://privacyportal-cdn.onetrust.com/dsarwebform/96f23ee1-34e3-41d6-8d5a-07f0d554152b/c94578a5-6ded-
45d2-be92-383ccacdd0f8.html?Website=https://visionexcellence.northpass.com" target="_blank">Do Not Sell or Share My Personal Information</a>
<a href="https://privacyportal-cdn.onetrust.com/dsarwebform/96f23ee1-34e3-41d6-8d5a-07f0d554152b/c94578a5-6ded-
45d2-be92-383ccacdd0f8.html?Website=https://visionexcellence.northpass.com" target="_blank">Limit the use of my Sensitive Personal Information</a>
</div>
</div>
<div class="links-col">
@ -73,10 +81,10 @@
</ul>
{% endif %}
</nav>
<a href="https://app.smartsheet.com/b/form/14620ecccc25470080b794a7ce33b983" target="_blank">Contact Us</a>
<a href="mailto:JJSVEducationDigitalPlatformSupport@its.jnj.com" target="_blank">Contact Us</a>
</div>
</div>
<div class="footer-links-code">pp2022xxxx</div>
<div class="footer-links-code">pp2023xxxx</div>
</div>
<footer class="np-footer">
@ -119,7 +127,7 @@
</div>
<div class="np-footer-bottom">
<div class="copyright">©Johnson &amp; Johnson Surgical Vision, Inc. 2022. All rights reserved. This site is published by Johnson &amp; Johnson Surgical Vision, Inc., which is solely responsible for its content.</div>
<div class="copyright">©Johnson &amp; Johnson Surgical Vision, Inc. <span class="current-year"></span>. All rights reserved. This site is published by Johnson &amp; Johnson Surgical Vision, Inc., which is solely responsible for its content.</div>
{% if website_footer.show_customer_service_email? and
website_footer.school_customer_service_email
@ -243,4 +251,10 @@
width:25%;
}
}
</style>
</style>
<script>
const year = new Date().getFullYear()
$(".current-year").text(year)
</script>

View File

@ -1,11 +1,107 @@
{% if current_person.signed_in? %}
{% unless current_person.properties.additional_user_info_complete %}
{% unless current_person.email contains "+preview" %}
{% unless current_person.email contains "+preview" %}
{% if current_person.properties.additional_user_info_complete == false %}
<script>
console.log('user not completed additional info - redirect to additional signup')
window.location.replace('/app/sign-up-cont')
if (localStorage.getItem('learnerCompletedSecondaryRegistration') != null) {
const secondaryInfoStored = localStorage.getItem("learnerCompletedSecondaryRegistration")
const learnerCompany = localStorage.getItem("learnerCompany")
const learnerCity = localStorage.getItem("learnerCity")
const learnerState = localStorage.getItem("learnerState")
const learnerCountry = localStorage.getItem("learnerCountry")
const learnerRole = localStorage.getItem("learnerRole")
const learnerSpecialty = localStorage.getItem("learnerSpecialty")
if ( learnerCompany != null && learnerCity != null && learnerState != null && learnerCountry != null && learnerRole != null && learnerSpecialty != null ) {
let userData = {
learner_uuid: '{{current_person.id}}',
company: learnerCompany,
city: learnerCity,
state: learnerState,
country: learnerCountry,
role: learnerRole,
specialty: learnerSpecialty,
}
rerunAdditionalLearnerInfoWorkflow(userData)
}
} else {
window.location.replace('/app/sign-up-cont')
}
function rerunAdditionalLearnerInfoWorkflow(data) {
console.log("re-running workflow with data: ", data)
$.ajax({
url: "https://www.workato.com/webhooks/rest/bd1a1eb7-7e79-4208-a1db-8e9c7440bcc9/additional-learner-info",
data: JSON.stringify(data),
method: 'POST',
success: function(res){
console.log(res)
},
error: function (xhr, status, error) {
console.error("Error posting to workato!", error);
}
});
}
</script>
{% endunless %}
{% elsif current_person.properties.additional_user_info_complete == true %}
<script>
console.log("property is set, can delete local storage")
localStorage.removeItem("learnerCompletedSecondaryRegistration")
localStorage.removeItem("learnerCompany")
localStorage.removeItem("learnerCity")
localStorage.removeItem("learnerState")
localStorage.removeItem("learnerCountry")
localStorage.removeItem("learnerRole")
localStorage.removeItem("learnerSpecialty")
</script>
{% else %}
<script>
console.log("custom prop doesn't exist")
if (localStorage.getItem('learnerCompletedSecondaryRegistration') != null) {
const secondaryInfoStored = localStorage.getItem("learnerCompletedSecondaryRegistration")
const learnerCompany = localStorage.getItem("learnerCompany")
const learnerCity = localStorage.getItem("learnerCity")
const learnerState = localStorage.getItem("learnerState")
const learnerCountry = localStorage.getItem("learnerCountry")
const learnerRole = localStorage.getItem("learnerRole")
const learnerSpecialty = localStorage.getItem("learnerSpecialty")
if ( learnerCompany != null && learnerCity != null && learnerState != null && learnerCountry != null && learnerRole != null && learnerSpecialty != null ) {
let userData = {
learner_uuid: '{{current_person.id}}',
company: learnerCompany,
city: learnerCity,
state: learnerState,
country: learnerCountry,
role: learnerRole,
specialty: learnerSpecialty,
}
rerunAdditionalLearnerInfoWorkflow(userData)
}
} else {
window.location.replace('/app/sign-up-cont')
}
function rerunAdditionalLearnerInfoWorkflow(data) {
console.log("re-running workflow with data: ", data)
$.ajax({
url: "https://www.workato.com/webhooks/rest/bd1a1eb7-7e79-4208-a1db-8e9c7440bcc9/additional-learner-info",
data: JSON.stringify(data),
method: 'POST',
success: function(res){
console.log(res)
},
error: function (xhr, status, error) {
console.error("Error posting to workato!", error);
}
});
}
</script>
{% endif %}
{% endunless %}
{% endif %}

View File

@ -14,7 +14,7 @@
</div>
<div class="content-disclaimer np-subpage-container">The content you access on this website is intended for Healthcare Professionals practicing in the U.S. and is consistent with U.S. labeling.</div>
<main class="np-main np-catalog np-subpage-container np-max-width">
<a class="mobile-filter-link np-hidden-desktop">Filter by Category <i class="fas fa-filter"></i></a>
<a class="mobile-filter-link np-hidden-desktop">Filter by Topic <i class="fas fa-filter"></i></a>
<div class="np-hidden-desktop mobile-filter-sidebar">
<i class="fal fa-times"></i>
{% include 'category_filter_sidebar', catalog_courses: catalog_courses %}
@ -39,6 +39,7 @@
background-size: cover;
background-position: center;
padding: 64px 16px;
margin: 0;
}
.color-layer {
@ -72,7 +73,7 @@
}
.np-catalog {
padding-top:40px;
padding-top:80px;
}
.category-hidden {
@ -82,9 +83,9 @@
.mobile-filter-link {
margin-bottom: 32px;
display: inline-block;
background-color: #009999;
text-decoration: none;
color: #fff;
color: #009999;
text-decoration: underline;
}
.mobile-filter-sidebar {
@ -106,7 +107,7 @@
transform: translateX(0);
}
.mobile-filter-sidebar i {
.mobile-filter-sidebar i.fa-times {
position: relative;
float: right;
top: -30px;
@ -142,6 +143,10 @@
filterCatalogCourses($(this))
});
$('.has-sub-categories .top-level-filter').click(function() {
$(this).parent().toggleClass('filter-open')
})
function filterCatalogCourses(elmnt) {
const selectedCategory = elmnt.data('category')
@ -163,7 +168,7 @@
$(".mobile-filter-sidebar").addClass("sidebar-open")
})
$(".mobile-filter-sidebar i").click(function() {
$(".mobile-filter-sidebar i.fa-times").click(function() {
$(".mobile-filter-sidebar").removeClass("sidebar-open")
})
</script>

View File

@ -1,5 +1,23 @@
{% assign is_skipped_category = false %}
{% for cat in course.categories %}
{% assign cat_name = cat.name | downcase %}
{% if cat_name contains "podcast" or cat_name contains "document" or cat_name contains "publication" %}
{% assign is_skipped_category = true %}
{% endif %}
{% endfor %}
{% if course.properties.skip_course_cover_page or is_skipped_category %}
{% if course.enrolled? %}
<script>window.location.replace('{% route course_viewer, course_id: course.id, learning_path_id: params.learning_path_id %}')</script>
{% else %}
<script>window.location.replace('{% route course_enrollment, code: course.enrollment_code %}')</script>
{% endif %}
{% else %}
{% include "header" %}
{% comment %} {% include "sub_navigation" %} {% endcomment %}
<main class="np-main np-max-width np-page-container">
<div class="np-hidden-mobile" id="course-desktop">
{% include "course_desktop_view" %}
@ -57,4 +75,5 @@
margin: 0 -1px;
}
}
</style>
</style>
{% endif %}

View File

@ -15,8 +15,8 @@
<div class="content-disclaimer np-subpage-container">The content you access on this website is intended for Healthcare Professionals practicing in the U.S. and is consistent with U.S. labeling.</div>
<main class="np-main np-dashboard np-subpage-container np-max-width">
<div class="row np-flex-center">
<div class="col-xs-12 col-sm-8">
<div class="row">
<div class="col-xs-12 col-lg-8">
{% if features.learning_paths? %}
<div class="np-dashboard-resources-title">
Programs
@ -26,15 +26,17 @@
<div class="np-dashboard-resources-title">
Recommended Topics
</div>
{% include "courses_index", class: "col-xs-12 col-sm-6 np-stretch-content" %}
{% include "courses_index", class: "col-xs-12 col-md-6 col-lg-12" %}
</div>
{% if features.training_events? %}
<div class="np-grid-spacing col-xs-12 col-sm-4">
<div class="np-dashboard-resources-title">
Saved Events
{% if training_events.enrolled.any? %}
<div class="np-grid-spacing col-xs-12 col-lg-4">
<div class="np-dashboard-resources-title">
Saved Events
</div>
{% include "training_events_dashboard" %}
</div>
{% include "training_events_dashboard" %}
</div>
{% endif %}
{% endif %}
</div>
</main>
@ -48,6 +50,7 @@
background-size: cover;
background-position: center;
padding: 64px 16px;
margin: 0;
}
.color-layer {

View File

@ -133,7 +133,7 @@ Johnson and Johnson technologies.</p>
<div class="col-xl-1 offset-col"></div>
<div class="col-12 col-lg-6 col-xl-4">
{% include "homepage_login_registration" %}
<a href="https://app.smartsheet.com/b/form/14620ecccc25470080b794a7ce33b983" class="contact-block" target="_blank">
<a href="mailto:JJSVEducationDigitalPlatformSupport@its.jnj.com" class="contact-block" target="_blank">
<p class="sidebar-header">Contact Us </p>
<div class="sidebar-desc">Click here to contact us for more information&nbsp;&nbsp;<i class=" arrow-icon fal fa-long-arrow-right"></i></div>
</a>

View File

@ -1,3 +1,5 @@
{% assign catalog_courses = courses.in_catalog %}
{% include "header" %}
<div class="row subpage-intro">
@ -13,14 +15,18 @@
<div class="content-disclaimer np-subpage-container">The content you access on this website is intended for Healthcare Professionals practicing in the U.S. and is consistent with U.S. labeling.</div>
<main class="np-main np-catalog np-subpage-container np-max-width">
<a class="mobile-filter-link np-hidden-desktop">Filter by Category <i class="fas fa-filter"></i></a>
<div class="np-hidden-desktop mobile-filter-sidebar">
<i class="fal fa-times"></i>
{% include 'category_filter_sidebar_product_page', catalog_courses: catalog_courses %}
</div>
<div class="row np-flex-center">
<div class="col-xs-12 col-sm-3">
{% include 'category_filter_sidebar' %}
<div class="col-xs-12 col-sm-3 np-hidden-mobile">
{% include 'category_filter_sidebar_product_page', catalog_courses: catalog_courses %}
</div>
<div class="col-xs-12 col-sm-9">
{% include "courses_catalog" %}
{% include "courses_catalog_product_education", catalog_courses: catalog_courses %}
</div>
</div>
</main>
@ -34,6 +40,7 @@
background-size: cover;
background-position: center;
padding: 64px 16px;
margin: 0;
}
.color-layer {
@ -66,6 +73,44 @@
background-color:#cc0033;
}
.category-hidden {
display: none;
}
.mobile-filter-link {
margin-bottom: 32px;
display: inline-block;
text-decoration: none;
color: #009999;
text-decoration: underline;
}
.mobile-filter-sidebar {
position: fixed;
left: 0;
background-color: #fff;
height: 100vh;
top: 0;
padding: 60px 32px;
width: 100%;
max-width: 300px;
transform: translateX(-300px);
transition: transform 0.3s;
z-index: 20;
overflow-y: scroll;
}
.mobile-filter-sidebar.sidebar-open {
transform: translateX(0);
}
.mobile-filter-sidebar i.fa-times {
position: relative;
float: right;
top: -30px;
font-size: 25px;
}
@media (min-width:768px) {
.subpage-intro {
min-height:400px;
@ -78,4 +123,41 @@
font-size: 50px;
}
}
</style>
</style>
<script>
/* convert values to same format */
$('[data-category]').each(function(){
$(this).attr('data-category', $(this).attr('data-category').replaceAll(' ', '').replaceAll('+', ' ').toLowerCase());
});
/* add action to filters on click */
$('.filter-element-category').click(function(){
filterCatalogCourses($(this))
});
function filterCatalogCourses(elmnt) {
const selectedCategory = elmnt.data('category')
$('.category-selected').removeClass('category-selected');
elmnt.addClass('category-selected');
if (selectedCategory == 'all') {
$('.catalog-card').removeClass('category-hidden');
} else {
$('.catalog-card').removeClass('category-hidden');
/* hides all cards without selected category if the 'All' wasn't selected */
$('.catalog-card').each(function(index, card) {
$(`.catalog-card:not([data-category*="${selectedCategory}"])`).addClass('category-hidden')
})
}
}
$(".mobile-filter-link").click(function() {
$(".mobile-filter-sidebar").addClass("sidebar-open")
})
$(".mobile-filter-sidebar i.fa-times").click(function() {
$(".mobile-filter-sidebar").removeClass("sidebar-open")
})
</script>

View File

@ -4,7 +4,7 @@
<div class="np-box-content-container">
<form class="np-form np-box-content" name="secondaryRegistrationForm" onsubmit(return false)>
<div class="np-form-title"> Tell us more </div>
<div class="form-description">Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus.</div>
<div class="form-description">Please provide the additional information below to tailor your experience on the Vision Excellence Institute. We will only use the information to share Professional Education Events happening in your area and to highlight content from the site related to your role and specialty under the My Topics section.</div>
<div class="form-disclaimer">All fields are required</div>
<div class="np-form-field">
@ -155,7 +155,6 @@ console.log("{{current_person.email}}")
let userData = {
learner_uuid: '{{current_person.id}}',
company: '',
country: '',
city: '',
state: '',
country: '',
@ -181,25 +180,47 @@ console.log("{{current_person.email}}")
specialtyField == "" ? "" : userData.specialty = specialtyField
if (userData.company && userData.city && userData.state && userData.country && userData.role && userData.specialty) {
submitValidatedData(userData)
console.log("user Data: ", userData)
submitValidatedDataToLocalStorage(userData)
submitValidatedDataToWorkato(userData)
} else {
$('.err-msg').show()
}
}
function submitValidatedData(data) {
console.log(data)
function submitValidatedDataToLocalStorage(data) {
console.log("submitting user data to local storage")
// Save entered data as individual variables in local storage for later use
localStorage.setItem("learnerCompany", data.company);
localStorage.setItem("learnerCity", data.city);
localStorage.setItem("learnerState", data.state);
localStorage.setItem("learnerCountry", data.country);
localStorage.setItem("learnerRole", data.role);
localStorage.setItem("learnerSpecialty", data.specialty);
// Set isValidated value in local storage to true
localStorage.setItem("learnerCompletedSecondaryRegistration", "true");
}
function submitValidatedDataToWorkato(data) {
console.log("submitting user data to Workato")
const secondaryInfoStored = localStorage.getItem("learnerCompletedSecondaryRegistration")
$('#completeRegistrationBtn').prop("disabled",true);
$('#completeRegistrationBtn').addClass('submitting')
$('.loader').show()
$('#completeRegistrationBtn span').text('Completing Registration')
$.ajax({
url: "https://www.workato.com/webhooks/rest/bd1a1eb7-7e79-4208-a1db-8e9c7440bcc9/additional-learner-info",
data: JSON.stringify(data),
method: 'POST',
success: function(res){
console.log(res)
$('#completeRegistrationBtn').prop("disabled",true);
$('#completeRegistrationBtn').addClass('submitting')
$('.loader').show()
$('#completeRegistrationBtn span').text('Completing Registration')
setTimeout(function() {
window.location.replace("/app")
@ -207,6 +228,14 @@ function submitValidatedData(data) {
},
error: function (xhr, status, error) {
console.error("Error posting to workato!");
if (secondaryInfoStored == "true") {
console.log("secondary information completed and stored in local storage")
setTimeout(function() {
window.location.replace("/app")
}, 2000)
}
}
});
}
@ -214,6 +243,14 @@ function submitValidatedData(data) {
</script>
<style>
body {
height:auto;
}
.np-box {
margin:64px 0;
}
.form-disclaimer {
font-size:12px;
margin-bottom:12px;

View File

@ -65,6 +65,12 @@ body {
font-family: "PlusJakartaSans", sans-serif;
}
.np-card-ribbon {
background-color:#009999;
padding: 2px 6px;
z-index: 1;
}
.content-disclaimer.np-subpage-container {
padding-top:16px;
padding-bottom:0;
@ -78,7 +84,8 @@ body {
}
/* Alerts */
.np-alert.np-alert-success {
.np-alert.np-alert-success,
.np-alert.np-alert-error {
background: #009999;
color: #fff;
}
@ -134,18 +141,6 @@ body {
display: flex;
}
/*.choices__list--dropdown .choices__item {
color: #002532;
}
.dropdown [type="checkbox"]:checked + label:before {
background-color: #298e4e;
}
.dropdown-button-apply {
background: #cc0033 !important;
color: #fff;
}*/
.np-learning-paths-resources-container {
border: 1px solid rgba(255, 255, 255, 0.5);
border-radius: 0;

View File

@ -29,6 +29,7 @@
background-size: cover;
background-position: center;
padding: 64px 16px;
margin: 0;
}
.color-layer {

View File

@ -260,7 +260,7 @@ DONE: Send screenshots on Workato Information, Analytics, Workflows & Group Prov
### New Instance Discussion
TODO: Clone all courses to Public instance.
DONE: Clone all courses to Public instance.
June launch for certifications. Erin currently working on a promo plan for launch, trying to see what teams should be involved.
Her budget was approved so now she can use loom and start recording videos for the academy.
@ -273,3 +273,10 @@ All certs will be attached to existing courses. The format is:
* G2 Buyer Intent - the two buyer intent courses.
Buyer Intent: targeting people that have completed the course but don't have access to
## 02/05/2023
### No real list from me
Erin on vacation for two weeks in May. Middle to end of May - returns on the 21st.
TODO: Get cert dimensions for her asap.

View File

@ -194,3 +194,7 @@ DONE: List of Form Fields - Country is hidden.
### Content & Design Changes
DONE: Hide the TOC for all courses except webinars - specifically, podcasts, videos, documents.
## 02/06/2023
### Last content meeting before launch?

View File

@ -31,5 +31,5 @@ They would like a discount in some way. Joey's KPI is cost per employee and said
Miguel, re: contract - There was some discussion regarding a Zapier license? He said Kiwi paid for Zapier and then invoiced Northpass for that cost? It was a discussion with Paula, apparently.
TODO: Turn on Workato
DONE: Turn on Workato
DONE: Send Miguel webhook info, workato, what's available, snowflake/looker, and the custom extract.

View File

@ -5,13 +5,13 @@
### Certs Discussion
Overall, don't like our certs and need more
TODO: Skip "view" button and show Certs immedieatly at the end of course screen.
TODO: Certs not loading after clicking view. <-- On Chrome. Worked for Norm.
DONE: Skip "view" button and show Certs immedieatly at the end of course screen.
DONE: Certs not loading after clicking view. <-- On Chrome. Worked for Norm.
FEAT: Cert emails for Outlook need to be reformatted.
TODO: Upload a better size for picture on dashboard header.
DONE: Upload a better size for picture on dashboard header.
ERROR: Certs not sending in email the correct template. Alpinist Template downloads as two pages. Mountaineer logo is too small.
TODO: Ask Patrycja to add me to the final run through.
DONE: Ask Patrycja to add me to the final run through.
To start for the 23rd, people are getting assigned to learning paths. But self-selection in groups is the ideal long-term setup.
Ocean Academy or Stripe type landing page would be ideal for self-selection.
Actually start on 27th. 23rd is 100% ready and QA done. 27th are real people.
Actually start on 27th. 23rd is 100% ready and QA done. 27th are real people.

View File

@ -83,7 +83,7 @@ Enterprise Workflow, where do they want to connect it to externally?
### Kathleen & Kayla
Kayla will update the boxes with links without buttons unless she gets bad feedback, then I will have to get Dorian's code from Charlie. Norm to wait feedback from Kayla.
TODO: See if you can update the existing template that Dorian made to hyperlink a piece of text while we wait for the button.
DONE: See if you can update the existing template that Dorian made to hyperlink a piece of text while we wait for the button.
Kathleen has some questions and/or bring something to our attention:
- Her team is trying to anticipate some changes that are happening in the company, and looking for long-term solutions. 4-Year Plan, repackaging and bundling the products. Potentially, one of the products could have 3 different names. For example:

View File

@ -166,7 +166,7 @@ TODO: Build Figma in Sandbox - tbd Skuid/Skuad
Synaps as favorite exam embedding software. They might be an LMS.
Salesforce no syncing. Support knows about it. All new customers that are coming in are not being synced.
TODO: get update on SFDC integration issue.
DONE: get update on SFDC integration issue.
Lots of Skuid Users that try to go to Skuid instead of HR. Now they are resetting their password on Skuid, but not getting emails.
Users sometimes submit tickets others just don't say anything.

View File

@ -173,4 +173,20 @@ She noticed a font change and wants to change them across the academy.
[Public Calendar Link](https://calendar.google.com/calendar/u/0/embed?src=pmtpcalendar@gmail.com&ctz=America/New_York)
Start with one instance and let Abby know.
TODO: Submit ticket for font changes & iFrame the calendar.
DONE: Submit ticket for font changes & iFrame the calendar.
## 02/06/2023
### Certs for Completion of Courses in Group
TODO: Create "hidden" course where a cert will live. Submit ticket for course to show up only after all 10 courses in PM Fundamentals group is complete.
TODO: Ask Product about custom certs for Enterprise. Wild Health needs it for accreditation/legal healthcare reasons.
Education Portal > PM Fundamentals Group > Must complete all courses.
Date for custom cert: end of month, if possible. If not 2-3 months.
WHAcademy: Abby fixed an embed issue but is trying to embed a different website, but it is showing Northpass. www.wildhealth.com\education. It is not working, it is just showing the
TODO: Ask about embeds not working - not loading or just showing the current Northpass page in the iFrame.
WHAcademy again:
TODO: Check out the "Sleep" course, Bear Chronotype image, rounded corners not working, they image is staying sharp
This previously worked.

64
SKO.md Normal file
View File

@ -0,0 +1,64 @@
# SKO Homework
## Shark Tank Pitch
### Instructions
Develop a 3-5 minute “Shark Tank Style” elevator pitch for Northpass. Your pitch should:
* Detail the investment youre seeking for Northpass
* Identify the problem Northpass is solving
* Outline the market opportunity for Northpass
* Detail the benefits of Northpass
* Share the outcomes that those investing in Northpass achieve
* Make the Sharks motivated to invest in Northpass
### Response
## Why Now?
### Instructions
Develop a 3-5 minute “Shark Tank Style” elevator pitch for investing in Northpass and digital customer education now. Your pitch should:
* Detail the investment youre seeking for Northpass
* Identify the problem Northpass is solving
* Calculate the ROI that investors could experience
* Make the Sharks motivated to invest in Northpass
### Response
## AI & LI
### Instructions
Use OpenAIs ChatGPT, develop 20 topics for a customer education Linkedin post. Then, pick a topic and use ChatGPT to craft your first social-selling Linkedin post. Make sure that you use the OpenAI output as a basis, but then they truly make it your own with your words and personality. It needs to be something that, when you read it out loud, you would feel very natural with and happy about.
## Customer Success Stories
### Instructions
Detail a success story from one of your customers, preferably in SaaS. Consider the following framework:
* Background of the company.
* Challenges before Northpass.
* Solution Northpass provided them.
* Results Northpass has helped them achieve.
### Response
## Take aways
### Instructions & Response
List your top three takeaways from the GTM Enablement Playbook:
1.
2.
3.
List three pieces of training youd like to see added to the GTM Enablement Playbook:
1.
2.
3.

View File

@ -3,10 +3,10 @@ import glob
import os
from datetime import date
currentdir = "/Users/normrasmussen/Documents/Northpass/Scripts/Walmart_Screenshots/"
def find_pictures():
def find_pictures(currentdir):
files = []
currentdir = "/Users/normrasmussen/Documents/Northpass/Scripts/Walmart_Screenshots/"
listfiles = glob.glob(currentdir + "*.png")
for file in listfiles:
files.append(os.path.basename(file))
@ -50,7 +50,6 @@ def process_pictures(new_list, resource_title, currentdir):
save_all=True,
append_images=image_list,
)
delete_originals(currentdir)
def delete_originals(currentdir):
@ -63,5 +62,7 @@ def delete_originals(currentdir):
finally:
print("All Done")
if __name__ == "__main__":
find_pictures()
find_pictures(currentdir)
delete_originals(currentdir)

View File

@ -7,10 +7,12 @@ DONE: Intro Tracy to new clients (see Tracy's slack)
DONE: Start Implementation Channel, tell everyone that if Patrycja USED to be involved in a client that is now launched and the client reaches out to you and Patrycja, don't expect her to reply. If she has some technical knowledge about the account, then please reach out to her but as for SE tasks, someone else should be doing them.
DONE: Financial Times outreach with new CSM. They asked for Account Manager.
TODO: Intro 4Pillars with Nergis
DONE: Intro 4Pillars with Nergis
DONE: Intro Kiwi with Nergis
TODO: Psychiatry-UK Feb22nd Intro
TODO: Email Pete saying everything is done cc Patrycja.
DONE: Psychiatry-UK Feb 22nd Intro
DONE: Email Pete saying everything is done cc Patrycja.
DONE: Email Cloudicity that they need to go to OpenSesame for a la carte pricing.
Cloudticity:
@ -26,4 +28,4 @@ Some hiccups:
* Course tracking with BBHR.
TODO: Comp sheet for reviews: Tracy: Magis; Nergis: Shipt, Norm: SPS
DONE: Comp sheet for reviews: Tracy: Magis; Nergis: Shipt, Norm: SPS