You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

257 lines
9.7 KiB

(function ($) {
$(function () {
// highlight the admin icon (anchors)
var $anchors = $(".adminanchors li a, .admbox"),
bgcol = $anchors.is(".admbox") ? $anchors.css("background-color") : $anchors.parent().css("background-color");
$("input[name=lm_criteria]").keyup( function () {
var criterias = this.value.toLowerCase().split( /\s+/ ), word, text;
$anchors.each( function() {
var $parent = $(this).is(".admbox") ? $(this) : $(this).parent();
if (criterias && criterias[0]) {
text = $(this).attr("data-alt").toLowerCase();
for( var i = 0; criterias.length > i; ++i ) {
word = criterias[i];
if ( word.length > 0 && text.indexOf( word ) == -1 ) {
$parent.css("background", "");
return;
}
}
$parent.css("background", "radial-gradient(white, " + bgcol + ")");
} else {
$parent.css("background", "");
}
});
});
});
// AJAX plugin list load for admin/textarea/plugins
var pluginSearchTimer = null;
$("#pluginfilter").change(function (event) {
var filter = $(this).val();
if (filter.length > 2 || !filter) {
if (pluginSearchTimer) {
clearTimeout(pluginSearchTimer);
pluginSearchTimer = null;
}
$("#pluginlist").load($.service("plugin", "list"), {
filter: filter
}, function (response, status, xhr) {
if (status === "error") {
$("#pluginfilter").showError(xhr);
}
$(this).tikiModal();
}).tikiModal(tr("Loading..."));
}
}).keydown(function (event) {
if (event.which === 13) {
event.preventDefault();
$(this).change();
} else if (! pluginSearchTimer) {
pluginSearchTimer = setTimeout(function () {
$("#pluginfilter").change();
}, 1000);
}
});
// Plugin Alias management JS
var $pluginAliasAdmin = $("#contentadmin_textarea-plugin_alias");
if ($pluginAliasAdmin.length) {
/**
* General purpose param adding icons
*/
$('.add-param', $pluginAliasAdmin).click(function () {
var $fieldset = $(this).closest("fieldset"),
// for composed args/params (fieldset) the template comes after the one for a new param,
// so we need closestDescendent, not :first
$template = $fieldset.closestDescendent(".param.d-none"),
$clone = $template.clone(),
index = $fieldset.find(".param:visible").length;
$clone.find('input:not(.select2-search__field)').each(function () {
$(this).attr('name', $(this).attr('name').replace('__NEW__', index));
}).val('').find('label').each(function () {
$(this).attr('for', $(this).attr('for').replace('__NEW__', index));
});
$clone.find(".d-none").addBack().removeClass("d-none");
if (jqueryTiki.autocomplete && jqueryTiki.ui) {
var plugin = $("#implementation").data("plugin");
if (plugin) {
// get the param names
var params = $.map(plugin.params, function(element,index) {return index});
$clone.find("input.sparam-name").autocomplete({
minLength: 1,
source: params,
select: function(e, ui) {
var $defInput = $(this).closest(".param").find("input.sparam-default"),
options = [],
param = plugin.params[ui.item.value];
// collect the options if any
$.each(param.options, function (k, v) {
options.push(v.value)
});
// set the default as the default
$defInput.val(param.default);
// autocomplete the defaults on the options
if (options) {
$defInput.autocomplete({
minLength: 1,
source: options
});
}
}
});
}
}
$template.parent().append($clone); // .tiki_popover() doesn't work as the title has been removeed on page
// load... FIXME?;
return false;
});
$($pluginAliasAdmin).on("click", ".delete-param", function () {
$(this).popover("hide").parents(".param").remove();
});
setTimeout(function () {
/*
if (jqueryTiki.validate) {
$pluginAliasAdmin.closest("form").validate({
rules: {
plugin_alias: "required",
implementation: "required"
}
});
}
*/
$("#plugin_alias").change(function () {
var $this = $(this),
val = $this.val().toLowerCase(),
$pluginName = $("#plugin_name");
if (!$pluginName.val()) {
$pluginName.val(val.replace(/\s+/g, " ").replace(
/\w\S*/g, function (txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
)
);
}
$this.val(val.replace(/\W+/g, ""));
});
$("#implementation").change(function () {
var val = $("#implementation").val();
if (val) {
$.getJSON(
$.service("plugin", "list", {
filter: val,
title: val // to get it back later
}),
function (data) {
if (data && data.plugins[data.title]) {
var plugin = data.plugins[data.title];
if (plugin.prefs) {
$("#plugin_deps").val(plugin.prefs.join(","));
}
$("#implementation").data("plugin", plugin);
}
}
);
}
}).change();
}, 500);
}
// Encryption management JS
var $encryptionAdmin = $("#content_admin1-encryption");
if ($encryptionAdmin.length) {
$('#regenerate').on('change', function() {
if ($(this).is(':checked')) {
$('#algo, #shares, input[name=users], select[name="users[]"]').removeAttr('disabled');
$('#old_share_container').show();
} else {
$('#algo, #shares, input[name=users], select[name="users[]"]').attr('disabled', 'disabled');
$('#old_share_container').hide();
}
}).trigger('change');
}
// Admin Backend sidebar toggle
$(".admin-menu-collapser > a", ".admin-nav").click(function () {
let $this = $(this),
$parentNav = $this.parents("nav")
$icon = $this.find(".icon");
if ($parentNav.is(".narrow")) {
$parentNav.removeClass("narrow");
$icon.setIcon("angle-double-left");
$("body").removeClass("sidebar_collapsed");
deleteCookie("sidebar_collapsed");
} else {
$parentNav.addClass("narrow");
$icon.setIcon("angle-double-right");
$("body").addClass("sidebar_collapsed");
setCookie("sidebar_collapsed", "y");
}
return false;
});
$(document).ready(function () {
if (getCookie("sidebar_collapsed")) {
$("body").addClass("sidebar_collapsed");
}
});
// API Tokens
if ($('#content_admin1-api').length) {
$(document).on('click', '.js-allow-copy span.icon', function() {
let $container = $(this).closest('.js-allow-copy');
let $inp = $('<input class="form-control">').val($container.data('content'));
$container.html('').append($inp);
$inp.select();
document.execCommand('copy');
$container.prepend($('<div/>').addClass('alert-success').html(tr('Token copied to clipboard.')));
});
$(document).on('click', '.js-remove-token', function(event) {
event.preventDefault();
let $removebtn = $(this);
$removebtn.confirmationDialog({
title: tr('Remove token?'),
message: tr('Clients using it will no longer have access!'),
success: function () {
$.ajax({
url: $removebtn.attr('href'),
success: function() {
$.ajax({
url: $.service('api_token', 'list'),
success: function(data) {
$('#auth_api_tokens_childcontainer').html(data);
}
})
}
});
}
});
return false;
});
}
})(jQuery);