From 7f722314e4fc21419552ec27eb91e6f7e6347b71 Mon Sep 17 00:00:00 2001 From: marudor Date: Wed, 3 Jan 2018 01:19:31 +0100 Subject: frontend stuff with babel and webpack --- js/forms.js | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++ js/sticky-headers.js | 31 +++++++++++++++++ js/vendor.js | 31 +++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 js/forms.js create mode 100644 js/sticky-headers.js create mode 100644 js/vendor.js (limited to 'js') diff --git a/js/forms.js b/js/forms.js new file mode 100644 index 00000000..5aa4f25a --- /dev/null +++ b/js/forms.js @@ -0,0 +1,94 @@ +/** + * Sets all checkboxes to the wanted state + * + * @param {string} id Id of the element containing all the checkboxes + * @param {bool} checked True if the checkboxes should be checked + */ +function checkAll(id, checked) { + $("#" + id + " input[type='checkbox']").each(function () { + this.checked = checked; + }); +} + +/** + * Sets the checkboxes according to the given type + * + * @param {string} id The elements ID + * @param {list} shifts_list A list of numbers + */ +function checkOwnTypes(id, shifts_list) { + $("#" + id + " input[type='checkbox']").each(function () { + this.checked = $.inArray(parseInt(this.value), shifts_list) != -1; + }); +} + +/** + * @param {moment} date + */ +function formatDay(date) { + return date.format("YYYY-MM-DD"); +} + +/** + * @param {moment} date + */ +function formatTime(date) { + return date.format("HH:mm"); +} + +/** + * @param {moment} from + * @param {moment} to + */ +function setInput(from, to) { + var fromDay = $("#start_day"), fromTime = $("#start_time"), toDay = $("#end_day"), toTime = $("#end_time"); + + fromDay.val(formatDay(from)); + fromTime.val(formatTime(from)); + + toDay.val(formatDay(to)); + toTime.val(formatTime(to)); +} + +function setDay(days) { + days = days || 0; + + var from = moment(); + from.hours(0).minutes(0).seconds(0); + + from.add(days, "d"); + + var to = from.clone(); + to.hours(23).minutes(59); + + setInput(from, to); +} + +function setHours(hours) { + hours = hours || 1; + + var from = moment(); + var to = from.clone(); + + to.add(hours, "h"); + if (to < from) { + setInput(to, from); + return; + } + + setInput(from, to); +} + +$(function () { + /** + * Disable every submit button after clicking (to prevent double-clicking) + */ + $("form").submit(function (ev) { + $("input[type='submit']").prop("readonly", true).addClass("disabled"); + return true; + }); + + $(".dropdown-menu").css("max-height", function () { + return ($(window).height() - 50) + "px"; + }).css("overflow-y", "scroll"); +}); diff --git a/js/sticky-headers.js b/js/sticky-headers.js new file mode 100644 index 00000000..6e6a75e2 --- /dev/null +++ b/js/sticky-headers.js @@ -0,0 +1,31 @@ +/** + * Enables the fixed headers and time lane for the shift-calendar and datatables + */ +$(document).ready(function () { + if ($(".shift-calendar").length) { + var timeLanes = $(".shift-calendar .time"); + var headers = $(".shift-calendar .header"); + var topReference = $(".container-fluid .row"); + timeLanes.css({ + "position": "relative", + "z-index": 999 + }); + headers.css({ + "position": "relative", + "z-index": 900 + }); + $(window).scroll( + function () { + var top = headers.parent().offset().top; + var left = 15; + timeLanes.css({ + "left": Math.max(0, $(window).scrollLeft() - left) + "px" + }); + headers.css({ + "top": Math.max(0, $(window).scrollTop() - top + + topReference.offset().top) + + "px" + }); + }); + } +}); diff --git a/js/vendor.js b/js/vendor.js new file mode 100644 index 00000000..5857efb1 --- /dev/null +++ b/js/vendor.js @@ -0,0 +1,31 @@ +import 'imports-loader?module=>false!jquery'; +import 'imports-loader?define=>false!jquery-ui'; +import 'bootstrap'; +import 'imports-loader?define=>false&exports=>false!bootstrap-datepicker'; +import 'bootstrap-datepicker/js/locales/bootstrap-datepicker.de'; +import 'bootstrap-datepicker/dist/css/bootstrap-datepicker3.min.css'; +import 'imports-loader?this=>window!chart.js'; +import 'imports-loader?this=>window&define=>false&exports=>false!moment'; +import 'imports-loader?this=>window&define=>false&exports=>false!moment/locale/de'; +import './forms'; +import './sticky-headers'; +import 'icomoon/style.css'; + +$(function () { + moment.locale("%locale%"); +}); + +$(document).ready(function () { + if (typeof moment !== "undefined") { + $.each($(".moment-countdown"), function (i, e) { + var span = $(e); + var text = span.html(); + /* global moment */ + var timestamp = moment(parseInt(span.attr("data-timestamp") * 1000)); + span.html(text.replace("%c", timestamp.fromNow())); + setInterval(function () { + span.html(text.replace("%c", timestamp.fromNow())); + }, 1000); + }); + } +}); -- cgit v1.2.3-54-g00ecf