NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
"use strict" // ==UserScript== // @name ProjectCompanion timedialog // @namespace projectcompanion.keyboardextensions // @include https://host5.projectcompanion.com/ProjectCompanion/application/time/DlgTime.asp* // @version 1 // @grant GM_getValue // @grant GM_setValue // @grant unsafeWindow // ==/UserScript== window.addEventListener("load", function(event) { var projectPicker = document.getElementById("nProjectID_picker"); console.log("projectPicker", projectPicker); var billableTimeInput = document.getElementById("oBillableTimePlaceHolder").querySelector("input.timepicker-input"); billableTimeInput.addEventListener("keydown", event => { console.log("billableTimeInput.keydown", event); if(event.code === "Enter" || event.code === "NumpadEnter") { var g_billTimePicker = unsafeWindow["g_billTimePicker"]; var obj = g_billTimePicker.parseTime(billableTimeInput.value); console.log("billableTimeInput.enter", billableTimeInput, g_billTimePicker, obj); g_billTimePicker.setValue(obj.value, true); unsafeWindow["OnBnSaveAndClose"](); } }) window.addEventListener("keydown", event => { if(event.code === "Escape") { window.close(); } }) if(projectPicker) { projectPicker.addEventListener("change", event => { console.log("change", projectPicker.value); GM_setValue("nProjectID_picker_lastValue", projectPicker.value); }, false); if(location.search.startsWith("?RecID=0&")) { // New time var projectPickerObserver = new MutationObserver(mutations => { console.log("projectPickerObserver"); projectPicker.value = GM_getValue("nProjectID_picker_lastValue", projectPicker.value); unsafeWindow["g_projectCtrl"].onchange(); console.log("g_projectCtrl.onchange"),unsafeWindow["g_projectCtrl"]; }); projectPickerObserver.observe(projectPicker, { childList: true }); } var billableTimeObserver = new MutationObserver(mutations => { console.log("billableTimeObserver"); billableTimeInput.setSelectionRange(0, billableTimeInput.value.length); billableTimeInput.focus(); }); billableTimeObserver.observe(document.getElementById("prop_grid").querySelector("tbody.billable-time"), { attributes: true }); } console.log("GM done"); }, false);