etiquette/frontends/etiquette_flask/static/js/common.js

149 lines
3.6 KiB
JavaScript
Raw Normal View History

2018-07-23 02:12:08 +00:00
var common = {};
2018-07-23 02:12:08 +00:00
common.INPUT_TYPES = new Set(["INPUT", "TEXTAREA"]);
common.create_message_bubble =
function create_message_bubble(message_area, message_positivity, message_text, lifespan)
2016-09-18 08:33:46 +00:00
{
if (lifespan === undefined)
{
lifespan = 8000;
}
var message = document.createElement("div");
message.className = "message_bubble " + message_positivity;
2016-09-18 08:33:46 +00:00
var span = document.createElement("span");
span.innerHTML = message_text;
message.appendChild(span);
message_area.appendChild(message);
setTimeout(function(){message_area.removeChild(message);}, lifespan);
}
2018-07-23 02:12:08 +00:00
common._request =
function _request(method, url, callback)
2016-09-18 08:33:46 +00:00
{
var request = new XMLHttpRequest();
request.onreadystatechange = function()
{
if (request.readyState == 4)
{
if (callback != null)
{
var text = request.responseText;
var response = {
"data": JSON.parse(text),
"meta": {}
};
response["meta"]["request_url"] = url;
response["meta"]["status"] = request.status;
callback(response);
2016-09-18 08:33:46 +00:00
}
}
};
var asynchronous = true;
request.open(method, url, asynchronous);
return request;
}
2018-07-23 02:12:08 +00:00
common.get =
function get(url, callback)
{
2018-07-23 02:12:08 +00:00
request = common._request("GET", url, callback);
request.send();
}
2018-07-23 02:12:08 +00:00
common.post =
function post(url, data, callback)
{
2018-07-23 02:12:08 +00:00
request = common._request("POST", url, callback);
2016-09-18 08:33:46 +00:00
request.send(data);
}
2018-07-23 02:12:08 +00:00
common.delete_all_children =
function delete_all_children(element)
{
while (element.firstChild)
{
element.removeChild(element.firstChild);
}
}
2018-07-23 02:12:08 +00:00
common.bind_box_to_button =
function bind_box_to_button(box, button, ctrl_enter)
{
// Thanks Yaroslav Yakovlev
// http://stackoverflow.com/a/9343095
var bound_box_hook = function(event)
{
if (event.key !== "Enter")
{return;}
ctrl_success = !ctrl_enter || (event.ctrlKey)
if (! ctrl_success)
{return;}
button.click();
}
box.addEventListener("keyup", bound_box_hook);
}
2018-07-23 02:12:08 +00:00
common.entry_with_history_hook =
function entry_with_history_hook(event)
2016-10-10 03:50:13 +00:00
{
//console.log(event);
var box = event.target;
2016-10-10 03:50:13 +00:00
if (box.entry_history === undefined)
{box.entry_history = [];}
2016-10-10 03:50:13 +00:00
if (box.entry_history_pos === undefined)
{box.entry_history_pos = -1;}
if (event.key === "Enter")
2016-10-10 03:50:13 +00:00
{
box.entry_history.push(box.value);
}
else if (event.key === "ArrowUp")
2016-10-10 03:50:13 +00:00
{
if (box.entry_history.length == 0)
{return}
2016-10-10 03:50:13 +00:00
if (box.entry_history_pos == -1)
{box.entry_history_pos = box.entry_history.length - 1;}
2016-10-10 03:50:13 +00:00
else if (box.entry_history_pos > 0)
{box.entry_history_pos -= 1;}
2016-10-10 03:50:13 +00:00
box.value = box.entry_history[box.entry_history_pos];
setTimeout(function(){box.selectionStart = box.value.length;}, 0);
2016-10-10 03:50:13 +00:00
}
else if (event.key === "Escape")
2016-10-10 03:50:13 +00:00
{
box.value = "";
}
else
{
box.entry_history_pos = -1;
}
}
2018-07-23 02:12:08 +00:00
common.html_to_element =
function html_to_element(html)
{
var template = document.createElement("template");
template.innerHTML = html;
return template.content.firstChild;
}
2018-07-23 02:12:08 +00:00
common.normalize_tagname =
function normalize_tagname(tagname)
{
tagname = tagname.trim();
tagname = tagname.toLocaleLowerCase();
tagname = tagname.split(".");
tagname = tagname[tagname.length-1];
tagname = tagname.split("+")[0];
tagname = tagname.replace(new RegExp(" ", 'g'), "_");
tagname = tagname.replace(new RegExp("-", 'g'), "_");
return tagname;
}