Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/tts 341 #649

Merged
merged 9 commits into from
Nov 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .eleventy.js
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,16 @@ module.exports = function (config) {
</svg>`;
});

config.addFilter("numberWithCommas", function (number) {
// Ensure the input is a number
if (typeof number !== "number") {
return number;
}

// Format the number with commas
return number.toLocaleString();
});

// If BASEURL env variable exists, update pathPrefix to the BASEURL
if (process.env.BASEURL) {
pathPrefix = process.env.BASEURL;
Expand Down
5 changes: 2 additions & 3 deletions _data/assetPaths.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
"admin.map": "/assets/js/admin-77FHK54G.js.map",
"app.js": "/assets/js/app-U5OIPSUD.js",
"app.map": "/assets/js/app-U5OIPSUD.js.map",
"positions.js": "/assets/js/positions-WAZ5H3SP.js",
"positions.map": "/assets/js/positions-WAZ5H3SP.js.map",
"positions.js": "/assets/js/positions-DEBHCZTG.js",
"positions.map": "/assets/js/positions-DEBHCZTG.js.map",
"subnav.js": "/assets/js/subnav-3QHQ2EX4.js",
"subnav.map": "/assets/js/subnav-3QHQ2EX4.js.map",
"uswds.js": "/assets/js/uswds-init.js",
"styles.css": "/assets/styles/styles-WFQMHBOR.css",
"styles.map": "/assets/styles/styles-WFQMHBOR.css.map"
}
51 changes: 51 additions & 0 deletions _data/gs_salaries.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# This file was created based on OPM's General Schedule pay tables using REST OF
# UNITED STATES for the low and SAN JOSE-SAN FRANCISCO-OAKLAND, CA as the high.
---
GS-1:
min_salary: 25684
max_salary: 39991
GS-2:
min_salary: 28880
max_salary: 45243
GS-3:
min_salary: 31512
max_salary: 50989
GS-4:
min_salary: 35373
max_salary: 57235
GS-5:
min_salary: 39576
max_salary: 64037
GS-6:
min_salary: 44117
max_salary: 71390
GS-7:
min_salary: 49025
max_salary: 79331
GS-8:
min_salary: 54292
max_salary: 87851
GS-9:
min_salary: 59966
max_salary: 97034
GS-10:
min_salary: 66036
max_salary: 106853
GS-11:
min_salary: 72553
max_salary: 117400
GS-12:
min_salary: 86962
max_salary: 140713
GS-13:
min_salary: 103409
max_salary: 167336
GS-14:
min_salary: 122198
max_salary: 191900
GS-15:
min_salary: 143736
max_salary: 191900
SES:
min_salary: 147649
max_salary: 221900
12 changes: 10 additions & 2 deletions _includes/layouts/jointts/job/salary.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,18 @@
{% else %}
GS-{{ gs }}
{% endif %}
{% if min_payrange.size > 0 and max_payrange.size > 0 %}
({{ min_payrange }} - {{ max_payrange }})

{% if gs != "SES" %}
{% assign gs_salary_key = "GS-" | append: gs %}
{% else %}
{% assign gs_salary_key = gs %}
{% endif %}

{% if gs_salaries[gs_salary_key] %}
(${{ gs_salaries[gs_salary_key].min_salary | numberWithCommas }} - ${{ gs_salaries[gs_salary_key].max_salary | numberWithCommas }})
{% endif %}
</p>

<p>Your salary, including base and locality, will be determined upon selection, dependent on your actual duty location.
Please note the maximum salary available for the GS pay system is $191,900. For specific details on locality pay, please
visit <a href="https://www.opm.gov/policy-data-oversight/pay-leave/salaries-wages/" target="_blank" rel="noopener">OPM's Salaries & Wages page</a> or for a salary calculator
Expand Down
6 changes: 3 additions & 3 deletions _includes/services-picker.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ <h2 class="usa-card__heading">Products</h2>
</div>
{%- if page_data.url != '/services/products/' -%}
<div class="usa-card__footer">
<a href="{{ "/services/products" | url}}" class="usa-button width-full">Go</a>
<a href="{{ "/services/products" | url}}" class="usa-button width-full">Go to products</a>
</div>
{%- endif -%}
</div>
Expand All @@ -25,7 +25,7 @@ <h2 class="usa-card__heading">Platforms</h2>
</div>
{%- if page_data.url != '/services/platforms/' -%}
<div class="usa-card__footer">
<a href="{{ "/services/platforms" | url}}" class="usa-button width-full">Go</a>
<a href="{{ "/services/platforms" | url}}" class="usa-button width-full">Go to platforms</a>
</div>
{%- endif -%}
</div>
Expand All @@ -40,7 +40,7 @@ <h2 class="usa-card__heading">People</h2>
</div>
{%- if page_data.url != '/services/people/' -%}
<div class="usa-card__footer">
<a href="{{ "/services/people" | url}}" class="usa-button width-full">Go</a>
<a href="{{ "/services/people" | url}}" class="usa-button width-full">Go to people</a>
</div>
{%- endif -%}
</div>
Expand Down
2 changes: 1 addition & 1 deletion js/positions.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,73 +54,73 @@

jobList.style.paddingLeft = "3ch";

if (openJobs.length > 0) {
openJobs.forEach((job) => {
const listItem = document.createElement("li");
const link = document.createElement("a");

listItem.style.marginBottom = "0.25em";
link.style.color = "#005ea2";

// Set the link URL
let linkUrl = job.external_url !== "" ? job.external_url : job.url;
if (linkUrl === job.url) {
if (window.location.href.includes("pages.cloud.gov")) {
// Remove '/join/' from job.url if it exists and append to window.location.href
linkUrl = job.url.replace("/join/", "");
linkUrl = `${window.location.href}${linkUrl}`;
} else {
// Just return job.url if not on pages.cloud.gov
linkUrl = job.url;
}
}

link.href = linkUrl;

// Set the target attribute for external links to open in a new window
if (job.external_url !== "") {
link.target = "_blank"; // Open in a new window
}

// Set the text content to the job title.
link.textContent = job.title;

// Format the job closes date
const closesDate = new Date(job.closes).toLocaleDateString("en-US", {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric",
timeZone: "UTC",
});

// Add the open until message.
let openUntilMessage = "";
if (job.max_applications !== 0) {
openUntilMessage = ` (Open now through ${closesDate} at 11:59pm ET or until ${job.max_applications} applications have been received.)`;
} else {
openUntilMessage = ` (Open now through ${closesDate} at 11:59pm ET.)`;
}

// Append the link to the list item, and the list item to the list
listItem.appendChild(link);

// nosemgrep: typescript.react.security.audit.react-unsanitized-method.react-unsanitized-method
link.insertAdjacentHTML("afterend", openUntilMessage);
jobList.appendChild(listItem);

// Let's add the future info sessions under this item.
const infoSessions = job.info_sessions;
if (infoSessions && infoSessions.length > 0) {
renderInfoSessions(infoSessions, listItem, job.title);
}
});

openJobsSection.appendChild(jobList);
} else {
const noJobsText = document.createElement("p");
noJobsText.innerHTML =
'No open positions at this time. Sign up for <a href="/join/newsletter/">job alerts!</a>';
'No open positions at this time. <a href="/join/newsletter/">Sign up for job alerts!</a>';

Check warning on line 123 in js/positions.js

View workflow job for this annotation

GitHub Actions / Coverage annotations (🧪 jest-coverage-report-action)

🧾 Statement is not covered

Warning! Not covered statement

openJobsSection.appendChild(noJobsText);
}

Check warning on line 126 in js/positions.js

View workflow job for this annotation

GitHub Actions / Coverage annotations (🧪 jest-coverage-report-action)

🧾 Statement is not covered

Warning! Not covered statement

Check warning on line 126 in js/positions.js

View workflow job for this annotation

GitHub Actions / Coverage annotations (🧪 jest-coverage-report-action)

🌿 Branch is not covered

Warning! Not covered branch

Check warning on line 126 in js/positions.js

View workflow job for this annotation

GitHub Actions / Coverage annotations (🧪 jest-coverage-report-action)

🌿 Branch is not covered

Warning! Not covered branch
Expand Down
2 changes: 1 addition & 1 deletion pages/jointts/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ You can find a list of our upcoming sessions on the
- You will sign up for health benefits using GSA’s HR Links portal.
You will receive information and step-by-step guides during onboarding.
- If you would like to compare health plans in advance, you can view
[available plans](https://www.opm.gov/healthcare-insurance/healthcare/plan-information/compare-plans/)
[available healthcare plans](https://www.opm.gov/healthcare-insurance/healthcare/plan-information/compare-plans/)
at any time. There are many different options and plans available, so
you may find it helpful to compare plans prior to your start date.

Expand Down
6 changes: 3 additions & 3 deletions pages/jointts/hiring-process.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ culture. TTS does not conduct one-on-one conversations with candidates about
roles to ensure an equitable hiring process. Please attend one of our public
information sessions for these details.

A list of upcoming information sessions can be found on the [Jobs](/join) page.
A list of upcoming information sessions can be found on the [Jobs page](/join).

## Application

Expand All @@ -65,7 +65,7 @@ The interview process typically takes about a month, with approximately 3-4 inte

If you advance past the preliminary screen, we’ll invite you to a series of formal video interviews with various TTS team members. During these longer conversations, we will discuss your past work experience and how your skills and knowledge apply to TTS. Some positions may require a technical interview such as a coding exercise or leadership and collaboration interview before moving forward to the final round of interviews.

The final round of interviews always include a TTS Core Values interview which is intended to evaluate candidate alignment with [the organization’s values](https://handbook.tts.gsa.gov/about-us/tts-history/#our-values).
The final round of interviews always include a TTS Core Values interview which is intended to evaluate candidate alignment with [TTS' values](https://handbook.tts.gsa.gov/about-us/tts-history/#our-values).

We share copies of the interview guide, which includes the questions and interviewer names, in advance of your interviews. Sharing questions in advance provides you a more informed interview experience so you can better understand what we’re looking for.

Expand All @@ -75,7 +75,7 @@ We typically use Google Meet for our interviews. If you are not comfortable
or familiar with using Google Meet, let your recruiter know and they will
be happy to set up a test chat with you prior to your interviews! You can
also test your sound and video prior to your interview using
[these instructions](https://support.google.com/meet/answer/10409699?hl=en)
[Google's instructions on how to use Google Meet](https://support.google.com/meet/answer/10409699?hl=en)
.

In case there are technical issues with your video call, you will also be
Expand Down
1 change: 1 addition & 0 deletions pages/jointts/positions/FedRAMP-Security-Director.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ title: "TTS Office of Solutions: FedRAMP Security Director"
#🔻🔻🔻🔻🔻
opens: 2024-08-28
closes: 2024-09-01

# These dates are also used to determine whether a position is upcoming, open,
# or closed. Here's how we decide:
#
Expand Down
4 changes: 1 addition & 3 deletions pages/jointts/positions/position-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,8 @@ vacancies: "" # Put the number in quotes.

location: Anywhere in the U.S. (remote)

# Put the GS grade and pay range this position is being advertised at. For SES positions, set the value of gs to SES.
# Put the GS grade this position is being advertised at. For SES positions, set the value of gs to SES.
gs:
min_payrange: $
max_payrange: $

travel_requirement: Occasional travel may be required up to 10%-20% per year.

Expand Down
Loading