Simple resource allocation
Effectively find and schedule the best project team, resolve staffing conflicts in real time, and forecast hiring needs.
Accurate project planning
Look across projects and track multiple teams, confidently schedule projects based on your team’s capacity, and forecast the project pipeline.
Effortless time tracking
Make it easy for your team to submit hours and keep them focused on what matters with pre-filled timesheets.
Dynamic reporting
Visualize complex data to spot project trends, understand performance across the business, and plan for growth.
Improve resource management efforts and drive business efficiency.
You're in good company
Over 1,100 companies across 46 different industries rely on 10,000ft to manage their teams across projects, accurately track time, and confidently forecast with real-time reporting.
Drive business forward with efficient resource management.
// WEB-7297
document.addEventListener('DOMContentLoaded', function () {
(function ($, Drupal, window) {
/**
* jQuery filter callback. Checks whether a link points to the 10k site.
*
* @param {integer} index
* The position of the element within the set being filtered.
* @param {HTMLAnchorElement} element
* The link being checked.
* @returns {boolean}
*/
var is10kSignup = function (index, element) {
// This try/catch is necessary because IE will throw a "Security Error"
// on an attempt to access the properties of certain links (such as
// anything with a username and password embedded in the URL).
try {
return (element.pathname === 'signup' || element.pathname === '/signup') && (element.hostname === 'app.10000ft.com');
}
catch (e) {}
return false;
};
/**
* Finds any links on the page that point the user to sign up for 10,000ft.
*
* @returns jQuery
* A jQuery object representing all signup links found on the page.
*/
var findSignupLinks = function () {
// Return all links in the document that point to the 10,000ft signup page.
return $('a').filter(is10kSignup);
};
/**
* Modifies an individual signup link, adding parameters from the URL.
*/
var addUrlCodes = function (link) {
var fromLink = Smartsheet.Utils.deparam(link.search);
var fromURL = Smartsheet.Utils.deparam(window.location.search);
// Only the following URL parameters should be replaced.
// Keys are the parameter names from the URL; values are the parameter
// names as they should appear in the links.
var map = {
"cid": "utm_campaign",
"agid": "utm_content",
"k": "utm_term",
"mtp": "utm_medium"
};
var toUse = {};
for (adCode in map) {
var analyticsCode = map[adCode];
if (typeof fromLink[analyticsCode] !== 'undefined') {
// The code already exists on the link.
if (fromLink[analyticsCode].indexOf('{') !== 0) {
// The code doesn't start with a brace, so it's real data. Don't overwrite.
continue;
}
}
if (typeof fromURL[adCode] === 'undefined') {
// The code does not exist on the current URL - nothing to persist.
continue;
}
toUse[analyticsCode] = fromURL[adCode];
// If we get to this point, meaning we are on a URL with any
// parameters to be replaced, pre-fill the utm_source parameter
// as well, to indicate that we're coming from an ad.
toUse['utm_source'] = 'google-cpc';
}
link.href = Smartsheet.Utils.addToQueryString(link.href, toUse);
};
var $links = findSignupLinks();
$links.each(function () {addUrlCodes(this);});
})(jQuery, Drupal, window);
});