Редактирование: Scape

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 21: Строка 21:
  
  
== Клиент ==
+
== Результат ==
  
 
{{#widget:Iframe|url=https://ailurus.ru/utilities/scape/|width=900|height=760|border=1}}
 
{{#widget:Iframe|url=https://ailurus.ru/utilities/scape/|width=900|height=760|border=1}}
  
<div class="mw-collapsible mw-collapsed">
+
<big>[https://ailurus.ru/utilities/scape/ Страница полного решения]</big>
'''Исходный код клиента [JavaScript]:''' <div class="mw-collapsible-content">
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
/*
 
------<====== Prelusive JS ======>------
 
*/
 
function setCookie(cookieName, cookieValue){
 
document.cookie = cookieName + "=" + encodeURIComponent(cookieValue) + ";expires=" +
 
(new Date(new Date().getFullYear() + 2,0,0)).toUTCString();
 
}
 
function setCookieWithSpecifiedUTCDate(cookieName, cookieValue, cookieDate){
 
document.cookie = cookieName + "=" + encodeURIComponent(cookieValue) + ";expires=" +
 
cookieDate;
 
}
 
function getCookie(cookieName){
 
  var cookieValue = document.cookie.match('(^|;)?' + cookieName + '=([^;]*)(;|$)');
 
  return cookieValue ? decodeURIComponent(cookieValue[2]) : '';
 
}
 
function deleteCookie(cookieName){
 
document.cookie = cookieName + "=" + ";expires=Thu Jan 01 1970 00:00:00";
 
}
 
/*
 
------<====== End ======>------
 
------<====== Generic JS ======>------
 
*/
 
function runScapeClient(){
 
document.getElementById('chooseTaskButton').onclick = function(){
 
document.getElementById('createTask').style.display = 'none';
 
document.getElementById('chooseTask').style.display = 'block';
 
};
 
document.getElementById('uploadFilesButton').onclick = function(){
 
document.getElementById('createTask').style.display = 'none';
 
document.getElementById('uploadFiles').style.display = 'block';
 
};
 
document.getElementById('sendTask').onclick = function(){
 
if(!document.getElementById('tasks').selectedIndex){
 
document.getElementById('creation').className = 'error';
 
return;
 
}
 
 
var id = generateId();
 
var task = document.getElementById('tasks').value;
 
var numberOfRealisations = document.getElementById('numberOfRealisations').valueAsNumber;
 
var parameters = document.getElementById('parameters').value;
 
 
chooseTaskClean();
 
 
 
var taskElement = document.createElement('div');
 
taskElement.id = 'task' + id;
 
taskElement.className = 'task';
 
taskElement.innerHTML = '<span class="title">' + task + ' [' + numberOfRealisations + ']</span><br>' +
 
'Параметры: ' + (parameters ? parameters : 'по умолчанию') +
 
'<br>Прошло: <span id="timeWindow' + id + '" data-time="' + new Date() + '">-</span><br>' +
 
'<span id="stop' + id + '" class="button">Прервать</span>' +
 
'<span id="reload' + id + '" class="button">Перезапустить</span>' +
 
'<span id="result' + id + '" class="button">Результаты</span>';
 
document.getElementById('workspace')
 
.insertBefore(taskElement, document.getElementById('creation').nextSibling);
 
var taskWindow = document.getElementById('task' + id);
 
setTimeout(function(){
 
taskWindow.style.height = '86px';
 
taskWindow.style.color = '#fff';
 
taskWindow.style.opacity = '1';
 
}, 1);
 
var timer = setInterval(function(){
 
var timeWindow = document.getElementById('timeWindow' + id);
 
var startDate = timeWindow.getAttribute('data-time');
 
var elapsedTime = (new Date() - new Date(startDate)) / 1000;
 
timeWindow.innerText = formatTime(elapsedTime);
 
}, 1000);
 
sendTask(id, task, numberOfRealisations, parameters, timer);
 
};
 
document.getElementById('uploadFiles').onclick = function(){
 
uploadFiles(document.getElementById('files').files);
 
};
 
document.getElementById('chooseTaskCancel').onclick = chooseTaskClean;
 
document.getElementById('uploadFilesCancel').onclick = uploadFilesClean;
 
document.getElementById('updateSpecsButton').onclick = updateSpecs;
 
try{
 
      if(document.queryCommandEnabled('copy')){
 
        document.getElementById('copyResults').onclick = function(){
 
                document.getElementById('results').select();
 
                document.execCommand('copy');
 
        };
 
      document.getElementById('copyResults').style.display = 'inline';
 
        }else{
 
document.getElementById('selectResults').onclick = function(){
 
                document.getElementById('results').select();
 
        };
 
document.getElementById('selectResults').style.display = 'inline';
 
        }
 
    }catch(e){}
 
  document.getElementById('saveResults').onclick = saveResult;
 
document.getElementById('closeResults').onclick = function(){
 
document.getElementById('results').innerText = '';
 
document.getElementById('resultsWindow').style.display = 'none';
 
};
 
  document.getElementById('message').onclick = function(e){
 
this.style.display = 'none';
 
      this.innerHtml = '';
 
      this.className = '';
 
  }
 
setInterval(updateSpecs, 60000);
 
updateSpecs();
 
updateTasks();
 
}
 
 
 
var generateId = (function(){var i = 0; return (function(){return ++i;});})();
 
 
 
function createCORSInstance(method, url){
 
var r = new XMLHttpRequest;
 
"withCredentials" in r ? r.open(method, url, !0) : "undefined" != typeof XDomainRequest ? (r = new XDomainRequest, r.open(method,url)) : r = null
 
return r;
 
}
 
function updateSpecs(){
 
var r = createCORSInstance('GET', 'http://tm.spbstu.ru:8100/specs/');
 
var elements = document.querySelectorAll('[id^=\'specs_\']');
 
for(var key in elements) elements[key].innerText = '-';
 
r.onerror = function(){
 
      var message = document.getElementById('message');
 
message.innerHTML = message.innerHTML + 'Не удалось загрузить характеристики.<br>'
 
        message.className = 'error';
 
        message.style.display = 'block';
 
}
 
r.onload = function(){
 
var specs = JSON.parse(this.response);
 
for(var key in specs) document.getElementById('specs_' + key).innerText = specs[key];
 
};
 
r.send();
 
}
 
function updateTasks(){
 
var r = createCORSInstance('GET', 'http://tm.spbstu.ru:8100/tasks/');
 
var tasks = document.querySelectorAll('#tasks  option[value]');
 
for(var i = 0; i < tasks.length; ++i) tasks[i].remove();
 
r.onerror = function(){
 
      var message = document.getElementById('message');
 
message.innerHTML = message.innerHTML + 'Не удалось загрузить список заданий.<br>'
 
        message.className = 'error';
 
        message.style.display = 'block';
 
}
 
r.onload = function(){
 
var tasks = JSON.parse(this.response);
 
var tasksList = document.getElementById('tasks');
 
for(var i = 0; i < tasks.length; ++i){
 
var task = document.createElement('option');
 
task.value = task.innerText = tasks[i].slice(0, -3);
 
tasksList.appendChild(task);
 
}
 
};
 
    r.send();
 
}
 
function sendTask(id, task, numberOfRealisations, parameters, timer){
 
var r = createCORSInstance('GET', 'http://tm.spbstu.ru:8100/' + encodeURIComponent(task) + '/' +
 
numberOfRealisations + '/' + parameters.replace(/, /g, '&'));//fix encode
 
console.log('http://tm.spbstu.ru:8100/' + encodeURIComponent(task) + '/' +
 
numberOfRealisations + '/' + parameters.replace(/, /g, '&'));
 
var taskElement = document.getElementById('task' + id);
 
var stopButton = document.getElementById('stop' + id);
 
var reloadButton = document.getElementById('reload' + id);
 
var resultButton = document.getElementById('result' + id);
 
stopButton.style.display = 'inline';
 
reloadButton.style.display = 'none';
 
resultButton.style.display = 'none';
 
stopButton.onclick = function(){
 
r.abort();
 
clearTimeout(timer);
 
taskElement.className = 'default';
 
stopButton.style.display = 'none';
 
reloadButton.style.display = 'inline';
 
resultButton.style.display = 'none';
 
};
 
reloadButton.onclick = function(){
 
r.send();
 
};
 
r.onerror = function(){
 
clearTimeout(timer);
 
taskElement.className = 'error';
 
stopButton.style.display = 'none';
 
reloadButton.style.display = 'inline';
 
resultButton.style.display = 'none';
 
}
 
r.onload = function(){
 
      var result = this.response;
 
console.log(result);
 
clearTimeout(timer);
 
taskElement.className = 'success';
 
stopButton.style.display = 'none';
 
reloadButton.style.display = 'none';
 
resultButton.style.display = 'inline';
 
resultButton.onclick = function(){
 
document.getElementById('results').innerText = result;
 
document.getElementById('resultsWindow').style.display = 'block';
 
};
 
};
 
    r.send();
 
}
 
function uploadFiles(files){
 
var r = createCORSInstance('POST', 'http://tm.spbstu.ru:8100/upload/');
 
var f = new FormData();
 
for (var i = 0; i < files.length; ++i){
 
var file = files[i];
 
if(!file.type.match('application/x-javascript')){
 
continue;
 
}
 
f.append('files', file, file.name);
 
}
 
r.onerror = function(){
 
      var message = document.getElementById('message');
 
message.innerHTML = message.innerHTML + 'Не удалось загрузить файлы.<br>'
 
        message.className = 'error';
 
        message.style.display = 'block';
 
}
 
r.onload = function(){
 
console.log(this.response);
 
};
 
r.send(f);
 
}
 
function saveResult(){
 
var r = createCORSInstance('POST', './server/give.php');
 
var f = new FormData();
 
f.append('data', document.getElementById('results').innerText);
 
 
 
r.onerror = function(){
 
      var message = document.getElementById('message');
 
message.innerHTML = message.innerHTML + 'Запрос на сохранение не отправлен.<br>'
 
        message.className = 'error';
 
        message.style.display = 'block';
 
}
 
r.onload = function(){
 
      var response = JSON.parse(this.response);
 
if(response['error']){
 
            var message = document.getElementById('message');
 
            message.innerHTML = message.innerHTML + response + ' Файл не может быть сохранён.<br>'
 
            message.className = 'error';
 
            message.style.display = 'block';
 
        }else{
 
          var url = 'http://ailurus.ru/scape/' + decodeURIComponent(response['link']);
 
          console.log(url);
 
window.open(url, '_blank');
 
        }
 
};
 
r.send(f);
 
}
 
function chooseTaskClean(){
 
document.getElementById('creation').className = 'default';
 
document.getElementById('createTask').style.display = 'block';
 
document.getElementById('chooseTask').style.display = 'none';
 
document.getElementById('defaultTask').selected = 'selected';
 
document.getElementById('numberOfRealisations').value = 50;
 
document.getElementById('parameters').value = '';
 
}
 
function uploadFilesClean(){
 
document.getElementById('creation').className = 'default';
 
document.getElementById('createTask').style.display = 'block';
 
document.getElementById('uploadFiles').style.display = 'none';
 
document.getElementById('files').value = '';
 
}
 
function formatTime(input){
 
var hoursString = '00';
 
var minutesString = '00';
 
var secondsString = '00';
 
var hours = 0;
 
var minutes = 0;
 
var seconds = 0;
 
 
input = Math.ceil(input);
 
hours = Math.floor(input / (60 * 60));
 
input = input % (60 * 60);
 
 
minutes = Math.floor(input / 60);
 
input = input % 60;
 
 
seconds = input;
 
 
hoursString = (hours >= 10) ? hours.toString() : '0' + hours.toString();
 
minutesString = (minutes >= 10) ? minutes.toString() : '0' + minutes.toString();
 
secondsString = (seconds >= 10) ? seconds.toString() : '0' + seconds.toString();
 
 
return hoursString + ':' + minutesString + ':' + secondsString;
 
}
 
/*
 
------<====== End ======>------
 
*/
 
</syntaxhighlight>
 
</div>
 
</div>
 
Вам запрещено изменять защиту статьи. Edit Создать редактором

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Public Domain (см. Department of Theoretical and Applied Mechanics:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Отменить | Справка по редактированию  (в новом окне)
Источник — «http://tm.spbstu.ru/Scape»