2018-11-22 21:02:44 +03:00

207 lines
6.8 KiB
JavaScript

// MIT License:
//
// Copyright (c) 2016-2017, Alexander I. Chebykin
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
/**
* CAI CP v.1
*
* @module : Downloader app
* @author : Alexander I. Chebykin <alex.chebykin@gmail.com>
* @copyright : Copyright (c) 2016-2017 Alexander I. Chebykin
* @version : 1.0
* @build date : 2017-06-05
* @license : MIT
* @link : https://github.com/CAI79/CAI-CP
******************************************************************/
(function () {
'use strict';
/**
* Return GET parameter from parent page
*
* @param {string} key Key name
*
* returns {string}
*/
function $_PARENT_GET(key) {
// var s = window.location.search;
var s = (window.location !== window.parent.location)
? document.referrer
: document.location.href;
s = s.match(new RegExp(key + '=([^&=]+)'));
return s ? s[1] : false;
}
/**
* Return GET parameter
*
* @param {string} key Key name
*
* returns {string}
*/
function $_GET(key) {
// var s = window.location.search;
var s = document.referrer;
s = s.match(new RegExp(key + '=([^&=]+)'));
return s ? s[1] : false;
}
/**
* Download system constructor
*
* @returns {undefined}
*/
function DownloadSystem() {
this.locales = 'en ru';
this.lang = {};
}
/**
* Download system initialization
*
* @param {string} lang Language code. Ex: en, ru etc.
*
* @returns {undefined}
*/
DownloadSystem.prototype.init = function (lang) {
var dl_instance = this,
json_file = 'locale/',
request = new XMLHttpRequest();
if (this.check_locale(lang)) {
json_file += lang + '.json';
} else {
json_file += 'en.json';
}
if (document.getElementById('lang') !== null) {
document.getElementById('lang').value = lang;
}
if ($_GET('overwrite') && (document.getElementById('overwrite') !== null)) {
document.getElementById('overwrite').checked = true;
}
request.open('GET', json_file);
request.send();
request.onreadystatechange = function () {
if (this.readyState === 4) {
if (this.status === 200) {
dl_instance.lang = JSON.parse(this.responseText);
document.getElementById('lbl_uri').textContent = dl_instance.lang.uri + ': ';
document.getElementById('lbl_dir').textContent = dl_instance.lang.dir + ': ';
document.getElementById('lbl_overwrite').textContent = dl_instance.lang.overwrite;
document.getElementById('lgn_log').textContent = dl_instance.lang.log;
document.getElementById('in_submit').value = dl_instance.lang.go;
document.getElementById('div_download').classList.toggle('hidden');
document.getElementById('div_log').classList.toggle('hidden');
}
}
};
};
/**
* Check locale support
*
* @param {string} locale Locale code to check. Ex: en, ru etc.
*
* @returns {Boolean}
*/
DownloadSystem.prototype.check_locale = function (locale) {
return this.locales.indexOf(locale.toLowerCase()) !== -1;
};
document.addEventListener('DOMContentLoaded', function () {
/**
* Initialize download object
*/
var download = new DownloadSystem();
if ($_GET('lang')) {
download.init($_GET('lang'));
} else if ($_PARENT_GET('lang')) {
download.init($_PARENT_GET('lang'));
} else {
download.init('en');
}
document.getElementById('frm_submit').onsubmit = function () {
var xhr = new XMLHttpRequest(),
msg,
cur_date = new Date();
xhr.onload = function () {
var log_rec = document.createElement('div'),
log_span = document.createElement('span'),
img_del = document.createElement('img'),
hr = document.createElement('hr');
log_rec.classList.add('div_log_rec');
log_rec.classList.add('hidden');
img_del.classList.add('del_rec');
img_del.src = '../../../gfx/buttons/delete.png';
img_del.title = download.lang.del_log_rec;
img_del.addEventListener('click', function () {
this.parentNode.parentNode.removeChild(this.parentNode);
});
log_rec.appendChild(log_span);
log_rec.appendChild(img_del);
log_rec.appendChild(hr);
// document.getElementById('div_log_recs').appendChild(log_rec);
document.getElementById('div_log_recs').insertBefore(log_rec,
document.getElementById('div_log_recs').childNodes[0]);
if (xhr.responseText === '[langDownloadStarted]') {
msg = download.lang.download_started;
} else {
msg = xhr.responseText;
}
log_span.appendChild(document.createTextNode(
cur_date.toLocaleString() + ': ' +
document.getElementById('dir').value + ' (' +
document.getElementById('uri').value + '): ' +
msg
)
);
log_rec.classList.toggle('hidden');
};
xhr.open(this.method, this.action, true);
xhr.send(new FormData(this));
return false;
};
});
}());