TeaWeb/shared/js/ui/modal/ModalChangeVolume.ts

77 lines
2.8 KiB
TypeScript
Raw Normal View History

2019-04-04 21:47:52 +02:00
/// <reference path="../../ui/elements/modal.ts" />
/// <reference path="../../ConnectionHandler.ts" />
2018-04-11 17:56:09 +02:00
/// <reference path="../../proto.ts" />
namespace Modals {
2019-10-13 21:33:07 +02:00
//TODO: Use the max limit!
let modal: Modal;
export function spawnChangeVolume(client: ClientEntry, local: boolean, current: number, max: number | undefined, callback: (number) => void) {
if(modal) modal.close();
let new_value: number;
modal = createModal({
header: local ? tr("Change local volume") : tr("Change remote volume"),
2018-04-11 17:56:09 +02:00
body: function () {
2019-01-20 18:43:14 +01:00
let tag = $("#tmpl_change_volume").renderTag({
2019-10-13 21:33:07 +02:00
client: htmltags.generate_client_object({
add_braces: false,
client_name: client.clientNickName(),
client_unique_id: client.properties.client_unique_identifier,
client_id: client.clientId()
}),
local: local
2019-01-20 18:43:14 +01:00
});
2018-04-11 17:56:09 +02:00
2019-10-13 21:33:07 +02:00
const container_value = tag.find(".info .value");
const set_value = value => {
const number = value > 100 ? value - 100 : 100 - value;
container_value.html((value == 100 ? "&plusmn;" : value > 100 ? "+" : "-") + number + "%");
2018-04-11 17:56:09 +02:00
2019-10-13 21:33:07 +02:00
new_value = value / 100;
if(local) callback(new_value);
};
set_value(current * 100);
2018-04-11 17:56:09 +02:00
2019-10-13 21:33:07 +02:00
const slider_tag = tag.find(".container-slider");
const slider = sliderfy(slider_tag, {
initial_value: current * 100,
step: 1,
max_value: 200,
min_value: 0,
2018-04-11 17:56:09 +02:00
2019-10-13 21:33:07 +02:00
unit: '%'
2018-04-11 17:56:09 +02:00
});
2019-10-13 21:33:07 +02:00
slider_tag.on('change', event => set_value(parseInt(slider_tag.attr("value"))));
2018-04-11 17:56:09 +02:00
2019-10-13 21:33:07 +02:00
tag.find(".button-save").on('click', event => {
if(typeof(new_value) !== "undefined") callback(new_value);
modal.close();
2018-04-11 17:56:09 +02:00
});
2019-01-20 18:43:14 +01:00
2019-10-13 21:33:07 +02:00
tag.find(".button-cancel").on('click', event => {
callback(current);
modal.close();
2019-01-20 18:43:14 +01:00
});
2019-10-13 21:33:07 +02:00
tag.find(".button-reset").on('click', event => {
slider.value(100);
});
2019-01-20 18:43:14 +01:00
2019-10-13 21:33:07 +02:00
tag.find(".button-apply").on('click', event => {
callback(new_value);
new_value = undefined;
});
2019-01-20 18:43:14 +01:00
2019-10-13 21:33:07 +02:00
return tag.children();
2019-01-20 18:43:14 +01:00
},
2019-10-13 21:33:07 +02:00
footer: null,
2019-01-20 18:43:14 +01:00
width: 600
});
2019-10-13 21:33:07 +02:00
modal.close_listener.push(() => modal = undefined);
2019-01-20 18:43:14 +01:00
modal.open();
2019-10-13 21:33:07 +02:00
modal.htmlTag.find(".modal-body").addClass("modal-volume");
2019-01-20 18:43:14 +01:00
}
2018-04-11 17:56:09 +02:00
}