chimera-mark2-core-release/static/js/core/ui.js

1353 lines
35 KiB
JavaScript

import { langPack } from './langpack.js';
import * as API from './api.js';
import { smartClick } from './main.js';
var codes={
"400":"Bad request",
"401":"Unauthorized",
"403":"Forbidden",
"404":"Not found",
"405":"Method Not Allowed",
"500":"Internal server error",
"501":"Not Implemented",
};
export function showError(code, message) {
if (message==undefined) { message=codes[code]}
if (message==undefined) { message="Internal server error"}
$("<div>", { class: "error blanker bgerror"}).appendTo("body");
$("<div>", { class: "error error_banner",html: "ERROR "+code+"<br/>"+message}).appendTo("body");
}
export function hideError() {
$("body div.error").remove();
}
export function click (ref) {
return smartClick(ref);
}
export function addButton(id, icon, title, color, onClick, cssClass, style) {
var opts;
if (typeof(id)=='object') {
opts=id;
id=opts.id;
icon=opts.icon;
title=opts.title;
color=opts.color;
onClick=opts.onClick;
cssClass=opts.cssClass;
style=opts.style;
} else {
opts={};
}
if (cssClass===undefined) { cssClass = "short super";}
let btn=$("<div>", {
class: "button "+cssClass+" "+color,
id: id,
append: $("<i>", {class: icon }),
style: style,
}).attr("title", title);
$.each(opts.attr, function(key,val) {
btn.attr(key,val);
});
if (style!==undefined) {
btn.style=style;
}
if (typeof(onClick) == 'function')
{
btn.click(function(ref) { onClick(ref); return false;});
}
return btn;
}
export function parceURL() {
let pattern = /([^:]{1,}):\/\/([^\/#?]{1,})(\/([^\/#?]{1,})){0,1}(\/([^\/#?]{1,})){0,1}(\/([^\/#?]{1,})){0,1}/i;
let pattern2 = /([#](.*)){0,1}$/i;
let px = document.location.href.match(pattern);
let px2=document.location.href.match(pattern2);
let rv={
proto: px[1],
host: px[2],
module: px[4],
function: px[6],
id: px[8],
marker: px2[2]
};
if (rv.id=='') { rv.id=undefined; }
let args=document.location.href.split('?')[1];
let rva=[];
if (typeof(args)=='string') {
args=args.split('&');
} else {
args=[];
}
$.each(args,function(key,val) {
rva[val.split("=")[0]]=val.split("=")[1];
});
rv.args=rva;
return rv;
}
export function empty() {
$(".t_main #mainframe").empty();
}
/*
panels is array
panel_desc= [{
id,
title,
buttons [
addButton() (.....)
]
}]
*/
export function createLeftPanel(panels, config) {
if (config==undefined) { config={};}
let ref;
if (config.ref) {
ref=config.ref;
} else {
if (!ref) { ref =$(".t_main #mainframe div.widget_panel_left"); }
}
if (ref.length==0) {
ref=$("<div>", { class: "widget_panel_left" }).appendTo(".t_main #mainframe");
} else {
ref.empty();
}
var divAccord=$("<div>",{
id: "accordion",
class: "accordion"
}).appendTo(ref);
$.each(panels,function (_index,panel) {
let xpdiv=$("<div>", { class: "widget lock c_contacts", id: panel.id, text: langPack.core.iface.dataLoading, style: panel.disabled?"display: none":""});
if (panel.attrs) {
$.each(panel.attrs, function (key, val) {
xpdiv.attr(key,val);
});
}
let px = $("<h3>",{text: panel.title, id: panel.id+"_title", append: panel.buttons, style: panel.disabled?"display: none":"" })
.add(xpdiv);
px.appendTo(divAccord);
});
let accConfig={
heightStyle: "content",
};
if (typeof(config.beforeActivate)=="function") {
accConfig.beforeActivate=config.beforeActivate;
}
if (typeof(config.activate)=="function") {
accConfig.activate=config.activate;
}
if (typeof(config.create)=="function") {
accConfig.create=config.create;
}
$("#accordion" ).accordion(accConfig);
}
function panelBeforeActivate(panel, callback) {
$("#tab_buttons .button_block").hide();
let fx=callback[panel.prop("id").replace(/^[^\-\_]*[\-\_]/,"")];
if (typeof(fx) == 'function')
{
$("div.widget."+panel.prop("id").replace(/^[^\-\_]*[\-\_]/,"")).empty();;
fx();
}
}
function panelActivate(panel, callback) {
$(panel.prop("id").replace(/^[^\-\_]*[\-\_]/,"#buttons_")).show();
$(panel.prop("id").replace(/^[^\-\_]*[\-\_]/,"#buttons_")+" .x_status .hideme").hide();
}
export function createRightPanel(panels) {
let ref=($(".t_main #mainframe div.widget_panel_right"));
if (ref.length==0) {
ref=$("<div>", { class: "widget_panel_right" }).appendTo(".t_main #mainframe");
}
createTabsPanel(panels,ref);
}
export function tabPanelRenameTab(tabId, text) {
$("#a-tab-"+tabId).text(text);
}
export function tabPanelHideTab(tabId) {
$( "#item_tabs").tabs("disable","#tab-"+tabId);
}
export function tabPanelShowTab(tabId) {
$( "#item_tabs").tabs("enable","#tab-"+tabId);
}
export function tabPanelActivateTab(tabId) {
$("#item_tabs").tabs({active: Number($("#a-tab-"+tabId).attr("idx"))});
}
export function createTabsPanel(panels,ref) {
if (ref===undefined) {
ref=$(".t_main #mainframe");
} else {
ref.empty();
}
var callback={};
let divTabs=$("<div>",{
id: "item_tabs",
class: "ui-tabs-main-div",
append: $("<div>",{
class: "ui-tabs-title-line",
append: $("<div>",{
style: "display: inline-block; float: left;",
append: $("<ul>", { id: "item_tabs_ul_list"
})
})
.add($("<div>", {
id: "tab_buttons",
style: "display: inline-block; float: right",
}))
})
}).appendTo(ref);
$.each(panels,function (index,panel) {
if (panel.id==undefined) {panel.id=index;}
$("<li>",{append: $("<a>",{href: "#tab-"+panel.id, id: "a-tab-"+panel.id, text: panel.title}).attr("idx",index)})
.appendTo("#item_tabs_ul_list");
$("<div>", {
id: "tab-"+panel.id,
buttons: "buttons_"+panel.id,
append: $("<div>", {id: panel.id, class: "widget "+panel.id, text: langPack.core.iface.dataLoading})
}).appendTo(divTabs);
$("<span>", {
class: "button_block",
id: "buttons_"+panel.id,
append: panel.buttons
}).appendTo("#tab_buttons").hide();
if (typeof(panel.preLoad) == 'function')
{
callback[panel.id] = panel.preLoad;
}
});
$( "#item_tabs").tabs({
create: function( event, ui ) {
panelBeforeActivate(ui.panel,callback);
panelActivate(ui.panel);
},
activate: function( event, ui ) {
panelActivate(ui.newPanel);
},
beforeActivate: function( event, ui ) {
panelBeforeActivate(ui.newPanel,callback);
}
});
$.each(panels,function (_index,panel) {
if (panel.disabled) {
$( "#item_tabs").tabs("disable","#tab-"+panel.id);
}
});
}
export function addFieldGroup(items)
{
return $("<div>",{
class: "crm_entity_block_group",
append: items
});
}
/* - autocomplete: ref.acFunction: function(request,response) {
* response([{value: "TEST1111", id: "1"},{value: "TEST2222", id: "2"}]);
* }
*/
export function addField(ref)//title, item, blockstyle, fieldstyle, type, args, onChange, onClick, onContextMenu)
{
var item=undefined;
if (ref.type === undefined || (ref.item===undefined && ref.type != "href")) {
var type = 'label';
} else {
var type=ref.type;
}
if (typeof(ref.item)=="string" || ref.item===undefined)
{
if (ref.item===undefined) {
var name=undefined;
} else {
var name = ref.item.replace(/^[a-z]*\_/,'');
}
let item_id=ref.item;
let args = ref.args;
if (ref.args==undefined && ref.val != undefined) {
args = ref.val;
} else {
args={};
}
switch(type) {
case 'password':
item = $("<input>", {class: "i", id: ref.item, name: name, type:'password',width: 'calc(100% - 44px)'})
.add($("<div>",{class: "button short", style: "width: 25px; margin-right: 0; margin-left: 2; padding: 0; padding-top: 1; font-size: 13px;",append: $("<i>",{class: 'far fa-eye'})
})
.click(function() {
if ($("#"+item_id).prop('type')==='password' && (!$("#"+item_id).prop("disabled"))) {
$(this).addClass("active");
$("#"+item_id).prop('type', 'input');
} else {
$(this).removeClass("active");
$("#"+item_id).prop('type', 'password');
}
}));
break
case 'passwordNew':
if (args.chars==undefined) {
switch(args.type) {
case "num":
args.chars="0123456789";
}
}
item = $("<input>", {type: ref.noHide?"input":"password", class: "i", id: ref.item, name: name, width: 'calc(100% - 44px)'})
.add($("<div>",{
class: "button short",
style: "width: 25px; margin-right: 0; margin-left: 2; padding: 0; padding-top: 1; font-size: 13px;",
append: $("<i>",{class: 'fas fa-retweet'}),
})
.click(function() {
if ($("#"+item_id).prop("disabled")) {
return;
}
let password=genPassword(args.chars, args.length);
$("#"+item_id).val(password);
$("#"+item_id).prop("type","input");
$("#"+item_id).change();
if (typeof(ref.newPasswdGenCallback)=="function") {
ref.newPasswdGenCallback(password);
}
}));
break
case 'select':
item= $("<select>", {class: "i", id: ref.item, name: name});
if (ref.args !== undefined) {
$.each(ref.args, function(arg,val) {
if (typeof(val)=='array' || typeof(val)=='object') {
item.append($("<option>",{value: val.val, text: val.title, selected: val.val==ref.val}));
} else {
item.append($("<option>",{value: arg, text: val, selected: arg==ref.val}));
}
});
}
break;
case 'datetime':
if (typeof(args)!=='object') { args={curr: args}; }
if (args.step===undefined) { args.step = 10; }
if (args.format===undefined) { args.format = "Y-m-d H:i"; }
if (args.mask === undefined) { args.mask=true; }
item=$("<input>", {class: "i", id: ref.item, name: name});
item.datetimepicker(args);
item.val(args.curr);
break;
case "file":
item = $("<input>",{
type: "file",
id: ref.item,
class: "ifile",
multiple: ref.multiple==true,
change: function(ref) {
let files=ref.currentTarget.files;
let label=$("#"+ref.currentTarget.id+"__labelTitle");
$("#"+ref.currentTarget.id+"__label").addClass("changed");
if (files.length==0) {
label.text(langPack.core.iface.filesClickForSelect);
} else if (files.length==1) {
label.text(langPack.core.iface.filesSelected+": 1 "+langPack.core.iface.filesFile);
} else {
label.text(langPack.core.iface.filesSelected+": "+files.length+" "+langPack.core.iface.filesFiles);
}
},
})
.add($("<label>", {
id: ref.item+"__label",
for: ref.item,
append: $("<i>",{ class: "far fa-save", title: langPack.core.iface.filesClickForSelect})
.add($("<span>",{style: "margin-left: 10px;", id: ref.item+"__labelTitle",text: langPack.core.iface.filesClickForSelect}))
,
}))
break;
case "label":
item = $("<span>", {id: ref.item, class: "i", html: ref.val});
break;
case "href":
item = $("<a>", {href: ref.href, id: ref.item, class: "i", html: ref.val, click: smartClick});
break;
case "multiline":
item = $("<textarea>", {class: "i", id: ref.item, name: name, value: ref.val, rows: ref.args.rows});
break;
case "hidden":
item = $("<input>", {class: "i", type: "hidden", id: ref.item, name: name, value: ref.val});
return item;
case "autocomplete":
let acitem=$("<input>", {class: "i", id: ref.item, name: name, value: ref.val})
item = ($("<input>", { type: "hidden", id: ref.item+"_bk", value: ref.val}))
.add($("<input>", { class: "i", type: "hidden", name: name+"_id", id: ref.item+"_idx", value: ref.val}))
.add(acitem);
if (isset(ref.acValues)) {
acitem.autocomplete({
source: ref.acValues
});
}
if (isset(ref.acFunction) && (typeof(ref.acFunction)=='function')) {
acitem.autocomplete({
source: ref.acFunction,
minLength: 2,
select: function( event, ui ) {
$("#"+ref.item+"_idx").val(ui.item.id).addClass("changed");
$("#"+ref.item).val(ui.item.label).addClass("changed");
$("#"+ref.item+"_bk").val(ui.item.label).addClass("changed");
}
})
.focusout(function() {
if ($("#"+ref.item+"_bk").val() != $("#"+ref.item).val())
{
if ($("#"+ref.item).val() == "")
{
$("#"+ref.item+"_idx").val("").removeClass("changed");
$("#"+ref.item+"_bk").val("").removeClass("changed");
} else {
$("#"+ref.item).val($("#"+ref.item+"_bk").val()).addClass("changed");
}
}
})
}
break;
default:
item = $("<input>", {class: "i", id: ref.item, name: name, value: ref.val});
break
}
if (ref.disabled) { item.attr("disabled","true")}
} else {
item = ref.item;
}
item.change(function() {$(this).addClass('changed');})
if (ref.attrs && ref.attrs.disabled) {
item.attr("disabled",ref.attrs.disabled)
}
if (typeof(ref.onChange)=='function') {
item.change(ref.onChange);
}
let title=$("<span>",{html: ref.title});
if (isset(ref.reqx)) {
title.append($("<span>",{ class: "dialogFieldTitle_Reqx",text: "*", title: langPack.core.iface.errReqx }));
}
let rvv=$("<div>",{
class: "crm_entity_field_value",
append: item,
style: ref.fieldstyle
});
let rv=$("<div>",{
class: "crm_entity_field_block",
style: ref.blockstyle,
append: $("<div>",{
class: "crm_entity_field_title",
append: title
})
.add(rvv)
});
if (type=="label") {
if (typeof(ref.onClick)=="function") {
rv.click(ref.onClick);
rv.addClass("clickable");
}
}
if (type=="label" || type=="href") {
if (typeof(ref.onContextMenu)=="function") {
rv.bind('contextmenu', ref.onContextMenu);
rv.addClass("withContextMenu");
rvv.append($("<i>",{style: "width: 50px; text-align: right; padding-right: 10px;", class: "fas fa-ellipsis-v"}).bind('contextmenu click', ref.onContextMenu))
}
}
$.each(ref.attrs, function(key, val) {
rv.attr(key,val);
});
if (isset(ref.reqx)) {
rv.attr("reqx",ref.reqx);
}
if (isset(ref.regx)) {
rv.attr("regx",ref.regx);
}
if (isset(ref.regxTitle)) {
rv.attr("regxTitle",ref.regxTitle);
}
return rv;
}
export function breadcrumbsUpdate(text) {
if (typeof(text)=="string") {
$("#breadcrumbs_label").text(text);
} else {
$("#breadcrumbs_label").empty();
$("#breadcrumbs_label").append(text);
}
}
export function breadcrumbsUpdateSuffix(text) {
breadcrumbsUpdate($("#breadcrumbs_label").text().replace(/ \/[^/]*$/,' / '+text))
}
export function getUnixTime(offset) {
if (offset==undefined) { offset=0; }
return (new Date().getTime()/1000)+offset;
}
export function date2stamp(dateString) {
return (new Date(dateString).getTime()/1000);
}
export function stamp2isodateq(stamp) {
var xdate = new Date(stamp*1000);
var rv=xdate.getFullYear().pad(4)+"-"+String((xdate.getMonth()+1).pad(2))+"-"+String(xdate.getDate().pad(2));
return rv;
}
export function stamp2isodatens(stamp) {
var xdate = new Date(stamp*1000);
var rv=stamp2isodateq(stamp)+" "+xdate.getHours().pad(2)+":"+xdate.getMinutes().pad(2);
return rv;
}
export function stamp2isodate(stamp) {
var xdate = new Date(stamp*1000);
var rv=stamp2isodatens(stamp)+":"+xdate.getSeconds().pad(2);
return rv;
}
export function stamp2date(stamp, shortMon) {
if (stamp==undefined) { return ""};
if (shortMon) {
var mons=langPack.core.date.monQ;
} else {
var mons=langPack.core.date.months;
}
var xdate = new Date(stamp*1000);
var rv=String(xdate.getDate().pad(2)) + " " + String(mons[xdate.getMonth()+1])+" "+xdate.getFullYear().pad(4)+" "+langPack.core.date.yearQ;
return rv;
}
export function stamp2datetime(stamp, shortMon) {
if (stamp==undefined) { return ""};
var xdate = new Date(stamp*1000);
var rv=stamp2date(stamp,shortMon)+" "+xdate.getHours().pad(2)+":"+xdate.getMinutes().pad(2);
return rv;
}
export function stamp2datetimeSec(stamp, shortMon) {
if (stamp==undefined) { return ""};
var xdate = new Date(stamp*1000);
var rv=stamp2datetime(stamp,shortMon)+":"+xdate.getSeconds().pad(2);
return rv;
}
export function formatInvCode(code) {
if ((typeof(code) != 'string') ||code.length==0) {
return langPack.core.iface.emptyInvCode;
} else {
return code.substr(0,4)+"-"+code.substr(4,4)+"-"+code.substr(8);
}
}
export function genPassword(chars, passwordLength) {
if (chars==undefined) { chars = "0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ"; };
if (passwordLength==undefined) { passwordLength = 16; };
let password = "";
for (let i = 0; i <= passwordLength; i++) {
let randomNumber = Math.floor(Math.random() * chars.length);
password += chars.substring(randomNumber, randomNumber +1);
}
return password;
}
export function getId(ref) {
if (ref.id) {
return ref.id;
} else if (ref[0] && ref[0].id) {
return ref[0].id;
}
}
export function collectForm(formid, getall, withIDS, withREF, validate)
{
if (typeof(formid)=='object') {
var ref=formid;
formid=ref.formId;
getall=ref.getAll;
withIDS=ref.withIDS;
withREF=ref.withREF;
validate=ref.validate;
} else {
var ref={};
}
// создадим пустой объект
var data = {};
var ctr=0;
var cctr=0;
var cerr=0;
var key;
$('#'+formid+' .i'+((getall==true)?"":'.changed')).each(function() {
if (isset(this.name)) {key = this.name} else {key = this.id}
if(!isset(key)) { return; }
if (getall) {
var reqx="false";
var regx=".*";
var rext="false";
var px = $(this).closest('.crm_entity_field_block');
var regxTitle;
if (px.length == 1) {
if ($(px[0]).attr("regx") !== undefined) { regx = $(px[0]).attr("regx"); }
if ($(px[0]).attr("regxTitle") !== undefined) { regxTitle = $(px[0]).attr("regxTitle"); }
if ($(px[0]).attr("reqx") !== undefined) { reqx = $(px[0]).attr("reqx"); }
if ($(px[0]).attr("rext") !== undefined) { rext = $(px[0]).attr("rext"); }
}
if ($(this).prop("disabled")) { reqx="false";};
data[key] = {val: $(this).val(), changed: $(this).hasClass("changed")};
data[key].rext=rext;
if (withIDS==true) {
data[key].id=$(this).prop("id");
data[key].regx=regx;
data[key].reqx=reqx;
}
if (withREF==true) {
data[key].refx=this;
}
if (validate==true) {
var reqxOK = reqx!="true" || (isset(data[key].val));
var regxOK = (!isset(data[key].val)) || data[key].val.match(new RegExp(regx, 'g' )) !== null;
if (withIDS==true) {
data[key].reqxOK = reqxOK;
data[key].regxOK = regxOK;
}
data[key].valOK = reqxOK && regxOK;
if ((reqxOK !== true || regxOK !== true )) {
$(this).addClass("alert");
var ttlx ="";
if (reqxOK !== true) { ttlx += langPack.core.iface.errReqx};
if (regxOK !== true) { ttlx += langPack.core.iface.errRegx+" - " + (regxTitle==undefined?regx:regxTitle); };
$(this).attr("title",ttlx);
cerr++;
} else {
$(this).removeClass("alert");
$(this).attr("title","");
}
}
} else { data[key] = $(this).val(); }
if ($(this).hasClass("changed")) { cctr++;}
ctr++;
});
data["elCount"]=ctr;
data["changedCount"]=cctr;
data["validateErrCount"]=cerr;
try {
data["id"] = id;
} catch {
}
data.getVals=function() {
let rv={};
$.each(data,function(idx,val) {
if (typeof(val) =='object') {
rv[idx]=val.val;
}
});
return rv;
}
return data;
}
export function createDialog(body, title, buttons, height, columns, id) {
if (id==undefined) {id = 'dialogForm'; }
if (columns=='undefined') { columns=1; }
let dx=$("<div>",{
id: id,
title: title,
style: "overflow: hidden;"
})
.prop("dxColumns",columns)
.appendTo("body")
.dialog({
autoOpen: false,
height: height,
width: (350*columns),
modal: true,
position: {my: "center",at: "center",of: window},
close: function () {
$("#"+id).dialog("destroy").remove();
},
buttons: buttons
})
.append(body);
return dx;
}
export function openDialog(id) {
if (id==undefined) {id = 'dialogForm'; }
let dx;
if (typeof(id)=="object") {
dx=$(id);
id=dx.id;
} else {
dx=$("#"+id);
}
$("#"+id+' .i').on("change",function() {on_valChanged($(this)); });
dx.dialog("open");
let height=$("#"+id).dialog("option","height");
if (!height) {
let summHeight=0;
let maxHeight=0;
let columns = dx.prop("dxColumns");
$.each(dx.find(".crm_entity_block_group"), function(_key,val) {
summHeight +=val.clientHeight;
if (val.clientHeight>maxHeight) { maxHeight=val.clientHeight; }
})
let halfHeight=Math.ceil(summHeight/columns);
let xHeight=(maxHeight>halfHeight)?maxHeight:halfHeight;
dx.dialog("option","height", xHeight+180);
}
}
export function closeDialog(id) {
if (id==undefined) {id = 'dialogForm'; }
let dx;
if (typeof(id)=="object") {
dx=$(id);
} else {
dx=$("#"+id);
}
dx.dialog("close");
dx.remove();
}
export function copySelText(selText) {
if (navigator.clipboard) {
navigator.clipboard.writeText(selText);
return true;
} else {
return false;
}
}
export function getClipboard(onSuccess, onFail) {
console.log(typeof(onFail));
console.log(typeof(onSuccess));
navigator.clipboard.readText().then(text => {
console.log('Clipboard content is: ', text);
if (typeof(onSuccess)=="function") {
onSuccess(text);
}
})
.catch(err => {
console.error('Failed to read clipboard contents: ', err);
if (typeof(onFail)=="function") {
onFail(err);
}
})
}
export function getSelectionText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}
export function on_valChanged(t_this) {
t_this.addClass('changed');
}
export function progressBar_init()
{
$('.progressbar').each(function() {
let el = $(this);
let val = parseInt(el.attr('value'));
el.progressbar({
value: 0
});
progressBar_update(el, val);
});
}
export function progressBar_update(el, val)
{
el.attr("value",val);
el.progressbar( "option", "value", val);
if (val >= 90) {
el.children(".ui-widget-header").css({ 'background': 'var(--mxs-red)' });
} else if (val >= 80) {
el.children(".ui-widget-header").css({ 'background': 'var(--mxs-yellow)' });
} else {
el.children(".ui-widget-header").css({ 'background': 'var(--mxs-blue)' });
}
}
export function showInfoDialog(message, title, buttons, height) {
if (typeof(message)=='object') {
var ref=message;
message=ref.message;
title=ref.title;
buttons=ref.buttons;
height=ref.height;
var dialogName=ref.dialogName;
} else {
var ref={};
var dialogName=undefined;
}
let msg = $("<span>",{class: "widget", style: "padding: 8px;height: "+height+";", id: "dialogInfoSpan", });
if (typeof(message)=="string")
{
msg.html(message);
} else {
msg.append(message);
}
if (dialogName==undefined) { dialogName="dialogInfo"; }
if (title===undefined) { title=langPack.core.iface.dialodInfoTitle; };
if (buttons===undefined) {
buttons = {};
buttons[langPack.core.iface.dialodCloseButton]=function() {
if (typeof(ref.closeCallback)=='function') {
ref.closeCallback();
}
dialogInfo.dialog("close");
}
}
let dialogInfo = $("<div>",{
id: dialogName,
title: title,
})
.appendTo("body")
.dialog({
autoOpen: true,
height: 250,
width: 403,
modal: true,
position: {my: "center",at: "center",of: window},
close: function () {
dialogInfo.dialog("destroy").remove();
},
buttons: buttons
})
.append(msg);
dialogInfo.dialog("option","height", $("#dialogInfoSpan").height()+150);
}
export function blankerShow(text) {
if (text==undefined) {text=langPack.core.iface.blankerText};
$("<div>", { class: "blanker bggray"})
.append($("<div>", {class: "bl_infobox"})
.append($("<img>", {src: "/static/theme/core/img/ajax.gif"}))
.append($("<h1>", {id: "blanker_text", text: text}))
)
.appendTo("body");
}
export function blankerHide() {
$(".blanker").remove();
}
export function setTitle(title, desc)
{
if (document.title != title) {
document.title = title;
}
$('meta[name="description"]').attr("content", desc);
}
export function initBody() {
$("html").removeClass("login");
$("body").empty().removeClass("login");
$("<div>",{id: "contextMenu", class: "contextMenu"}).appendTo("body").hide();
$("<div>", { class: "t_global"})
.appendTo("body")
.append($("<div>", { class: "header"})
.append($("<div>", { class: "logo_menu",click: xmenuToggle})
.append($("<i>", { class: "fas fa-bars"}))
.add($("<div>", { class: "header_logo", text: API.settings.get("title")}))
)
)
.append($("<div>", { class: "t_navy_main clicktohide xmenu_hidden xmenu_hidable"})
.append($("<div>", { class: "title breadcrumbs", })
.append($("<div>", { text: langPack.core.iface.mainMenuTitle}))
)
.append($("<div>", { id: "menu_base_1", style: "margin: 0; padding: 0;"}))
)
.append($("<div>",{ class: "t_main clicktohide"})
.append($("<div>", { class: "breadcrumbs"})
.append($("<div>", { style: "display: inline-block; float: right; padding-right: 10px;"})
.append($("<a>", { href: "/core/myprofile", text: API.session.get("user").fullName, click: smartClick})
.append($("<i>", { class: "far fa-user", style: "margin-left: 10px; font-size: 15px;"}))
)
)
.append($("<div>", { style: "display: inline-block; float: right; padding-right: 10px;", id: "newMsgAlert"})
.append($("<i>", {class: "fas fa-bell panel inactive"}))
.append($("<span>", { id: "coreMsgCount", text: "-"}))
.hide()
)
.append($("<div>", { style: "display: inline-block; float: right; padding-right: 10px;", id: "barcodeScannerStatus"})
.append($("<i>", {class: "fas fa-qrcode panel inactive"}))
.attr("title","Barcode Scanner Off-Line")
.hide()
)
.append($("<div>", { style: "display: inline-block; float: left; position: absolute; max-height: 18px; overflow: hidden;"})
.append($("<i>", { class: "far fa-lightbulb", style: "margin-right: 10px; font-size: 15px;"}))
.append($("<span>", { id: "breadcrumbs_label", text: ""}))
)
)
.append($("<div>",{id: "mainframe"}))
)
window.onresize = function(event) {
$("div.t_main").css("height", (event.target.innerHeight)+"px");
$("html").css("height", (event.target.innerHeight)+"px");
};
$(window).resize();
}
export function loadCSS(url) {
if (document.createStyleSheet)
{
document.createStyleSheet(url);
}
else
{
$('<link rel="stylesheet" type="text/css" href="' + url + '" />').appendTo('head');
}
}
function xmenuToggle(el) {
$(document).unbind('keyup', xmenuHide);
$("body").unbind('click', xmenuHide);
let xmenu = $(".xmenu_hidable");
if (xmenu.hasClass("xmenu_hidden")) {
xmenu.removeClass("xmenu_hidden");
$(document).bind('keyup', xmenuHide);
$("body").bind('contextmenu click', xmenuHide);
} else {
xmenuHide();
}
return false;
}
export function xmenuHide(el) {
if (el != undefined && el.type=='keyup') {
if(el.keyCode !== 27) {
return;
}
}
if (el != undefined && el.type=='click') {
if($(el.target).closest("div.t_navy_main").length>0) {
return;
}
}
$(document).unbind('keyup', xmenuHide);
$("body").unbind('click', xmenuHide);
let xmenu = $(".xmenu_hidable");
if (!xmenu.hasClass("xmenu_hidden")) {
xmenu.addClass("xmenu_hidden");
}
}
export function contextMenuOpen(event, itemsList, title) {
$("body").unbind('contextmenu click', contextMenuClose);
let selText = getSelectionText();
$("div#contextMenu").empty();
if (isset(title)) { $("<p>",{class: "title cmTitle", text: title}).appendTo("div#contextMenu"); }
let items=$("<div>",{class: "items"}).appendTo("div#contextMenu");
if (isset(selText)) {
$("<p>",{class: "item", text: langPack.core.iface.contextMenuCopySelected}).appendTo(items).click(function() {
copySelText(selText);
contextMenuClose();
});
}
$.each(itemsList, function(key,val) {
let item=$("<p>",{class: "item"});
if (isset(val.href)) {
$("<a>",{href: val.href, html: val.title}).appendTo(item);
item.click(function() {
window.location.href=val.href;
contextMenuClose();
return false;
})
} else {
item.html(val.title);
if (isset(val.onClick)) {
item.click(function(el) { val.onClick(el); contextMenuClose();return false;});
}
}
item.appendTo(items);
});
$("div#contextMenu").show();
if (($(window).scrollLeft()+event.clientX+350) < ($(window).scrollLeft()+$(window).width())) {
$("div#contextMenu").offset({top:$(window).scrollTop()+event.clientY, left:$(window).scrollLeft()+event.clientX});
} else {
$("div#contextMenu").offset({top:$(window).scrollTop()+event.clientY, left:$(window).scrollLeft()+event.clientX-338});
}
$("body").bind('contextmenu click', contextMenuClose);
$(document).bind('keyup', contextMenuClose);
}
export function contextMenuClose(el) {
if (el != undefined && $(el.target).closest("#contextMenu").length > 0) {
return;
}
if (el != undefined && el.type=='keyup') {
if(el.keyCode !== 27) {
return;
}
}
$(document).unbind('keyup', contextMenuClose);
$("body").unbind('contextmenu click', contextMenuClose);
$("div#contextMenu").hide().unbind('contextmenu click');
}
export function setLocation(curLoc){
try {
history.pushState(null, null, curLoc);
return;
} catch(e) {}
location.hash = '#' + curLoc;
}
export function xClick(ref) {
return smartClick(ref);
};
Number.prototype.pad = function(size) {
var s = String(this);
while (s.length < (size || 2)) {s = "0" + s;}
return s;
};
(function($){
$.fn.extend({
foxPager: function(cmd, value) {
if (cmd===undefined) { cmd = {}; }
var mode = undefined;
if (typeof(cmd) == 'object' && value===undefined) {
// initialize
mode='init';
var defaults={
page: undefined,
pages: 0,
prefix: '',
callback: function() {},
}
var options = $.extend(defaults, cmd);
if (!options.page) {
options.page = (!sessionStorage.getItem(options.prefix+"pager") || sessionStorage.getItem(options.prefix+"pager").replace(/[^0-9]/g,'')=='')?1:sessionStorage.getItem(options.prefix+"pager");
}
if (options.page > options.pages && options.pages >0) { options.page = options.pages; }
sessionStorage.setItem(options.prefix+"pager", options.page);
} else {
switch (cmd) {
case "clear":
mode='remove';
break;
case "getPage":
mode='getPage';
break;
case "update":
mode = 'update';
if (value.page > value.pages) { value.page = value.pages; }
var options = value;
break;
default:
return;
}
}
if (mode=='getPage') {
return sessionStorage.getItem($(this).prop('foxPager_prefix')+"pager");
}
this.each(function(rid,ref) {
if (mode!='remove') {
if (options.page!==undefined) {
$(ref).prop('foxPager_page', options.page);
} else {
options.page = $(ref).prop('foxPager_page');
}
if (options.pages!==undefined) {
$(ref).prop('foxPager_pages', options.pages);
} else {
options.page = $(ref).prop('foxPager_pages');
}
if (mode =='init') {
$(ref).empty();
$(ref).prop('foxPager_prefix', options.prefix);
$(ref).addClass('foxPager_'+options.prefix);
$(ref).addClass('foxPagerMain');
$("<i>",{class: "fas fa-angle-double-left", css: { padding: "0 10 0 10", cursor: 'hand' }}).click(function() {
options.page = parseInt($(ref).prop('foxPager_page'));
options.pages = parseInt($(ref).prop('foxPager_pages'));
if (options.pages==0) { return; }
if (options.page > 1) {
options.page=1;
sessionStorage.setItem(options.prefix+"pager", options.page);
$(".foxPager_"+options.prefix).find(".foxPager_label").text("Стр: "+options.page+" из "+options.pages);
$(".foxPager_"+options.prefix).prop('foxPager_page', options.page);
options.callback({prefix: options.prefix, page: options.page});
}
})
.appendTo(ref);
$("<i>",{class: "fas fa-angle-left", css: { padding: "0 10 0 10", cursor: 'hand'} }).click(function() {
options.page = parseInt($(ref).prop('foxPager_page'));
options.pages = parseInt($(ref).prop('foxPager_pages'));
if (options.pages==0) { return; }
if (options.page > 1) {
options.page=options.page-1;
sessionStorage.setItem(options.prefix+"pager", options.page);
$(".foxPager_"+options.prefix).find(".foxPager_label").text("Стр: "+options.page+" из "+options.pages);
$(".foxPager_"+options.prefix).prop('foxPager_page', options.page);
options.callback({prefix: options.prefix, page: options.page});
}
}).appendTo(ref);
$("<span>",{text: "Стр: "+options.page+" из "+options.pages, class: 'foxPager_label', css: { padding: "0 10 0 10" }}).appendTo(ref);
$("<i>",{class: "fas fa-angle-right", css: { padding: "0 10 0 10", cursor: 'hand' } }).click(function() {
options.page = parseInt($(ref).prop('foxPager_page'));
options.pages = parseInt($(ref).prop('foxPager_pages'));
if (options.pages==0) { return; }
if (options.page < options.pages) {
options.page=options.page+1;
sessionStorage.setItem(options.prefix+"pager", options.page);
$(".foxPager_"+options.prefix).find(".foxPager_label").text("Стр: "+options.page+" из "+options.pages);
$(".foxPager_"+options.prefix).prop('foxPager_page', options.page);
options.callback({prefix: options.prefix, page: options.page});
}
}).appendTo(ref);
$("<i>",{class: "fas fa-angle-double-right", css: { padding: "0 10 0 10", cursor: 'hand' } }).click(function() {
options.page = parseInt($(ref).prop('foxPager_page'));
options.pages = parseInt($(ref).prop('foxPager_pages'));
if (options.pages==0) { return; }
if (options.page != options.pages) {
options.page=options.pages;
sessionStorage.setItem(options.prefix+"pager", options.page);
$(".foxPager_"+options.prefix).find(".foxPager_label").text("Стр: "+options.page+" из "+options.pages);
$(".foxPager_"+options.prefix).prop('foxPager_page', options.page);
options.callback({prefix: options.prefix, page: options.page});
}
}).appendTo(ref);
} else if (mode=='update') {
let prefix = $(ref).prop("foxPager_prefix");
sessionStorage.setItem(prefix+"pager", options.page);
$(ref).prop('foxPager_page',options.page);
$(ref).prop('foxPager_pages',options.pages);
$(ref).find(".foxPager_label").text("Стр: "+options.page+" из "+options.pages);
return;
}
} else {
$(ref).empty();
}
});
},
foxClick: function(href) {
if (typeof(href) != 'object') {
href={href: href};
}
if (href.external==true) {
this.click(function() {
if (getSelectionText()) { return; }
document.location.href=href.href; return false;
});
} else {
this.prop("href",href.href).click(function(ref) {
if (getSelectionText()) { return; }
xClick(ref);
});
}
this.addClass("clickable");
$.each(this.find("td"),function(key,val) {
if($(val).children().length == 0) {
let item=$("<a>",{href: href.href, html: $(val).html() });
$(val).empty().append(item);
}
});
return this;
},
onEnter: function(callback) {
if (typeof(callback)=="function") {
this.on('keyup', function (e) {
if (e.key === 'Enter' || e.keyCode === 13) {
callback(this);
}
})
}
}
})})(jQuery)