MSV FM

dot.antimicrobial@66.96.161.157: ~ $
Path : /hermes/sb_web/b1536/advancedfunctions.co/webdevelopment/article/
File Upload :
Current < : //hermes/sb_web/b1536/advancedfunctions.co/webdevelopment/article/index.html

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src='https://advancedfunctions.co/genericWebsiteCode/googleSheetsPortal.js'></script>
<script src='https://advancedfunctions.co/genericWebsiteCode/gui.js'></script>
</head>
<style>
.instructionStyle{padding:15px;background:lightgray;color:black;font:20px calibri;height:20vh;width:42vw;border-radius:10px;position:absolute;top:5vh;left:5vw;}

.textareaStyle{width:100%;height:100%;position:absolute;top:0px;left:0px;background-color:black;color:lime;font:20px calibri;padding:15px;border-radius:10px;padding:15px;resize:none;display:block;}

.textareaContainer{width:42vw;height:60vh;position:absolute;top:35vh;left:5vw;border-radius:10px;padding:0px 15px;background-color:black;}

.previewStyle{width:42vw;height:90vh;position:absolute;top:5vh;left:51vw;border:dashed 1px;overflow:auto;}

.navigatorStyle{position:absolute;left:50%;top:20vh;transform:translate(-50%,-50%);}
.indent{margin-left:20px;color:darkgray;}
.indentHighlight{color:blue;}

</style>

<body style='background-color:whitesmoke' onload='javascript:setInterval(timer,1000)'>
<div class='instructionStyle'>
<div id='instructions' style='height:15vh;overflow:auto'>
Enter your passcode followed by #
</div>

<div id='navigator' class='navigatorStyle'></div>
<div id='saveStatus' style='width:95%;color:gray;font:20px Calibri;text-align:right;position:absolute;bottom:10px;left:0px;'></div>
</div>


<div class='textareaContainer'>
<textarea id='code' onkeyup='javascript:updatePreview(this.value,true)' class='textareaStyle' autocomplete='off'></textarea>
</div>

<div id='preview' class='previewStyle'></div>
<div id='updatingPanel'></div>
</body>

<script>
var googleSheetsUserData='https://script.google.com/macros/s/AKfycbzig6B2xZE9jOx0XpAljbQ2ZLVq7_7CApBNRrnCy9ddom2Bi2oMmZk2-vIqg5oVj0gqaw/exec';
var userPasscode='';
var instructions='';
var instructionPageNumber=-1;
var userWebpageCode='';
var totalNumberOfPages;
var loadOnce=true;

function updatePreview(codeToPreview,textJustTyped){
if(instructionPageNumber!=-1){
try{
document.getElementsByName('tempScript')[0].remove();
}catch(e){}
document.getElementById('preview').innerHTML=codeToPreview;
var scripts=document.getElementById('preview').getElementsByTagName('script');
var customScript=document.createElement('script');
if(scripts.length>0){
customScript.textContent=scripts[0].innerHTML;
customScript.setAttribute('name','tempScript');
document.head.appendChild(customScript);
}
userWebpageCode=codeToPreview;

if(textJustTyped){
autoSaveTimer=0;}
}

if(instructionPageNumber==-1&&codeToPreview.indexOf('#')!=-1){
userPasscode=codeToPreview.replace('#','');
sendDataToGoogleSheets(['updateUserInfo',userPasscode,instructionPageNumber,userWebpageCode],googleSheetsUserData);
document.getElementById('saveStatus').innerHTML="<i>loading...</i>";}
}
function receiveDataFromGoogleSheets(){
if(getDataFromGoogleSheetsAsArray()[0]=='userInfo'){
instructionPageNumber=parseInt(getDataFromGoogleSheetsAsArray()[1]);
totalNumberOfPages=parseInt(getDataFromGoogleSheetsAsArray()[2]);
instructions=getDataFromGoogleSheetsAsArray()[3];
userWebpageCode=getDataFromGoogleSheetsAsArray()[4];

document.getElementById('instructions').innerHTML=instructions;
if(loadOnce){
document.getElementById('code').value=userWebpageCode;loadOnce=false;}

document.getElementById('navigator').innerHTML="<span style='padding:10px;cursor:pointer' onclick='javascript:changePage(-1)'><</span>&nbsp; "+instructionPageNumber+" / "+totalNumberOfPages+" &nbsp;<span style='padding:10px;cursor:pointer' onclick='javascript:changePage(1)'>></span>";
updatePreview(userWebpageCode,false);
document.getElementById('saveStatus').innerHTML="";
removeUpdating();
}

if(getDataFromGoogleSheetsAsArray()[0]=='invalidPasscode'){
document.getElementById('saveStatus').innerHTML="<i>Invalid passcode</i>";
}
}

function changePage(change){
setUpdating();
if((instructionPageNumber+change)>0&&(instructionPageNumber+change)<=totalNumberOfPages){
instructionPageNumber=instructionPageNumber+change;

sendDataToGoogleSheets(['updateUserInfo',userPasscode,instructionPageNumber,userWebpageCode],googleSheetsUserData);
document.getElementById('saveStatus').innerHTML="<i>updating...</i>";
}
}

var autoSaveTimer=0;
function timer(){
if(autoSaveTimer<4&&instructionPageNumber!=-1){
document.getElementById('saveStatus').innerHTML="<i>autosaving in "+(4-autoSaveTimer)+" s...</i>";}else{
document.getElementById('saveStatus').innerHTML="";}
if(autoSaveTimer==4&&instructionPageNumber!=-1){
sendDataToGoogleSheets(['updateUserInfo',userPasscode,instructionPageNumber,userWebpageCode],googleSheetsUserData);
}
autoSaveTimer++;
}

function setUpdating(){
document.getElementById('updatingPanel').innerHTML="<div style='position:absolute;top:0px;left:0px;z-index:2;width:100vw;height:100vh;'><div style='width:100%;height:100%;background-color:rgba(0,0,0,.4);'><div style='position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font:44px Calibri;color:rgba(120,120,120,0.8);'>Loading...</div></div></div>";
}
function removeUpdating(){
document.getElementById('updatingPanel').innerHTML='';
}
</script>
</html>