Files
Facilitor/APPL/Localscripts/notes.js
Koen Reefman 5dbcc847e9 VNOG#84010 interne schermen met naam openen
svn path=/Website/trunk/; revision=64966
2024-06-04 12:52:40 +00:00

763 lines
30 KiB
JavaScript

/*
$Revision$
$Id$
File: notes.js
Description: clientside functions for shared/notes.inc
*/
function init_note(pnote_key)
{
window.noteediting = false;
if (pnote_key > -1 && FcltMgr.startEdit(window))
{
window.noteediting = true;
var textarea_elem = document.getElementById("note");
textarea_elem.focus();
textarea_elem.setSelectionRange(textarea_elem.value.length, textarea_elem.value.length);
}
$("#note").autogrow();
$(window).on("beforeunload", function() {
$(window.document).off("scroll");
if (window.noteediting)
{
FcltMgr.stopEdit(window);
}
});
if (pnote_key == -1 && $("#note").val() == "" && !window.noteediting) {
validateTextarea(false);
}
$("#note").on("keyup", function (e)
{
if (pnote_key == -1 && $("#note").val() == "" && window.noteediting)
{
if (FcltMgr.stopEdit(window))
{
window.noteediting = false;
validateTextarea(false);
lock_warning(false);
}
}
else if (!window.noteediting && (pnote_key > -1 || $("#note").val() != ""))
{
if (FcltMgr.startEdit(window))
{
window.noteediting = true;
validateTextarea(true);
lock_warning(true);
}
}
});
$("#note").on("input", function (e)
{
if (typeof sgMention9999 !== "undefined" && e.originalEvent.data === "@")
startMention();
});
$(".note-icon").on("keyup", function (e)
{
if (e.keyCode === 13) { /* Enter */
$(".note-icon").trigger("click");
}
});
$(".reply-container").on("click", function ()
{
var target = document.getElementById($(this).find(".reply-body").attr("data-target"));
if (!target || $(target).data("transitioning")) // Mogelijk bij een hidden & ge-quote notitie bijvoorbeeld
return;
$(target).data("transitioning", true);
var scrollTop = $(target).offset().top // Notitie-offset met top vd pagina
- (document.documentElement.clientHeight / 2) // Helft v/d notitie-pagina hoogte (zodat notitie in het midden komt)
+ (target.clientHeight / 2); // Helft v/d notitie-hoogte (zodat notitie exact in het midden komt)
$(document.documentElement).animate({ scrollTop: scrollTop }, 250, function () {
var $lowlight = $("<div class='lowlight-overlay'></div>");
$(target).find(".note-container").prepend($lowlight); // Dit is de *tijdelijke* lowlight overlay
$lowlight.one("animationend", function() {
$(this).remove(); // En hier is die weer weg
$(target).data("transitioning", false);
});
});
});
function triggerKeyup()
{
$("#note").keyup();
}
function triggerKeyupAfterPaste()
{
setTimeout( triggerKeyup )
}
$("#note").on("paste", triggerKeyupAfterPaste);
$(".note-toggler").on("click", toggleNotes);
function toggleNotes(event)
{
var $note_text = $(this).prev(".note-text");
$note_text.one("transitionend", function() { FcltMgr.resized(); });
if ($note_text.hasClass("note-autocollapse") || $note_text.hasClass("note-collapsed"))
{
$note_text.removeClass("note-autocollapse note-collapsed");
$(this).html(L("lcl_rs_truncate"));
}
else
{
$note_text.addClass("note-collapsed");
$(this).html(L("lcl_rs_truncated"));
}
}
function delayed(delay, fn)
{
if (window.timerID)
clearTimeout(window.timerID);
window.timerID = setTimeout(fn, delay);
}
if ($(".btn-group").length)
init_detailToggle(pnote_key);
$(window.document).on("scroll", function () { delayed(50, function() {
if ($(this).scrollTop() > 100)
$(".note-top-button").fadeIn(50).css("display", "flex");
else
$(".note-top-button").fadeOut(50);
})});
if (pnote_key > -1) {
// Potentieel toggles disablen als deze notitie op een verborgen notitie replied
var $currentReply = $(".note-textarea.note-edit .reply-body");
if ($currentReply.length) { // Ik bevat momenteel een reply
var replyFlag = $("#" + $currentReply.attr("data-target")).find(".note-container").attr("data-flag");
_disableToggles(replyFlag);
}
}
}
function init_detailToggle(pnote_key)
{
var toggle_selectors = { "notes": ".note-container:not(.note-type-tracking, .note-fe-hidden)",
"tracking": ".note-type-tracking",
"fehidden": ".note-fe-hidden" };
// var hasNotes = $(toggle_selectors["notes"]).length ? 1 : 0;
var hasTracking = $(toggle_selectors["tracking"]).length ? 1 : 0;
var hasMoreToggle = $(".note-toggler").length ? 1 : 0;
var hasHiddenNotes = $(toggle_selectors["fehidden"]).length ? 1 : 0;
var nf_arr = (window.localStorage.getItem("notitiefilter") || "").split(",");
// if (true) // Anders valt er niets te togglen, *edit; altijd relevante toggles tonen zodat je bijv. default tracking altijd kan onderdrukken
{
//if (false && hasMultipleToggles && hasNotes) // Vooralsnog uitgeschakeld
// $(".btn-group").append("<button id='notes-toggle-button' class='button selected' title='" + L("lcl_mld_frame_notes") + "'>" + I("fa-comment-alt-lines") + "</button>");
if (hasTracking)
$(".btn-group").append("<button id='tracking-toggle-button' class='button selected' title='" + L("fac_tracking") + "'>" + I("fa-clipboard-list") + "</button>");
if (hasMoreToggle)
{
var hasOnlyOneOpenNote = $(".note-toggler").prev(".note-text:not(.note-collapsed, .note-autocollapse)").length == $(".note-toggler").length;
$(".btn-group").append("<button id='more-toggle-button' title='" + L("lcl_rs_trunc_both") + "' class='button" + (hasOnlyOneOpenNote ? " selected" : "") + "'>" + I("fa-ellipsis-h") + "</button>");
}
if (hasHiddenNotes)
$(".btn-group").append("<button id='fehidden-toggle-button' title='" + L("lcl_mld_verborgen_FE") + "' class='button selected'>" + I("fa-lock") + "</button>");
/* Detailniveaus
0: toggle notities (niet fe_hidden)
1: toggle tracking
2: toggle ...Meer/...minder
3: toggle fe_hidden notes
*/
var doAnimation = false;
$(".btn-group > button").on("click", function () { detailToggleClickHandler.call(this, doAnimation); });
// Toepassen van de laatst gebruikte toestand van notitiefilter
// Initieel zijn alle buttons op 'selected' gezet en 'more' op ''.
// Als laatst gebruikte toestand afwijkt van de initiele toestand dan wordt dat hier gewijzigd.
//if (false && hasNotes && nf_arr[0] == "s") // Vooralsnog deze niet onload weg togglen, te hoog risico op misverstanden
// $(".btn-group > button#notes-toggle-button").click();
if (hasTracking && nf_arr[1] == "s")
$(".btn-group > button#tracking-toggle-button").click();
if (hasMoreToggle && !hasOnlyOneOpenNote && nf_arr[2] == "S")
$(".btn-group > button#more-toggle-button").click();
if (hasHiddenNotes && nf_arr[3] == "s")
$(".btn-group > button#fehidden-toggle-button").click();
doAnimation = true;
}
}
// Disabled de submit button als je nog niet mag submitten
function validateTextarea(valid) {
if (typeof valid === "undefined") {
valid = window.noteediting || $("#note").val() != "";
}
$(".note-icon.submit").toggleClass("disabled", !valid);
}
function lock_warning(set_lock)
{ // Alleen voor modules MLD en niet meer voor CNT
var module = $("#module").val();
if (module == "mld" /* || module == "cnt" */)
{
if (!set_lock)
{
$("#lock-warning").empty().hide();
}
else
{
var data = { req_info: "locked"
, module_key: $("#" + module + "_key").val()
};
var url = "./get_" + module + "_info_ajax.asp?req_info=locked";
$.post( url
, data
, function(d)
{
if (d.locked)
{
var tekst = I("fa-exclamation-triangle") + " "
+ safe.html(L("lcl_mld_melding_locked").format(d.locked_name, d.locked_date));
$("#lock-warning").show().html(tekst);
FcltMgr.resized();
}
else
{
switch (module)
{
case "cnt": var data = { cnt_key: $("#" + module + "_key").val() }; break;
case "mld": var data = { mld_key: $("#" + module + "_key").val() }; break;
}
protectRequest.dataToken(data);
$.post( "./" + module + "_lock.asp"
, data
, FcltCallback
, "json"
);
}
}
, "json"
);
}
}
}
function startMention()
{
var i = $("#note").prop("selectionStart");
if ($("#note").hasClass("mentioning") || // Ik ben al bezig
(i !== 1 && !/\s/.test($("#note").val().substring(i - 2, i - 1)))) { // Geen teken voor de '@' behalve spatie (of begin vd notitie)
return;
}
$("#mention_key_show").attr("sgCurrentValue", ""); // Om (huidige waarde) niet te tonen die achter is gebleven van de vorige mention
$("#note").data("start-index", i);
$("#note").addClass("mentioning");
$("#note").on("keydown.mention", navigateMention); // Voor desktop
$("#note").on("beforeinput.mention", changeMention); // Voor desktop & mobile (captured alleen echte input, en geen toetsaanslagen die niets doen, zoals Escape)
$("#note").on("input.mention", mention);
$("#note").on("blur.mention", stopMention);
$("#note").trigger("input.mention");
}
function stopMention()
{
if (!$("#note").hasClass("mentioning"))
return;
$("#note").data("start-index", 0);
$("#note").removeClass("mentioning");
$("#note").off(".mention"); // Alle eventhandlers in de 'mention'-namespace
$("#mention_key_show")[0].value = "";
var sgEvent = $.Event("keydown");
sgEvent.keyCode = -2; // Custom voor de mentions in suggest.js
$("#mention_key_show").trigger(sgEvent);
}
function navigateMention(event) {
if (event.keyCode == 27) {
stopMention();
} else if ([9, 13, 33, 34, 38, 40].indexOf(event.keyCode) != -1) { // = Speciale key met betekenis in suggest.js
$("#mention_key_show").trigger(event);
FcltMgr.stopPropagation(event);
if (event.keyCode == 9) {
event.preventDefault();
}
}
}
function changeMention(event)
{
if (event.originalEvent && event.originalEvent.data) {
let key = event.originalEvent.data;
let keyCode = key.charCodeAt(0);
if (keyCode == 32 || key == ".") { // Spatie / Punt
stopMention();
} else if (keyCode == 8) { // Backspace
mention(event);
}
}
}
function mention(event)
{
let startIndex = $("#note").data("start-index");
let searchStr = "";
let key;
let keyCode;
if (event.originalEvent)
{
let e = event.originalEvent;
if (e.inputType === "insertText" || e.inputType === "insertCompositionText") {
key = event.originalEvent.data;
keyCode = key.charCodeAt(0);
} else if (e.inputType === "deleteContentBackward") {
key = "Backspace";
keyCode = 8;
} else if (e.inputType === "insertLineBreak") {
key = "Enter";
keyCode = 13;
} else if (e.inputType === "insertFromPaste") {
key = "Dummy";
keyCode = 999;
} else { // De rest wordt niet ondersteund
return;
}
if (key == "Enter"
|| (startIndex !== undefined && $("#note").val().substring(startIndex - 1, startIndex) != "@") // De '@' is weggehaald
|| (keyCode == 8 && $("#note").prop("selectionStart") == startIndex) // De '@' is weggehaald met een backspace
|| $("#note").prop("selectionStart") < startIndex) // Er is een teken getypt voor de '@'
{
stopMention();
if (key == "@")
startMention();
return;
}
let stopIndex = $("#note").prop("selectionStart");
searchStr = $("#note").val().substring(startIndex, stopIndex);
}
if (searchStr === "")
searchStr = "*";
$("#mention_key_show")[0].value = searchStr;
let sgEvent = $.Event("keydown");
sgEvent.keyCode = keyCode;
$("#mention_key_show").trigger(sgEvent);
}
function mentionCallback(sgKey, sgShow, sgFld)
{
var startIndex = $("#note").data("start-index") || 0;
if (sgKey == -1 || startIndex == -1)
return false;
var note = $("#note").val();
var stopIndex = $("#note").prop("selectionStart");
var newCaretIndex = String(note.substr(0, startIndex - 1) + "[mention]" + sgKey + "|" + sgShow + "[/mention]").length;
stopMention();
note = note.substr(0, startIndex - 1)
+ "[mention]" + sgKey + "|" + sgShow + "[/mention]"
+ note.substr(stopIndex);
window.setTimeout(function () {
$("#note").val(note);
$("#note")[0].selectionStart = newCaretIndex;
$("#note")[0].selectionEnd = newCaretIndex;
$("#note")[0].focus();
}, 0); // Anders komt dit nog voor de #note-blur omdat je op de autocompletediv klikt
}
function detailToggleClickHandler(doAnimation)
{
var ANIMATION_DURATION = 100;
var toggle_subject = $(this).attr("id").replace("-toggle-button", "");
var toggle_selectors = { "notes": ".note-container:not(.note-type-tracking, .note-fe-hidden)",
"tracking": ".note-type-tracking",
"fehidden": ".note-fe-hidden" };
var $noteDiv = $(".notes-wrapper");
doAnimation = typeof doAnimation === "undefined" ? true : doAnimation; // default true
// 1 Animation at a time
if (doAnimation && toggle_subject in toggle_selectors && $noteDiv.children(":has(" + toggle_selectors[toggle_subject] + ")").is(":animated"))
return;
var animatie_tijd = (doAnimation ? ANIMATION_DURATION : 0);
$(this).toggleClass("selected").blur();
/* Deze functie is bedoeld om naast de 'selector' notes ook de overbodige datum wrappers te togglen */
function _toggleThese(selector) { // Werkt alleen voor selectors op de note-container
var $filtered_notes = $noteDiv.find(selector).parent(".note-wrapper");
if (!$filtered_notes.length)
return;
var currentlyVisible = $filtered_notes.is(":visible"); // allen of 1 maakt niet echt uit
var $toggle_these = $([]); // Lege start-set
var $dates = $noteDiv.children(".note-date-wrapper");
var $temp;
$dates.each(function(i, elem) {
$temp = $([]); // Empty set
$elem = $(elem);
if (i < $dates.length - 1)
$temp = $elem.nextUntil($dates.eq(i+1)); /* Verzamel alle notes tussen datum i en i+1 */
else // of alles na de laatste datum
{
$temp = $elem.nextUntil($noteDiv.children(".note-wrapper").last());
$temp = $temp.add($noteDiv.children(".note-wrapper").last()); /* inclusief de laatste */
}
// $temp is hier een jQuery collectie van alle divjes die tussen datum i en datum i+1 zitten
// if:
// Ik ben nu zichtbaar && mijn datum ook && ik heb geen notities van een ander type dan die ik toggle die zichtbaar zijn.
// of; ik ben nu niet zichtbaar && mijn datum ook niet && ik heb wel notities die ik aan toggle
if ((currentlyVisible && $elem.is(":visible") && !$temp.not(":has("+selector+")").is(":visible")) || // mijn typ
(!currentlyVisible && !$elem.is(":visible") && $temp.has(selector).length)) // Alles in de $temp zijn notes die voldoen aan 'selector'
{
$toggle_these = $toggle_these.add($elem); // Dan kan de datum ook togglen
}
$toggle_these = $toggle_these.add($temp.has(selector));
});
$toggle_these.animate({ height: "toggle" }, animatie_tijd);
}
var selected = $(this).hasClass("selected"); /* if selected => show */
var note_filter = selected ? "S" : "s";
var nf_arr = (window.localStorage.getItem("notitiefilter") || "").split(",");
switch (toggle_subject)
{
case "notes":
_toggleThese(toggle_selectors["notes"]);
nf_arr[0] = note_filter;
break;
case "tracking":
_toggleThese(toggle_selectors["tracking"]);
nf_arr[1] = note_filter;
break;
case "more":
if (!doAnimation) /* Remove transition if !doAnimation */
$noteDiv.find(".note-text").addClass("notransition");
if (selected)
$noteDiv.find(".note-collapsed, .note_autocollapse").next(".note-toggler").trigger("click");
else
$noteDiv.find(".note-text").not(".note-collapsed, .note_autocollapse").next(".note-toggler").trigger("click");
if (!doAnimation)
$(".notransition").each(function () { $(this).get(0).offsetHeight; /* Trigger a reflow, flushing the CSS changes */
$(this).removeClass("notransition"); });
nf_arr[2] = note_filter;
break;
case "fehidden":
_toggleThese(toggle_selectors["fehidden"]);
nf_arr[3] = note_filter;
break;
}
window.localStorage.setItem("notitiefilter", nf_arr.join(","));
setTimeout(function() {
FcltMgr.resized();
}, animatie_tijd+25);
}
async function note_submit(formid)
{
if ($("#note").prop("disabled") || $("#note").val().trim() == "")
return false;
validateTextarea(false);
if (iface.uploads.length) {
await Promise.all(iface.uploads);
}
var $form = formid
? $("form#" + formid)
: $("form[name=u2]");
var url = $form[0].action;
// Als ik naar de opdracht toe moet, submit dan naar opdr_edit_note_save.asp
if ($("#module").val() === "mld") { // Dat hoeft alleen aangepast te worden als we bij een melding zitten
if ($("[data-toggle-subject-role='4'] [data-toggle-type='8'].on").length === 1) { // Er is een uitvoerder aangevinkt
url = "opdr_edit_note_save.asp"
+ "?opdr_key=" + $("[data-toggle-subject-role='4']").has("[data-toggle-type='8'].on").data("opdr-key")
+ "&note_key=" + $("#note_key").val();
} else if ($(".reply-wrapper[data-module='opdr']").length === 1) { // Er is gereplied op een opdracht-notitie (bij de melding dus)
url = "opdr_edit_note_save.asp"
+ "?opdr_key=" + $(".reply-wrapper[data-module='opdr']").data("module_key")
+ "&note_key=" + $("#note_key").val();
}
}
$.post(url,
$form.serialize(),
FcltCallbackAndThen(note_submit_callback),
"json");
}
function cancel_note_edit() {
$("#note").prop("disabled", true); /* Om te voorkomen dat een nieuwe keyup het scherm weer in edit mode zet */
note_submit_callback({});
}
function doPrint(pkey, pmodule, urole)
{
var nf_arr = (window.localStorage.getItem("notitiefilter") || "").split(",");
var tracking = (nf_arr[1] == "S" ? 1 : 0);
if (!$("#tracking-toggle-button").length || $("#tracking-toggle-button:not(.selected)").length) // Geen tracking-toggle, of hij staat uit
tracking = 0;
FcltMgr.windowopen("./" + pmodule.toLowerCase() + "_show_note.asp?" + pmodule.toLowerCase() + "_key=" + pkey + "&outputmode=1" + (urole? "&urole=" + urole : "") + "&tracking=" + tracking, "printNotes" + pkey, "noopener,noreferrer");
}
function Upload(purl)
{
var params = {callback: UploadCallback};
FcltMgr.openModalDetail(purl, L("lcl_appendixes"), params );
}
function UploadCallback()
{
var params = {};
if ($("#note").val() != "")
params.appendurl = "tmp_note=" + encodeURIComponent($("#note").val()) + "&parent_reload=1";
FcltMgr.reload(params);
}
function persoonDetails(evt, perslid_key)
{
FcltMgr.stopPropagation(evt);
FcltMgr.openDetail("appl/fac/fac_user.asp?prs_key=" + perslid_key);
}
function notechange(purl)
{
if (FcltMgr.mayEdit(window))
{
window.location.href = purl;
}
}
function removeReply()
{
FcltMgr.stopPropagation();
$(".note-textarea .reply-wrapper").remove();
$(".note-option-group").find("[data-toggle-type], .name").removeClass("disabled");
$("#parent_key").val(-1);
$("textarea#note").blur().focus().trigger("keyup");
}
function _disableToggles(flag) {
for (let i = 1; i <= 4; i = i << 1) { // Itereert over de rollen (1, 2 & 4)
if (!(flag & i) && i !== 2) { // Ben ik zichtbaar voor deze partij? (FOBO ziet altijd alles)
let $wrapper = $(".note-option-group").filter("[data-toggle-subject-role=" + i + "]");
let $toggles = $wrapper.find("[data-toggle-type], .name") // Alle types, dus Zichtbaarheid, Notificeren (+ kindermeldingen) & Actie
.filter((S_mld_note_hidden_action2FE === 1 ? ":not([data-toggle-type=8])" : "*")); // Dan mag deze nog wel
$toggles.filter(".on").trigger("click"); // Uitzetten (functioneel)
$toggles.addClass("disabled"); // Uitzetten (visueel)
}
}
}
function noteReply(note_key, module_key, type)
{
type = type.toLowerCase();
// Oude opschonen
removeReply();
// Vink ook de 'actie bij uitvoerder' van de juiste uitvoerder aan
if ($("#module").val() == "mld" && type === "opdr") {
$("[data-toggle-subject-role='4']").filter("[data-opdr-key='" + module_key + "']").find("[data-toggle-type='8'].off").trigger("click", true);
}
if (note_key > 0) // Ik reply op een specifieke notitie
{
var infix = type == "mld" ? 1 : (type == "opdr" ? 2 : "");
var $thisNote = $("#note-" + infix + note_key);
/* Disabled de toggles voor elke geadresseerde waarvoor de note waarop word ge-replied onzichtbaar is */
_disableToggles($thisNote.find(".note-container").data("flag"));
$("#parent_key").val(note_key);
if (!$(".note-textarea > .reply-wrapper").length) {
var $reply = $("<div class='reply-wrapper'>\
<div class='reply-container'>\
<div class='reply-header'></div>\
<span class='reply-body'></span>\
</div>\
</div>");
$("textarea#note").before($reply);
}
$(".note-textarea > .reply-wrapper").attr("data-module", type)
.attr("data-module_key", module_key);
var $close_icon = $("<span class='default-clickable-icon' onClick='removeReply()'>" + I("fa-times", { fastyle: "fal" }) + "</span>");
var authorNode = $thisNote.find(".note-author")[0].cloneNode(true);
if ($thisNote.hasClass("note-type-self"))
authorNode.innerText = L("lcl_You");
$(".note-textarea div.reply-header").empty().append(authorNode).append($close_icon);
var org_note = $thisNote.find(".note-body").find(".note-text").text();
$(".note-textarea .reply-body").html(safe.html(org_note));
}
$("textarea#note").blur().focus().trigger("keyup");
}
function noteToggleHandler(e, firstClick) {
const SUBJECT_ROLE = {
0: "EXT",
1: "FE",
2: "BO",
4: "UITV"
};
FcltMgr.stopPropagation(e);
if ($(this).hasClass("disabled")) {
e.preventDefault(); // Door het [for]-attribuut wordt anders alsnog de checkbox getoggled
return;
}
var $wrapper = $(this).closest(".note-option-group"); // De toggles horende bij de persoon waarvoor getoggled wordt
$(this).toggleClass("on off");
var subject_role = $wrapper.attr("data-toggle-subject-role");
var noteToggleSubject = SUBJECT_ROLE[subject_role];
var newState = $(this).hasClass("on") ? "on" : "off";
var anySelected = $(this).siblings().addBack().filter(".on:not(.hidden)").length > 0;
var type = parseInt($(this).attr("data-toggle-type"));
if (noteToggleSubject == "FE" && type == 8 && e.originalEvent && anySelected && S_mld_note_hidden_action2FE == 1) {
// In deze uitzondering hoeven we het oogje niet mee te vinken
} else if (noteToggleSubject != "BO" && (e.originalEvent || firstClick) && anySelected) { // *iets* aangevinkt? Dan ook zichtbaar
$(this).siblings("[data-toggle-type='1'].off").trigger("click");
} else if (noteToggleSubject != "BO" && !anySelected) {
$(this).siblings("[data-toggle-type='1'].on.hidden").trigger("click"); // *alles* uitgevinkt? Dan ook onzichtbaar
}
var visible = type == 1 ? newState : $wrapper.find("[data-toggle-type=1].on").length === 1;
$wrapper.toggleClass("anySelected", visible);
switch (type) {
case 1: /* Zichtbaarheid */
if (newState === "off") { // Als ik zichtbaarheid uitschakel ..
$(this).nextAll("[data-toggle-type][data-toggle-type!=8].on").trigger("click"); // .. schakel dan ook de notificaties uit (alles behalve actie)
if (S_mld_note_hidden_action2FE == 0) {
$wrapper.find("[data-toggle-type=8].on").trigger("click"); // .. schakel dan ook het actie vinkje uit
}
// Schakel "externe notificeren" ook uit
$("[data-toggle-subject-role='0']").find("[data-toggle-type='2'].on").trigger("click");
}
break;
case 2: /* Notificeren */
if (newState === "on" && noteToggleSubject == "EXT") { // Externe melder notificeren? -> dan ook zichtbaarFE aan
var $wrapperFE = $("[data-toggle-subject-role='1']");
$wrapperFE.find("[data-toggle-type='1'].off").trigger("click");
}
if (newState === "off") { // Als ik 'notificeren' uitschakel ..
if (noteToggleSubject == "FE" && S_mld_note_hidden_action2FE == 1) {
/* Uitzondering; je mag zonder zichtbaarheid/notificatie toch de actie zetten */
} else {
$wrapper.find("[data-toggle-type='8'].on").trigger("click"); // .. dan ook de 'actie bij' uitvinken
}
}
break;
case 8: /* Actie ! */
if (newState === "on") { // Als ik de actie zet ..
if (noteToggleSubject == "FE" && S_mld_note_hidden_action2FE == 1) {
/* Uitzondering; je mag zonder zichtbaarheid/notificatie toch de actie zetten */
} else {
$wrapper.find("[data-toggle-type='2'], [data-toggle-type='4']").filter(".off").trigger("click"); // .. dan ook "melder notificeren" & "melders kindermeldingen notificeren" aanzetten
}
}
// Deze is type radio (max 1 actief), dus schakel anderen (BO uitgezonderd) uit
if (noteToggleSubject == "UITV" && newState === "on") {
$wrapper.siblings(":not([data-toggle-subject-role='2'])").find("[data-toggle-type='8'].on").trigger("click");
}
if ($("#module").val() == "mld" && noteToggleSubject == "UITV")
{ // Hier de toggle die de reactie op een opdr geeft
if (newState == "on" && e.originalEvent) {
noteReply(0, $wrapper.attr("data-opdr-key"), "OPDR");
} else {
removeReply();
}
}
break;
}
}
$(function()
{
/* Notitie-optie toggles */
$(".note-option-group").on("click", function (e)
{
FcltMgr.stopPropagation(e);
// Is het niet 1 van deze? Dan is er een specifiek icoontje geklikt en hoeven we hier niets te doen
if (e.target === e.currentTarget || $(e.target).is("span.name"))
{ // Click het 'zichtbaarheid'-icoon aan als die zichtbaar & enabled is
$(this).find("[data-toggle-type=1]:not(.hidden, .disabled)").trigger("click", true);
}
});
/* (Individuele) notitie-optie toggles */
$("[data-toggle-type]").on("click", noteToggleHandler);
$(".bb-image").on("click", e => {
if (e.currentTarget.src) {
iface.fullscreen_image(e.currentTarget.src);
}
}).on("mouseenter", (e) => {
if (e.target.width === e.target.naturalWidth && e.target.height === e.target.naturalHeight) {
$(e.target).css("cursor", "pointer");
} else {
$(e.target).css("cursor", "zoom-in");
}
});
/* Klik op de filenaam om de bb-code in te voegen, of op het kruisje om de bijlage te verwijderen */
$(".edit-note .note-attachments").on("click", (e) => {
if ($(e.target).hasClass("note-attachment-image")) {
iface._insert_bb_code("note", "img", e.target.innerText);
} else if ($(e.target).hasClass("note-attachment-delete")) {
let fileName = $(e.target).prev(".note-attachment-name").text();
let url = e.target.getAttribute("data-delete-url");
FcltMgr.confirm(
L("lcl_delete") + " " + fileName + "?",
function() {
let data = {};
protectRequest.dataToken(data);
$.post(
url,
data,
FcltCallbackAndThen(function () {
let note = $("#note").val();
$("#note").val(note.split("[img]" + fileName + "[/img]").join(""));
$(e.target).parent(".note-attachment").remove();
$("#note").trigger("keyup");
validateTextarea();
})
);
}
);
}
});
});