CINXE.COM
HMH Educator Input
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=0"> <link href="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/mdb/font/fontawesome/fontawesome-all.min.css" rel="stylesheet" type="text/css"> <link href="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/mdb/css/bootstrap.min.css" rel="stylesheet" type="text/css" > <link href="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/mdb/css/mdb.min.css" rel="stylesheet" type="text/css" > <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet"> <link href="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/css/jquery/plugin/timeout-dialog.css" rel="stylesheet" type="text/css" /> <link href="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/css/privacy.less" rel="stylesheet/less" type="text/css" /> <script src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/js/less.js" data-env="development"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/jquery/jquery-3.5.1.js"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/jquery/jquery-ui.min.js"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/js/lib/moment.js"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/mdb/js/popper.min.js"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/mdb/js/bootstrap.min.js"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/mdb/js/mdb.min.js"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/mdb/js/addons/datatables.min.js"></script> <script type="text/javascript" src="/messageProperties.js?locale=en" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/lib/modernizr.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/lib/jquery.imgareaselect.min.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/jquery/plugin/jquery.alphanum.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/lib/jquery.inview.min.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/lib/toastr.min.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/lib/imagesLoaded.min.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/urlTracking.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/jquery/plugin/jquery.cookies.2.2.0.min.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/jquery/plugin/jquery.dateFormat-1.0.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/jquery/plugin/timeout-dialog.js"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/ckeditor/ckeditor.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/ckeditor/adapters/jquery.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/mediaElement/mediaelement.js" charset="utf-8"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/lib/jquery.form.js"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/lib/addEvent.min.js" async defer></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/jquery/plugin/jquery.paginate.js"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/jquery/plugin/jquery-switchButton/jquery.switchButton.min.js"></script> <script> var loggingEnabled = false; var isMobile = false; function isBrowserIE(userAgent) { userAgent = userAgent || navigator.userAgent; return userAgent.indexOf("MSIE ") > -1 || userAgent.indexOf("Trident/") > -1 || userAgent.indexOf("Edge/") > -1; } function createParentMessageReceiver() { //Create IE + others compatible event handler var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; var eventer = window[eventMethod]; var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; // Listen to message from child window eventer(messageEvent,function(e) { try { if (e.origin == 'https://www.hmheducatorinput.com') { var data = JSON.parse(e.data); if (data.action == 'surveyResponseSuccess') { console.log('surveyResponseSuccess: ', data.surveyResponseId); onSurveyResponseSuccess(data.surveyResponseId); } } } catch(err) { console.log(e.origin + " - " + e.data); } },false); } function replaceDates() { $("div.tpDate").each(function() { var format = $(this).attr("data-format"); var millis = parseInt($(this).text()); var dateString = $.format.date(millis, format); $(this).replaceWith(dateString); }); } function getTimeZone() { var rightNow = new Date(); var date1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0); var date2 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0); var temp = date1.toGMTString(); var date3 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1)); var temp = date2.toGMTString(); var date4 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1)); var hoursDiffStdTime = (date1 - date3) / (1000 * 60 * 60); var hoursDiffDaylightTime = (date2 - date4) / (1000 * 60 * 60); var timeZoneMinute = (hoursDiffStdTime%1)*60; var timeZoneHour = hoursDiffStdTime-(hoursDiffStdTime%1); var timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone; var timeZoneId = "GMT-0800"; var daylightSaving = true; if (timeZoneHour >=0 && timeZoneHour < 10) { timeZoneId = 'GMT+0' + timeZoneHour; } else if (timeZoneHour < 0 && timeZoneHour > -10) { timeZoneId = 'GMT-0' + (-1*timeZoneHour); } else { timeZoneId = 'GMT+' + timeZoneHour; } if (timeZoneMinute > 0) { timeZoneId += timeZoneMinute; } else { timeZoneId += '00'; } if (hoursDiffDaylightTime == hoursDiffStdTime) { daylightSaving = false; } var timeZone = {'timeZoneName':timeZoneName, 'timeZoneId':timeZoneId, 'daylightSaving':daylightSaving}; return timeZone; } function writeTimeZoneFormHiddenInputs() { var timeZone = getTimeZone(); document.writeln('<input type="hidden" name="timeZoneId" value="'+timeZone.timeZoneId+'"/>'); document.writeln('<input type="hidden" name="daylightSaving" value="'+timeZone.daylightSaving+'"/>'); return false; } function loadLocalizedBadge(){ $('.app-download.app-store').attr('src',"https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/img/appBadges/apple-en.png"); $('.app-download.google-play').attr('src',"https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/img/appBadges/android-en.png"); } function getjQueryObjectById(elementId) { return jQuery('[id="'+elementId+'"]'); } function log(message) { var messageToShow; if (loggingEnabled){ if(arguments.callee.caller){ messageToShow = new Date() + "| caller is '" +arguments.callee.caller.name+ "' + Message: " + message; }else{ messageToShow = message; } console.log(messageToShow); } } function enableLogging(){ loggingEnabled = true; } function disableLogging(){ loggingEnabled = false; } function addScript( src, callback ) { var s = document.createElement( 'script' ); s.setAttribute( 'src', src ); s.onload = callback; document.body.appendChild( s ); } jQuery.fn.exists = function () { return this.length !== 0; }; $.fn.isOnScreen = function(){ var element = this.get(0); var bounds = element.getBoundingClientRect(); return bounds.top < window.innerHeight && bounds.bottom > 0; } jQuery.booleanValue = function (value) { if (value != null && value.toString().toLowerCase() == 'true') return true; else return false; }; escapeHtmlEntities = function (text, isSoftEscape) { if(typeof text === 'undefined' || text === null) { return; }; if(typeof text !== 'string') { return text.toString(); }; // all HTML4 entities as defined here: http://www.w3.org/TR/html4/sgml/entities.html // added: amp, lt, gt, quot and apos var entityTable = { 34 : 'quot', // 38 : 'amp', 39 : 'apos', 60 : 'lt', 62 : 'gt', 92 : 'bsol', 160 : 'nbsp', 161 : 'iexcl', 162 : 'cent', 163 : 'pound', 164 : 'curren', 165 : 'yen', 166 : 'brvbar', 167 : 'sect', 168 : 'uml', 169 : 'copy', 170 : 'ordf', 171 : 'laquo', 172 : 'not', 173 : 'shy', 174 : 'reg', 175 : 'macr', 176 : 'deg', 177 : 'plusmn', 178 : 'sup2', 179 : 'sup3', 180 : 'acute', 181 : 'micro', 182 : 'para', 183 : 'middot', 184 : 'cedil', 185 : 'sup1', 186 : 'ordm', 187 : 'raquo', 188 : 'frac14', 189 : 'frac12', 190 : 'frac34', 191 : 'iquest', 192 : 'Agrave', 193 : 'Aacute', 194 : 'Acirc', 195 : 'Atilde', 196 : 'Auml', 197 : 'Aring', 198 : 'AElig', 199 : 'Ccedil', 200 : 'Egrave', 201 : 'Eacute', 202 : 'Ecirc', 203 : 'Euml', 204 : 'Igrave', 205 : 'Iacute', 206 : 'Icirc', 207 : 'Iuml', 208 : 'ETH', 209 : 'Ntilde', 210 : 'Ograve', 211 : 'Oacute', 212 : 'Ocirc', 213 : 'Otilde', 214 : 'Ouml', 215 : 'times', 216 : 'Oslash', 217 : 'Ugrave', 218 : 'Uacute', 219 : 'Ucirc', 220 : 'Uuml', 221 : 'Yacute', 222 : 'THORN', 223 : 'szlig', 224 : 'agrave', 225 : 'aacute', 226 : 'acirc', 227 : 'atilde', 228 : 'auml', 229 : 'aring', 230 : 'aelig', 231 : 'ccedil', 232 : 'egrave', 233 : 'eacute', 234 : 'ecirc', 235 : 'euml', 236 : 'igrave', 237 : 'iacute', 238 : 'icirc', 239 : 'iuml', 240 : 'eth', 241 : 'ntilde', 242 : 'ograve', 243 : 'oacute', 244 : 'ocirc', 245 : 'otilde', 246 : 'ouml', 247 : 'divide', 248 : 'oslash', 249 : 'ugrave', 250 : 'uacute', 251 : 'ucirc', 252 : 'uuml', 253 : 'yacute', 254 : 'thorn', 255 : 'yuml', 402 : 'fnof', 913 : 'Alpha', 914 : 'Beta', 915 : 'Gamma', 916 : 'Delta', 917 : 'Epsilon', 918 : 'Zeta', 919 : 'Eta', 920 : 'Theta', 921 : 'Iota', 922 : 'Kappa', 923 : 'Lambda', 924 : 'Mu', 925 : 'Nu', 926 : 'Xi', 927 : 'Omicron', 928 : 'Pi', 929 : 'Rho', 931 : 'Sigma', 932 : 'Tau', 933 : 'Upsilon', 934 : 'Phi', 935 : 'Chi', 936 : 'Psi', 937 : 'Omega', 945 : 'alpha', 946 : 'beta', 947 : 'gamma', 948 : 'delta', 949 : 'epsilon', 950 : 'zeta', 951 : 'eta', 952 : 'theta', 953 : 'iota', 954 : 'kappa', 955 : 'lambda', 956 : 'mu', 957 : 'nu', 958 : 'xi', 959 : 'omicron', 960 : 'pi', 961 : 'rho', 962 : 'sigmaf', 963 : 'sigma', 964 : 'tau', 965 : 'upsilon', 966 : 'phi', 967 : 'chi', 968 : 'psi', 969 : 'omega', 977 : 'thetasym', 978 : 'upsih', 982 : 'piv', 8226 : 'bull', 8230 : 'hellip', 8242 : 'prime', 8243 : 'Prime', 8254 : 'oline', 8260 : 'frasl', 8472 : 'weierp', 8465 : 'image', 8476 : 'real', 8482 : 'trade', 8501 : 'alefsym', 8592 : 'larr', 8593 : 'uarr', 8594 : 'rarr', 8595 : 'darr', 8596 : 'harr', 8629 : 'crarr', 8656 : 'lArr', 8657 : 'uArr', 8658 : 'rArr', 8659 : 'dArr', 8660 : 'hArr', 8704 : 'forall', 8706 : 'part', 8707 : 'exist', 8709 : 'empty', 8711 : 'nabla', 8712 : 'isin', 8713 : 'notin', 8715 : 'ni', 8719 : 'prod', 8721 : 'sum', 8722 : 'minus', 8727 : 'lowast', 8730 : 'radic', 8733 : 'prop', 8734 : 'infin', 8736 : 'ang', 8743 : 'and', 8744 : 'or', 8745 : 'cap', 8746 : 'cup', 8747 : 'int', 8756 : 'there4', 8764 : 'sim', 8773 : 'cong', 8776 : 'asymp', 8800 : 'ne', 8801 : 'equiv', 8804 : 'le', 8805 : 'ge', 8834 : 'sub', 8835 : 'sup', 8836 : 'nsub', 8838 : 'sube', 8839 : 'supe', 8853 : 'oplus', 8855 : 'otimes', 8869 : 'perp', 8901 : 'sdot', 8968 : 'lceil', 8969 : 'rceil', 8970 : 'lfloor', 8971 : 'rfloor', 9001 : 'lang', 9002 : 'rang', 9674 : 'loz', 9824 : 'spades', 9827 : 'clubs', 9829 : 'hearts', 9830 : 'diams', 338 : 'OElig', 339 : 'oelig', 352 : 'Scaron', 353 : 'scaron', 376 : 'Yuml', 710 : 'circ', 732 : 'tilde', 8194 : 'ensp', 8195 : 'emsp', 8201 : 'thinsp', 8204 : 'zwnj', 8205 : 'zwj', 8206 : 'lrm', 8207 : 'rlm', 8211 : 'ndash', 8212 : 'mdash', 8216 : 'lsquo', 8217 : 'rsquo', 8218 : 'sbquo', 8220 : 'ldquo', 8221 : 'rdquo', 8222 : 'bdquo', 8224 : 'dagger', 8225 : 'Dagger', 8240 : 'permil', 8249 : 'lsaquo', 8250 : 'rsaquo', 8364 : 'euro' }; var softEscapeValues = ['&', '%']; return text.replace(/[\u00A0-\u2666<>\&\\]/g, function(c) { if(isSoftEscape && softEscapeValues.indexOf(c) > -1) { return c; }; return '&' + (entityTable[c.charCodeAt(0)] || '#' + c.charCodeAt(0)) + ';'; }); }; (function(jQuery) { jQuery.fn.extend( { limiter: function(limit, elem) { jQuery(this).on("keyup focus paste", function() { setCount(this, elem); }); function setCount(src, elem) { var chars = src.value.length; if (chars > limit) { src.value = src.value.substr(0, limit); chars = limit; } elem.html( limit - chars ); } setCount(jQuery(this)[0], elem); } }); })(jQuery); function triggerClick(elementId) { jQuery("#" + elementId).trigger('click'); } function bytesToSize(bytes) { var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; if (bytes == 0) return 'n/a'; var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i]; }; function showProcessingOverlay() { jQuery.magnificPopup.open({ items: { src: '/util/processingImage', type: 'image'}, modal: true, overflowY: 'hidden', }); } function hideProcessingOverlay() { jQuery.magnificPopup.close(); // Close popup that is currently opened (shorthand) } function showProcessingOverlayV2() { var over = '<div id="overlay">' + '<img id="loading" src="/util/processingImage">' + '</div>'; $(over).appendTo('body'); } function hideProcessingOverlayV2() { $('#overlay').remove(); } function sessionPing(delay) { setTimeout(function() { jQuery.getJSON( "/sessionPing", function(data) { if (data.success) { sessionPing(data.interval); } }); }, delay); } function configureToastr() { if(toastr == null) return; toastr.options.closeButton = true; toastr.options.progressBar = true; toastr.options.timeOut = 1500; toastr.options.extendedTimeOut = 1500; } function ImagePreviewUtil(previewBoxId, fileId, maxPreviewWidth, maxPreviewHeight, showCroppingTool, croppingCoordinatesId, croppingRatioWidth, croppingRatioHeight, fixedAspectRatio, onSelectChange) { var previewImageId; var imageAreaSelector = null; this.previewImage = function () { previewImageId = previewBoxId + 'Image'; if (imageAreaSelector != null) { imageAreaSelector.setOptions({ remove: true }); } if (jQuery('#' + previewImageId).attr('src')) { jQuery('#'+previewBoxId).html(''); } jQuery('#'+previewBoxId).html('<img id="' + previewImageId +'" style="display:none;"/>'); var file = document.getElementById(fileId).files[0]; if (file == null) { jQuery('#'+previewBoxId).html(); return false; } else if (!file.type.match('image.*')) { jQuery('#'+previewBoxId).html(file.name); return false; } var oFReader = new FileReader(); oFReader.readAsDataURL(document.getElementById(fileId).files[0]); oFReader.onload = function (oFREvent) { jQuery('#' + previewImageId).on('load', function() { var width = this.naturalWidth; var height = this.naturalHeight; var ratio = width/height; var displayWidth = width; var displayHeight = height; jQuery('#' + previewImageId).css('transform','rotate(0deg)'); if(isMobile){ displayWidth = 200; displayHeight = 200; if(getMobileOperatingSystem() == 'Android'){ var rotationNeeded = 360 - parseInt($('#orientation').val()); jQuery('#' + previewImageId).css('transform','rotate('+rotationNeeded+'deg)'); } showCroppingTool = false; var mobileSquare = Math.min(width, height); $('#'+croppingCoordinatesId).val("0,0,"+mobileSquare+','+mobileSquare); }else{ if (ratio >= 1) { displayWidth = Math.min(width,maxPreviewWidth); displayHeight = Math.round(displayWidth / ratio); } else { displayHeight = Math.min(height,maxPreviewHeight); displayWidth = Math.round(displayHeight * ratio); } } jQuery('#' + previewImageId).width(displayWidth); jQuery('#' + previewImageId).height(displayHeight); jQuery('#' + previewImageId).show(); if (showCroppingTool) { var croppingCoordinates = new Array(0,0,0,0); var croppingAspectRatio = croppingRatioWidth+":"+croppingRatioHeight; var croppingCoordinatesInput = jQuery('#'+croppingCoordinatesId); croppingRatioWidth = Number(croppingRatioWidth); croppingRatioHeight = Number(croppingRatioHeight); fixedAspectRatio = jQuery.booleanValue(fixedAspectRatio); if (croppingCoordinatesInput.val() == '') { var min = Math.min(width, height * croppingRatioWidth / croppingRatioHeight); var croppingWidth = Math.round(min / 2); var croppingHeight = Math.round(croppingWidth * croppingRatioHeight / croppingRatioWidth); croppingCoordinates[0] = Math.round((width - croppingWidth) / 2); croppingCoordinates[1] = Math.round((height - croppingHeight) / 2); croppingCoordinates[2] = Math.round((width - croppingWidth) / 2 + croppingWidth); croppingCoordinates[3] = Math.round((height - croppingHeight) / 2 + croppingHeight); croppingCoordinatesInput.val(croppingCoordinates); } else { croppingCoordinates = croppingCoordinatesInput.val().split(","); } jQuery(function () { imageAreaSelector = jQuery('#' + previewImageId).imgAreaSelect({ imageWidth:width, imageHeight:height, parent: '#'+previewBoxId, noScale: false,persistent:true, instance:true, handles:true, show: true, fadeSpeed:500, x1: croppingCoordinates[0], y1: croppingCoordinates[1], x2: croppingCoordinates[2], y2: croppingCoordinates[3], onSelectEnd: function (img, selection) { croppingCoordinates[0] = selection.x1; croppingCoordinates[1] = selection.y1; croppingCoordinates[2] = selection.x2; croppingCoordinates[3] = selection.y2; croppingCoordinatesInput.val(croppingCoordinates); }, onInit: function (img, selection) { } }); if (fixedAspectRatio) { imageAreaSelector.setOptions({ aspectRatio:croppingAspectRatio}); imageAreaSelector.update(); } if (onSelectChange) { imageAreaSelector.setOptions({ onSelectChange:onSelectChange}); imageAreaSelector.update(); } }); } }); jQuery('#' + previewImageId).attr('src', oFREvent.target.result); }; }; } function displayEmailPreview(mode, content, emailTemplateId, emailCampaignId, emailRecruitmentId, emailType) { jQuery.ajax({ type: "POST", url: "/mod/communicationCenter/email/generatePreview", data: {content:content, emailTemplateId:emailTemplateId, emailCampaignId:emailCampaignId, emailRecruitmentId:emailRecruitmentId, emailType:emailType} }).done(function(data) { var previewUrl = "/mod/communicationCenter/email/displayPreview?mode="+mode+"&emailPreviewToken="+data.emailPreviewToken; window.open(previewUrl, "_blank", "width=1024, height=768, location=0, menubar=0, status=0, titlebar=0, toolbar=0, scrollbars=1, resizable=1"); }); } function displayErrors(errors) { $("p.error").html(''); $("*").removeClass("error"); for (var i=0; i<errors.length; i++) { var error = errors[i]; var $element = $("[name='" + error.field + "']"); var $div = $element.closest("div.richTextEditorWrapper"); if ($div.length) $element = $div; $element.addClass("error"); $element.after('<p class="error">' + error.message + '</p>'); } } String.prototype.toTitleCase = function () { return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); }; function displayPathErrors(errors) { $("p.error").html(''); $("*").removeClass("error"); for (var i=0; i<errors.length; i++) { var error = errors[i]; var $element = $("[name='" + error.field + "']"); var $div = $element.closest("div.richTextEditorWrapper"); if ($div.length) $element = $div; $element.addClass("error"); $element.after('<p class="error">' + error.message + '</p>'); } for (var i=0; i<errors.length; i++) { var error = errors[i]; var $element = $("[id='" + error.field + "']"); var $div = $element.closest("div.richTextEditorWrapper"); if ($div.length) $element = $div; $element.addClass("error"); $element.after('<p class="error">' + error.message + '</p>'); } } var CKEditorRichTextEditor = function () { var myCKEditor = null; //initialize ckEditor this.createRichTextEditor = function(richTextZoneId, width, height, customToolbar, customFormatTags) { var isMobile = false; var isUserwayEnabled = false; var customConfig = { height: height, width: width, baseFloatZIndex: 10000 // toolbar: customToolbar, // Optional. If nothing is passed, src/main/webapp/resources/ckeditor/config.js is used. //removePlugins: "liststyle,tableselection,tabletools,contextmenu", }; // Check the boolean condition (replace 'yourBooleanVariable' with your actual boolean variable) if (isUserwayEnabled) { // Set the toolbar property to an empty array to remove all buttons from the CKEditor toolbar customConfig.toolbar = []; } else { // If the boolean condition is not met, use the provided customToolbar or default toolbar (src/main/webapp/resources/ckeditor/config.js) customConfig.toolbar = customToolbar || 'Custom'; } /* if(customFormatTags) { customConfig['format_tags'] = customFormatTags; } */ if(isMobile) { CKEDITOR.config.removePlugins='emoji'; } var language = 'en'.substring(0,2); CKEDITOR.config.language = language; myCKEditor = CKEDITOR.replace(richTextZoneId, customConfig); CKEDITOR.on( 'dialogDefinition', function( ev ) { var dialogName = ev.data.name; var dialogDefinition = ev.data.definition; if (dialogName == 'link') { var protocols = dialogDefinition.getContents( 'info' ).get( 'urlOptions' ); protocols.children[0].children[0]['default'] = ''; var lastElem = protocols.children[0].children[0].items.pop(); protocols.children[0].children[0].items.unshift(lastElem); } }); myCKEditor.on('change', function(evt) { myCKEditor.updateElement(); } ); if (isUserwayEnabled) { myCKEditor.ui.items.toolbar = []; } return myCKEditor; }; this.setContent = function(contentHtml) { myCKEditor.setData(contentHtml); }; this.getContent = function() { return myCKEditor.getData(); }; this.clearContent = function(){ myCKEditor.setData(""); }; this.destroy = function(){ myCKEditor.destroy(); }; }; // Init CKEditor Instances from array. var loadCKEditorRichTextEditors = function(ckEditorData) { ckEditorData.width = ckEditorData.width || '100%'; ckEditorData.height = ckEditorData.height || 100; $.each(ckEditorData.textAreaIdsToConvert, function(index, textAreaIdAttr) { var instanceVarName = textAreaIdAttr + 'CKEditor'; if($('#' + textAreaIdAttr).exists() && window[instanceVarName]) { window[instanceVarName].createRichTextEditor(textAreaIdAttr, ckEditorData.width, ckEditorData.height, ckEditorData.configOptions, ckEditorData.formatTagsOptions); }; }); }; var DropZoneFileUploader = function () { var myDropzone = null; var referenceId = null; var orientation = null; Dropzone.autoDiscover = false; this.createFileUploader = function(uploadZoneId, autoProcessQueue, maxFiles, parallelUploads, maxFilesize, acceptedFiles, fileClass, attachedToId, onSuccess, onError, onComplete, onCompleteRemoveFileDelay, onQueueComplete, accept, defaultMessage = null) { var isVideoFile = null; var uploadedFile = null; var uploadSucceeded = 0; if(accept == null){ accept = function(file, done) { return done(); } } referenceId = attachedToId; myDropzone = new Dropzone('#'+uploadZoneId, {url:"https://thinkpassenger-prod.s3.amazonaws.com/", autoProcessQueue: autoProcessQueue, maxFiles: maxFiles, parallelUploads: parallelUploads, maxFilesize: maxFilesize, // MB uploadMultiple: false, addRemoveLinks: true, acceptedFiles: acceptedFiles, // "file_extension,audio/*,video/*,image/*,media_type" dictDefaultMessage: defaultMessage, dictRemoveFile: "Remove File", dictCancelUpload: "Cancel Upload", accept: accept } ); myDropzone.on("processing", function(file) { isVideoFile = file.type.match('video.*'); uploadedFile = null; uploadSucceeded = null; if (isVideoFile) { myDropzone.options.url = "https://thinkpassenger-prod.s3.amazonaws.com/"; } else { myDropzone.options.url = "/member/v2/uploadFile"; // <--- is this working? } }); myDropzone.on("sending", function(file, xhr, formData) { var uploadData = null; if (isVideoFile) { jQuery.ajax({ async: false, cache: false, type: "POST", url: "/member/v2/prepareVideoUpload", data: {fileClass:fileClass, referenceId:referenceId, originalName:file.name, totalBytes:file.size} }).done(function(data) { uploadData = data; }).fail(function() { alert("error"); }); if (uploadData == null || uploadData.error) { if (uploadData.error) alert(uploadData.errorMessage); myDropzone.cancelUpload(file); } else { if(typeof sendFileToCreateDescription != 'undefined'){ sendFileToCreateDescription(uploadData); } uploadedFile = uploadData.uploadedFile; formData.append("Content-Type", file.type); formData.append("acl", uploadData.acl); formData.append("success_action_status", uploadData.successActionStatus); formData.append("key", uploadData.key); formData.append("x-amz-date", uploadData.expiration); formData.append("x-amz-algorithm", uploadData.algorithm); formData.append("x-amz-credential", uploadData.credential); formData.append("policy", uploadData.policy); formData.append("x-amz-signature", uploadData.signature); } } else { orientation = file.rotationTag; if(orientation){ formData.append("orientation", orientation); } formData.append("fileClass", fileClass); if (referenceId != null) { formData.append("referenceId", referenceId); } } }); myDropzone.on("success", function(file, response) { if (isVideoFile) { uploadSucceeded = true; } else { if (response.error) { uploadSucceeded = false; file.previewElement.classList.remove("dz-success"); file.previewElement.classList.add("dz-error"); alert(response.errorMessage); } else { if(typeof sendFileToCreateDescription != 'undefined'){ sendFileToCreateDescription(response); } if (onSuccess) onSuccess(file,response.uploadedFile, referenceId); } } }); myDropzone.on("error", function(file, errorMessage, xhr) { uploadSucceeded = false; if (onError) onError(file,errorMessage); else { alert(errorMessage); } }); myDropzone.on("complete", function(file) { if (isVideoFile) { jQuery.ajax({ async: false, cache: false, type: "POST", url: "/member/v2/finalizeVideoUpload", data: {uploadedFileId:uploadedFile.id, uploadSucceeded:uploadSucceeded} }).done(function(response) { if (response.error) { uploadSucceeded = false; file.previewElement.classList.remove("dz-success"); file.previewElement.classList.add("dz-error"); //alert(response.errorMessage) } else { if (onSuccess){ onSuccess(file,response.uploadedFile, referenceId); } } }).fail(function() { alert("error"); }); } if (onComplete) onComplete(file); if (onCompleteRemoveFileDelay) setTimeout(function(){myDropzone.removeFile(file);}, onCompleteRemoveFileDelay); }); myDropzone.on("queuecomplete", function() { this.options.autoProcessQueue = autoProcessQueue; if (onQueueComplete){ onQueueComplete();} if(typeof sendCompleteSignal != 'undefined') sendCompleteSignal(); }); return myDropzone; }; this.startUpload = function(attachedToId) { referenceId = attachedToId; if (myDropzone.getQueuedFiles().length > 0) { myDropzone.options.autoProcessQueue = true; myDropzone.processQueue(); } else { myDropzone.emit("queuecomplete"); } }; this.getQueuedFiles = function() { return myDropzone.getQueuedFiles().length; }; this.removeAllFiles = function() { myDropzone.removeAllFiles(true); }; this.destroy = function() { myDropzone.destroy(); }; } String.prototype.capitalize = function(str) { return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase(); } function roundToTwoDecimal(str) { var thisNum = parseFloat(str); if(!isNaN(thisNum)){ return Math.round(thisNum * 100) / 100; }else{ return str; } } function updateOrientationInput (file){ getOrientation(file, function(orientation) { imageRotationCallBack(file,orientation); }); } var imageRotationCallBack = function(file,value){ var returnValue = 0; switch(value){ case 8 : returnValue = 90; break; case 3: returnValue = 180; break; case 6: returnValue = 270; break; } file.rotationTag = returnValue; } function getOrientation(file, callback) { var reader = new FileReader(); reader.onload = function(e) { var view = new DataView(e.target.result); if (view.getUint16(0, false) != 0xFFD8) { return callback(-2); } var length = view.byteLength, offset = 2; while (offset < length) { if (view.getUint16(offset+2, false) <= 8) return callback(-1); var marker = view.getUint16(offset, false); offset += 2; if (marker == 0xFFE1) { if (view.getUint32(offset += 2, false) != 0x45786966) { return callback(-1); } var little = view.getUint16(offset += 6, false) == 0x4949; offset += view.getUint32(offset + 4, little); var tags = view.getUint16(offset, little); offset += 2; for (var i = 0; i < tags; i++) { if (view.getUint16(offset + (i * 12), little) == 0x0112) { return callback(view.getUint16(offset + (i * 12) + 8, little)); } } } else if ((marker & 0xFF00) != 0xFF00) { break; } else { offset += view.getUint16(offset, false); } } return callback(-1); }; reader.readAsArrayBuffer(file); } function getMobileOperatingSystem() { var userAgent = navigator.userAgent || navigator.vendor || window.opera; if (/windows phone/i.test(userAgent)) { return "Windows Phone"; } if (/android/i.test(userAgent)) { return "Android"; } if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) { return "iOS"; } return "unknown"; } function parseParams(str) { return str.split('&').reduce(function (params, param) { var paramSplit = param.split('=').map(function (value) { return decodeURIComponent(value.replace(/\+/g, ' ')); }); params[paramSplit[0]] = paramSplit[1]; return params; }, {}); } function parseHash(windowLocationHash) { let hash = decodeURI(windowLocationHash); if(hash) { hash = hash.substring(1); return parseQuery(hash); } } function removeHash() { history.pushState("", document.title, window.location.pathname + window.location.search); } function getBrowserAndVersion() { var ua=navigator.userAgent,tem,M=ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; if(/trident/i.test(M[1])){ tem=/\brv[ :]+(\d+)/g.exec(ua) || []; return {name:'IE',version:(tem[1]||'')}; } if(M[1]==='Chrome'){ tem=ua.match(/\bOPR|Edge\/(\d+)/) if(tem!=null) {return {name:'Opera', version:tem[1]};} } M=M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?']; if((tem=ua.match(/version\/(\d+)/i))!=null) {M.splice(1,1,tem[1]);} return { name: M[0], version: M[1] }; } function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = "expires="+d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for(var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function deleteCookie(cookieName, path) { if(getCookie(cookieName)) { document.cookie = cookieName + "=" + ((path) ? ";path="+path:"") + ";expires=Thu, 01 Jan 1970 00:00:01 GMT"; } }; function parseQuery(queryString) { var query = {}; var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&'); for (var i = 0; i < pairs.length; i++) { var pair = pairs[i].split('='); query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || ''); } return query; } function ellipsisAtChar(str , number) { if(str){ if(str.length > number){ str = str.substr(0, number-3) + '...'; } } return str; } /** * @description Acquire all JSP EL variables (contained, in HTML hidden inputs, in the .jsp) into a * single JS object so it can be used in an external JS file. * @param {string} jspVarsElemId - The container #ID of all the hidden inputs * @returns {object} */ function getJspVars(jspVarsElemId) { var jspVars = {}; $('#' + jspVarsElemId + ' input').each(function(i, $inputElem) { var jspVarValue = $(this).val(); // Convert strings into Number, Bool, or String. if ($.isNumeric(jspVarValue)) { jspVars[$inputElem.name] = parseInt(jspVarValue); } else if(jspVarValue === "true" || jspVarValue === "false" ) { jspVars[$inputElem.name] = (jspVarValue === "true"); } else { jspVars[$inputElem.name] = jspVarValue; } }); return jspVars; } function disableHrefWhenUserIsNotAvailable(){ $('a').each(function(){ if($(this).attr('href')=='#') { $(this).removeAttr('href').css('cursor', 'initial'); } }); }; function copyContentToClipboard(content) { var $temp = $("<input>"); $("body").append($temp); $temp.val(content).select(); document.execCommand("copy"); $temp.remove(); toastr.success("Copied to clipboard"); } function resetMaterialSelect($selector) { var $selector = $selector || '.mdb-select'; $($selector).materialSelect({ destroy: true }); $($selector).materialSelect(); } function removeValuesFromArray(arr, valuesToRemove) { return $.grep(arr, function(arrItem){ arrItem.trim(); return valuesToRemove.indexOf(arrItem) <= -1; }); } function generateCustomSelectOptionsByTeam(contents, filterByTeams, teamsIds) { var $options = []; if(filterByTeams) { contents = filterContentsByAssignedTeam(contents, teamsIds); }; for (var i = 0; i < contents.length; i++) { var $newOption = $('<option />', { value: contents[i].value, text: contents[i].label + ' (' + moment(contents[i].publishDate).format('MM/DD/YY') + ')' }); $options.push($newOption); } return $options; }; function checkScroll() { var scrollableDiv = document.getElementById("scrollableDiv"); if (scrollableDiv.scrollTop + scrollableDiv.clientHeight === scrollableDiv.scrollHeight) { var termsAgreedCheckBox = document.getElementById("termsAgreed"); termsAgreedCheckBox.disabled = false; } }; function filterContentsByAssignedTeam(contentsData, teamIds) { var newContentsByAssignedTeam = []; for(let i = 0, contentsDataArrLen = contentsData.length; i < contentsDataArrLen; i++) { var contentData = contentsData[i]; if(contentData.accessType === 'ALL') { newContentsByAssignedTeam.push(contentData); continue; }; for(let k = 0, teamsArrLen = contentData.teams.length; k < teamsArrLen; k++) { if(contentData.teams[k].id === teamIds) { newContentsByAssignedTeam.push(contentData); break; }; }; }; return newContentsByAssignedTeam; }; </script> <script> $(document).ready(function() { toastr.options = { "closeButton": true, "debug": false, "newestOnTop": false, "progressBar": true, "positionClass": "toast-top-right", "preventDuplicates": false, "onclick": null, "showDuration": "300", "hideDuration": "1000", "timeOut": "5000", "extendedTimeOut": "500", "showEasing": "swing", "hideEasing": "linear", "showMethod": "fadeIn", "hideMethod": "fadeOut" } $("[id$='SubnavIcon'], #mod-header-notification-btn").click(function(event){event.stopPropagation();}); var timeZone = encodeURIComponent(JSON.stringify(getTimeZone())); setCookie('timeZoneCookie', timeZone, 30); // i don't like this here, but I'm remiss to create yet another .js file for it // for now i'll make it generic enough to be used in many places $('body').on('click', '.m_button.follow', function() { var $this= $(this); var baseUrl = $this.attr("data-base-url"); var followId = $this.attr("data-obj-id"); var dataType = $this.attr("data-type"); var isButton = $this.attr("data-is-button"); var parentDiv = $this.parent(); $.ajax({ type: "POST", url: baseUrl+"/follow", data: { followedId: followId, dataType: dataType } }).done(function ( data ) { if (data.toggleLink == true) { if(isButton == 'true'){ parentDiv.html("<a href=\"#\" data-is-button=\"true\" class=\"m_button m_unfollow unfollow\" data-obj-id=\"" + followId + "\" data-base-url=\""+baseUrl+"\" title='Unsubscribe'>Unsubscribe</a>"); }else{ parentDiv.html("<a href=\"#\" data-is-button=\"false\" class=\"m_button m_unfollow unfollow\" data-obj-id=\"" + followId + "\" data-base-url=\""+baseUrl+"\" title='Unsubscribe'>Unsubscribe</a>"); } } else { parentDiv.html("<br/>"); } }).fail(function() { alert("error"); }); return false; }); $('body').on('click', '.m_button.unfollow', function() { var $this= $(this); var baseUrl = $this.attr("data-base-url"); var followId = $this.attr("data-obj-id"); var dataType = $this.attr("data-type"); var isButton = $this.attr("data-is-button"); var parentDiv = $this.parent(); $.ajax({ type: "POST", url: baseUrl+"/unfollow", data: { unfollowedId: followId, dataType: dataType }, }).done(function ( data ) { if (data.toggleLink == true) { if(isButton == 'true'){ parentDiv.html("<a href=\"#\" data-is-button=\"true\" class=\"m_button m_follow follow\" data-obj-id=\"" + followId + "\" data-base-url=\""+baseUrl+"\" title='Subscribe'>Subscribe</a>"); }else{ parentDiv.html("<a href=\"#\" data-is-button=\"false\" class=\"m_button m_follow follow\" data-obj-id=\"" + followId + "\" data-base-url=\""+baseUrl+"\" title='Subscribe'>Subscribe</a>"); } } else { parentDiv.html("<br/>"); } }).fail(function() { alert("error"); }); return false; }); }); function setToastr(type, message, onSuccess) { $.ajax({ type: "POST", url: "/toastr/set", data: {type:type, message:message} }).done(function(data) { if (data.success) { onSuccess(); } else { alert("error"); } }).fail(function() { alert("error"); }); } function toggleSubNav(subnavId) { var subnav = $('#'+subnavId); var subnavIsHidden = subnav.hasClass('hidden'); if (subnavIsHidden) { hideAllSubnavs(); subnav.removeClass('hidden'); subnav.parent().parent().addClass('open open-modHeaderNotificationsSubnav'); $('html').one('click', hideAllSubnavs); $('html').one('keyup', function(event) {if (event.keyCode == 27) {hideAllSubnavs();}}); subnav.click(function(event){event.stopPropagation();}); } else { subnav.addClass('hidden'); subnav.parent().parent().removeClass('open'); } } function hideAllSubnavs() { var $subnav = $('.subnav'); $subnav.addClass('hidden'); $subnav.parent().parent().removeClass('open open-modHeaderNotificationsSubnav'); } function replaceDates() { $("div.tpDate").each(function() { var format = $(this).attr("data-format"); var millis = parseInt($(this).text()); var dateString = $.format.date(millis, format); $(this).replaceWith(dateString); }); } $(document).ready(function() { replaceDates(); }); function openCommentAttachmentDetail(attachmentId,skipNavigation, approvalStatus) { if(approvalStatus != 'APPROVED'){ alert('Pending approval'); return false; } $.magnificPopup.open({ items:{src:'/member/commentAttachment/'+attachmentId+'?skipNavigation='+skipNavigation, type:'iframe'}, showCloseBtn:true, closeBtnInside:true, closeOnBgClick:true, width:1000 }); } function openAttachmentDetail(attachmentId, skipNavigation, approvalStatus, isDocument) { if(approvalStatus != 'APPROVED'){ alert('Pending approval'); return false; } $.magnificPopup.open({ items:{src:'/member/attachment/'+attachmentId+'?skipNavigation='+skipNavigation, type:'iframe'}, showCloseBtn:true, closeBtnInside:true, closeOnBgClick:true }); } function openAttachmentDetailPublic(attachmentId,skipNavigation, approvalStatus) { if(approvalStatus != 'APPROVED'){ alert('Pending approval'); return false; } $.magnificPopup.open({ items:{src:'/public/attachment/'+attachmentId+'?skipNavigation='+skipNavigation, type:'iframe'}, showCloseBtn:true, closeBtnInside:true, closeOnBgClick:true }); } function openInternalFooterPage(footerPageId){ $.magnificPopup.open({ items:{src:'/page/' + footerPageId, type:'iframe'}, showCloseBtn:true, closeBtnInside:true, closeOnBgClick:true, width:1000 }); } function setContactOverlaySize(whatWidth, whatHeight){ $(".mfp-iframe-holder .mfp-content").css({"width":"100%", "max-width":whatWidth + "px", "height":whatHeight + "px"}); } function openContactModerator(){ window.location.href = "/member/messaging/support" } //general delete function function confirmDelete(deleteUrl, title){ var r = confirm("Are you sure you want to delete " + title); if (r == true){ window.location.href = deleteUrl; } } //send Activation email var ajaxSendActivationEmailProcessing = false; function ajaxSendActivationEmail() { if (!ajaxSendActivationEmailProcessing) { ajaxSendActivationEmailProcessing = true; $.ajax({ url: "/member/sendActivationEmail", type: 'POST', dataType: 'json', data: {}, timeout: 10000, success: sendActivationEmailSuccess, error: sendActivationEmailError }); } } function sendActivationEmailSuccess(data, textStatus, XMLHttpRequest) { if (data.error) { $('#sendActivationLink').html('Activation Email Failed'); } else { $('#sendActivationLink').html('\u003Cspan style=\"color: green;\"\u003EActivation Email Sent\u003C\/span\u003E'); } ajaxSendActivationEmailProcessing = false; } function sendActivationEmailError(XMLHttpRequest, textStatus, errorThrown) { ajaxSendActivationEmailProcessing = false; var alertMsg = "Internal Server Error"; if (errorThrown) alertMsg = errorThrown; if (textStatus) alertMsg = "Error " + textStatus + ": " + textStatus; alert(alertMsg); } function toggleMore(contentId) { $('#'+contentId).toggle(); $('#'+contentId+"_full").toggle(); } ///////////////////////////// old code (function() { function initHeaderLinks() { $('#contentFilter').on('click', toggleFilters); $('#filters .inactive a, #filters .active a').on('click', function() { toggleContentType(this); return false; }); } function toggleFilters() { $('#filters').toggleClass('hidden'); $('#contentFilter .arrow').toggleClass('open'); return false; } function toggleContentType(button) { var target = ($(button).parent().hasClass('active')) ? 'inactive' : 'active'; $(button).appendTo($('#filters .' + target)); } function initBoardingPass() { if ($('#createNewContent_boardingpass').length > 0) { var boardingPassInput = $('#createNewContent_boardingpass'), boardingPassElements = $('form.settings li.publish .boardingpass input, form.settings li.publish .boardingpass label'), toggleBoardingPass = function() { var boardingPassInputIsChecked = boardingPassInput.prop('checked'); if (boardingPassInputIsChecked) { boardingPassElements .removeClass('grayed') .unbind('click') .on('click', function(event) { return true; }); } else { boardingPassElements .addClass('grayed') .unbind('click') .on('click', function(event) { event.preventDefault(); }); } }; toggleBoardingPass(); boardingPassInput.on('change', function() { toggleBoardingPass(); }); } } function initModals() { $('.popup_link').magnificPopup({ closeBtnInside: true, midClick: true }); $('.popup .button.cancel').on('click', function() { $('.mfp-close').trigger('click'); return false; }); } $(function() { if ($('.raty').length > 0) { $('.raty.active').raty({ number: 4, size: 22, starOff: 'https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/img/star_off.png', starOn: 'https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/img/star_on.png', half : true, starHalf: 'https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/img/star_half.png', width: false }); $('.raty.readOnly').raty({ number: 4, size: 22, starOff: 'https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/img/star_off.png', starOn: 'https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/img/star_on.png', half : true, starHalf: 'https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/img/star_half.png', width: false, readOnly: true, score: 3 }); } initHeaderLinks(); initBoardingPass(); if ($.magnificPopup) { initModals(); } var hideShowCommentLink = $('li.activity h5 .hide, li.activity h5 .show'); hideShowCommentLink.on('click', function() { var thisLink = $(this), isFlagReason = thisLink.hasClass('reason'), thisReason = thisLink.parent().parent().next('.activity.reason'), thisComment = thisLink.parent().next('.comment'), nextComment = thisLink.parent().next('.activity'); if (isFlagReason) { thisReason.toggleClass('hidden'); } else { thisComment.toggleClass('hidden'); nextComment.toggleClass('originalHidden'); } hideShowCommentLink.toggleClass('hidden'); return false; }); }); })(); </script> <script src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/js/lib/dropzone-4.0.1.js" type="text/javascript"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/mdb/js/mdbOverwrite.js"></script> <!-- Google analytics gtag.js for GA4 --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-JHM3DWQ7LH"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-JHM3DWQ7LH'); </script> <!-- enf gtag js--> <title>HMH Educator Input</title> <script type="text/javascript"> $(document).ready(function() { const hash = $(location).attr('hash'); console.log(hash); if (hash) { $('#panel-overview').removeClass('show'); $('#panel-overview').removeClass('active'); $(hash).addClass('show'); $(hash).addClass('active'); } }); </script> </head> <body> <div class="main-container"> <header id="fuel-cycle-header"> <nav class="navbar navbar-expand-lg fixed-top " id="navbar-large" > <div class="container"> <a class="navbar-brand" href="home" title="HMH Educator Input"><img alt="HMH Educator Input" src="https://thinkpassenger-prod.s3.amazonaws.com/company_148/community_275/asset/7nVc4mHRlxfUlEQ.jpg" title="HMH Educator Input"/></a> <div class="float-right d-md-none d-lg-none d-xl-none d-sm-block d-xs-block mobile-slider"> <a href="#" data-activates="mobile-slide-out" class="btn p-3 button-collapse"><i class="fa fa-bars"></i></a> </div> </div> </nav> </header> <div class="container-fluid" id="main-content"> <div class="privacy-page-header">Privacy</div> <div class="privacy-page-main-container"> <div class="row"> <div class="col-md-4 d-md-block d-lg-block d-xl-block d-none pills-container"> <ul class="nav md-pills flex-column" role="tablist"> <li class="nav-item"> <a class="nav-link active" data-toggle="tab" href="#panel-overview" role="tab">Overview </a> </li> <li class="nav-item"> <a class="nav-link" data-toggle="tab" href="#panel-information" role="tab">Information we collect </a> </li> <li class="nav-item"> <a class="nav-link" id="data-tab-link" data-toggle="tab" href="#panel-data" role="tab">Access Your Data </a> </li> <li class="nav-item"> <a class="nav-link" data-toggle="tab" href="#panel-privacy" role="tab">Privacy Policy </a> </li> </ul> </div> <div class="col-md-8 col-12 content-container"> <div class="tab-content vertical"> <div class="tab-pane fade show active" id="panel-overview" role="tabpanel"> <h5 class="privacy-tab-title"></h5> <div class="privacy-tab-content"> Your Privacy<br /> Our website is designed to give you a platform to share your experiences and opinions. The information you share with us helps us understand our audience and make better decisions about our company.<br /> We support your right to be informed about your data and make choices about your information. We’ve created this privacy site for this purpose.<br /> We’ve structured our policies so that it’s easy to understand with clear and plain language. We make it easy for you to control the information you provide us. Our privacy policy explains how you can make choices about your information, and the measures we’ve put in place to keep your information secure.<br /> Please read our policies so you can be informed about the information we collect. If you have additional questions contact us. </div> </div> <div class="tab-pane fade" id="panel-information" role="tabpanel"> <h5 class="privacy-tab-title">Information we collect</h5> <div class="privacy-tab-content"> Information We Collect<br /> The following summary highlights the information we collect and our data policies. On this page you can learn: <ul> <li>What kinds of data do we collect?</li> <li>How do we use the data we collect?</li> <li>How do you keep my data secure?</li> <li>What’s your data retention policy?</li> <li>How do I control my data?</li> <li>Where can I learn more?</li> </ul> What kinds of data do we collect?<br /> Things you share<br /> We collect the information that you choose to share with us. This may include the opinions you express and the interests you choose to share. <ul> <li>Survey and study responses</li> <li>Discussions and chats</li> <li>Likes and comments</li> <li>Media such as images, videos, and documents you upload</li> </ul> Things that make you “you”<br /> When you join this website, we keep the information that you share with us. This can include personally identifiable information including: <ul> <li>Name</li> <li>Email address</li> <li>Password</li> <li>Birthday</li> <li>Gender</li> <li>Phone number</li> <li>Address</li> <li>Country</li> </ul> We may also ask you about your household to help us better understand the interests relevant to you.<br /> From time-to-time we may ask you to update your information. We may supplement this information with data from other sources and our partners. The information we collect can viewed by you in the Your Data section.<br /> You will only be asked about your personally identifiable information in the private and secure areas of our website. Please do not volunteer personally identifiable information in areas viewable by others like discussions and comments. We will never ask you to share highly sensitive information such as passwords, social security numbers, credit cards, bank accounts, and financial information.<br /> Web Browser and Device Information<br /> We collect information about the devices you use to access our website and mobile app. The purpose of this information is to authenticate users, comply with applicable regional regulations, understand the quality of the user experience, and general website usage metrics with our users.<br /> This information may include the following: <ul> <li>Connection information such as the name of your internet service provide (ISP), mobile operator, phone number, and IP address</li> <li>Browser/device information such as browser, language, time zone, operating system, hardware version, device identifiers, and device settings</li> <li>Device locations such as specific geographic locations, such as through GPS, Bluetooth, or WiFi signals</li> </ul> Cookies & Other Storage Technologies<br /> Cookies are small pieces of text used to store information on web browsers. Cookies are used to store and receive identifiers and other information on computers, phones, and other devices. Other technologies, including data we store on your web browser or device, identifiers associated with your device, and other software, are used for similar purposes. In this policy, we refer to all of these technologies as “cookies.” We use cookies to manage user sessions. We do not link the information we store in cookies to any personally identifiable information.<br /> Information from third-party partners.<br /> We exchange information about you and your activities on-and-off this website from integrations and third-party partners, such as information about your experiences or interactions on this website and with partners. The data exchanged with partners is pseudonymized. This means we do not share data about you thats classified as sensitive personally identifiable information that specifically identifies you, such as your full name and address.<br /> How do we use the data we collect?<br /> Our website is designed to give you a platform to share your experiences and opinions. The information you share with us helps us understand our audience and make better decisions about our company based on information you provide.<br /> We may include information you share in company internal reports and presentations without permission, including suggestions, responses, and uploaded media created and shared by you. The purpose of this is to highlight your experiences and opinions to our broader team and to help inform our company decision making.<br /> Your personally identifiable information is protected. We practice pseudonymization so that your identity is masked whenever and wherever possible. We do not share information that can identify you with partners or third-parties.<br /> How do you keep my data secure?<br /> Our servers are protected by high-end firewall systems. We secure data with sophisticated controls and access restrictions. All data is encrypted at rest for maximum security.<br /> What’s your data retention policy?<br /> Typically, we maintain data for as long as it remains relevant to the stated purpose of this website, i.e. understanding our audience and inform company decision making. We erase your personally identifiable information when it’s no longer pertinent to this purpose, or when instructed by you using the data controls on the Your Data section of this website.<br /> How do I control my data?<br /> We support your right to be informed about your data and make choices about your information. Visit the Your Data section to learn more.<br /> Where can I learn more?<br /> The full detail of our policies is available in our Privacy Policy. The purpose of this page is to highlight specific details from that policy. If you have additional questions you may contact us. </div> </div> <div class="tab-pane fade" id="panel-data" role="tabpanel"> <h5 class="privacy-tab-title" id="privacy-tab-title-data">Access Your Data</h5> <div class="privacy-tab-content"> <div id="privacy-tab-content-data-default"> We support your right to be informed and make choices about the data and information you share with us. Our website includes tools for users to manage their personal data. You can request a copy of your data and download it. You can also request the permanent destruction of your account and all associated personally identifiable information. <br><br>These actions can be performed by accessing <a href="#" class="data-control" tabindex="0">Data Controls</a> on the next page. </div> <div id="privacy-tab-content-data-send-email"> First, we must verify your identity to ensure secure access to your data. If you have an active account you can login with your member credentials. You may also authenticate by entering your email address below. <div class="md-form"> <input type="text" id="send-email" class="form-control"> <label id="send-email-label" for="send-email">Type your email</label> </div> <button type="button" id="submit-email" class="btn accent-button">Submit</button> </div> <div id="privacy-tab-content-data-email-sent"> Thank you. You will receive an email shortly with additional instructions to securely access your data controls. </div> </div> </div> <div class="tab-pane fade" id="panel-privacy" role="tabpanel"> <h5 class="privacy-tab-title">Privacy Policy</h5> <div class="privacy-tab-content"> <a href="https://www.hmhco.com/privacy-policy" target="_blank">https://www.hmhco.com/privacy-policy</a> </div> </div> </div> </div> </div> </div> </div> <footer class="navbar-fixed-bottom"> <div class="footer-first-bar"> <div class="container"> <div class="row footer-logo-links-container"> <div class="col-12 col-md-2 footer-logo"> <img src="https://thinkpassenger-prod.s3.amazonaws.com/company_148/community_275/asset/MfHowapqdwMEJLD.jpg" title="HMH Educator Input" /> </div> <div class="col-12 col-md-10 footer-links footer-links-with-logo"> </div> </div> </div> </div> <div class="footer-second-bar"> <div class="container"> <div class="col-12 footer-bottom row"> <div class="col-12 col-md-8 footer-text-container"> <span>HMH<br /> © 2021 HMH Educator Input. All Rights Reserved</span> </div> <div class="col-12 col-md-4 footer-powered-by-container"> <span>Powered by</span> <img src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v2/img/Fuel_Cycle_logo.png" title='Fuel Cycle' alt='Fuel Cycle'> </div> </div> </div> </div> </footer> </div> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/mdb/js/mdb.min.js"></script> <script type="text/javascript" src="https://d38mlp4b2cwzzg.cloudfront.net/168/resources/v3/js/privacy.js" ></script> <div class="modal fade" id="internal-footer-page-modal" tabindex="-1" role="dialog" aria-labelledby="internalFooterPageModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-content"> <div class="modal-body"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <i class="fal fa-times" aria-hidden="true"></i> </button> <iframe src="" frameborder="0"></iframe> </div> </div> </div> </div> </div> <div class="modal fade" id="delete-confirm-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static"> <div class="modal-dialog modal-lg" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Request Account and Data Destruction</h5> </div> <div class="modal-body"> <strong>Are you sure you want to delete your data? <strong>Selecting this action is permanent and irreversible.</strong> </div> <div class="modal-footer"> <button class="btn accent-button" id="confirm-delete-data"> Yes, Delete my data </button> <button class="btn " id="cancel-confirm-delete-data" data-dismiss="modal"> Cancel </button> </div> </div> </div> </div> <div id="mobile-slide-out" class="side-nav fixed "> <div class="col-md-4 pills-container"> <ul class="nav md-pills flex-column" role="tablist"> <li class="nav-item"> <a class="nav-link active" data-toggle="tab" href="#panel-overview" role="tab">Overview </a> </li> <li class="nav-item"> <a class="nav-link" data-toggle="tab" href="#panel-information" role="tab">Information we collect </a> </li> <li class="nav-item"> <a class="nav-link" id="data-tab-link" data-toggle="tab" href="#panel-data" role="tab">Access Your Data </a> </li> <li class="nav-item"> <a class="nav-link" data-toggle="tab" href="#panel-privacy" role="tab">Privacy Policy </a> </li> </ul> </div> </div> <div id="processing-indicator"> <img src="/util/processingImage" /> </div> </body> </html>