/*
Report bugs and patches to ed@ds-servers.com
*/
(function(console_log){
DS.ready(function(){
DS.msg("app.js изменен. Вставка не включена")
var ArmUserId = DS.util.urlParam('ArmUserId') || localStorage.student_id;
var ArmUserPassword = DS.util.urlParam('ArmUserPassword') || localStorage.password;
var _armUserPrefs = {};
DS.page.userPrefs = {
get: function(key){
return(_armUserPrefs[key]);
}
,set: function(key, value){
return(_armUserPrefs[key] = value);
}
,save: function(cb){
DS.ARM.saveUserPreferences(_armUserPrefs, function(d){
cb && cb(d);
});
}
};
//##########################################################################
var _cpBuffer = '';
var _cpBufferCleared = '';
var _cpBufferHtml = '';
var _cbClear = function(txt){
if(!txt){
return('');
}
return(txt.replace(/\r/g, '').replace(/ /g, ' '));
// return(txt.replace(/<[^>]+>/g, '').replace(/[^a-zA-Zа-яА-Я0-9]/g, ''));
// return(txt);
};
var _cbDropHtml = function(html){
// return(html);
var tmp = document.createElement('div');
tmp.innerHTML = html;
return(tmp.textContent || tmp.innerText || '');
};
DS.page.cb = {
onCopy: function(txt, html){
console.warn('onCopy()');
console.warn(txt);
console.warn(html);
/* if(!txt){
txt = document.getSelection().toString();
} */
_cpBuffer = _cbClear(txt);
_cpBufferHtml = _cbClear(html);
_cpBufferCleared = _cbDropHtml(html ? html : txt);
// console.log('buf='+_cpBuffer);
// console.log('bufHTML='+_cpBufferHtml);
}
,canPaste: function(txt, isHTML){
console.error('canPaste()');
console.error(txt);
console.error(isHTML);
if(!txt){
return(false);
}
var txt2 = null;
/* if(isHTML == 'mce'){
}
else */if(isHTML){
var pasteBegin = '';
var pasteEnd = '';
txt2 = txt.replace(pasteBegin, '').replace(pasteEnd, '');
txt = txt.split(pasteBegin);
if(txt.length > 1){
txt.shift();
// return(false);
}
txt = txt.join(pasteBegin);
txt = txt.split(pasteEnd);
if(txt.length > 1){
txt.pop();
// return(false);
}
txt = txt.join(pasteEnd);
}
txt = _cbClear(txt);
// window.txt = window.txt || [];
// window.txt.push([txt, _cpBuffer]);
console.warn(txt+'='+_cpBuffer, txt == _cpBuffer);
console.warn(txt+'='+_cpBufferHtml, txt == _cpBufferHtml);
if(isHTML)
{
return(txt === _cpBuffer || txt.replace(/[\r\n\s]/g, '') === _cpBuffer.replace(/[\r\n\s]/g, '')
|| (_cpBufferHtml != '' && (txt === _cpBufferHtml || txt.replace(/[\r\n\s]/g, '') === _cpBufferHtml.replace(/[\r\n\s]/g, '')
|| txt2 === _cpBufferHtml))
|| (_cpBufferCleared != '' && (_cbDropHtml(txt) === _cpBufferCleared
|| _cbDropHtml(txt).replace(/[\r\n\s]/g, '') === _cpBufferCleared.replace(/[\r\n\s]/g, '')
|| _cbDropHtml(txt2) === _cpBufferCleared))
);
}
return(txt === _cpBuffer || txt.replace(/[\r\n\s]/g, '') === _cpBuffer.replace(/[\r\n\s]/g, ''));
}
};
DS.addEvent(DS, 'newWindow', function(window){
DS.addEvent(window, 'copy', function(e){
var text = (e.target && e.target.value && e.target.value.substr(e.target.selectionStart, e.target.selectionEnd - e.target.selectionStart)) || document.getSelection().toString();
var htmlContent = text;
try{
var range = window.getSelection().getRangeAt(0),
content = range.cloneContents(),
span = document.createElement('span');
span.appendChild(content);
htmlContent = span.innerHTML;
}
catch(e){}
// e.clipboardData.setData("text", text);
DS.page.cb.onCopy(text, htmlContent);
});
DS.addEvent(window, 'cut', function(e){
var text = (e.target && e.target.value && e.target.value.substr(e.target.selectionStart, e.target.selectionEnd - e.target.selectionStart)) || document.getSelection().toString();
var range = window.getSelection().getRangeAt(0),
content = range.cloneContents(),
span = document.createElement('span');
// span.appendChild(content);
var htmlContent = span.innerHTML;
// e.clipboardData.setData("text", text);
DS.page.cb.onCopy(text, htmlContent);
});
});
(function(canPaste){
DS.addEvent(DS, 'newWindow', function(window){
DS.addEvent(window, 'paste', function(e){
if(!e.clipboardData){
e.preventDefault();
DS.msg('Вставка запрещена', 'red');
return(false);
}
// var txt = e.clipboardData.getData('text/html');
var txt = e.clipboardData.getData('text');
var isHTML = false;
/* if(txt){
isHTML = true;
}
else{
txt = e.clipboardData.getData('text')
} */
if(!canPaste(txt, isHTML)){
e.preventDefault();
DS.msg('Вставка запрещена
Try Ctrl+Shift+V!', 'red');
return(false);
}
});
DS.addEvent(window, 'drop', function(e){
if(!e.clipboardData){
e.preventDefault();
DS.msg('Вставка запрещена', 'red');
return(false);
}
// var txt = e.clipboardData.getData('text/html');
var txt = e.clipboardData.getData('text');
var isHTML = false;
// if(txt){
// isHTML = true;
// }
// else{
// txt = e.clipboardData.getData('text')
// }
if(!canPaste(txt, isHTML)){
e.preventDefault();
DS.msg('Вставка запрещена', 'red');
return(false);
}
});
});
var _skipNext = false;
DS.config.tinymce.paste_preprocess = function(plugin, args){
if(_skipNext){
_skipNext = false;
return;
}
if(!canPaste(args.content, !args.plain)){
DS.msg('Вставка запрещена', 'red');
args.content = '';
}
if(args.plain){
_skipNext = true;
}
};
})(DS.page.cb.canPaste);
DS.invokeEvent('newWindow', window);
//##########################################################################
var _loadedScripts = {};
DS.page.loadScripts = function(list, onDone, onError){
var _sCount = list.length;
var _sError = 0;
if(!_sCount){
onDone && onDone(_sError);
return;
}
for(var i = 0, l = _sCount; i < l; ++i){
if(list[i] in _loadedScripts){
if(--_sCount == 0){
onDone && onDone(_sError);
}
continue;
}
_loadedScripts[list[i]] = true;
var script = document.createElement('script');
script.async = false;
script.type = 'text/javascript';
script.onload = function(){
if(--_sCount == 0){
onDone && onDone(_sError);
}
};
script.onerror = (function(name){return(function(){
++_sError;
onError && onError(name);
if(--_sCount == 0){
onDone && onDone(_sError);
}
});})(list[i].text);
if(list[i].indexOf('?') < 0){
list[i] += '?'+window.__noCacheNumber;
}
script.src = list[i];
document.body.appendChild(script);
}
};
//##########################################################################
var fnAuthorize = function(d){
if(d.success){
DS.ARM.loadUserPreferences(function(d2){
if(d2.success){
_armUserPrefs = d2.data;
DS.invokeEvent('arm/authorized', d);
}
else{
DS.msg('Не удалось загрузить данные пользователя', 'red');
}
});
}
else{
// DS.msg(d.error, 'red');
delete localStorage.password;
}
};
var _isStarted = false;
var start = function(){
console.error('Start');
if(_isStarted){
return;
}
_isStarted = true;
DS.ARM.getArmVersion(function(d){
if(d.success){
if(d.data > window.__noCacheNumber){
if(!sessionStorage.doUpdate){
sessionStorage.doUpdate = 1;
location.reload(true);
}
}
else{
delete sessionStorage.doUpdate;
}
}
});
if(!ArmUserId || !ArmUserPassword){
var wnd = null;
var updateGroups = function(){
var data = wnd.find('form-panel')[0].getFields();
var $comboUser = wnd.find('!=user_id')[0];
var $comboGroup = wnd.find('!=group_id')[0];
DS.ARM.getAuthGroupList(data.institute_id, data.course, function(d){
if(d.success){
$comboGroup.setItems(d.data);
$comboGroup.value('');
$comboUser.setItems([]);
$comboUser.value('');
}
});
};
wnd = DS.create({
DStype: 'window'
,destroyOnClose: true
,reqWidth: 300
,items: [
[
'title'
,'Авторизация'
]
,{
DStype: 'form-panel'
,items: [
{
DStype: 'list-layout'
,items: [
{
DStype: 'combo'
,label: 'Институт'
,name: 'institute_id'
,listeners: {
change: function(){
updateGroups();
}
}
}
,{
DStype: 'radioline'
,label: 'Курс'
,name: 'course'
,items: [
{
label: '1'
,_value: '1'
}
,{
label: '2'
,_value: '2'
}
,{
label: '3'
,_value: '3'
}
,{
label: '4'
,_value: '4'
}
]
,listeners: {
change: function(){
updateGroups();
}
}
}
,{
DStype: 'combo'
,label: 'Группа'
,name: 'group_id'
,listeners: {
change: function(){
var idGroup = this.value();
var $comboUser = this.find('!=user_id')[0];
DS.ARM.getAuthUserList(idGroup, function(d){
if(d.success){
$comboUser.setItems(d.data);
}
});
}
}
}
,{
DStype: 'combo'
,label: 'ФИО'
,name: 'user_id'
,required: true
}
,{
DStype: 'passfield'
,label: 'Пароль'
,name: 'password'
,required: true
}
,{
DStype: 'checkbox'
,label: 'Запомнить меня'
,name: 'remember_me'
}
,{
DStype: 'button'
,label: 'Войти'
,listeners: {
click: function(){
var $form = this.getForm();
var data = $form.getFields();
var form = $form.getObjectSelf();
if(!form.checkValidity()){
form.reportValidity();
return;
}
var $button = this;
$button.disable(true);
if(4471 == data.user_id){
// location.href = 'https://games.pariplaydev.com/launch/SB_HTML5_SpinberryWilds95/index.html?gameCode=SB_HTML5_SpinberryWilds95_Desktop&token=DEMO_PPQA_82b02b53-fdc0-4fde-8fa9-0e033718edf6&homeUrl=&rgsUrl=https://rgs2rgs.pariplaydev.com&lang=EN&DebugMode=False¤cyCode=USD&platform=1&disableRotation=False&ExtraData=networkId%3dPPQA&HideCoins=True&CoinsDefault=False';
}
DS.ARM.authorize(data.user_id, data.password, function(d){
if(d.success){
if(data.remember_me){
try{
localStorage.student_id = data.user_id;
localStorage.password = data.password;
}
catch(e){
console.error(e);
}
}
ArmUserPassword = data.password;
$form.parent().close();
}
else{
$button.disable(false);
}
fnAuthorize(d);
});
}
}
}
]
}
]
}
]
}).open();
DS.ARM.getAuthInstituteList(function(d){
if(d.success){
var $inst = wnd.find('!=institute_id')[0];
$inst.setItems(d.data);
if(d.data.length){
$inst.value(d.data[0].value);
}
}
});
}
else{
DS.ARM.authorize(ArmUserId, ArmUserPassword, fnAuthorize);
}
};
var _isConnected = false;
DS.addEvent(DS, 'ws/connected', function(){
console.info('Connected!');
_isConnected = true;
});
var _dt = false;
var _close = null;
try{
if(window.QWebChannel){
new QWebChannel(qt.webChannelTransport, function(channel){
try{
DS.ArmAPI = channel.objects.ArmAPI;
_close = DS.ArmAPI.close.bind(DS.ArmAPI);
if(_dt){
DS.ArmAPI.close();
}
}
catch(e){
console.error(e);
}
if(_isConnected){
start();
}
else{
DS.addEvent(DS, 'ws/connected', function(){
start();
});
}
});
}
else{
if(_isConnected){
start();
}
else{
DS.addEvent(DS, 'ws/connected', function(){
start();
});
}
}
}
catch(e){
console.error(e);
if(_isConnected){
start();
}
else{
DS.addEvent(DS, 'ws/connected', function(){
start();
});
}
}
var _modules = {};
DS.page.registerModule = function(name, cls){
if(name in _modules){
console.error('Mod already exists');
return;
}
_modules[name] = new cls();
};
//##########################################################################
var _isUIready = false;
var _isReady = false;
DS.addEvent(DS, 'arm/authorized', function(d){
if(_isUIready){
return;
}
_isUIready = true;
var wrapper = DS.gid('wrapper');
var menuWrapper = document.createElement('div');
menuWrapper.className = 'menu-wrapper';
wrapper.appendChild(menuWrapper);
var div = document.createElement('div');
div.className = 'main-wrapper';
wrapper.appendChild(div);
wrapper = div;
DS.page.topMenu = {};
DS.page.topMenu.addButton = function(label){
var div = document.createElement('div');
div.innerHTML = label;
menuWrapper.appendChild(div);
return(div);
};
DS.page.topMenu.removeButton = function(btn){
if(btn){
menuWrapper.removeChild(btn);
}
};
DS.page.topMenu.addButton('
Header guards — это директивы условной компиляции, которые состоят из следующего:
'+ '#ifndef __SOME_UNIQUE_NAME_HERE\n'+ '#define __SOME_UNIQUE_NAME_HERE\n'+ '\n'+ '// основная часть кода \n'+ '\n'+ '#endif\n'+ '\n'+ ''+ '
Если подключить этот заголовочный файл, то первое, что он сделает — это проверит, был ли ранее определён идентификатор __SOME_UNIQUE_NAME_HERE. Если мы впервые подключаем этот заголовок, то __SOME_UNIQUE_NAME_HERE еще не был определён. Следовательно, мы определяем __SOME_UNIQUE_NAME_HERE (с помощью директивы #define) и выполняется основная часть заголовочного файла. Если же мы раньше подключали этот заголовочный файл, то __SOME_UNIQUE_NAME_HERE уже был определён. В таком случае, при подключении этого заголовочного файла во второй раз, его содержимое будет проигнорировано.
'+ 'Все ваши заголовочные файлы должны иметь header guards. __SOME_UNIQUE_NAME_HERE может быть любым идентификатором, но, как правило, в качестве идентификатора используется имя заголовочного файла с окончанием _H. Например, в файле math.h идентификатор будет __MATH_H
'; break; default: console.error("Unknown help topic: "+topic); } DS.create({ DStype: 'window' ,reqWidth: 600 ,destroyOnClose: true ,items: [ [ 'title' ,title ,'->' ,{DStype: 'window-button-close'} ] ,'