Browse Source

Merge pull request #217 from Telaxus/refactor-epesi-js

Refactor epesi js
experimental
Paweł Jedwabny 4 years ago
committed by GitHub
parent
commit
cd5d8b215d
8 changed files with 223 additions and 571 deletions
  1. +1
    -1
      .babelrc
  2. +1
    -1
      init_js.php
  3. +0
    -72
      libs/HistoryKeeper/EventManager.js
  4. +0
    -272
      libs/HistoryKeeper/History.js
  5. +3
    -0
      package.json
  6. +90
    -0
      src/confirmLeave.js
  7. +126
    -213
      src/epesi.js
  8. +2
    -12
      src/index.js

+ 1
- 1
.babelrc View File

@@ -1,4 +1,4 @@
{
"presets": ["env"],
"plugins": ["transform-runtime"]
"plugins": ["transform-runtime", "transform-function-bind"]
}

+ 1
- 1
init_js.php View File

@@ -35,4 +35,4 @@ if($client_id-5>=0) {
}
session_commit();

?>Epesi.init(<?php print($client_id); ?>,'<?php print(rtrim(str_replace('\\','/',dirname($_SERVER['PHP_SELF'])),'/').'/process.php'); ?>','<?php print(http_build_query($_GET));?>');
?>window.Epesi = new EpesiClass(<?php print($client_id); ?>,'<?php print(rtrim(str_replace('\\','/',dirname($_SERVER['PHP_SELF'])),'/').'/process.php'); ?>','<?php print(http_build_query($_GET));?>');

+ 0
- 72
libs/HistoryKeeper/EventManager.js View File

@@ -1,72 +0,0 @@
/*
unFocus.EventManager, version 1.0 (svn $Revision: 32 $) $Date: 2009-06-13 03:32:05 -0400 (Sat, 13 Jun 2009) $
Copyright: 2005-2009, Kevin Newman (http://www.unfocus.com/)
http://www.opensource.org/licenses/mit-license.php
*/
// Package: unFocus.Utilities
// make sure faux-namespace is available before adding to it
if (!window.unFocus) var unFocus = {};

/** Class: EventManager
* Provides the interface and functionality to a Subscriber/Subscriber Pattern.
*
**/
/*
Constructor: EventManager
The Constructor (Prototype) function.

Parameters:
[type1 [, type2 [, etc.]]] - Optionally sets up an empty array for each named event.
*/
unFocus.EventManager = function() {
this._listeners = {};
for (var i = 0; i < arguments.length; i++) {
this._listeners[arguments[i]] = [];
}
};

unFocus.EventManager.prototype = {
/*
Method: addEventListener
Adds an event listener to the specified type.

Parameters:
$name - The event name.
$listener - The function to be called when the event fires.
*/
addEventListener: function($name, $listener) {
// check that listener is not in list
for (var i = 0; i < this._listeners[$name].length; i++)
if (this._listeners[$name][i] == $listener) return;
// add listener to appropriate list
this._listeners[$name].push($listener);
},
/*
Method: removeEventListener
Removes an event listener.
Parameters:
$name - The event name.
$listener - The function to be removed.
*/
removeEventListener: function($name, $listener) {
// search for the listener method
for (var i = 0; i < this._listeners[$name].length; i++) {
if (this._listeners[$name][i] == $listener) {
this._listeners.splice(i,1);
return;
}
}
},
/* Method: notifyListeners
Notifies the listeners of an event.
Parameters:
$name - The name of event to fire.
$data - The object to pass to the subscribed method (the Event Object).
*/
notifyListeners: function($name, $data) {
for (var i = 0; i < this._listeners[$name].length; i++)
this._listeners[$name][i]($data);
}
};

+ 0
- 272
libs/HistoryKeeper/History.js View File

@@ -1,272 +0,0 @@
/*
unFocus.History, version 2.0 (beta 1) (svn $Revision: 32 $) $Date: 2009-06-13 03:32:05 -0400 (Sat, 13 Jun 2009) $
Copyright: 2005-2009, Kevin Newman (http://www.unfocus.com/)
http://www.opensource.org/licenses/mit-license.php
*/

/*
Class: unFocus.History
A singleton with subscriber interface (<unFocus.EventManager>)
that keeps a history and provides deep links for Flash and AJAX apps
*/
unFocus.History = (function() {

function Keeper() {
var _this = this,
// set the poll interval here.
_pollInterval = 200, _intervalID,
_currentHash;

/*
method: _getHash
A private method that gets the Hash from the location.hash property.
returns:
a string containing the current hash from the url
*/
var _getHash = function() {
return location.hash.substring(1);
};
// get initial hash
_currentHash = _getHash();
/*
method: _setHash
A private method that sets the Hash on the location string (the current url).
*/
var _setHash = function($newHash) {
window.location.hash = $newHash;
};
/*
method: _watchHash
A private method that is called every n miliseconds (<_pollInterval>) to check if the hash has changed.
This is the primary Hash change detection method for most browsers. It doesn't work to detect the hash
change in IE 5.5+ or various other browsers. Workarounds like the iframe method are used for those
browsers (IE 5.0 will use an anchor creation hack).
*/
function _watchHash() {
var $newHash = _getHash();
if (_currentHash != $newHash) {
_currentHash = $newHash;
_this.notifyListeners("historyChange", $newHash);
}
}
// Put the hash check on a timer.
if (setInterval) _intervalID = setInterval(_watchHash, _pollInterval);
/*
method: getCurrentBookmark
A public method to retrieve the current history string.
returns:
The current History Hash
*/
_this.getCurrent = function() {
return _currentHash;
};
/*
method: addHistory
A public method to add a new history, and set the deep link. This method should be given a string.
It does no serialization.
returns:
Boolean - true if supported and set, false if not
*/
_this.addHistory = function addHistory($newHash) {
if (_currentHash != $newHash) {
_currentHash = $newHash;
_setHash($newHash);
_this.notifyListeners("historyChange",$newHash);
}
return true;
};

/**
* These are the platform specific override methods. Since some platforms (IE 5.5+, Safari)
* require almost completely different techniques to create history entries, browser detection is
* used and the appropriate method is created. The bugs these fixes address are very tied to the
* specific implementations of these browsers, and not necessarily the underlying html engines.
* Sometimes, bugs related to history management can be tied even to a specific skin in browsers
* like Opera.
*/
// opera
if (history.navigationMode)
history.navigationMode = 'compatible';
// Safari 2.04 and less (and WebKit less than 420 - these hacks are not needed by the most recent nightlies)
// :TODO: consider whether this aught to check for Safari or WebKit - is this a safar problem, or a does it
// happen in other WebKit based software? OmniWeb (WebKit 420+) seems to work, though there's a sync issue.
if (/WebKit\/\d+/.test(navigator.appVersion) && navigator.appVersion.match(/WebKit\/(\d+)/)[1] < 420) {
// this will hold the old history states, since they can't be reliably taken from the location object
var _unFocusHistoryLength = history.length,
_historyStates = {}, _form,
_recentlyAdded = false;
// Setting the hash directly in Safari seems to cause odd content refresh behavior.
// We'll use a form to submit to a #hash location instead. I'm assuming this works,
// since I saw it done this way in SwfAddress (gotta give credit where credit it due ;-) ).
function _createSafariSetHashForm() {
_form = document.createElement("form");
_form.id = "unFocusHistoryForm";
_form.method = "get";
document.body.insertBefore(_form,document.body.firstChild);
}
// override the old _setHash method to use the new form
_setHash = function($newHash) {
_historyStates[_unFocusHistoryLength] = $newHash;
_form.action = "#" + _getHash();
_form.submit();
};
// override the old _getHash method, since Safari doesn't update location.hash (fixed in nightlies)
_getHash = function() {
return _historyStates[_unFocusHistoryLength];
};
// set initial history entry
_historyStates[_unFocusHistoryLength] = _currentHash;
function addHistorySafari($newHash) {
if (_currentHash != $newHash) {
_currentHash = $newHash;
_unFocusHistoryLength = history.length+1;
_recentlyAdded = true;
_setHash($newHash);
_this.notifyListeners("historyChange",$newHash);
_recentlyAdded = false;
}
return true;
}
// provide alternative addHistory
_this.addHistory = function($newHash) { // adds history and bookmark hash
// setup the form fix
_createSafariSetHashForm();
// replace with slimmer version...
// :TODO: rethink this - it's adding an extra scope to the chain, which might
// actually cost more at runtime than a simple if statement. Can this be done
// without adding to the scope chain? The replaced scope holds no values. Does
// it keep it's place in the scope chain?
_this.addHistory = addHistorySafari;
// ...do first call
return _this.addHistory($newHash);
};
function _watchHistoryLength() {
if (!_recentlyAdded) {
var _historyLength = history.length;
if (_historyLength != _unFocusHistoryLength) {
_unFocusHistoryLength = _historyLength;
var $newHash = _getHash();
if (_currentHash != $newHash) {
_currentHash = $newHash;
_this.notifyListeners("historyChange", $newHash);
}
}
}
};
// since it doesn't work, might as well cancel the location.hash check
clearInterval(_intervalID);
// watch the history.length prop for changes instead
_intervalID = setInterval(_watchHistoryLength, _pollInterval);
// IE 5.5+ Windows
} else if (/*@cc_on!@*/0 && navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1] >= 5.5) {
// :HACK: Quick and dirty IE8 support (makes IE8 use standard timer method).
if (document.documentMode && document.documentMode >= 8)
return;
/* iframe references */
var _historyFrameObj, _historyFrameRef;
/*
method: _createHistoryFrame
This is for IE only for now.
*/
function _createHistoryFrame() {
var $historyFrameName = "unFocusHistoryFrame";
_historyFrameObj = document.createElement("iframe");
_historyFrameObj.setAttribute("name", $historyFrameName);
_historyFrameObj.setAttribute("id", $historyFrameName);
// :NOTE: _Very_ experimental
_historyFrameObj.setAttribute("src", 'javascript:;');
_historyFrameObj.style.position = "absolute";
_historyFrameObj.style.top = "-900px";
document.body.insertBefore(_historyFrameObj,document.body.firstChild);
// get reference to the frame from frames array (needed for document.open)
// :NOTE: there might be an issue with this according to quirksmode.org
// http://www.quirksmode.org/js/iframe.html
_historyFrameRef = frames[$historyFrameName];
// add base history entry
_createHistoryHTML(_currentHash, true);
}
/*
method: _createHistoryHTML
This is an alternative to <_setHistoryHTML> that is used by IE (and others if I can get it to work).
This method will create the history page completely in memory, with no need to download a new file
from the server.
*/
function _createHistoryHTML($newHash) {
with (_historyFrameRef.document) {
open("text/html");
write("<html><head></head><body onl",
'oad="parent.unFocus.History._updateFromHistory(\''+$newHash+'\');">',
$newHash+"</body></html>");
close();
}
}
/*
method: _updateFromHistory
A private method that is meant to be called only from HistoryFrame.html.
It is not meant to be used by an end user even though it is accessable as public.
*/
// hides the first call to the method, and sets up the real method for the rest of the calls
function updateFromHistory($hash) {
_currentHash = $hash;
_this.notifyListeners("historyChange", $hash);
}
_this._updateFromHistory = function() {
_this._updateFromHistory = updateFromHistory;
};

function addHistoryIE($newHash) { // adds history and bookmark hash
if (_currentHash != $newHash) {
// :NOTE: IE will create an entry if there is an achor on the page, but it
// does not allow you to detect the state change.
_currentHash = $newHash;
// sets hash and notifies listeners
_createHistoryHTML($newHash);
}
return true;
};
_this.addHistory = function($newHash) {
// do initialization stuff on first call
_createHistoryFrame();
// replace this function with a slimmer one on first call
_this.addHistory = addHistoryIE;
// call the first call
return _this.addHistory($newHash);
};
// anonymous method - subscribe to self to update the hash when the history is updated
_this.addEventListener("historyChange", function($hash) { _setHash($hash) });
}
}
Keeper.prototype = new unFocus.EventManager("historyChange");

return new Keeper();

})();

+ 3
- 0
package.json View File

@@ -24,6 +24,7 @@
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-function-bind": "^6.22.0",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.0",
"css-loader": "^0.28.7",
@@ -39,6 +40,7 @@
"webpack": "^3.6.0"
},
"dependencies": {
"axios": "^0.16.2",
"babel-runtime": "^6.26.0",
"bluebird": "^3.5.0",
"bootstrap": "^3.3.7",
@@ -47,6 +49,7 @@
"gentelella": "^1.3.0",
"jquery": "^2.x.x",
"jquery-ui": "^1.12.1",
"qs": "^6.5.1",
"select2": "^4.0.3"
}
}

+ 90
- 0
src/confirmLeave.js View File

@@ -0,0 +1,90 @@
import jQuery from 'jquery';

class ConfirmLeave {
// object of form ids which require confirmation for leaving the page
// store changed fields to pass through submit state
forms = {};
// store currently submitted form. If it'll fail to validate then we
// have list of changed fields
forms_freezed = {};
message = 'Leave page?';
//checks if leaving the page is approved
check = () => {
//remove non-existent forms from the array
[...Object.keys(this.forms), ...Object.keys(this.forms_freezed)].filter(item => (document.getElementById(item) === null)).forEach(item => Epesi.confirmLeave.deactivate(item));

//check if there is any not freezed form with changed values to confirm leave
let requires_confirmation = Object.keys(this.forms).reduce((previous, form_id) => previous || document.querySelector(`#${form_id} .changed-input`) !== null, false);

if (requires_confirmation) {
//take care if user disabled alert messages
let openTime = new Date();
let confirmed = false;
try {
confirmed = confirm(this.message);
} catch(e) {
confirmed = true;
}
let closeTime = new Date();
if ((closeTime - openTime) < 350) confirmed = true;

if(!confirmed) return false;
else this.deactivate();
}
return true;
};

activate = (form_id, message) => {
this.message = message;
// add form or restore from freezed state - form is freezed for submit
if (!this.forms.hasOwnProperty(form_id)) {
if (this.forms_freezed.hasOwnProperty(form_id)) {
this.forms[form_id] = this.forms_freezed[form_id];
delete this.forms_freezed[form_id];
} else {
this.forms[form_id] = [];
}
}

let form_element = document.getElementById(form_id);

// apply class to all changed inputs - required for validation failure
this.forms[form_id].forEach(input_name => jQuery(form_element).find(`[name="${input_name}"]`).addClass('changed-input'));

// on change add changed-input class
jQuery(form_element).on('change', 'input, textarea, select', function (e) {
if (e.originalEvent === undefined) return;
let input = jQuery(this);
input.addClass('changed-input');
if(Epesi.confirmLeave.forms.hasOwnProperty(form_id)) Epesi.confirmLeave.forms[form_id].push(input.attr('name'));
if(Epesi.confirmLeave.forms_freezed.hasOwnProperty(form_id)) Epesi.confirmLeave.forms_freezed[form_id].push(input.attr('name'));
});
//take care if user refreshing or going to another page
jQuery(window).unbind('beforeunload').on('beforeunload', function () {
if (jQuery('.changed-input').length) {
return Epesi.confirmLeave.message;
}
});
};

deactivate = (form_id = null) => {
if (form_id !== null) {
delete this.forms[form_id];
delete this.forms_freezed[form_id];
} else {
this.forms = {};
this.forms_freezed = {};
}

if (!Object.keys(this.forms).length) jQuery(window).unbind('beforeunload');
};

freeze = (form_id) => {
if (this.forms.hasOwnProperty(form_id)) {
this.forms_freezed[form_id] = this.forms[form_id];
delete this.forms[form_id];
}
}
}

export default ConfirmLeave;

+ 126
- 213
src/epesi.js View File

@@ -6,228 +6,141 @@
*/

import Loader from './loader';
import axios from 'axios';
import qs from 'qs';
import ConfirmLeave from './confirmLeave';

const Epesi = {
loader: new Loader(),
default_indicator:'loading...',
procOn:0,
client_id:0,
process_file:'process.php',
indicator:'epesiStatus',
indicator_text:'epesiStatusText',
confirmLeave: {
// object of form ids which require confirmation for leaving the page
// store changed fields to pass through submit state
forms:{},
// store currently submitted form. If it'll fail to validate then we
// have list of changed fields
forms_freezed:{},
message:'Leave page?',
//checks if leaving the page is approved
check: function() {
//remove non-existent forms from the array
jQuery.each(this.forms, function(f) {
if (!jQuery('#'+f).length) Epesi.confirmLeave.deactivate(f);
});
jQuery.each(this.forms_freezed, function(f) {
if (!jQuery('#'+f).length) Epesi.confirmLeave.deactivate(f);
});
//check if there is any not freezed form with changed values to confirm leave
var requires_confirmation = false;
if (Object.keys(this.forms).length) {
for (var form in this.forms) {
if (jQuery('#' + form + ' .changed-input').length) {
requires_confirmation = true;
break;
}
}
}
if (requires_confirmation) {
//take care if user disabled alert messages
var openTime = new Date();
try {
var confirmed = confirm(this.message);
} catch(e) {
var confirmed = true;
}
var closeTime = new Date();
if ((closeTime - openTime) > 350 && !confirmed) return false;
this.deactivate();
}
return true;
},
activate: function(f, m) {
this.message = m;
// add form or restore from freezed state - form is freezed for submit
if (!(f in this.forms)) {
if (f in this.forms_freezed) {
this.forms[f] = this.forms_freezed[f];
delete this.forms_freezed[f];
} else {
this.forms[f] = {};
}
}
// apply class to all changed inputs - required for validation failure
for (var key in this.forms[f]) {
jQuery('#' + f + ' [name="' + key + '"]').addClass('changed-input');
}
// on change add changed-input class
jQuery('#' + f).on('change', 'input, textarea, select', function (e) {
if (e.originalEvent === undefined) return;
var el = jQuery(this);
el.addClass('changed-input');
var form = f in Epesi.confirmLeave.forms ? Epesi.confirmLeave.forms[f] : Epesi.confirmLeave.forms_freezed[f];
form[el.attr('name')] = true;
});
//take care if user refreshing or going to another page
jQuery(window).unbind('beforeunload').on('beforeunload', function() {
if (jQuery('.changed-input').length) {
return Epesi.confirmLeave.message;
}
});
},
deactivate: function(f) {
if (arguments.length) {
delete this.forms[f];
delete this.forms_freezed[f];
} else {
this.forms = {};
this.forms_freezed = {};
}

if (!Object.keys(this.forms).length) jQuery(window).unbind('beforeunload');
},
freeze: function(f) {
if (f in this.forms) {
this.forms_freezed[f] = this.forms[f];
delete this.forms[f];
}
class Epesi {
loader = new Loader();
confirmLeave = new ConfirmLeave();
default_indicator = 'loading...';
procOn = 0;
client_id = 0;
process_file = 'process.php';
indicator = 'epesiStatus';
indicator_text = 'epesiStatusText';

constructor(client_id, process_file_path, params = '') {
this.client_id=client_id;
this.process_file=process_file_path;

axios.defaults.headers.common['X-Client-ID'] = client_id;

jQuery(document).ajaxSend((ev, xhr, settings) => {
xhr.setRequestHeader('X-Client-ID', this.client_id);
});

this.history_add(0);

if(!params) params = '';
this.request(params,0);

window.addEventListener('popstate', ({state: {history_id}}) => this.request('', history_id));
window._chj = this.href;
};

updateIndicator = () => {
document.getElementById(this.indicator).style.display = this.procOn ? '' : 'none';
if (!this.procOn) document.getElementById('main_content').style.display = '';
};

updateIndicatorText = (text) => {
document.getElementById(this.indicator_text).innerHTML = text;
document.getElementById(this.indicator_text).innerHTML = text;
};

history_add = (id) => {
window.history.pushState({history_id: id}, '');
};

request = async (url, history) => {
this.procOn++;
this.updateIndicator();

let keep_focus_field = null;
if (document.activeElement) keep_focus_field = document.activeElement.getAttribute('id');

try {
let response = await axios.post(this.process_file, qs.stringify({history, url}));
jQuery(document).trigger('e:loading');
let func = new Function(response.data);
window::func();
} catch (err) {
this.text(err.message, 'error_box', 'p')
}
},
updateIndicator: function() {
var s = jq('#' + Epesi.indicator);
if(s.length) {
if(Epesi.procOn) s.show();
else s.hide();

this.procOn--;
this.updateIndicator();
this.append_js("jQuery(document).trigger('e:load')");
if (keep_focus_field !== null) {
let element = document.getElementById(keep_focus_field);
if(element) element.focus();
}
if (!Epesi.procOn) jq('#main_content').show();
},
updateIndicatorText: function(text) {
jq('#' + Epesi.indicator_text).html(text);
},
history_on:1,
history_add:function(id){
Epesi.history_on=-1;
unFocus.History.addHistory(id);
},
get_ie_version:function() {
var rv = -1; // Return value assumes failure.
if (navigator.appName == 'Microsoft Internet Explorer') {
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat(RegExp.$1);
};

href = (url, indicator, mode, disableConfirmLeave = false) => {
if (!disableConfirmLeave && !this.confirmLeave.check()) return;
if(this.procOn === 0 || mode === 'allow'){
!indicator ? this.updateIndicatorText(this.default_indicator) : this.updateIndicatorText(indicator);
this.request(url);
} else if(mode === 'queue') {
setTimeout(() => this.href(url, indicator, mode), 500);
}
return rv;
},
ie:false,
init:function(cl_id,path,params) {
var ie_ver = Epesi.get_ie_version();
if (ie_ver!=-1) {
if(ie_ver<8.0) {
alert("Sorry but your version of Internet Explorer browser is not supported.\nYou should upgrade it or install Mozilla Firefox.");
window.location = "http://www.mozilla.com/firefox/";
} else {
Epesi.ie = true;
}
}

submit_form = (formName, modulePath, indicator) => {
this.confirmLeave.freeze(formName);
let form = document.querySelector(`form[name="${formName}"]`);
let submited = form.querySelector(`input[name="submited"]`);


submited.value = 1;

let formData = new FormData(form);
let url = qs.stringify(Object.assign(formData.getAll(), {'__action_module__': encodeURIComponent(modulePath)}));
_chj(url, indicator, '');

submited.value = 0;
};

text = (html, element_id, type = 'i') => {
let element = document.getElementById(element_id);
if(!element) return;

switch (type) {
case 'i':
element.innerHTML = html;
break;
case 'p':
element.insertAdjacentHTML('afterbegin', html);
break;
case 'a':
element.insertAdjacentHTML('beforeend', html);
break;
}
};

Epesi.client_id=cl_id;
Epesi.process_file=path;

Epesi.history_add(0);
if(typeof params == 'undefined')
params = '';
Epesi.request(params,0);
unFocus.History.addEventListener('historyChange',function(history_id){
switch(Epesi.history_on){
case -1: Epesi.history_on=1;
return;
case 1: Epesi.request('',history_id);
}
});
},
request: function(url,history_id) {
Epesi.procOn++;
Epesi.updateIndicator();
var keep_focus_field = null;
jQuery.ajax(Epesi.process_file, {
method: 'post',
data: {
history: history_id,
url: url
},
complete: function(xhr,t) {
Epesi.procOn--;
Epesi.append_js('jQuery(document).trigger(\'e:load\');Epesi.updateIndicator();');
if(keep_focus_field!=null) {
Epesi.append_js('jQuery("#'+keep_focus_field+':visible").focus();');
}
},
success: function(t) {
if(typeof document.activeElement != "undefined") keep_focus_field = document.activeElement.getAttribute("id");
jQuery(document).trigger('e:loading');
},
error: function(t,type,error) {
//throw(type+": "+e);
alert(type+' ('+error+')');
Epesi.text(type+": "+error,'error_box','p');
}
});
},
href: function(url,indicator,mode,disableConfirmLeave) {
if (typeof disableConfirmLeave == 'undefined' && !Epesi.confirmLeave.check()) return;
if(Epesi.procOn==0 || mode=='allow'){
if(indicator=='') indicator=Epesi.default_indicator;
Epesi.updateIndicatorText(indicator);
Epesi.request(url);
} else if(mode=='queue')
setTimeout('Epesi.href("'+url+'", "'+indicator+'", "'+mode+'")',500);
},
submit_form: function(formName, modulePath, indicator) {
action = jQuery.param({'__action_module__': encodeURIComponent(modulePath)});
Epesi.confirmLeave.freeze(formName);
jQuery('form[name="' + formName + '"] input[name="submited"]').val(1);
_chj(jQuery('form[name="'+formName+'"]').serialize() +'&' + action, indicator, '');
jQuery('form[name="' + formName + '"] input[name="submited"]').val(0);
},
text: function(txt,idt,type) {
var t=jq('#'+idt);
if(!t.length) return;
if(type=='i')//instead
t.html(txt);
else if(type=='p')//prepend
t.prepend(txt);
else if(type=='a')//append
t.append(txt);
},
load_js:function(file) {
Epesi.loader.load_js(file);
},
append_js:function(texti) {
Epesi.loader.execute_js(texti);
},
append_js_script:function(texti) {
load_js = file => {
this.loader.load_js(file);
};

append_js = texti => {
this.loader.execute_js(texti);
};

append_js_script = texti => {
console.warn('DEPRECATED: use Loader.execute_js instead');
Loader.insertScript(texti);
},
js_loader:function() {
};

js_loader = () => {
console.warn('DEPRECATED: load is invoked implicitly');
Epesi.loader.load();
},
load_css:function(file) {
Epesi.loader.load_css(file);
this.loader.load();
};

load_css =file => {
this.loader.load_css(file);
}
};
}

export default Epesi;

+ 2
- 12
src/index.js View File

@@ -10,9 +10,6 @@ import 'jquery-ui/themes/base/all.css'
import 'select2';
import 'select2/dist/css/select2.css';

import 'script-loader!../libs/HistoryKeeper/EventManager.js';
import 'script-loader!../libs/HistoryKeeper/History.js';

import 'script-loader!../libs/jquery.clonePosition.js';
import Chart from 'chart.js';

@@ -22,6 +19,7 @@ import 'font-awesome/css/font-awesome.css';
window.Chart = Chart;

import Epesi from './epesi';
window.EpesiClass = Epesi;

window.focus_by_id = (idd) => {
let xx = document.getElementById(idd);
@@ -39,12 +37,6 @@ window.wait_while_null = (id, action) => {
setTimeout('wait_while_null(\'' + addslashes(id) + '\', \'' + addslashes(action) + '\')', 200);
};

window._chj = Epesi.href;

jQuery(document).ajaxSend(function (ev, xhr, settings) {
xhr.setRequestHeader('X-Client-ID', Epesi.client_id);
});

window.getTotalTopOffet = e => {
let ret = 0;
while (e != null) {
@@ -62,6 +54,4 @@ window.is_visible = function (element) {
return is_visible(element.parentNode);
}
return true;
};

window.Epesi = Epesi;
};

Loading…
Cancel
Save