Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function horizontal_slider(element, attr) {
- sliderWidth = attr["width"];
- range1 = attr["min"];
- range2 = attr["max"];
- step = attr["single_step"];
- pageStep = attr["page_step"];
- if( (attr["tick_interval"]!=0) && (attr["tick_interval"]!=undefined) )
- {
- tickCount = attr["tick_interval"];
- }
- else
- {
- if(step>pageStep)
- count = step;
- else
- count = pageStep;
- tickCount = (range2-range1) / count;
- }
- var knobWidth = 17; // ширина и высота бегунка
- var knobHeight = 21; // изменяются в зависимости от используемых изображений
- var sliderHeight = 21; // высота slider'а
- var offsX,tmp; // вспомагательные переменные
- var d = document;
- var isIE = d.all || window.opera; // определяем модель DOM
- var point = (sliderWidth-knobWidth-3)/(range2-range1);
- // point - количество пикселей на единицу значения
- var slider = d.createElement('DIV'); // создаем slider
- slider.className = 'slider';
- slider.onchange = attr["change"];
- element.slider = slider;
- var ticks = d.createElement('table');
- ticks.className="BottomTable";
- var row = d.createElement('tr');
- for(i=0;i<tickCount;i++)
- {
- row.innerHTML+="<td> </td>";
- }
- ticks.appendChild(row);
- element.appendChild(slider);
- element.appendChild(ticks);
- element.style.width = sliderWidth + "px";
- element.onchange = onchange;
- var knob = d.createElement('DIV'); // создаем ползунок
- knob.className = 'knob';
- slider.appendChild(knob); // добавляем его в документ
- knob.style.left = 0; // бегунок в нулевое значение
- knob.style.width = knobWidth+'px';
- knob.style.height = knobHeight+'px';
- slider.style.width = sliderWidth+'px';
- slider.style.height = sliderHeight+'px';
- var sliderOffset = slider.offsetLeft; // sliderOffset - абсолютное смещение slider'а
- tmp = slider.offsetParent; // от левого края в пикселях (в IE не работает)
- while(tmp.tagName != 'BODY') {
- sliderOffset += tmp.offsetLeft; // тут его и находим
- tmp = tmp.offsetParent;
- }
- if(isIE) // в зависимости от модели DOM
- { // назначаем слушателей событий
- knob.onmousedown = startCoord;
- slider.onclick = sliderClick;
- knob.onmouseup = function(){ endCoord(element); };
- slider.onmouseup = function(){ endCoord(element); };
- }
- else {
- knob.addEventListener("mousedown", startCoord, true);
- slider.addEventListener("click", sliderClick, true);
- knob.addEventListener("mouseup", endCoord, true);
- slider.addEventListener("mouseup", endCoord, true);
- }
- // далее подробно не описываю, кто захочет - разберется
- //////////////////// функции установки/получения значения //////////////////////////
- function setValue(x) // установка по пикселям
- {
- if(x < 0) knob.style.left = 0;
- else if(x > sliderWidth-knobWidth-3) knob.style.left = (sliderWidth-3-knobWidth)+'px';
- else {
- if(step == 0) knob.style.left = x+'px';
- else knob.style.left = Math.round(x/(step*point))*step*point+'px';
- }
- element.value = getValue();
- slider.onchange(element);
- }
- element._SetValue_ = setValue;
- function setValue2(x,slider) // установка по значению
- {
- if(x < range1 || x > range2) alert('Value is not included into a slider range!');
- else setValue((x-range1)*point);
- }
- function getValue()
- {return Math.round(parseInt(knob.style.left)/point)+range1;}
- /////////////////////////////// слушатели событий ////////////////////////////////////
- function sliderClick(e) {
- var x;
- if(isIE) {
- if(event.srcElement != slider) return; //IE onclick bug
- x = event.offsetX - Math.round(knobWidth/2);
- }
- else x = e.pageX-sliderOffset-knobWidth/2;
- setValue(x);
- }
- function startCoord(e) {
- if(isIE) {
- offsX = event.clientX - parseInt(knob.style.left);
- slider.onmousemove = mov;
- }
- else {
- slider.addEventListener("mousemove", mov, true);
- }
- }
- function mov(e) {
- var x;
- if(isIE) x = event.clientX-offsX;
- else x = e.pageX-sliderOffset-knobWidth/2;
- setValue(x);
- }
- function endCoord(slider) {
- try{slider.onmousemove = null;}
- catch(e){}
- try{slider.removeEventListener("mousemove", mov, true);}
- catch(e){}
- }
- // объявляем функции setValue2 и getValue как методы класса
- element.setValue = function(x){setValue2(x,slider);};
- element.getValue = function (x) { getValue(slider); };
- //Работа с клавиатурой
- keydown = function(event){
- code = event.keyCode;
- if(code==37)
- {
- add = -step;
- }
- else if(page==39)
- {
- add = step;
- }
- else if(code==33)
- {
- add = -page_step;
- }
- else if(code==34)
- {
- add = page_step;
- }
- newValue = getValue() + add;
- if( !( (newValue<range1) || (newValue>range2) ) )
- {
- setValue(newValue);
- }
- }
- element.onkeypress = keydown;
- knob.onkeydown = keydown;
- element.value = attr["value"];
- element.setValue(element.value);
- }
- function vertical_slider(element, attr)
- {
- sliderHeight = attr["height"];
- range1 = attr["min"];
- range2 = attr["max"];
- step = attr["single_step"];
- pageStep = attr["page_step"];
- if( (attr["tick_interval"]!=0) && (attr["tick_interval"]!=undefined) )
- {
- tickCount = attr["tick_interval"];
- }
- else
- {
- if(step>pageStep)
- count = step;
- else
- count = pageStep;
- tickCount = (range2-range1) / count;
- }
- var knobWidth = 21; // ширина и высота бегунка
- var knobHeight = 17; // изменяются в зависимости от используемых изображений
- var sliderWidth = 17; // высота slider'а
- var offsY,tmp; // вспомагательные переменные
- var d = document;
- var isIE = d.all || window.opera; // определяем модель DOM
- var point = (sliderHeight-knobHeight-3)/(range2-range1);
- element.point = point;
- // point - количество пикселей на единицу значения
- var tbl = d.createElement('table');
- var row = d.createElement('tr');
- var slider = d.createElement('td'); // создаем slider
- slider.className = 'vertical_slider';
- var ticks = d.createElement('td');
- ticks.className="RightTable";
- code="<div><table>";
- for(i=0;i<tickCount;i++)
- {
- code+="<tr><td> </td></tr>";
- }
- ticks.innerHTML=code+"</table></div>";
- row.appendChild(slider);
- row.appendChild(ticks);
- tbl.appendChild(row);
- tbl.onchange = attr["change"];
- element.slider = tbl;
- element.appendChild(tbl);
- element.style.width = sliderWidth + "px";
- element.onchange = onchange;
- var knob = d.createElement('DIV'); // создаем ползунок
- knob.className = 'knob';
- slider.appendChild(knob); // добавляем его в документ
- knob.style.left = 0; // бегунок в нулевое значение
- knob.style.width = knobWidth+'px';
- knob.style.height = knobHeight+'px';
- slider.style.width = sliderWidth+'px';
- slider.style.height = sliderHeight+'px';
- var sliderOffset = slider.offsetTop; // sliderOffset - абсолютное смещение slider'а
- tmp = slider.offsetParent; // от левого края в пикселях (в IE не работает)
- while(tmp.tagName != 'BODY') {
- sliderOffset += tmp.offsetTop; // тут его и находим
- tmp = tmp.offsetParent;
- }
- if(isIE) // в зависимости от модели DOM
- { // назначаем слушателей событий
- knob.onmousedown = startCoord;
- slider.onclick = sliderClick;
- knob.onmouseup = function(){ endCoord(element); };
- slider.onmouseup = function(){ endCoord(element); };
- }
- else {
- knob.addEventListener("mousedown", startCoord, true);
- slider.addEventListener("click", sliderClick, true);
- knob.addEventListener("mouseup", endCoord, true);
- slider.addEventListener("mouseup", endCoord, true);
- }
- // далее подробно не описываю, кто захочет - разберется
- //////////////////// функции установки/получения значения //////////////////////////
- // далее подробно не описываю, кто захочет - разберется
- //////////////////// функции установки/получения значения //////////////////////////
- function setValue(y) // установка по пикселям
- {
- top_ = 0;
- if(y < 0) top_ = 0;
- else if(y > sliderHeight-knobHeight-3) top_ = (sliderHeight-3-knobHeight);
- else {
- if(step == 0) top_ = y;
- else top_ = Math.round(y/(step*point))*step*point;
- }
- knob.style.top = top_+'px';
- element.value = getValue();
- knob.style.top = top_/* - Math.round(slider.offsetHeight/2)*/ + 'px';
- tbl.onchange(element);
- }
- element._SetValue_ = setValue;
- function setValue2(y,slider) // установка по значению
- {
- if (y < range1 || y > range2) alert('Value is not included into a slider range!');
- else {
- setValue((y - range1) * point);
- }
- }
- function getValue()
- {
- return range2-Math.round(parseInt(knob.style.top)/point);
- }
- /////////////////////////////// слушатели событий ////////////////////////////////////
- function sliderClick(e) {
- var y;
- if(isIE) {
- if(event.srcElement != slider) return; //IE onclick bug
- y = event.offsetY - Math.round(knobHeight/2);
- }
- else y = e.pageY-sliderOffset-knobHeight/2;
- setValue(y);
- }
- function startCoord(e) {
- if(isIE) {
- offsY = event.clientY - parseInt(knob.style.top);
- slider.onmousemove = mov;
- slider.onmouseout = endCoord;
- }
- else {
- slider.addEventListener("mousemove", mov, true);
- slider.addEventListener("mouseout", endCoord, true);
- }
- }
- function mov(e) {
- var y;
- if(isIE) y = event.clientY-offsY;
- else y = e.pageY-sliderOffset-knobHeight/2;
- setValue(y);
- }
- function endCoord(slider) {
- try{slider.onmousemove = null;}
- catch(e){}
- try{slider.removeEventListener("mousemove", mov, true);}
- catch(e){}
- }
- // объявляем функции setValue2 и getValue как методы класса
- this.getValue = function(y){getValue(slider);};
- //Работа с клавиатурой
- keydown = function(event){
- code = event.keyCode;
- if(code==37)
- {
- add = -step;
- }
- else if(page==39)
- {
- add = step;
- }
- else if(code==33)
- {
- add = -page_step;
- }
- else if(code==34)
- {
- add = page_step;
- }
- newValue = getValue() + add;
- if( !( (newValue<range1) || (newValue>range2) ) )
- {
- setValue(newValue);
- }
- }
- element.onkeypress = keydown;
- knob.onkeydown = keydown;
- element.getValue = function (){return element.value};
- element.value = attr["value"];
- y = point * element.value - 0.5;
- element.setValue = function (val) { element._SetValue_(point * (range2 - val)) };
- element.setValue(element.value);
- }
- function Slider(obj,attr)
- {
- if (attr["orientation"] == "horizontal") {
- horizontal_slider(obj, attr);
- }
- else if (attr["orientation"] == "vertical") {
- vertical_slider(obj, attr);
- }
- type = attr["field"].toString();
- if ((type.indexOf("HTML") > -1) || (type == "my")) {
- obj.oldChange = obj.slider.onchange;
- if (type.indexOf("HTML") > -1) {
- obj.field = attr["field"];
- }
- else {
- obj.field = document.createElement("input");
- obj.appendChild(obj.field);
- }
- obj.slider.onchange = function () {
- obj.field.value = obj.value;
- obj.oldChange(obj);
- };
- obj.field.onchange = function () {
- obj.setValue(this.value);
- }
- obj.field.className = "sliderInput " + attr["orientation"];
- obj.setValue(attr["value"]);
- }
- }
- function getShortDays()
- {
- return ["Вс","Пн","Вт","Ср","Чт","Пт","Сб"];
- }
- function getFullDays()
- {
- return ["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"];
- }
- function getShortMonths()
- {
- return ["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"]
- }
- function getFullMonths()
- {
- return ["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"];
- }
- function checkDateField(date,field)
- {
- format = field.format;
- value = field.value;
- err=(format.length==2) && (value.length!=2);
- err|=((format=="d")||(format=="dd"))&&((value<1)||(value>31));
- err|=((format=="M")||(format=="MM"))&&((value<1)||(value>12));
- if( (format=="ddd")||(format=="dddd") )
- {
- if(format=="ddd")
- arr = getShortDays();
- else
- arr = getFullDays();
- found=false;
- for(i=0;i<arr.length;i++)
- if(arr[i]==value)
- {
- found=true;
- }
- err|=!found;
- }
- if( (format=="MMM")||(format=="MMMM") )
- {
- if(format=="MMM")
- arr = getShortMonths();
- else
- arr = getFullMonths();
- found=false;
- for(i=0;i<arr.length;i++)
- if(arr[i]==value)
- {
- found=true;
- }
- err|=!found;
- }
- err|=(format=="yy")&&((value<0)||(value>99));
- err|=(format=="yyyy")&&((value<0)||(value>9999));
- err|=((format=="h")||(format=="hh"))&&((value<0)||(value>23));
- err|=((format=="H")||(format=="HH"))&&((value<0)||(value>11));
- err|=(format=="mm")&&((value<0)||(value>59));
- if(err)
- field.className=format+" error";
- else
- field.className=format;
- if(!err)
- {
- if( (format=="d")||(format=="dd") )
- date.date_time.setDate(value);
- else if ( (format=="M") || (format=="MM") )
- date.date_time.setMonth(value);
- else if ( (format=="MMM") || (format=="MMMM") )
- {
- if(format=="MMM")
- arr = getShortMonths();
- else
- arr = getFullMonths();
- i = 0;
- r = 0;
- for(i=0;i<arr.length;i++)
- if(arr[i]==value)
- r=i;
- date.date_time.setMonth(r);
- }
- else if(format=="yyyy")
- date.date_time.setYear(value);
- else if(format=="yy")
- date.date_time.setYear(value+1900);
- else if((format=="h")||(format=="hh"))
- date.date_time.setHours(value);
- else if((format=="m")||(format=="mm"))
- date.date_time.setMinutes(value);
- date.setDate(date.date_time);
- }
- }
- function DateInput(el,attr)
- {
- el.date_time = attr["date_time"];
- el.minimum_date_time = attr["minimum_date_time"];
- el.maximum_date_time = attr["maximum_date_time"];
- el.display_format = attr["display_format"];
- el.change = attr["change"];
- el.className = 'Date';
- places = el.display_format.split('|');
- el.fields = Array();
- for(i=0;i<places.length;i++)
- {
- isInput = (places[i]=='d' ) ||
- (places[i]=='dd' ) ||
- (places[i]=='ddd' ) ||
- (places[i]=='dddd') ||
- (places[i]=='M' ) ||
- (places[i]=='MM' ) ||
- (places[i]=='MMM' ) ||
- (places[i]=='MMMM') ||
- (places[i]=='yy' ) ||
- (places[i]=='yyyy') ||
- (places[i]=='h' ) ||
- (places[i]=='hh' ) ||
- (places[i]=='H' ) ||
- (places[i]=='HH' ) ||
- (places[i]=='m' ) ||
- (places[i]=='mm' );
- if(isInput)
- {
- newField = document.createElement('input');
- newField.type='text';
- newField.className = places[i];
- newField.format = places[i];
- }
- else
- {
- newField = document.createElement('span');
- newField.innerHTML = places[i];
- }
- newField.isInput = isInput;
- el.fields.push(newField);
- el.appendChild(newField);
- }
- el.setDate = function(date){
- el.date_time = date;
- for(i=0;i<el.fields.length;i++)
- {
- field = el.fields[i];
- if(field.isInput)
- {
- format = field.format;
- if( (format == "d")||(format == "dd") )
- field.value = date.getDate().toString();
- if( (format == "dd") || (field.value.length==1) )
- field.value = "0"+field.value;
- ShortDays = getShortDays();
- FullDays = getFullDays();
- if( format == "ddd" )
- field.value = ShortDays[date.getDay()];
- if( format == "dddd" )
- field.value = FullDays[date.getDay()];
- if( (format == "M")||(format=="MM") )
- field.value = date.getMonth()+1;
- if( (format == "MM")&&(field.value.length==1) )
- field.value = "0"+field.value;
- ShortMonths =getShortMonths();
- FullMonths = getFullMonths();
- if( format == "MMM" )
- field.value = ShortMonths[date.getMonth()];
- if( format == "MMMM" )
- field.value = FullMonths[date.getMonth()];
- if( (format=="yy") || (format=="yyyy") )
- {
- yearStr = date.getFullYear().toString();
- if(format=="yy")
- {
- field.value = yearStr[2]+yearStr[3];
- }
- else
- {
- field.value = yearStr;
- }
- }
- if ( (format=="h") || (format=="hh") || (format=="H") || (format=="HH") )
- {
- hours = date.getHours();
- if( (hours>=12) && (format.indexOf('H')>-1) )
- hours = hours-12;
- field.value = hours;
- if( (format.length==2) && (field.value.length==1) )
- field.value="0"+field.value;
- }
- if ( (format=='m') || (format=='mm') )
- {
- field.value = date.getMinutes();
- if( (format.length==2) && (field.value.length==1) )
- {
- field.value="0"+field.value;
- }
- }
- field.oldvalue = field.value;
- field.onchange = function(){checkDateField(el,this);}
- }
- el.change(el);
- }
- }
- el.setDate(el.date_time);
- el.getDate = function () { return el.date_time; };
- type = attr["field"].toString();
- if ((type.indexOf("HTML") > -1) || (type == "my")) {
- if (type.indexOf("HTML") > -1) {
- el.field = attr["field"];
- }
- else {
- el.field = document.createElement("input");
- el.appendChild(el.field);
- }
- el.field.className = "dateInput";
- el.oldChange = el.change;
- el.change = function () {
- el.field.value = el.getDate().toString();
- }
- el.field.onchange = function () {
- el.setDate(new Date(el.field.value));
- }
- el.setDate(el.getDate());
- }
- }
- function ArrayInput(el, attr) {
- el.className = "Array";
- el.change = attr["change"];
- topPanel = document.createElement("div");
- topInput = document.createElement("input");
- topInput.className = "topInput";
- topPanel.appendChild(topInput);
- el.setValues = function (values) {
- el.values = values;
- if (el.main == undefined) {
- el.main = document.createElement("div");
- }
- else {
- el.main.innerHTML = "";
- }
- for (i = 0; i < el.values.length; i++) {
- row = document.createElement("div");
- row.innerHTML = "<span class=\"check\"> </span><input type=\"text\" value=\"" + el.values[i] + "\" />";
- row.onclick = function () {
- if (this.className == "active") {
- this.className = "";
- }
- else {
- this.className = "active";
- }
- el.change(el);
- }
- el.main.appendChild(row);
- }
- }
- el.setValues(attr["values"]);
- el.setChecked = function (indexes) {
- rows = el.main.childNodes;
- indexesStr = indexes.join(";") + ";";
- for (i = 0; i < rows.length; i++) {
- row = rows.item(i);
- if (indexesStr.indexOf(i + ";") > -1) {
- row.className = "active";
- }
- else {
- row.className = "";
- }
- }
- }
- el.setChecked(attr["selectedIndexes"]);
- el.getChecked = function (displayFilter) {
- rows = el.main.childNodes;
- res = Array();
- for (i = 0; i < rows.length; i++) {
- row = rows.item(i);
- if (row.className == "active") {
- if ((displayFilter == undefined) || (row.style.display != 'none')) {
- res.push(i);
- }
- }
- }
- return res;
- }
- el.change(el);
- topInput.change = function () {
- rows = el.main.childNodes;
- for (i = 0; i < rows.length; i++) {
- text = rows.item(i).childNodes.item(1).value;
- if ((text.indexOf(this.value) == 0) || (this.value == "")) {
- rows.item(i).style.display = 'block';
- }
- else {
- rows.item(i).style.display = 'none';
- }
- }
- }
- topInput.onkeypress = function () { this.change(); }
- topInput.onkeydown = function () { this.change(); }
- topInput.onkeyup = function () { this.change(); }
- topInput.onchange = function () { this.change(); }
- el.subPanel = document.createElement('div');
- el.subPanel.className = 'subPanel';
- bottom = document.createElement("div");
- bottom.className = "bottomPanel";
- addButton = document.createElement('button');
- addButton.innerText = "Добавить";
- addButton.onclick = function () {
- el.subPanel.style.display = 'block';
- el.subPanel.innerHTML = "";
- topDiv = document.createElement('div');
- close = document.createElement('span');
- close.className = 'closeButton';
- close.innerText = " ";
- close.onclick = function () { el.subPanel.style.display = 'none'; }
- topDiv.appendChild(close);
- mainTbl = document.createElement("table");
- row1 = document.createElement("tr");
- td1 = document.createElement("td");
- td1.innerText = "Название пункта : ";
- td2 = document.createElement("td");
- el.valueInput = document.createElement("input");
- td2.appendChild(el.valueInput);
- row1.appendChild(td1);
- row1.appendChild(td2);
- row2 = document.createElement("tr");
- td3 = document.createElement("td");
- td3.innerText = "Выделен : ";
- td4 = document.createElement("tr");
- el.checkInput = document.createElement("input");
- el.checkInput.type = "checkbox";
- td4.appendChild(el.checkInput);
- row2.appendChild(td3);
- row2.appendChild(td4);
- mainTbl.appendChild(row1);
- mainTbl.appendChild(row2);
- bottomDiv = document.createElement('div');
- addBtn = document.createElement('button');
- addBtn.innerText = 'Добавить';
- addBtn.onclick = function () {
- el.values.push(el.valueInput.value);
- checked = el.getChecked();
- if (el.checkInput.checked) {
- checked.push(el.values.length - 1);
- }
- el.setValues(el.values);
- el.setChecked(checked);
- el.change(el);
- }
- bottomDiv.appendChild(addBtn);
- el.subPanel.appendChild(topDiv);
- el.subPanel.appendChild(mainTbl);
- el.subPanel.appendChild(bottomDiv);
- }
- bottom.appendChild(addButton);
- deleteButton = document.createElement('button');
- deleteButton.innerText = 'Удалить';
- deleteButton.onclick = function () {
- checked = el.getChecked(true);
- values = el.values;
- newValues = Array();
- newIndexes = Array();
- add = 0;
- for (i = 0; i < values.length; i++) {
- deleting = false;
- for (j = 0; j < checked.length; j++) {
- if (i == checked[j]) {
- deleting = true;
- add++;
- }
- }
- if (!deleting) {
- newValues.push(values[i]);
- newIndexes.push({
- newIndex: i - add,
- oldIndex: i
- });
- }
- }
- values = newValues;
- newChecked = Array();
- allChecked = el.getChecked().join(";") + ";";
- for (i = 0; i < newIndexes; i++) {
- oldIndex = newIndexes[i];
- if (allChecked.indexOf(oldIndex + ";") > -1) {
- newChecked.push(newIndexes[i].newIndex);
- }
- }
- el.setValues(values);
- el.setChecked(newChecked);
- }
- bottom.appendChild(deleteButton);
- el.appendChild(topPanel);
- el.appendChild(el.main);
- el.appendChild(el.subPanel);
- el.appendChild(bottom);
- }
- function Control(mode,selector,func,attributes)
- {
- objects=Array();
- if (mode == "class") {
- objects = document.getElementsByClassName(selector);
- }
- else if (mode == "id") {
- objects.push(document.getElementById(selector));
- }
- else if (mode == "classes") {
- for (i = 0; i < selector.length; i++) {
- v_class = selector[i];
- add = document.getElemntsByClassName(v_class);
- for (j = 0; j < add.length; j++)
- objects.push(add[i]);
- }
- }
- else if (mode == "ids") {
- for (i = 0; i < selector.length; i++) {
- objects.push(document.getElementById(selector[i]));
- }
- }
- else if (mode == "object") {
- objects.push(selector);
- }
- else if (mode == "objects") {
- for (i = 0; i < selector.length; i++) {
- objects.push(selector[i]);
- }
- }
- for (zi = 0; zi < objects.length; zi++) {
- try {
- func(objects[zi], attributes);
- }
- catch (e) {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement