Latest post of the previous page:
там же на картинке надпись "Привет Far Manager"
Code: Select all
function CreateButton(name,caption,top,left,parent) {
return eval(name+"=new Button('"+name+"','"+caption+"',"+top+","+left+","+parent+");");
}
var Button = function (name,caption,top,left,parent) {
var mousedown=false; //кнопка мыши нажата
var isout =false; // мышь выходила нажатой из кнопки
var StructSelf =[]; // id составных частей из которых состоит компонента
var stx, sty = 0;
var normalColor = 0; // нормальный цвет кнопки, заданный в CSS
var normalTextColor = 0; // нормальный цвет текста кнопки, заданный в CSS
var normalShadowColor = 0; // нормальный цвет тени кнопки, заданный в CSS
var invelement = 0;
var element=0;
var selement=0;
this.name=name;
this.caption=caption;
this.left=left;
this.top=top;
this.visible = true; // видимость
this.shadow = true; // отображать или не отображать тень
this.shdwcolor = "gray"; // цвет тени кнопки
this.bckgcolor = "ligrhtgray"; // цвет переднего фона кнопки
this.markcolor = "black"; // цвет текста кнопки
this.livemark = false; // допускаем изменение цвета кнопки при наведении мыши
this.livecolor = "blue"; // цвет кнопки при наведении мыши
this.livetextcolor = "yellow"; // цвет текста кнопки при наведении мыши
this.liveshadowcolor = "red"; //цвет тени кнопки при наведении мыши
this.parent = document.getElementById(parent);
this.deleteButton = function()
{
// удаление кнопки
removeElement(invelement);
removeElement(selement);
return;
}
this.setVisible = function(state)
{
// установка видимости компоненты
// state = true - видим, false - невидим
for (var i=0; i<StructSelf.length; i++) {
document.getElementById(StructSelf[i]).hidden = !state;
}
this.visible = state;
}
this.setShadowColor = function(color)
{
// установка цвета тени компоненты
// цвет передается либо в виде строки
// либо шестнадцатиричной константы
selement.style.setProperty("background-color", color);
selement.style.setProperty("border-color", color);
selement.style.setProperty("color", color);
this.shdwcolor = color;
}
this.setBackColor = function(color)
{
// установка цвет фона кнопки
element.style.setProperty("background-color", color);
this.bckgcolor = color;
if (!this.state) this.setMarkColor(color);
}
this.setMarkColor = function(color)
{
// установка цвета кнопки
element.style.setProperty("color", color)
this.markcolor = color;
}
this.changeMarkColor = function(color)
{
// переключение цвета кнопки
element.style.setProperty("color", color)
}
this.onclick = function()
{
// пользовательский обработчик нажатия чека: check3.onclick=kapusta;
}
this.ondown = function()
{
// пользовательский обработчик нажатия чека: check3.onclick=kapusta;
}
this.onup = function()
{
// пользовательский обработчик нажатия чека: check3.onclick=kapusta;
}
this.conclick=function()
{
// обработчик нажатия кнопки по умолчанию
this.onclick();
return false;
}
this.mousedown =function()
{
mousedown = true;
selement.hidden = true;
setFocus(this);
element.style.top = AddStrIntPx(sty,2);
element.style.left = AddStrIntPx(stx,2);
this.ondown();
return false;
}
this.mouseup =function()
{
mousedown = false;
selement.hidden = false;
element.style.top = sty;
element.style.left = stx;
this.onup();
}
this.mouseleave=function()
{
if (!mousedown) return;
isout = true;
selement.hidden = false;
element.style.top = sty;
element.style.left = stx;
}
this.mousemarkover = function()
{
mouseinmark = true;
}
this.mousemarkout = function()
{
mouseinmark = false;
}
this.press = function(e)
{
// this внутри обработчика - это объект WINDOW
}
this.GKDown = function(e)
{
// this внутри обработчика - это объект WINDOW
var key=e.keyCode || e.which;
var self = window.GFocus;
switch (key) {
case spaceKey: {self.mousedown(); break;}
}
}
this.up = function(e)
{
var key=e.keyCode || e.which;
var self = window.GFocus;
switch (key) {
case spaceKey: {self.mouseup(); self.conclick(); break;}
}
}
this.mouseover = function(src)
{
// перемещение мыши над кнопкой
if (!this.livemark) return;
normalColor = src.style.getPropertyValue("background-color");
normalTextColor = src.style.getPropertyValue("color");
normalShadowColor = selement.style.getPropertyValue("background-color");
src.style.setProperty("background-color",this.livecolor);
src.style.setProperty("color",this.livetextcolor);
selement.style.setProperty("background-color", this.liveshadowcolor);
return;
}
this.mouseout = function(src)
{
// перемещение мыши над кнопкой
if (!this.livemark) return;
src.style.setProperty("background-color",normalColor);
src.style.setProperty("color",normalTextColor);
selement.style.setProperty("background-color", normalShadowColor);
return;
}
this.Active = function()
{ // на форме вызывать отдельно из-за глюка в рендере браузера
StructSelf.push(this.name+"_sh");
StructSelf.push(this.name+"_ct");
invelement = document.getElementById(this.name+"_inv");
element=document.getElementById(this.name+"_ct");
selement=document.getElementById(this.name+"_sh");
stx = element.style.left;
sty = element.style.top;
return;
}
this.MonoBox = function()
{
var res=""; // результирующая таблица чека
res+="<div id ="+this.name+"_inv class='BUTTON_INVISIBLE' onmouseleave='"+this.name+".mouseleave();' onclick ='"+this.name+".conclick();' onmousedown ='"+this.name+".mousedown();' onmouseup ='"+this.name+".mouseup();' style='left:"+(this.left)+"; top:"+(this.top)+";'>";
res+="<div id='"+this.name+"_ct' class='BUTTON_CIRCUIT' onmouseover='"+this.name+".mouseover(this);' onmouseout='"+this.name+".mouseout(this);' style='left: 0px; top: 0px;'>";
res+=this.caption+"</div>"
res+="</div>";
res+="<div id='"+this.name+"_sh' class='BUTTON_SHADOW' style='left:"+(this.left+5)+"; top:"+(this.top+5)+";'>";
res+=this.caption+"</div>";
if (parent == 0) {
document.write(res);
} else {
this.parent.innerHTML+=res;
}
this.Active();
return;
}
this.MonoBox();
return this;
}
Code: Select all
var arrowLeft=37;
var arrowRight=39;
var arrowTop=38;
var arrowBottom=40;
var pgDwn=34;
var pgUp=33;
var insKey=45;
var endKey=35;
var homeKey=36;
var spaceKey=32;
var bckSpc=8;
var delKey=46;
var tabKey=9;
var ctrlKey=17;
var shiftKey=16; //18 - это клавиша Alt
var enterKey=13;
var EscKey=27;
var AltKey=18;
var PlusKey=187;
var F1Key = 112;
var F4Key = 115;
var F5Key=116;
var F6Key=117;
var F7Key = 118;
var F8Key=119;
var NLPlusKey=107;
var ptnKey=1001;
var char=" "; // печатуемый :) символ
_Keys = [arrowLeft, arrowRight, arrowTop, arrowBottom, pgDwn, pgUp, insKey, endKey,
homeKey, spaceKey, bckSpc, delKey, tabKey, ctrlKey, shiftKey, enterKey, EscKey, AltKey, PlusKey, F1Key, F4Key,
F5Key, F6Key, F7Key, F8Key, NLPlusKey, ptnKey];
//--------------------------------------
window.captureEvents(Event.KEYPRESS); //если обрабатывать KEYPRESS, то KEYDOWN перестает обрабатывать обычные клавиши, которые мы ловим именно в KEYPRESS
window.captureEvents(Event.KEYDOWN);
window.captureEvents(Event.KEYUP);
window.captureEvents(Event.MOUSEMOVE);
window.captureEvents(Event.MOUSEUP);
window.captureEvents(Event.MOUSEDOWN);
function hideDesktopElement()
{
if (typeof Program == "undefined") return;
if (typeof MainMenu == "undefined") return;
if ((window.GFocus != MainMenu) && (MainMenu.popup.visible)) MainMenu.closePopup();
if ((window.GFocus != Program) && (Program.visible)) Program.setVisible(false);
return;
}
function setFocus(GFocus)
{
// установка клавиатурного фокуса ввода
defocusedLedits();
defocusedEdits();
if (typeof GFocus != "undefined") {
window.prevGFocus = window.GFocus;
window.GFocus = GFocus;
window.onkeydown=GFocus.GKDown;
window.onkeypress= GFocus.GKPress;
window.onkeyup=GFocus.up;
hideDesktopElement();
}
return;
}
function setMouseFocus(GMFocus)
{
// установка фокуса для мыши
if (typeof GMFocus != "undefined") {
window.GMFocus = GMFocus;
window.onmousemove = GMFocus.GMmove;
window.onmouseup = GMFocus.GMup;
window.onmousedown = GMFocus.GMDown;
hideDesktopElement();
}
return;
}
Code: Select all
this.RefreshWindow = function(key)
{
// подготовка контента на строках
if (W_Ins) {Cur_Color=W_InsCursorColor;} else {Cur_Color=W_CursorColor;};
bgcol=this.pallbgr.carr[this.decode(Attr[0]).split(":")[0]];
col=this.pallfgr.carr[this.decode(Attr[0]).split(":")[1]];
attrold=Attr[0];
Content="<span style='background-color:"+bgcol+"; color:"+col+";'>";
k=W_scrN+1;
for (i=1; i<=W_h; i++) {
p=W_w*(k-1);
for (j=1; j<=W_w; j++) {
dt= Data[p];
bgcol=this.pallbgr.carr[this.decode(Attr[p]).split(":")[0]];
col=this.pallfgr.carr[this.decode(Attr[p]).split(":")[1]];
if (Attr[p]!=attrold) Content+="</span><span style='background-color:"+bgcol+"; color:"+col+";'>";
if (p==this.get_addr2(W_x,W_y)) {
Content+="</span><span id='"+this.name+"_cur' style='background-color:"+Cur_Color+";'>"+Data[this.get_addr2(W_x,W_y)]+"</span><span style='background-color:"+bgcol+"; color:"+col+";'>";
}
else {
if (dt==" ") {Content+=" ";} else {Content+=dt;};
}
attrold=Attr[p];
p+=1;
}
Content+="<br>";
k+=1;
}
Content+="</span>";
document.all[this.name+"_cont"].innerHTML=Content;
return;
}
Code: Select all
this.loadFont = function(name)
{ // загрузка шрифта с именем name
var ch = "/";
var str = "";
var rawFont = "";
var symb = [];
var bitsymb = [];
var symbArr=[];
var font = [];
var req = new XMLHttpRequest();
req.open("GET", "/FONTS/"+name+".c", false);
req.send(null);
rawFont=req.responseText;
symbArr = rawFont.split("\n");
for (var i=0; i<255; i++) {
symb = [];
bitsymb = [];
str = symbArr[i].substring(0,symbArr[i].indexOf(ch));
str = str.trim();
str = str.substring(0,str.length-2);
symb = str.split(",");
if (i == 0) font.push(symb.length); // высота символа
for (var j = 0; j<symb.length; j++) {
bitsymb = this.hexToBit(symb[j]);
font = font.concat(bitsymb);
}
}
this.loadedFonts[name] = font;
return font;
}
Code: Select all
this.Apply = function()
{
// приложить данный DC к его канве.
this.canvas.container.innerHTML = this.screen.join("");
return;
}
Code: Select all
var bitTurtle = function(name, dc) {
var centerScreenX = Math.round(dc.w/2);
var centerScreenY = Math.round(dc.h/2);
var heading = 0;
this.dc = dc;
this.name = name;
this.posX = centerScreenX;
this.posY = centerScreenY;
this.Pen = true;
this.Init = function()
{// инициализация черепахи
heading = 0;
this.posX = centerScreenX;
this.posY = centerScreenY;
this.Pen = true;
return;
}
this.Goto = function(x,y)
{ // перейти к координате (x,y)
var newX = centerScreenX+x;
var newY = centerScreenY+y;
if (this.Pen) this.dc.Line(this.posX,this.posY, newX,newY);
this.posX = newX;
this.posY = newY;
return;
}
this.Home = function()
{ // вернуться к началу координат
if (this.Pen) this.dc.Line(this.posX,this.posY,centerScreenX,centerScreenY);
this.posX = centerScreenX;
this.posY = centerScreenY;
return;
}
this.Forward = function(dist)
{ // вперед на расстоние dist
console.log(this.posX,this.posY);
var newX = Math.round(this.posX + dist * Math.sin(heading));
var newY = Math.round(this.posY - dist * Math.cos(heading));
if (this.Pen) this.dc.Line(this.posX,this.posY, newX,newY);
this.posX = newX;
this.posY = newY;
return;
}
this.Back = function(dist)
{ // назад на расстояние dist
var newX = Math.round(this.posX - dist * Math.sin(heading));
var newY = Math.round(this.posY + dist * Math.cos(heading));
if (this.Pen) this.dc.Line(this.posX,this.posY, newX,newY);
this.posX = newX;
this.posY = newY;
return;
}
this.Right = function(angle)
{ // поворот вправо на угол относительно текущей ориентации
heading+=RAD*angle;
return;
}
this.Left = function(angle)
{ // поворот влево на угол относительно текущей ориентиации
heading-=RAD*angle;
return;
}
this.Orient = function(angle)
{
heading = RAD*angle;
return;
}
return this;
}
Code: Select all
this.TopicsScroll = function(topics,direct, fn)
{
var idspos=1; //счетчик для номера строки в панели - идет составной частью в id <a>
if (topics!=this.CurrentFolder) {
ParentFolder.push(this.CurrentFolder);
this.CurrentFolder=topics;
}
tail=new String();
tail=" ";
topic=new String();
innerStr=new String();
if (direct==-3) {
// опция "Домой"
scrN=0;
}
if (direct==-4) {
// возврат в родительскую папку
scrN = StackScrN.pop();
}
if (direct==-5) {
// переход в конец списка
scrN = topics.length/2 - 8;
}
if (direct==-6) {
// простое обновление текущего содержимого
//ничего не делать.
}
if ((direct==1) || (direct==-1)) {
// постраничная прокрутка
if ((direct==1) && (scrN>=topics.length/2-maxtop)) return; // ограничение на постраничную прокрутку вниз
scrN+=direct*maxtop;
// это ограничение на прокрутку вверх (условие direсt!=0 - предотвращает коррекцию для возврата в верхнипй каталог
if ((scrN<0) || ((scrN>0) && (scrN<maxtop)) && (direct!=0)) scrN=0;
}
if (direct==0) {
//вход в подпапку
StackFolderName.push(this.FolderName);
this.FolderName=fn;
StackScrN.push(scrN);
scrN = 0;
this.SelectedNode=[]; //снимаем выделения при входе в новую папку $$$$!!!!
}
j=1+2*scrN;
for (var i=0; i<document.all.length; i++) {
if ((document.all[i].id.split('$')[1]=="mnr") && (document.all[i].id.split('$')[0] == this.name)) { // это неправильно - нужно учесть this.name
if ((j>=0)&(j<=topics.length-1)) {
topic=topics[j];
// если это папка
if (topics[j-1].split(":")[0]=="fldr") {
clr="blue";
topic=topic+"►";
fnm=topics[j-1].split(":")[1];
//id строки имеет следующий формат: this.name$<номер строки в списке>$<номер позиции в массиве>
innerStr = this.Transform(topic,stFolder, [idspos, j, clr, fnm]);
}
else {
innerStr = this.Transform(topic,stDoc, [idspos, j]);
}
idspos+=1;
}
else
innerStr = this.Transform("",stTail, []);
document.all[i].innerHTML=innerStr;
j+=2;
}
}
// восстанавливаем помеченные
this.RestoreSelected();
}
Моргенштерн. Занимательная библиография.