Skip to content

Instantly share code, notes, and snippets.

@alherd-by
Created October 6, 2014 13:38
Show Gist options
  • Save alherd-by/a52a9ec9e2c056b021fe to your computer and use it in GitHub Desktop.
Save alherd-by/a52a9ec9e2c056b021fe to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html id="day">
<head>
<script type="text/javascript">(function(){
var
d=(new Date({$time}*1000)).getHours();
document.documentElement.id=d>=23||d<9?"night":"day";
})();</script>
<meta charset="utf-8"/>
<title>box.unet.by</title>
<link rel="stylesheet" type="text/css" href="{$tpl_home}/css/global.css"/>
<!--[if IE 8]><link rel="stylesheet" type="text/css" href="{$tpl_home}/css/ie8fix.css"/><script type="text/javascript" src="{$tpl_home}/scripts/ie8fix.js"></script><![endif]-->
<style type="text/css">
#track-name > a:hover,#image-name a:hover{
text-decoration: underline;
}
</style>
<script type="text/javascript" src="{$tpl_home}/scripts/history.js"></script>
</head>
<body>
<div id="body">
<div style="padding:0 1px;">
<div style="position: relative;">
<div id="backing">
<div id="image-container">
<img id="image" style="display: none;"/>
</div>
<div id="error-container"><div id="error-wrapper"></div></div>
<div id="image-name"><div><a target='_blank'></a><div id="get-url"><a href="#">Получить ссылку</a><span><input type="text"><div id="copy-hint">Теперь нажмите Ctrl+C<span></span></div></span></div></div></div>
<button id="closer"><span class="icon icon-close"></span></button>
<div id="video-container"></div>
</div>
</div>
</div>
<div id="load" class="center">
<p><form action="/uploader" method="post" enctype="multipart/form-data" id="form" style="position: relative;display: inline-block;">
<span style="position: relative;display:inline-block;">
<input id="button" type="button" value="Загрузить файл через браузер"/>
<input name="file" id="file" multiple="multiple" type="file" value=""/>
</span>
<input data-table="tips" type="button" id="tips" value="?"/>
<input type="button" id="errors" value="!" style="display: none;"/>
</form></p>
<div style="display: none;">
<p class="margin">или</p>
<div class="width-wrap"><p><input type="search" value="" id="url"/><label for="url" class="input-hint">по URL-адресу в Интернете</label></p></div>
</div>
<p style="margin:4em 0 0;" class="mouse-info">Можно также перетащить его мышью прямо сюда</p>
<div id="loading" class="progress" data-table="loading" style="display: none">
<div class="progress-wrap">
<p id="progressbar"></p>
<span id="progresstext" class="progress-text">
<span id="progressfilename" class="text-wrap"></span>
<span id="progresspercent"></span>
</span>
</div>
</div>
</div>
<div class="left" id="list">
<div class="list-wrap">
<div>
<table id="table-loading">
<thead>
<tr>
<td>Имя загружаемого файла</td>
<td class="even right">Размер</td>
<td class="ago">Состояние</td>
</tr>
</thead>
<tbody id="loadingList"></tbody>
</table>
</div>
<div>
<table id="table-tips">
<thead>
<tr>
<td>Информация</td>
</tr>
</thead>
<tbody>
<tr><td>Размер каждого файла — до 200 МБ. <span class="mouse-info">Файлы можно перетаскивать мышью в это окно.</span></td></tr>
<tr><td><p>
Можно загружать
<span class="bold">архивы</span> (rar, zip, 7z),
<span class="bold">музыку</span> (mp3, wav, mid, wma),
<span class="bold">текст и таблицы</span> (txt, log, doc, docx, rtf, xls, xlsx, pdf),
<span class="bold">образы</span> (iso, mds, mdf, ngr),
<span class="bold">изображения и модели</span> (jpg, png, bmp, gif, psd, cdr, fly) и
<span class="bold">видео</span> (mp4, avi, mov, mpg, wmv, flv).
</p></td></tr>
<tr><td>Сразу после загрузки Вы сможете прослушать/просмотреть загруженный файл.</td></tr>
<tr><td>Чтобы вернуться назад к списку файлов, кликните в любой области экрана.</td></tr>
<tr><td>Чтобы просмотреть, что находится в очереди, кликните по индикатору загрузки.</td></tr>
</tbody>
</table>
</div>
<div class="active">
<table id="table-current">
<thead>
<tr>
<td>Имя файла</td>
<td class="even right">Размер</td>
<td class="ago">Загружено</td>
</tr>
</thead>
<tbody id="currentList">
{assign var="filecounter" value=0}
{foreach from=$list item=item}
{assign var="filecounter" value=$filecounter+1}
{if strrpos($item->filename,'.')===false}
{assign var="ext" value=""}
{else}
{assign var="ext" value=substr($item->filename, strrpos($item->filename,".")+1)}
{/if}
{if $filecounter>6}{break}{/if}
<tr>
<td class="text-wrap">
<a
data-ext="{$ext}"
href="/b/{$item->id}"
id="file-{$item->id}"
data-mime="{$item->mime}"
{assign var="type5" value={$item->mime|substr:0:5}}
{if $type5=="audio" && in_array(strtolower($ext),array('mp3','mp4','ogg','wav'))}
class="play"
{elseif $type5=="video" && in_array(strtolower($ext),array('mp4','webm','ogv','flv','mov'))}
class="play"
{elseif $type5=="image" && in_array(strtolower($ext),array('jpg','jpeg','png','gif','bmp'))}
class="view"
{else}
class="link"
{/if}
target="_blank"
data-name="{$item->filename}"
data-direct="/f/{(intval($item->id / 1000))}/{$item->tmp_name}"
data-download="/d/{$item->id}"
data-preview=""
>
<span class="text">{$item->filename}</span>
<span class="icon"></span>
</a>
</td>
<td class="even right">{$item->size}</td>
<td data-time="{$item->time}"> </td>
</tr>
{/foreach}
</tbody>
</table>
</div>
</div>
</div>
<div id="pane">
<table style="width: 100%;border:none;border-spacing: 0;border-collapse: collapse;">
<tr>
<td style="width:0;padding-right:1em;">
<button id="playpause">
<span class="icon icon-play"></span>
</button>
</td>
<td style="vertical-align: middle;width:100%;">
<div>
<div id="track-name"><a target='_blank'></a><div id="get-url2"><a href="#">Получить ссылку</a><span><input type="text"><div id="copy-hint2">Теперь нажмите Ctrl+C<span></span></div></span></div></div>
<table style="width:100%;height:1.5em;">
<tr>
<td style="padding:0 1em;vertical-align: middle;cursor:pointer;">
<div class="progressbar">
<div class="done"></div>
<div id="playback-handle" class="handle"></div>
</div>
</td>
<td style="padding:0 1em;width:4em;vertical-align: middle;cursor:pointer;">
<div class="progressbar">
<div class="done volume"></div>
<div id="playback-volume" class="handle"></div>
</div>
</td>
</tr>
</table>
</div>
</td>
<td style="width:0;padding-left:1em;">
<button id="playback-close">
<span class="icon icon-close"></span>
</button>
</td>
</tr>
</table>
</div>
</div>
<script type="text/javascript" src="{$tpl_home}/scripts/global.js"></script>
<script type="text/javascript" src="{$tpl_home}/scripts/sendfile.js"></script>
<script type="text/javascript" src="{$tpl_home}/scripts/audioPlayer.js"></script>
<script type="text/javascript" src="{$tpl_home}/scripts/videoPlayer.js"></script>
<script type="text/javascript">
(function(){
//TODO поисправлять ошибки, созникающие во время перетаскивания в браузер, когда идёт воспроизведение
var
sender=fileSender(),
MAX_FILES=6;
var
IDS=(function(){
var
a={ }, k,q;
q=document.querySelectorAll("*[id]");
for(k=q.length;k--;){
a[q[k].id]=q[k];
}
return a;
})();
var
LANG={
s_b:"Б",
s_kb:"КБ",
s_mb:"МБ",
s_gb:"ГБ",
s_tb:"ГБ",
s_pb:"ПБ",
queued:"В очереди",
loading:"Загружается"
},
FEATURES={
formdata:("FormData" in window)
},
COMMON={
openFileDialog:function(e){ IDS.file.click();e.stopPropagation(); },
submitForm:function(){
var
k,l;
if(FEATURES.formdata){
for(k=0,l=IDS.file.files.length;k<l;k++){
manager.create({ "file":IDS.file.files[k] });
}
}
else{
k=IDS.file;
createNewFileInput(k);
manager.create(k);
}
if(this.className=="safari"){
safariWinDropFix();
}
}
},
safariWinDropFix,
createNewFileInput=function(hSource){
IDS.file=document.createElement("input");
IDS.file.type="file";
IDS.file.id="file";
IDS.file.name="file";
IDS.file.addEventListener("change",COMMON.submitForm,false);
IDS.file.style.cssText=hSource.style.cssText;
hSource.parentNode.replaceChild(IDS.file,hSource);
},
convertSize=function(iBytes){
var
dims=["b","kb","mb","gb","tb","pb"],
c=0,c2=0;
while(iBytes>=1024){
c++;
iBytes/=1024;
}
while(Math.pow(10,c2)<iBytes){
c2++;
}
c2=Math.pow(10,Math.max(0,3-c2));
return (Math.round(iBytes*c2)/c2)+" "+LANG["s_"+dims[c]];
},
getTimeName=window.helpers.getTimeName;
var
manager=(function(){
var
cookie=window.helpers.cookie,
//TODO удалить default после отладки
session=cookie.PHPSESSID || "default",
fileCount=cookie.fileCounter || 0,
active=null,
queue=[],
clickHandlerRemove=function(){
this.link.cancel();
},
createRecord=function(sName,sSize,sInfo,oLink){
var
tr=document.createElement("tr");
tr.name=(tr.nameLayer=tr.appendChild(document.createElement("td"))).appendChild(document.createElement("span")).
appendChild(document.createTextNode(sName)
);
tr.name.parentNode.appendChild(document.createElement("span")).className="icon";
tr.size=(tr.sizeLayer=tr.appendChild(document.createElement("td"))).appendChild(document.createTextNode(sSize));
tr.info=(tr.infoLayer=tr.appendChild(document.createElement("td"))).appendChild(document.createTextNode(sInfo));
tr.nameLayer.className="text-wrap";
tr.sizeLayer.className="even right";
tr.name.parentNode.className="remove";
tr.name.parentNode.link=oLink;
tr.name.parentNode.addEventListener("click",clickHandlerRemove);
tr.record=this;
return tr;
},
generateId=function(){
return session+"_"+ (++fileCount);
},
parseInfo=function(mData){
var
k;
if(mData instanceof Element){
return {
name:mData.value.substr(Math.max(mData.value.lastIndexOf("/"),mData.value.lastIndexOf("\\"))+1),
size:""
};
}
else{
for(k in mData){
return {
name:mData[k].name,
size:convertSize(mData[k].size)
};
}
}
},
processQueue=function(){
var
a=(active?1:0),
k=Math.max(0,IDS.loadingList.childNodes.length+a-1),
l=Math.min(queue.length+a,MAX_FILES);
for(;k<l;k++){
IDS.loadingList.appendChild(queue[k-a].layer);
}
if(!active && queue.length){
queue[0].upload();
}
else{
if(!active){
IDS.loading.style.display="none";
mode.setMode("current");
if(IDS["error-container"].firstChild.childNodes.length){
IDS["errors"].click();
}
}
}
},
removeChildren=function(hRoot){
var
t;
while(t=hRoot.lastChild){
hRoot.removeChild(t);
}
},
loadHandler=function(oData){
var
a,d=document,t;
if(!oData || oData.error && oData.error.error){
t="Невозможно загрузить файл <span>"+active.parsed.name+"</span>: ";
switch(oData && oData.error && oData.error.error){
case 1://формат файла не поддерживается
t+="формат файла не поддерживается";
break;
case 2://слишком длинное имя файла
t+="слишком длинное имя файла";
break;
default:
t+="причина не установлена";
}
t+=".";
IDS["error-container"].firstChild.appendChild(document.createElement("p")).innerHTML=t;
IDS.errors.style.display="";
IDS.loadingList.removeChild(active.layer);
}
else{
while(IDS.currentList.childNodes.length>=6){
IDS.currentList.removeChild(IDS.currentList.lastChild);
}
IDS.currentList.insertBefore(active.layer,IDS.currentList.firstChild);
active.layer.info.textContent="";
active.layer.infoLayer.setAttribute("data-time",(new Date)/1000);
timeUpdater();
if(oData){
if(!active.parsed.size){
active.layer.size.textContent=active.parsed.size=convertSize(oData.size);
}
removeChildren(active.layer.nameLayer);
a=active.layer.nameLayer.appendChild(d.createElement("a"));
a.href=oData['url_browse'];
a.target="_blank";
var
ext='',
mime5=oData.type.toLowerCase().substr(0,5);
if(oData['filename'].indexOf('.')!=-1){
ext=oData['filename'].substr(oData['filename'].lastIndexOf('.')+1).toLowerCase();
}
if(mime5=="audio" && ['mp3','mp4','ogg','wav'].indexOf(ext)!=-1){
a.className="play";
}
else if(mime5=="video" && ['mp4','webm','ogv','flv','mov'].indexOf(ext)!=-1){
a.className="play";
}
else if(mime5=="image" && ['jpg','jpeg','png','gif','bmp'].indexOf(ext)!=-1){
a.className="view";
}
else{
a.className="link";
}
a.setAttribute("data-name",oData['filename']);
a.setAttribute("data-mime",oData['type']);
a.setAttribute("data-direct",oData['url']);
a.setAttribute("data-browse",oData['url_browse']);
a.setAttribute("data-download",oData['url_download']);
a.setAttribute("data-preview",'');
(t=a.appendChild(d.createElement("span"))).className="text";
t.appendChild(d.createTextNode(oData.filename));
a.appendChild(d.createElement("span")).className="icon";
a.addEventListener("click",openHandler);
}
}
if(!oData){ console.log("Response was not parsed."); }
active=null;
processQueue();
},
uploadHandler=function(oData){
if(!active){
return;
}
var
percent=oData.received/oData.size,
v=Math.round(percent*1000)/10;
if(v==(v|0)){
v+=".0%";
}
else{
v+="%";
}
IDS.progressfilename.innerHTML=active.parsed.name;
IDS.progresspercent.innerHTML=" — "+v;
IDS.progressbar.style.width=v;
if(!oData){ console.log("Response was not parsed."); }
if(!active.parsed.size && oData){
active.layer.size.textContent=active.parsed.size=convertSize(oData.size);
}
},
openHandler=function(e){
var
w,
info=getInfoFromLink(this);
if(e.ctrlKey || e.shiftKey || e.altKey){
return;
}
if(!(e.target.nodeName.toLowerCase()=="span" && e.target.className=="icon")){
if(browseFile(info,e)){
forward(info);
}
}
else{
window.open(info[2],'_blank');
e.preventDefault();
}
},
Record=function Record(mData){
this.data=mData;
this.parsed=parseInfo.call(this,mData);
this.layer=createRecord.call(this,this.parsed.name,this.parsed.size,LANG.queued,this);
this.layer.link=this;
this.id=generateId();
if(!queue.length && !active){
IDS.loading.style.display="";
mode.setMode("loading");
}
queue.push(this);
processQueue();
};
//TODO перейти на extend
Record.prototype={
cancel:function(){
if(active==this){
sender.cancel(this.uploader);
active=null;
}
else{
queue.splice(queue.indexOf(this),1);
}
this.layer.parentNode.removeChild(this.layer);
this.layer=null;
processQueue();
},
upload:function(){
active=this;
queue.splice(queue.indexOf(this),1);
this.layer.info.textContent=LANG.loading;
IDS.form.action="/uploader?X-Progress-ID="+this.id;
this.uploader=sender.send(this.data,IDS.form,loadHandler,uploadHandler,this.id);
}
};
if(!FEATURES.formdata){
IDS.file.removeAttribute("multiple");
}
(function(){
var k,a;
while(k=IDS.loadingList.lastChild){
IDS.loadingList.removeChild(k);
}
for(k=IDS.currentList.firstElementChild;k;k=k.nextElementSibling){
a=k.getElementsByTagName("a");
if(!a || !a[0]){
console.log("Структура записи сломана (не найден <a>). Проверь ещё раз.");
}
else{
a[0].addEventListener("click",openHandler,false);
}
a=k.getElementsByTagName("td")[1];
if(!a){
console.log("Структура записи сломана (не найден 2-й <td>). Проверь ещё раз.");
}
else{
a.innerHTML=convertSize(a.innerHTML-0);
}
}
window.onunload=function(){
window.helpers.saveCookie("fileCounter",fileCount,false);
};
})();
return {
create:function(mData){
new Record(mData);
},
cancel:function(){ }
};
})(),
mode=(function(){
var
mode="current",
prevMode=null,
tables=["current","loading","tips"],
tableLink={ },
sp=function(e){
e.stopPropagation();
},
turnOnHighlight=function(){
this.className+=" highlighted";
IDS.backing.className="highlighted";
},
turnOffHighlight=function(){
if(mode in IDS){
IDS[mode].className=IDS[mode].className.replace(/ highlighted/g,"");
}
IDS.backing.className="";
},
overHandler=function(){
setActiveTable(this.getAttribute("data-table"),false);
},
outHandler=function(){
if(mode!=this.getAttribute("data-table")){
setActiveTable(mode,false);
}
},
clickHandler=function(e){
if(mode!="current"){
turnOffHighlight();
}
setActiveTable(this.getAttribute("data-table"),true);
if(mode in IDS){
turnOnHighlight.call(this);
}
e.stopPropagation();
},
setActiveTable=function(sName,bNewMode,bForceHighlight){
var k;
for(k in tableLink){
tableLink[k].parentNode.className="";
}
tableLink[sName].parentNode.className="active";
if(bNewMode){
if(mode!=sName){
prevMode=mode;
mode=sName;
}
}
if(bForceHighlight){
if(mode!="current"){
turnOnHighlight.call(IDS[sName]);
}
else{
turnOffHighlight();
}
}
},
intf={
setMode:function(sName){
setActiveTable(sName,true,true);
}
};
(function(){
var k;
for(k=tables.length; k--;){
tableLink[tables[k]]=document.getElementById("table-"+tables[k]);
}
})();
with(IDS){
tips.addEventListener("mouseover",overHandler,false);
tips.addEventListener("click",clickHandler,false);
tips.addEventListener("mouseout",outHandler,false);
loading.addEventListener("mouseover",overHandler,false);
loading.addEventListener("click",clickHandler,false);
loading.addEventListener("mouseout",outHandler,false);
list.addEventListener("click",sp,false);
backing.addEventListener("click",sp,false);
file.addEventListener("click",sp,false);
document.body.addEventListener("click",function(){
turnOffHighlight();
setActiveTable("current",true);
},false);
form.addEventListener("click",sp,false);
}
return intf;
})(),
ignoreBack=false,
getInfoFromLink=function(link){
return [
link.getAttribute('data-name'),//имя файла
link.getAttribute('data-mime'),
link.getAttribute('data-direct'),//прямая ссылка на файл (для плееров)
link.getAttribute('data-browse'),//ссылка на страницу
link.getAttribute('data-download'),//ссылка на загрузку (для ссылки плееров)
link.className.indexOf('link')==-1
];
},
browseFile=function(fileinfo,e){
var
media=false;
if(!fileinfo){
return false;
}
switch(fileinfo[1].substr(0,5) ){
case "audio":
media=true;
if(fileinfo[5]){
playerManager.playAudio(fileinfo[2],fileinfo[0],fileinfo[2],fileinfo[1]);
e && e.preventDefault();
break;
}
case "video":
media=true;
if(fileinfo[5]){
playerManager.playVideo(fileinfo[2],fileinfo[0],fileinfo[2],fileinfo[1]);
e&&e.preventDefault();
break;
}
case "image":
media=true;
if(fileinfo[5]){
playerManager.viewImage(fileinfo[2],fileinfo[0],fileinfo[2]);
e&&e.preventDefault();
break;
}
default:
if(!fileinfo[5] || media){
window.open(fileinfo[4],'_blank');
e&&e.preventDefault();
return false;
}
}
return true;
},
timeUpdater=function(){
var k=IDS.currentList.firstElementChild, v;
for(; k; k=k.nextElementSibling){
if(v=k.lastElementChild.getAttribute("data-time")){
if(!k.lastElementChild.firstChild){
k.lastElementChild.appendChild(document.createTextNode(''));
}
k.lastElementChild.firstChild.textContent=getTimeName(v-0);
}
}
},
playerManager=(function(){
var
watcher=(function(){
var
intervalID=0;
return {
start:function(){
if(!intervalID){
intervalID=setInterval(watcherHandler,50);
}
},
stop:function(){
if(intervalID){
clearInterval(intervalID);
intervalID=0;
}
}
};
})(),
watcherHandler=function(){
var
pos=0;
try{
switch(playerMode){
case "v":
pos=videoPlayer.getPosition();
break;
case "a":
pos=audioPlayer.getPosition();
break;
}
}
catch(e){
console.log(e);
watcher.stop();
}
pos=(pos||0)*100+"%";
IDS["playback-handle"].style.left=pos;
IDS["playback-handle"].previousElementSibling.style.width=pos;
},
playerMode=null,//"v","i","a"
playing=false,
changingSource=false,
audioPlayer=new AudioPlayer,
videoPlayer=new VideoPlayerSimple(IDS["video-container"]),
toggleHandler=function(){
IDS["playpause"].firstElementChild.className="icon icon-"+(!playing?"play":"pause");
},
clickHandler=function(){
pause();
toggleHandler();
},
play=function(sUrl,sMode,sName,sMime,sDownload){
stop();
switch(playerMode=sMode){
case "v":
changingSource=true;
IDS.body.className="pane fullsize video";
videoPlayer.play(sUrl,sMime);
IDS["track-name"].firstChild.innerHTML=1;
break;
case "a":
changingSource=true;
IDS.body.className="pane";
audioPlayer.play(sUrl,sMime);
IDS["track-name"].firstChild.innerHTML=1;
break;
}
IDS["track-name"].firstChild.innerHTML=sName;//"<a href='"+sDownload+"' target='_blank'>"+sName+"</a>"
IDS["track-name"].firstChild.href=sDownload;
IDS["get-url2"].firstChild.href=sDownload;
IDS["get-url2"].lastChild.firstChild.value=IDS["get-url2"].firstChild.href;
IDS["get-url2"].firstChild.style.display="";
IDS["get-url2"].firstChild.nextSibling.style.display="none";
//IDS["track-name"].appendChild(document.createTextNode(sName||""));
playing=true;
toggleHandler();
},
pause=function(){
switch(playerMode){
case "v":
videoPlayer.pause();
playing=videoPlayer.isPlaying();
break;
case "a":
audioPlayer.pause();
playing=audioPlayer.isPlaying();
break;
}
},
seek=function(nPos){
switch(playerMode){
case "v":
videoPlayer.seek(nPos);
break;
case "a":
audioPlayer.seek(nPos);
break;
}
},
stop=function(){
switch(playerMode){
case "v":
videoPlayer.pause(true);
break;
case "a":
audioPlayer.pause(true);
break;
}
playerMode=null;
IDS["body"].className="";
},
setVolume=function(nVolume){
switch(playerMode){
case "v":
videoPlayer.setVolume(nVolume);
break;
case "a":
audioPlayer.setVolume(nVolume);
break;
}
IDS["playback-volume"].previousElementSibling.style.width=
IDS["playback-volume"].style.left=
-nVolume*100+"%";
},
dontClearErrors=false,
intf,
closeHandlerImage,
closeHandlerAV;
videoPlayer.onready=audioPlayer.onready=function(){
videoPlayer.setVolume(100);
audioPlayer.setVolume(100);
IDS["playback-volume"].previousElementSibling.style.width=
IDS["playback-volume"].style.left="100%";
};
videoPlayer.onplay=audioPlayer.onplay=function(){
changingSource=false;
playing=true;
toggleHandler();
watcher.start();
};
videoPlayer.onpause=audioPlayer.onpause=function(){
if(changingSource){
return;
}
playing=false;
toggleHandler();
watcher.stop();
};
videoPlayer.onstop=audioPlayer.onstop=function(){
if(changingSource){
return;
}
stop();
watcher.stop();
};
videoPlayer.onerror=audioPlayer.onerror=function(iCode){
var
messages={
1:"Формат воспроизведения не поддерживается",
2:"Файл не найден на сервере",
3:"Неизвестная ошибка"
};
IDS["track-name"].firstChild.removeAttribute('href');
IDS["track-name"].firstChild.innerHTML=messages[iCode||3]||"";
/*alert("Ошибка: "+messages[iCode||3]);*/
setTimeout(function(){
changingSource=false;
},100);
};
IDS["playback-handle"].parentNode.parentNode.addEventListener("click",function(e){
var
rect=IDS["playback-handle"].parentNode.getBoundingClientRect();
seek(-Math.max(0,Math.min(e.pageX-rect.left,rect.width))/rect.width)
});
IDS["playback-volume"].parentNode.parentNode.addEventListener("click",function(e){
var
rect=IDS["playback-volume"].parentNode.getBoundingClientRect();
setVolume(-Math.max(0,Math.min(e.pageX-rect.left,rect.width))/rect.width);
});
IDS["playback-close"].addEventListener("click",closeHandlerAV=function(e){
if(changingSource){
return;
}
if(e){
forward(null);
}
stop();
watcher.stop();
if(!ignoreBack){
//history.back();
ignoreBack=true;
setTimeout(function(){
ignoreBack=false;
},0);
}
});
IDS["closer"].addEventListener("click",closeHandlerImage=function(e){
if(e){
forward(null);
}
IDS.body.className=IDS.body.className.indexOf('pane')==-1?"":'pane';
IDS["error-container"].style.display="";
if(!dontClearErrors){
IDS["error-container"].firstChild.innerHTML="";
}
else{
if(IDS["error-container"].firstChild.childNodes.length){
IDS.errors.style.display="";
}
}
IDS["image-name"].style.display="none";
IDS.image.style.display="none";
if(!ignoreBack){
//history.back();
ignoreBack=true;
setTimeout(function(){
ignoreBack=false;
},0);
}
});
IDS["errors"].addEventListener("click",function(){
intf.showErrors();
});
(function(){
IDS.playpause.addEventListener("click",clickHandler);
})();
return intf={
playAudio:function(sUrl,sName,sDownload,sMime){
play(sUrl,"a",sName,sMime,sDownload);
},
playVideo:function(sUrl,sName,sDownload,sMime){
play(sUrl,"v",sName,sMime,sDownload);
},
viewImage:function(sUrl,sName,sDownload){
IDS.image.src=sUrl;
IDS.body.className+=" fullsize";
IDS.image.style.display="";
IDS["image-name"].style.display="";
IDS["image-name"].firstChild.firstChild.innerHTML=sName;//"<a href='"+sDownload+"' target='_blank'>"+sName+"</a>";
IDS["image-name"].firstChild.firstChild.href=sDownload;
IDS["get-url"].firstChild.href=sDownload;
IDS["get-url"].lastChild.firstChild.value=IDS["get-url"].firstChild.href;
IDS["get-url"].firstChild.style.display="";
IDS["get-url"].firstChild.nextSibling.style.display="none";
IDS.image.parentNode.replaceChild(IDS.image,IDS.image);
},
showErrors:function(){
IDS.errors.style.display="none";
IDS.body.className+=" fullsize";
mode.setMode("current");
IDS["error-container"].style.display="block";
},
closeAll:function(){
dontClearErrors=true;
closeHandlerAV();
closeHandlerImage();
dontClearErrors=false;
forward(null);
},
whatIsOpen:function(){
return playerMode;
}
}
})(),
noForward=false,
forward=function(info){
if(!noForward){
history.pushState(info,'box.unet.by'+(info?': файл '+info[0]:''),info?info[3]:'/');
document.title='box.unet.by'+(info?': файл '+info[0]:'');
}
};
window.addEventListener('popstate',function(e){
noForward=true;
if(playerManager.whatIsOpen()!='a'){
playerManager.closeAll();
}
if(location.pathname!='/'){
if(history.state){
browseFile(history.state);
}
document.title='box.unet.by'+(history.state?': файл '+history.state[0]:'');
}
else{
document.title='box.unet.by';
}
noForward=false;
},false);
(function(){
var
k, a,
operaPresto=window.helpers.browser=="opera" &&
window.helpers.engine=="presto" &&
window.opera.version().split(".")[0]-0<12,
dragMode=null;
if(operaPresto){
IDS.file.style.cssText="left:0;top:0;opacity:0;z-index:auto;cursor:pointer;display:inline-block;width:100%;padding-left:0;padding-right:0;";
}
if(FEATURES.formdata){
if(window+""=="[object DOMWindow]" && navigator.platform.toLowerCase().indexOf("win")==0){
IDS.file.className="safari";
document.documentElement.addEventListener("dragover",function(e){
var dt=e.dataTransfer;
if(dragMode===null){
if(dragMode=dt&&
(dt.files&&dt.files.length>0||Array.prototype.indexOf.call(dt.types,"Files")!= -1)){
IDS.body.className+=" here";
playerManager.closeAll();
}
}
if(!dt){
return;
}
if(dragMode!==null){
//e.preventDefault();
if(dragMode){
dt.dropEffect="link";
dt.effectAllowed="all";
}
else{
dt.dropEffect="none";
dt.effectAllowed="none";
}
}
});
document.documentElement.addEventListener("dragleave",otherHandler=function(e){
var w=Math.max(document.documentElement.clientWidth,
document.body.clientWidth), h=Math.max(document.documentElement.clientHeight,
document.body.clientHeight), x=e.clientX, y=e.clientY;
if(dragMode!==null&&( x<=0||y<=0||x>=w||y>=h)){
IDS.body.className=IDS.body.className.replace(/ ?here/g,"");
dragMode=null;
}
});
safariWinDropFix=function(){
IDS.body.className=IDS.body.className.indexOf('pane')==-1?"":'pane';
dragMode=null;
createNewFileInput(IDS.file);
IDS.file.className="safari";
};
}
else{
document.documentElement.addEventListener("dragover",function(e){
var dt=e.dataTransfer;
if(dragMode===null){
if(dragMode=dt && (dt.files && dt.files.length>0 || Array.prototype.indexOf.call(dt.types,"Files")!= -1)){
playerManager.closeAll();
IDS.body.className="here";
}
}
if(!dt){
return;
}
if(dragMode!==null){
e.preventDefault();
if(dragMode){
dt.dropEffect="link";
dt.effectAllowed="all";
}
else{
dt.dropEffect="none";
dt.effectAllowed="none";
}
}
});
document.documentElement.addEventListener("dragleave",function(e){
var
w=Math.max(document.documentElement.clientWidth,
document.body.clientWidth),
h=Math.max(document.documentElement.clientHeight,
document.body.clientHeight),
x=e.clientX,
y=e.clientY;
if(dragMode!==null&&( x<=0||y<=0||x>=w||y>=h)){
IDS.body.className=IDS.body.className.replace(/ ?here/g,"");
dragMode=null;
}
});
document.body.addEventListener("drop",function(e){
var dt=e.dataTransfer, k, l;
e.preventDefault();
e.stopPropagation();
if(dragMode!==null){
IDS.body.className="";
dragMode=null;
}
if(dt){
try{
for(k=0, l=dt.files.length; k<l; k++){
if(dt.files[k].type || dt.files[k].name.indexOf('.')!=-1){
manager.create({ file:dt.files[k] });
}
}
}
catch(e){
}
}
});
}
}
else{
//TODO выключить текст о перетаскивании мышью
a=document.querySelectorAll(".mouse-info");
for(k=a.length;k--;){
a[k].style.display="none";
}
}
for(k=IDS.currentList.firstChild;k;){
if(k.nodeType!=1){
k=k.nextSibling;
if(k){
IDS.currentList.removeChild(k.previousSibling);
k=k.nextSibling;
}
else{
IDS.currentList.removeChild(IDS.currentList.lastChild);
break;
}
}
}
})();
var
hndlrs={
'click':function(e){
e.preventDefault();
this.style.display="none";
this.nextSibling.style.display="";
//this.nextSibling.firstChild.select();
this.nextSibling.firstChild.focus();
},
'copy':function(e){
var
t=this;
setTimeout(function(){
t.firstChild.style.display="";
t.firstChild.nextSibling.style.display="none";
},0);
},
'focus':function(){
this.select();
},
'keydown':function(e){
if(e.keyCode==27 && !e.shiftKey && !e.ctrlKey && !e.altKey){
hndlrs.copy.call(this,e);
}
}
}
IDS["get-url"].firstChild.addEventListener('click',hndlrs.click,false);
IDS["get-url"].addEventListener('copy',hndlrs.copy,false);
IDS["get-url"].lastChild.firstChild.addEventListener('focus',hndlrs.focus,false);
IDS["get-url"].addEventListener('keydown',hndlrs.keydown,false);
IDS["get-url2"].firstChild.addEventListener('click',hndlrs.click,false);
IDS["get-url2"].addEventListener('copy',hndlrs.copy,false);
IDS["get-url2"].lastChild.firstChild.addEventListener('focus',hndlrs.focus,false);
IDS["get-url2"].addEventListener('keydown',hndlrs.keydown,false);
setInterval(timeUpdater,5000);
timeUpdater();
IDS.button.addEventListener("click",COMMON.openFileDialog,false);
IDS.file.addEventListener("change",COMMON.submitForm,false);
{if isset($fileinfo)}
{assign var="mime5" value={$fileinfo.mime|substr:0:5}}
{if strrpos($fileinfo.filename,'.')===false}
{assign var="ext" value=""}
{else}
{assign var="ext" value=substr($fileinfo.filename, strrpos($fileinfo.filename,"."))+1}
{/if}
{if
$mime5=="audio" && in_array(strtolower($ext),array('mp3','mp4','ogg','wav')) ||
$mime5=="video" && in_array(strtolower($ext),array('mp4','webm','ogv','flv','mov')) ||
$mime5=="image" && in_array(strtolower($ext),array('jpg','jpeg','png','gif','bmp'))
}
window.history.replaceState(
[
'{$fileinfo.filename}',
'{$fileinfo.mime}',
'{$fileinfo.url}',
'{$fileinfo.url_browse}',
'{$fileinfo.url_download}'
],
'box.unet.by: файл '+'{$fileinfo.filename}',
'{$fileinfo.url_browse}'
);
browseFile(history.state);
{/if}
{/if}
})();
</script>
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounter25690628 = new Ya.Metrika({
id:25690628,
webvisor:true,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
trackHash:true});
} catch(e) { }
});
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = "text/javascript";
s.async = true;
s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks");
</script>
<noscript><div><img src="//mc.yandex.ru/watch/25690628" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment