Job Description
Inject the flag directly into the main browser window and the session.window.isSFInternalUser = true;sessionStorage.setItem('SF_Internal_User', 'true');
document.addEventListener('DOMContentLoaded', function () {if (document.querySelector('.job-page')) {let columnOne = document.querySelector('.jobColumnOne');if (!columnOne) return;
let titleElement = columnOne.querySelector('span[itemprop="title"]');let titleText = titleElement ? titleElement.textContent.trim() : '';if (titleElement) titleElement.closest('.joblayouttoken').remove();
columnOne.insertAdjacentHTML('afterbegin', `
${titleText}
`);
let grid = columnOne.querySelector('.job-grid');let allTokens = Array.from(columnOne.querySelectorAll('.joblayouttoken'));
allTokens.forEach(el =>{let labelEl = el.querySelector('.joblayouttoken-label');if (!labelEl) return;
let labelText = labelEl.innerText;let propId = generatePropertyId(labelText);let valueEl = el.querySelector('.rtltextaligneligible');let valueText = valueEl ? valueEl.textContent.trim() : "";
if (propId === "JobLocation") {jobLocationValue = valueText;} else if (propId === "CountryRegion") {countryRegionValue = valueText;} else if (propId === "Region") {regionValue = valueText;} else if (propId === "JobLevel") {jobLevelValue = valueText.toUpperCase().trim();} else if (propId === "EmployeeGroup") {employeeGroupValue = valueText.toLowerCase();}});
if (!employeeGroupValue) {let eg = descText.match(/Employee Group:\s([^]+)/i);if (eg) employeeGroupValue = eg[1].toLowerCase().trim();}if (!countryRegionValue) {let cr = descText.match(/Country:\s([^]+)/i);if (cr) countryRegionValue = cr[1].toLowerCase().trim();}if (!regionValue) {let rg = descText.match(/Region:\s([^]+)/i);if (rg) regionValue = rg[1].toLowerCase().trim();}if (!jobLevelValue) {let jl = descText.match(/Job Level:\s([^]+)/i);if (jl && !jl[0].toLowerCase().includes("experience")) {jobLevelValue = jl[1].toUpperCase().trim();}}}
Job Level Rule: if >= PL09 or ZZ, hide the salary.let isJobLevelSalaryEligible = true;let plMatch = jobLevelValue.match(/PL(\d+)/);if (jobLevelValue.includes("ZZ")) {isJobLevelSalaryEligible = false;} else if (plMatch && parseInt(plMatch[1], 10) >= 9) {isJobLevelSalaryEligible = false;}
let fullLocationLower = (jobLocationValue + " " + countryRegionValue).toLowerCase();let isUSJob = fullLocationLower.includes("usa") || fullLocationLower.includes("united states") || /\bus\b/.test(fullLocationLower);
let allowedUSStates = ["california", "colorado", "delaware", "hawaii", "illinois", "maryland", "massachusetts", "minnesota", "nevada", "new jersey", "new york", "vermont", "washington", "d.c."];let allowedUSAbbr = ["ca", "co", "de", "hi", "il", "md", "ma", "mn", "nv", "nj", "ny", "vt", "wa", "dc"];let allowedGlobalCountries = ["austria", "slovakia", "lithuania", "latvia", "canada"];let allowedGlobalCountries = ["asd"]let isSalaryLocationValid = false;if (isUSJob) {let hasFullStateName = allowedUSStates.some(state =>fullLocationLower.includes(state));let hasStateAbbr = allowedUSAbbr.some(abbr =>{let regex = new RegExp(\\b${abbr}\\b);return regex.test(fullLocationLower);});isSalaryLocationValid = hasFullStateName || hasStateAbbr;} else {isSalaryLocationValid = allowedGlobalCountries.some(country =>fullLocationLower.includes(country));}
let showSalaryRange = isSalaryLocationValid && isJobLevelSalaryEligible && isSalaryPaid;
let labelEl = el.querySelector('.joblayouttoken-label');if (labelEl) {let labelText = labelEl.innerText;let customPropertyid = generatePropertyId(labelText);
-- ABSOLUTE REMOVAL OF TOKENS USED FOR LOGIC ---if (customPropertyid === "EmployeeGroup" ||customPropertyid === "CountryRegion" ||customPropertyid === "Region" ||customPropertyid === "JobLevel") {el.style.display = 'none';el.remove();return;}
-- BUSINESS FILTERS ---if (customPropertyid === "SalaryRange" && !showSalaryRange) {el.style.display = 'none';el.remove();return;}
-- LABEL TEXT WORKAROUNDS ---if (customPropertyid === "SalaryRange" && labelText.toLowerCase().includes("recruitment salary range")) {labelEl.innerText = labelText.replace(/Recruitment Salary Range/ig, "Annual Salary Range");}if (labelText.includes("(Short)")) {labelEl.innerText = labelText.replace(/(Short)/g, "(s)");}
-- BRUTE FORCE STYLING ---labelEl.style.setProperty('font-weight', 'bold', 'important');labelEl.style.setProperty('font-size', '14px', 'important');labelEl.style.setProperty('color', '#303030', 'important');labelEl.style.setProperty('font-family', 'Verdana, Geneva, sans-serif', 'important');
let valueEl = el.querySelector('.rtltextaligneligible');if (valueEl) {valueEl.style.setProperty('font-weight', 'normal', 'important');valueEl.style.setProperty('font-size', '15px', 'important');valueEl.style.setProperty('color', '#303030', 'important');valueEl.style.setProperty('font-family', 'Verdana, Geneva, sans-serif', 'important');}
switch (customPropertyid) {case 'JobLocation': icon = 'glyphicon-map-marker'; break;case 'BusinessUnit': icon = 'glyphicon-briefcase'; break;case 'JobCategory': icon = 'glyphicon-dashboard'; break;case 'EmploymentType': icon = 'glyphicon-star-empty'; break;case 'ReqID': icon = 'glyphicon-calendar'; break;case 'WorkLocationType': icon = 'glyphicon-paste'; break;case 'JobExperienceLevel':iconUrl = 'https:rmkcdn.successfactors.com/ef55fddb/b4cf3492-3cb2-4e29-a914-3.png';break;case 'SalaryRange':iconUrl = 'https:rmkcdn.successfactors.com/ef55fddb/3bd06ab1-e5dc-4e72-abcb-3.png';break;case 'TAPartner':iconUrl = 'https:rmkcdn.successfactors.com/ef55fddb/66a66419-f8c9-4f0e-b94a-6.png';break;default: icon = '';}
let iconHtml = '';if (icon) {iconHtml = ; } else if (iconUrl) { iconHtml =;}
labelEl.parentElement.insertAdjacentHTML('beforebegin', ${iconHtml});
let wrapper = el.querySelector(.job-token-${customPropertyid}-wrapper);wrapper.appendChild(labelEl.parentElement);
let emptySibling = document.querySelector(.job-token-${customPropertyid}-wrapper).nextSibling;if(emptySibling && emptySibling.nodeType === 3) emptySibling.remove();}
grid.appendChild(el);}});
Apply now
/ ==========================================================================BUTTON STANDARDIZATION (CSS)This section changes how buttons look on the page. It removes the defaultstyles provided by the browser or the SAP SuccessFactors system, andapplies a uniform, custom design (flat red background, white text, etc.).========================================================================== /
/ Target specific buttons on the page using their CSS classes /.unify-button-container .btn-large,.unify-button-container .unify-apply-now,.unify-button-container button.employee-refer-a-friend {display: inline-block !important; / Forces the button to respect width/height margins /padding: 10px 20px !important; / Adds space inside the button (top/bottom, left/right) /font-size: 16px !important; / Sets the text size /text-align: center !important; / Centers the text inside the button /text-decoration: none !important; / Removes underlines from links /border-radius: 4px !important; / Rounds the corners of the button slightly /background-color: #ed0715 !important; / Sets the button background to a specific red /border: 2px solid #ed0715 !important; / Adds a red border matching the background /color: #ffffff !important; / Sets the text color to white /transition: none !important; / Disables default fading animations /cursor: pointer !important; / Changes the mouse cursor to a pointing hand on hover /line-height: normal !important; / Resets the line height to default /height: auto !important; / Allows the button to grow if text is large /min-width: 150px !important; / Ensures the button is never too narrow /background-image: none !important;/ Removes any default gradient colors /box-shadow: none !important; / Removes default shadow effects /text-shadow: none !important; / Removes shadows behind the text /}
/ HOVER STATE: How the button looks when the user puts the mouse over it /.unify-button-container .btn-large:hover,.unify-button-container .unify-apply-now:hover,.unify-button-container button.employee-refer-a-friend:hover {background-color: #ed0715 !important; / Keeps the background red /color: #ffffff !important; / Keeps the text white /border: 2px solid #ed0715 !important; / Keeps the border red /box-shadow: none !important; / Ensures no shadow appears /}
/ ACTIVE/FOCUS STATE: How the button looks when clicked or selected via keyboard /.unify-button-container a:active,.unify-button-container button:active,.unify-button-container a:focus,.unify-button-container button:focus {background-color: #ed0715 !important;color: #ffffff !important;outline: none !important; / Removes the default blue outline around focused elements /box-shadow: none !important;filter: none !important; / Removes any darkening effects applied by default /}
/ Centers the button container if it was previously aligned to the right /.unify .unify-button-container.rightAlign, .unify .social-media-container.rightAlign {justify-content: center !important;}
/ Ensures the apply button is fully visible (not faded out) /.unify-apply-now {opacity: 1 !important;}
/ ==========================================================================CUSTOM BRAND TEXT STYLINGThis applies the specific font and alignment required by the client tothe brand descriptions we will inject via JavaScript.========================================================================== /.custom-brand-display-text p {font-family: custom2abfb6e0ee794a99894a6 !important; / Custom font family /font-size: 14px !important; / Specific font size /color: rgb(48,48,48) !important; / Dark gray text color /line-height: 1.42857143 !important; / Spacing between lines of text /text-align: justify !important; / Aligns text to the left /margin: 10px 25px !important; / Adds spacing below paragraphs /}
(function() {/ ==========================================================================SCRIPT 1: BRAND RENDERERThis script acts like a search-and-replace tool. It looks for the word"Brand:" on the page, checks which brand is written next to it, andcreates a beautiful visual block (image + formatted text) to show instead.========================================================================== /
/
/
/
Default brand is "standard" in case we don't find anythingvar detectedKey = "standard";
Step 2: Loop through all elements to find the label "Brand:"for (var i = 0; i
Clean up the text (e.g., "Lean Heat" ->"leanheat")var cleanValue = purify(rawValue);
If this clean name exists in our database above, save it as the detected brandif (brandContent[cleanValue]) {detectedKey = cleanValue;}
Stop searching since we found what we neededbreak;}}
Step 3: Find out what language the user is viewing the page in (e.g., "en-US" becomes "enUS")var lang = document.documentElement.lang.replace('-', '') || 'en_GB';
Step 4: Get the specific image and text for the detected Brand AND LanguageFallbacks: If language doesn't exist, use English. If brand doesn't exist, use standard English.var data = brandContent[detectedKey][lang] || brandContent[detectedKey]['en_GB'] || brandContent['standard']['en_GB'];
Step 5: Check if we haven't already drawn our custom block. If not, draw it!if (!document.querySelector('.custom-brand-display')) {This is the HTML code we will inject into the pageIt uses the classes we styled in the section abovevar contentToInject = `
${data.description}
`;
Find the "Apply Now" button container...var applyContainer = document.querySelector('.applylink.unify-button-container');...and paste our new HTML block right below itif (applyContainer) applyContainer.insertAdjacentHTML('afterend', contentToInject);}}
/
Also run it once immediately just in case the page is already fully loadedrenderBrandContent();})();
(function() {/ ==========================================================================SCRIPT 2: CLEANUP SCRIPT (Element Hider)Since Script 1 added a beautiful new image and description, we don't wantthe user to still see the raw, ugly text that says "Brand: LeanHeat" onthe page. This script finds that old text and makes it invisible.========================================================================== /
function hideBrandElement() {Find all text-bearing elements on the pagevar allLabels = document.querySelectorAll('.joblayouttoken-label, span, div, p, label');
Check each element one by oneallLabels.forEach(function(el) {If the element says exactly "Brand:"if (el.textContent && el.textContent.trim() === "Brand:") {Hide the word "Brand:"el.style.display = 'none';
Hide the value next to it (e.g., the word "LeanHeat")if (el.nextElementSibling) {el.nextElementSibling.style.display = 'none';}
If they are sitting inside a small container box by themselves, hide the box tooif (el.parentElement && el.parentElement.children.length
| Location | Ames, IA |
Browse dozens of recruiter approved resume templates, layouts and formats. Choose your favorite and make it your own in minutes.
Free resume templatesImprove your existing resume or start from scratch and create a standout, ATS-friendly resume. Add job-specific content, download and apply.
Free resume builder