form_submission_callbacks = []; //all runnables will be executed before form submission
-
///////////////////
// Global Functions
///////////////////
+ function update_page(response) {
+ if( response.redirect )
+ {
+ window.location.replace(response.redirect);
+ return;
+ }
+ draw_breadcrumbs(response.meta);
+ update_exit_button(response.meta);
+ update_side_buttons(response.meta);
+ $("#formContainer").html(response.content);
+ }
+
+ function update_side_buttons(meta) {
+ const step = meta.active;
+ const page_count = meta.steps.length;
+
+ const back_button = document.getElementById("gob");
+ if (step == 0) {
+ back_button.classList.add("disabled");
+ back_button.disabled = true;
+ } else {
+ back_button.classList.remove("disabled");
+ back_button.disabled = false;
+ }
+
+ const forward_btn = document.getElementById("gof");
+ if (step == page_count - 1) {
+ forward_btn.classList.add("disabled");
+ forward_btn.disabled = true;
+ } else {
+ forward_btn.classList.remove("disabled");
+ forward_btn.disabled = false;
+ }
+ }
+
+ function update_exit_button(meta) {
+ if (meta.workflow_count == 1) {
+ document.getElementById("cancel_btn").innerText = "Exit Workflow";
+ } else {
+ document.getElementById("cancel_btn").innerText = "Return to Parent";
+ }
+ }
+
+ function draw_breadcrumbs(meta) {
+ $("#topPagination").children().not(".page-control").remove();
+
+ for (const i in meta.steps) {
+ const step_btn = create_step(meta.steps[i], i == meta["active"]);
+ $("#topPagination li:last-child").before(step_btn);
+ }
+ }
+
+ function create_step(step_json, active) {
+ const step_dom = document.createElement("li");
+ // First create the dom object depending on active or not
+ step_dom.className = "topcrumb";
+ if (active) {
+ step_dom.classList.add("active");
+ }
+ $(step_dom).html(`<span class="d-flex align-items-center justify-content-center text-capitalize w-100">${step_json['title']}</span>`)
+
+ const code = step_json.valid;
+
+ let stat = "";
+ let msg = "";
+ if (code < 100) {
+ $(step_dom).children().first().append("<i class='ml-2 far fa-square'></i>")
+ stat = "";
+ msg = "";
+ } else if (code < 200) {
+ $(step_dom).children().first().append("<i class='ml-2 fas fa-minus-square'></i>")
+ stat = "invalid";
+ msg = step_json.message;
+ } else if (code < 300) {
+ $(step_dom).children().first().append("<i class='ml-2 far fa-check-square'></i>")
+ stat = "valid";
+ msg = step_json.message;
+ }
- function updatePage(data){
- updateBreadcrumbs(data['meta']);
- $("formContainer").html(data['content']);
+ if (step_json.enabled == false) {
+ step_dom.classList.add("disabled");
+ }
+ if (active) {
+ update_message(msg, stat);
+ }
+
+ return step_dom;
+ }
+
+ function update_description(title, desc) {
+ document.getElementById("view_title").innerText = title;
+ document.getElementById("view_desc").innerText = desc;
+ }
+
+ function update_message(message, stepstatus) {
+ document.getElementById("view_message").innerText = message;
+ document.getElementById("view_message").className = "step_message";
+ document.getElementById("view_message").classList.add("message_" + stepstatus);
}
function submitStepForm(next_step = "current"){
"step_form": step_form_data,
"csrfmiddlewaretoken": $("[name=csrfmiddlewaretoken]").val()
});
- console.log(form_data);
$.post(
'/workflow/manager/',
form_data,
- (data) => updatePage(data),
+ (data) => update_page(data),
'json'
).fail(() => alert("failure"));
}
form_submission_callbacks = [];
}
+ function create_workflow(type) {
+ $.ajax({
+ type: "POST",
+ url: "/workflow/create/",
+ data: {
+ "workflow_type": type
+ },
+ headers: {
+ "X-CSRFToken": $('input[name="csrfmiddlewaretoken"]').val()
+ }
+ }).done(function (data, textStatus, jqXHR) {
+ window.location = "/workflow/";
+ }).fail(function (jqxHR, textstatus) {
+ alert("Something went wrong...");
+ });
+ }
+
+ function add_workflow(type) {
+ data = $.ajax({
+ type: "POST",
+ url: "/workflow/add/",
+ data: {
+ "workflow_type": type
+ },
+ headers: {
+ "X-CSRFToken": $('input[name="csrfmiddlewaretoken"]').val()
+ }
+ }).done(function (data, textStatus, jqXHR) {
+ update_page(data);
+ }).fail(function (jqxHR, textstatus) {
+ alert("Something went wrong...");
+ });
+ }
+
+ function pop_workflow() {
+ data = $.ajax({
+ type: "POST",
+ url: "/workflow/pop/",
+ headers: {
+ "X-CSRFToken": $('input[name="csrfmiddlewaretoken"]').val()
+ }
+ }).done(function (data, textStatus, jqXHR) {
+ update_page(data);
+ }).fail(function (jqxHR, textstatus) {
+ alert("Something went wrong...");
+ });
+ }
+
+ function continue_workflow() {
+ window.location.replace("/workflow/");
+ }
+
///////////////////
//Class Definitions
///////////////////
for( const id in ids )
{
- const result_entry = document.createElement("li");
- const result_button = document.createElement("a");
const obj = this.items[id];
const result_text = this.generate_element_text(obj);
- result_entry.classList.add("list-group-item", "list-group-item-action");
+ const result_entry = document.createElement("a");
+ result_entry.href = "#";
result_entry.innerText = result_text;
+ result_entry.title = result_text;
+ result_entry.classList.add("list-group-item", "list-group-item-action", "overflow-ellipsis", "flex-shrink-0");
result_entry.onclick = function() { searchable_select_multiple_widget.select_item(obj.id); };
const tooltip = document.createElement("span");
const tooltiptext = document.createTextNode(result_text);
added_list.removeChild(added_list.firstChild);
}
- let list_html = "";
+ const list_html = document.createElement("div");
+ list_html.classList.add("list-group");
for( const item_id of this.added_items )
{
- const item = this.items[item_id];
+ const times = document.createElement("li");
+ times.classList.add("fas", "fa-times");
+
+ const deleteButton = document.createElement("a");
+ deleteButton.href = "#";
+ deleteButton.innerHTML = "<i class='fas fa-times'></i>"
+ // Setting .onclick/.addEventListener does not work,
+ // which is why I took the setAttribute approach
+ // If anyone knows why, please let me know :]
+ deleteButton.setAttribute("onclick", `searchable_select_multiple_widget.remove_item(${item_id});`);
+ deleteButton.classList.add("btn");
+ const deleteColumn = document.createElement("div");
+ deleteColumn.classList.add("col-auto");
+ deleteColumn.append(deleteButton);
+ const item = this.items[item_id];
const element_entry_text = this.generate_element_text(item);
+ const textColumn = document.createElement("div");
+ textColumn.classList.add("col", "overflow-ellipsis");
+ textColumn.innerText = element_entry_text;
+ textColumn.title = element_entry_text;
+
+ const itemRow = document.createElement("div");
+ itemRow.classList.add("list-group-item", "d-flex", "p-0", "align-items-center");
+ itemRow.append(textColumn, deleteColumn);
- list_html += '<div class="border rounded mt-2 w-100 d-flex align-items-center pl-2">'
- + element_entry_text
- + '<button onclick="searchable_select_multiple_widget.remove_item('
- + item_id
- + ')" class="btn btn-danger ml-auto">Remove</button>';
- list_html += '</div>';
+ list_html.append(itemRow);
}
- added_list.innerHTML = list_html;
+ added_list.innerHTML = list_html.innerHTML;
}
}