FCLT#91046 LCL's zijn HTML safe maar niet String-safe of SQL-safe

svn path=/Website/trunk/; revision=71041
This commit is contained in:
Erik Groener
2025-11-24 15:49:07 +00:00
parent 9c10b5fb40
commit 139b7ded01
29 changed files with 57 additions and 56 deletions

View File

@@ -110,7 +110,7 @@ function L(p_lcl)
window.facilitor.show_phonebook = function(data, textStatus)
{
// Alle styling moet nog via classes
var closer = "<span onclick='$(\"#phonebookdetails\").hide()' style='float: right; cursor: pointer' title='<%=L("lcl_close_window")%>'>x</span>"
var closer = "<span onclick='$(\"#phonebookdetails\").hide()' style='float: right; cursor: pointer' title='<%=safe.htmlattr(L("lcl_close_window"))%>'>x</span>"
if (window.facilitor.phonebook_options.detailurl)
{
var jumpto = window.facilitor.phonebook_options.detailurl;

View File

@@ -231,7 +231,7 @@ checkUserAgent(); // heeft device capability bits gezet
%></div>
<% } %>
<div class="form-floating loginname">
<input class="form-control required" type="text" maxlength="256" id="visname" name="vis_name" autocomplete="off" value="<%=safe.jsstring(prs_email)%>" placeholder="<%=L("lcl_vis_log_name")%>">
<input class="form-control required" type="text" maxlength="256" id="visname" name="vis_name" autocomplete="off" value="<%=safe.jsstring(prs_email)%>" placeholder="<%=safe.htmlattr(L("lcl_vis_log_name"))%>">
<label for="visname"><%=L("lcl_vis_log_name")%></label>
</div>

View File

@@ -70,11 +70,11 @@ function bez_edit_bezoekers(afspraak_key, afspraak_begin, afspraak_eind, loc_key
{ %>
<th><!--contact--></th>
<% } %>
<th><%=L("lcl_vis_name")%></th>
<th><%=L("lcl_vis_company")%><%=S("bez_sel_internpersoon") == 1? "/" + L("lcl_department") : ""%></th>
<th><%=safe.html(L("lcl_vis_name"))%></th>
<th><%=safe.html(L("lcl_vis_company"))%><%=S("bez_sel_internpersoon") == 1? "/" + safe.html(L("lcl_department")) : ""%></th>
<% if (S("vis_remark") == 1 || S("vis_remark") == 2)
{ %>
<th><%=L("lcl_vis_remark")%></th>
<th><%=safe.html(L("lcl_vis_remark"))%></th>
<% } %>
<th>
<% if (S("vis_parking_key") != -1 && this_bez_bez.canWritePrk)
@@ -184,7 +184,7 @@ function bez_edit_bezoekers(afspraak_key, afspraak_begin, afspraak_eind, loc_key
<td align="center">
<% if (oRs("bez_bezoekers_done").Value == null)
{ %>
<span onclick="deleteVisit(<%=next_vis%>)" title="<%=L("lcl_delete")%>"><%=I("fa-trash-alt")%></span>
<span onclick="deleteVisit(<%=next_vis%>)" title="<%=safe.htmlattr(L("lcl_delete"))%>"><%=I("fa-trash-alt")%></span>
<%
} else {
anydone = true;

View File

@@ -1749,7 +1749,7 @@ if (scenario_key != 0)
%>
</table>
</div>
<div id="fgmenutoggler" class='toggler' onClick="toggleLayout(this)" title='<%=L("lcl_toggler")%>'>
<div id="fgmenutoggler" class='toggler' onClick="toggleLayout(this)" title='<%=safe.htmlattr(L("lcl_toggler"))%>'>
</div>
@@ -1794,7 +1794,7 @@ if (scenario_key != 0)
</iframe>
<% } %>
</div>
<div id="fgtabtoggler" class='toggler' onClick="toggleTabLayout(this)" title='<%=L("lcl_toggler")%>'><%=I("fa-caret-down", { fastyle: "fas" })%></div>
<div id="fgtabtoggler" class='toggler' onClick="toggleTabLayout(this)" title='<%=safe.htmlattr(L("lcl_toggler"))%>'><%=I("fa-caret-down", { fastyle: "fas" })%></div>
<%
if (scenario_key > 0)

View File

@@ -129,14 +129,14 @@
// session ended due to inactivity
if (data.end == 1)
{
add2chat([{safe_message: "<%=L('lcl_chat_inactive_ended')%>", sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_system')%>", inactive: true, mine: false}]);
add2chat([{safe_message: L('lcl_chat_inactive_ended'), sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_system'), inactive: true, mine: false}]);
$("#chat, span.sendbutton").attr('readonly', true);
return false; // stop polling notify
}
// session aborted by user
else if (data.end == 2)
{
add2chat([{safe_message: "<%=L('lcl_chat_user_ended')%>", sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_system')%>", aborted: true, mine: false}]);
add2chat([{safe_message: L('lcl_chat_user_ended'), sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_system'), aborted: true, mine: false}]);
$("#chat, span.sendbutton").attr('readonly', true);
return false; // stop polling notify
}
@@ -152,18 +152,18 @@
ago15.setMinutes(ago15.getMinutes() - 15);
if (!ended && last_alive < ago15.getTime())
{
add2chat([{safe_message: "<%=L("lcl_chat_ended")%>", sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_system')%>", inactive: true, system: true, mine: false}]);
add2chat([{safe_message: L("lcl_chat_ended"), sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_system'), inactive: true, system: true, mine: false}]);
$("#chat, span.sendbutton").attr('readonly', true);
notify.end(chatSendchannelId, chatReadchannelId, 1); // session ended due to inactivity
ended = true;
return false;
} else if (!warning_2 && last_alive < ago14.getTime())
{
add2chat([{safe_message: "<%=L("lcl_chat_inactive_warning_2")%>", sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_system')%>", system: true, mine: false}]);
add2chat([{safe_message: L("lcl_chat_inactive_warning_2"), sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_system'), system: true, mine: false}]);
warning_2 = true;
} else if (!warning_1 && last_alive < ago10.getTime())
{
add2chat([{safe_message: "<%=L("lcl_chat_inactive_warning_1")%>", sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_system')%>", system: true, mine: false}]);
add2chat([{safe_message: L("lcl_chat_inactive_warning_1"), sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_system'), system: true, mine: false}]);
warning_1 = true;
}
}
@@ -194,7 +194,7 @@
fcltlinks: 1,
input: msg
}, function (json) {
add2chat([{ safe_message: json.fclthtml, sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_selfname')%>", mine: true }]);
add2chat([{ safe_message: json.fclthtml, sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_selfname'), mine: true }]);
chat_dosend(msg);
});
}

View File

@@ -114,7 +114,7 @@ Application.UnLock();
.data("wantid", wantId)
.data("prs_key", wanting.prs_key)
.data("prs_naam", wanting.naam)
.attr("title", "<%=L('lcl_chat_accept_action')%>")
.attr("title", "<%=safe.htmlattr(L('lcl_chat_accept_action'))%>")
.click(accept_chat);
html_queue.append(html_row);
}

View File

@@ -149,18 +149,18 @@ Application.UnLock();
{
if (init)
{
$("#chatmsg").text("<%=L("lcl_chat_initialmsg")%>");
$("#chatmsg").text(L("lcl_chat_initialmsg"));
$("span.spinnerbutton, span.cancelbutton").hide();
$("#initialmsg").autogrow().focus().on("keydown", handleEnter);
}
else
{
$("#chatmsg").text("<%=L("lcl_chat_waiting")%>");
$("#chatmsg").text(L("lcl_chat_waiting"));
}
}
else
{
$("#chatmsg").text("<%=L("lcl_chat_no_listeners")%>");
$("#chatmsg").text(L("lcl_chat_no_listeners"));
$("div.text-wrapper").hide();
}
FcltMgr.resized();
@@ -181,13 +181,13 @@ Application.UnLock();
<div class="chatinitialmsg" id="chatmsg"></div>
<div class="text-wrapper">
<textarea id="initialmsg" class="fldtxt" placeholder='<%=L("lcl_chat_initialmessage")%>'></textarea>
<span class="sendbutton" onclick="chat_ask()" title="<%=L("lcl_chat_waiting").format(wantchannelId)%>">
<span class="sendbutton" onclick="chat_ask()" title="<%=safe.htmlattr(L("lcl_chat_waiting")).format(wantchannelId)%>">
<%=I("fa-paper-plane fa-lg")%>
</span>
<span class="spinnerbutton" title="<%=L("lcl_chat_waiting").format(wantchannelId)%>">
<span class="spinnerbutton" title="<%=safe.htmlattr(L("lcl_chat_waiting")).format(wantchannelId)%>">
<%=I("fa-fclt-spinner fa-lg fas")%>
</span>
<span class="cancelbutton" onclick="chat_remove()" title="<%=L("lcl_chat_waiting").format(wantchannelId)%>">
<span class="cancelbutton" onclick="chat_remove()" title="<%=safe.htmlattr(L("lcl_chat_waiting")).format(wantchannelId)%>">
<%=I("fa-times fa-lg")%>
</span>
</div>

View File

@@ -816,7 +816,7 @@ if (S("PerformInterval")>0 && user.checkAutorisation("WEB_PERMON", true)) { %>
<div class="ui-tabs-submenu" style="display: none"><ul class="menuDropDown"></ul></div>
</div>
<div id="menudivider" class='ui-layout-resizer' onclick='toggleMenu()'>
<div id="menutoggler" class='toggler' onclick='toggleMenu()' title='<%=L("lcl_toggler")%>'><%=I("fa-caret-left", {fastyle: "fas"})%></div>
<div id="menutoggler" class='toggler' onclick='toggleMenu()' title='<%=safe.htmlattr(L("lcl_toggler"))%>'><%=I("fa-caret-left", {fastyle: "fas"})%></div>
</div><%
}
%> <div id="maintabs">

View File

@@ -161,12 +161,12 @@ function prettyJson(j)
%>
<input type='hidden' name='previewmode'>
<input type='hidden' name='submitting'>
<tr><th><%=L("lcl_fac_template_name")%></th>
<tr><th><%=safe.htmlattr(L("lcl_fac_template_name"))%></th>
<th>&nbsp;</th>
<th><%=L("lcl_fac_template_default")%></th>
<th><%=L("lcl_fac_template_newval")%>&nbsp;<input type='button' class='button' value='<%=L("lcl_paste")%>' onclick='doImportcss()'></th>
<th><%=safe.htmlattr(L("lcl_fac_template_default"))%></th>
<th><%=safe.htmlattr(L("lcl_fac_template_newval"))%>&nbsp;<input type='button' class='button' value='<%=safe.htmlattr(L("lcl_paste"))%>' onclick='doImportcss()'></th>
<th>&nbsp;</th>
<th><%=L("lcl_fac_template_curval")%>&nbsp;<input type='button' class='button' value='<%=L("lcl_transport")%>' onclick='doExportcss()'></th></tr>
<th><%=safe.htmlattr(L("lcl_fac_template_curval"))%>&nbsp;<input type='button' class='button' value='<%=safe.htmlattr(L("lcl_transport"))%>' onclick='doExportcss()'></th></tr>
<%
for (itm in FCLTHeader.defaultTemplate)
{

View File

@@ -63,7 +63,7 @@ if (Session("login_by_fallback")) {
function fac_submit()
{
if (!$("[name=flike_oordeel]:checked").val()) {
FcltMgr.alert("<%=L('lcl_fac_like_geenoordeel')%>");
FcltMgr.alert(L("lcl_fac_like_geenoordeel"));
return false;
}
<% if (ANON) { %>

View File

@@ -60,7 +60,7 @@ FCLTHeader.Requires({plugins:["jQuery", "suggest"],
function edit_photo(img)
{
var url = "<%=protectQS.create("../../appl/shared/BijlagenForm.asp?module=SML&key=" + prs_key)%>";
FcltMgr.openModalDetail(url, "<%=L("lcl_mrk_upload_foto")%>",
FcltMgr.openModalDetail(url, L("lcl_mrk_upload_foto"),
{ callback: FcltMgr.reload } );
}

View File

@@ -128,7 +128,7 @@ var fac_usrrap = usrrap.fac_usrrap_info(usrrap_key);
colname="<%=safe.htmlattr(col.column_name)%>"
style="display:none;">
</select>
<span onclick="FillListbox('<%="fclt_f_colvalue" + nr_charcols%>','<%=col.column_name%>', <%=usrrap_key%>)" class='facautoreport far-alignment' title="<%=L("lcl_usrrap_beware")%>" id="<%="fclt_f_colvalue"+ nr_charcols+"_q"%>"><%=I("fa-comment fa-lg")%></span>
<span onclick="FillListbox('<%="fclt_f_colvalue" + nr_charcols%>','<%=col.column_name%>', <%=usrrap_key%>)" class='facautoreport far-alignment' title="<%=safe.htmlattr(L("lcl_usrrap_beware"))%>" id="<%="fclt_f_colvalue"+ nr_charcols+"_q"%>"><%=I("fa-comment fa-lg")%></span>
<input type="hidden" id="<%="fclt_f_colname" + nr_charcols%>"
name="<%="fclt_f_colname" + nr_charcols%>" value="<%=col.column_name%>">
</td>

View File

@@ -57,6 +57,7 @@ if (!oRs.eof)
if (oRs(0).value < 9)
alg_level_write_objman = true;
}
oRs.Close();
%>
<html>

View File

@@ -43,7 +43,7 @@ function fnrowData(oRs)
{
var insData = JSON.parse(row.getAttribute("ROWDATA"));
var url = "appl/INS/ins_verbruik_history.asp?urole=fe&insdeelkey=" + insData.insdeelkey + "&consumption_reg=1&inskenmerkkey=" + insData.inskenmerkkey + "&inskenmerkdeelkey=" + insData.inskenmerkdeelkey;
FcltMgr.openDetail(url, "<%=L("lcl_history")%>" + ' ' + insData.ins_deel_oms);
FcltMgr.openDetail(url, L("lcl_history") + " " + insData.ins_deel_oms);
}
function doSubmit()

View File

@@ -147,8 +147,8 @@
</tr>
<tr>
<td align="right" colspan="2">
<input type="button" onclick="doSubmit('FAC_USRDATA_EIGENAAR')" value='<%=L("lcl_change")%>'>
<input type="button" onclick="doReset()" value='<%=L("lcl_reset")%>'>
<input type="button" onclick="doSubmit('FAC_USRDATA_EIGENAAR')" value='<%=safe.htmlattr(L("lcl_change"))%>'>
<input type="button" onclick="doReset()" value='<%=safe.htmlattr(L("lcl_reset"))%>'>
</td>
</tr>
</table>

View File

@@ -147,8 +147,8 @@
</tr>
<tr>
<td align="right" colspan="2">
<input type="button" onclick="doSubmit('FAC_USRDATA_VAARDIGHEID')" value='<%=L("lcl_change")%>'>
<input type="button" onclick="doReset()" value='<%=L("lcl_reset")%>'>
<input type="button" onclick="doSubmit('FAC_USRDATA_VAARDIGHEID')" value='<%=safe.htmlattr(L("lcl_change"))%>'>
<input type="button" onclick="doReset()" value='<%=safe.htmlattr(L("lcl_reset"))%>'>
</td>
</tr>
</table>

View File

@@ -133,8 +133,8 @@
</tr>
<tr>
<td align="right" colspan="2">
<input type="button" onclick="doSubmit('FAC_USRDATA_POSTCODEGLN')" value='<%=L("lcl_change")%>'>
<input type="button" onclick="doReset()" value='<%=L("lcl_reset")%>'>
<input type="button" onclick="doSubmit('FAC_USRDATA_POSTCODEGLN')" value='<%=safe.htmlattr(L("lcl_change"))%>'>
<input type="button" onclick="doReset()" value='<%=safe.htmlattr(L("lcl_reset"))%>'>
</td>
</tr>
</table>

View File

@@ -328,7 +328,7 @@ oRs.Close();
<%=L("lcl_mld_objects_available")%>
</br>
<label for="fldobjPossible"><%=L("lcl_mld_objects")%></label>
<input id="autofilter" type="text" placeholder="<%=L('lcl_autofilter')%>">
<input id="autofilter" type="text" placeholder="<%=safe.htmlattr(L('lcl_autofilter'))%>">
<%
var sql = get_objecten_sql(alg_key, alg_niveau, prs_key, null, stdmld_key, {extracode: "UITV"});
FCLTselector("fldobjPossible",
@@ -353,11 +353,11 @@ oRs.Close();
</div>
<div class="col-1 cnt-scope-buttons">
<span class="mover" onclick="moveRight()" title="<%=L("lcl_mld_object_add")%>"><%=I("fa-arrow-square-right")%></span>
<span class="mover" onclick="moveRight()" title="<%=safe.htmlattr(L("lcl_mld_object_add"))%>"><%=I("fa-arrow-square-right")%></span>
</div>
<div class="col-1 cnt-scope-buttons">
<span class="mover" onclick="removeObj()" title="<%=L("lcl_mld_object_remove")%>"><%=I("fa-arrow-square-left")%></span><br><br>
<span class="mover" onclick="removeAllObj()" title="<%=L("lcl_mld_object_remove_all")%>"><%=I("fa-trash-alt")%></span>
<span class="mover" onclick="removeObj()" title="<%=safe.htmlattr(L("lcl_mld_object_remove"))%>"><%=I("fa-arrow-square-left")%></span><br><br>
<span class="mover" onclick="removeAllObj()" title="<%=safe.htmlattr(L("lcl_mld_object_remove_all"))%>"><%=I("fa-trash-alt")%></span>
</div>
<div class="col-5">
@@ -366,7 +366,7 @@ oRs.Close();
<%=L("lcl_mld_objects_selected")%>
</br>
<label for="fldobjExist"><%=L("lcl_mld_obj_and_subobj")%></label>
<input id="autofilterExist" type="text" placeholder="<%=L('lcl_autofilter')%>">
<input id="autofilterExist" type="text" placeholder="<%=safe.htmlattr(L('lcl_autofilter'))%>">
<%
sql = "SELECT 1 FROM DUAL WHERE 1=0"; // We krijgen ze clientside door via dialogArguments
FCLTselector("fldobjExist", sql, {startmulti: true, size: 10});

View File

@@ -259,13 +259,13 @@ oRs.Close();
if (alleen_afgelopen_maand)
{ // We voegen nog een checkbox toe in de confirm.
params = { ishtmlsafe: true};
var mytext = "<%=L("lcl_mlduren_approve")%> ?<br>"
var mytext = L("lcl_mlduren_approve") + " ?<br>"
+ "<input type='checkbox' id='laatstemaand' name='laatstemaand' checked >"
+ "<%=L('lcl_mld_opdr_hours_approve_monthly')%>"
+ L('lcl_mld_opdr_hours_approve_monthly')
}
else
{
var mytext = (goedkeuren ? "<%=L("lcl_mlduren_approve")%>" : "<%=L("lcl_mlduren_close")%>") + "?";
var mytext = (goedkeuren ? L("lcl_mlduren_approve") : L("lcl_mlduren_close")) + "?";
}
FcltMgr.confirm( mytext

View File

@@ -37,7 +37,7 @@ var subject = L("lcl_fin_invoice") + " " + fin_key;
// draft, kopie van bes
function fin_approve()
{
if (confirm('<%=L("lcl_fin_approve_factuur").format(fin_key)%>'))
if (confirm(L("lcl_fin_approve_factuur").format(fin_key)))
{
var data = { fin_key: <%=fin_key%>
};

View File

@@ -615,7 +615,7 @@ if (!rsv.verwijderd) // geen script nodig als reservering verwijderd is.
{
var startDate = new Date(parseInt($("#date_from").val()));
var isHoliday = cal_isVrijeDag(startDate) || cal_isWeekend(startDate);
FcltMgr.confirm( "<%=L("lcl_holiday")%>"
FcltMgr.confirm( L("lcl_holiday")
, { autoconfirm: !isHoliday
, fncancel: function() { return false; }
}

View File

@@ -430,9 +430,9 @@ if (rsv_ruimte_key == -1)
// Display warning: Selected date is not a workday
if (organisation247Type == 2 && isHoliday) {
FcltMgr.alert("<%=L("lcl_holiday_strict")%>");
FcltMgr.alert(L("lcl_holiday_strict"));
} else {
FcltMgr.confirm("<%=L("lcl_holiday")%>", {
FcltMgr.confirm(L("lcl_holiday"), {
autoconfirm: !isHoliday || organisation247Type == 1,
fncancel: function() { return false; }
}, fn_res_next1_confirm);

View File

@@ -124,7 +124,7 @@ else
if (!isNaN(bKey) && bKey > 0)
{
var url='../prj/edit_Bezetting.asp?pwp_key=' + bKey;
FcltMgr.openModalDetail(url, "<%=L("lcl_prj_graphics")%>",
FcltMgr.openModalDetail(url, L("lcl_prj_graphics"),
{ callback: function (data)
{ if (data.refresh)
parent.myRefresh(); // Er is misschien iets veranderd.

View File

@@ -167,7 +167,7 @@ else
function onClickRuimte(row)
{
var url='../prj/edit_room.asp?room_key=' + row.getAttribute("ROWKEY");
FcltMgr.openModalDetail(url, "<%=L("lcl_prj_graphics")%>",
FcltMgr.openModalDetail(url, L("lcl_prj_graphics"),
{ callback: function (data) { if (data.refresh)
parent.myRefresh(); // Er is misschien iets veranderd.
// Pas plaatje aan. En indirect onszelf.

View File

@@ -91,7 +91,7 @@ else
function editNote(notekey)
{
var url = '../prj/edit_note.asp?scenario_key=<%=scenario_key%>&vKey=<%=floorKey%>&note_key=' + notekey;
FcltMgr.openModalDetail(url, "<%=L("lcl_prj_scenario_note_omschrijving")%>", { callback: parent.myRefresh, width: 600});
FcltMgr.openModalDetail(url, L("lcl_prj_scenario_note_omschrijving"), { callback: parent.myRefresh, width: 600});
}
function onClickNote(row)

View File

@@ -69,7 +69,7 @@ FCLTHeader.Requires({plugins:["jQuery", "kenmerk"],
var key = 0;
var prs_key = "";
var url = "load_kenmerk.asp?disc=" + "&urole=bo" + "&advanced=1" + "&hasFilter=1" + "&link_key=" + prs_key + "&niveau=" + lvl;
showKenmerkModal(url, "<%=L("lcl_properties")%>");
showKenmerkModal(url, L("lcl_properties"));
}
$(function()
{

View File

@@ -97,7 +97,7 @@ oRs.Close();
function dloc_locations()
{
var url = "../prs/prsdienstlocs.asp?bdkey=<%=dloc_key%>&dkey=<%=prs_dnstkey%>&bkey=<%=prs_bdrkey%>";
FcltMgr.openModalDetail(url, "<%=L("lcl_prs_companies_dienst_locs")%>");
FcltMgr.openModalDetail(url, L("lcl_prs_companies_dienst_locs"));
}
</script>
</head>

View File

@@ -1276,7 +1276,7 @@ FCLTHeader.Requires({ plugins: ["jQuery", "kenmerk"] });
{
if (isHoliday && isFrontend)
{
FcltMgr.alert("<%=L("lcl_holiday_strict247")%>");
FcltMgr.alert(L("lcl_holiday_strict247"));
iface.button.enable("btn_res_submit");
}
else {
@@ -1293,7 +1293,7 @@ FCLTHeader.Requires({ plugins: ["jQuery", "kenmerk"] });
else
{
if (organisation247Type == 2 && (isHoliday || isWeekend) && isFrontend) { // Not possible to make a reservation for frontend users
FcltMgr.alert("<%=L("lcl_holiday_strict")%>");
FcltMgr.alert(L("lcl_holiday_strict"));
iface.button.enable("btn_res_submit");
}
else {

View File

@@ -669,7 +669,7 @@ function IFRAMER_HEADER(titel, buttons, params, checkBoxes)
%></div><%
}
if (params.hints) { %>
<span class='hints default-clickable-icon' onclick='scf_enablehint();FcltMgr.stopPropagation(event);' title='<%=L("lcl_hint")%>'>
<span class='hints default-clickable-icon' onclick='scf_enablehint();FcltMgr.stopPropagation(event);' title='<%=safe.htmlattr(L("lcl_hint"))%>'>
<%=I("fa-headset fa-xl")%>
<%=I("fa-question fa-sm tinyhint")%>
</span>