MediaWiki:Resmark.js — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
Строка 131: Строка 131:
 
eval("resmark_line"+(j+1)+"=val;");
 
eval("resmark_line"+(j+1)+"=val;");
 
newElm.setAttribute('checked', 1);
 
newElm.setAttribute('checked', 1);
resmark_eval();
+
//resmark_eval();
 
}
 
}
 
 

Версия 15:27, 3 октября 2007

//<source lang="javascript">
//- Resmark.js ------------------------------------------------------

addOnloadHook(do_resmark_init);

var resmark_line1 = 0;
var resmark_line2 = 0;
var resmark_line3 = 0;
var resmark_line4 = 0;
var resmark_line5 = 0;
var resmark_cols = 3;
var resmark_elem = 'res';
var resmark_def_color = Array("#D9C09C","#D9C09C","#D9C09C","#D9C09C","#D9C09C");
var resmark_colors = new Array(
	{f:"white",s:"w"},
	{f:"gray",s:"gr"},
	{f:"violet",s:"v"},
	{f:"blue",s:"b"},
	{f:"green",s:"g"},
	{f:"yellow",s:"y"},
	{f:"orange",s:"o"},
	{f:"red",s:"r"},
	{f:"brown",s:"br"},
	{f:"black",s:"bl"},
	{f:"goldenrod",s:"au"},
	{f:"gainsboro",s:"ag"}
);
var resmark_data = {
	res: {
		3: {
			1:{dl:{bl:1,au:1,ag:1},e:{w:'9',gr:'8',v:'7',b:'6',g:'5','y':'4',o:'3',r:'2',br:'1'}},
			2:{dl:{au:1,ag:1},e:{w:'9',gr:'8',v:'7',b:'6',g:'5','y':'4',o:'3',r:'2',br:'1',bl:'0'}},
			3:{dl:{},e:{w:'*1e+9',gr:'*100e+6',v:'*10e+6',b:'*1e+6',g:'*100e+3','y':'*10e+3',o:'*1e+3',r:'*100',br:'*10',bl:'*1',au:'*0.1',ag:'*0.01'}}
		},
		4: {
			1:{dl:{bl:1,au:1,ag:1},e:{w:'9',gr:'8',v:'7',b:'6',g:'5','y':'4',o:'3',r:'2',br:'1'}},
			2:{dl:{au:1,ag:1},e:{w:'9',gr:'8',v:'7',b:'6',g:'5','y':'4',o:'3',r:'2',br:'1',bl:'0'}},
			3:{dl:{},e:{w:'*1e+9',gr:'*100e+6',v:'*10e+6',b:'*1e+6',g:'*100e+3','y':'*10e+3',o:'*1e+3',r:'*100',br:'*10',bl:'*1',au:'*0.1',ag:'*0.01'}},
			4:{dl:{w:1,'y':1,o:1,bl:1},e:{gr:'0.05',v:'0.1',b:'0.25',g:'0.5',r:'2',br:'1',au:'5',ag:'10'}}
		},
		5: {
			1:{dl:{bl:1,au:1,ag:1},e:{w:'9',gr:'8',v:'7',b:'6',g:'5','y':'4',o:'3',r:'2',br:'1'}},
			2:{dl:{au:1,ag:1},e:{w:'9',gr:'8',v:'7',b:'6',g:'5','y':'4',o:'3',r:'2',br:'1',bl:'0'}},
			3:{dl:{au:1,ag:1},e:{w:'9',gr:'8',v:'7',b:'6',g:'5','y':'4',o:'3',r:'2',br:'1',bl:'0'}},
			4:{dl:{},e:{w:'*1e+9',gr:'*100e+6',v:'*10e+6',b:'*1e+6',g:'*100e+3','y':'*10e+3',o:'*1e+3',r:'*100',br:'*10',bl:'*1',au:'*0.1',ag:'*0.01'}},
			5:{dl:{w:1,'y':1,o:1,bl:1},e:{gr:'0.05',v:'0.1',b:'0.25',g:'0.5',r:'2',br:'1',au:'5',ag:'10'}}
		}
	}
};

function do_resmark_init()
{
	if(document.getElementById('resmark'))
	{ // resmark block exist
		var ids = new Array(
				{id:'resmark_radio_elm_res',elm:'radio',nm:'elm',onclick:"resmark_elmRes_click()",'checked':1},
				{id:'resmark_radio_elm_cap',elm:'radio',nm:'elm',onclick:"resmark_elmCap_click()"},
				{id:'resmark_radio_elm_ind',elm:'radio',nm:'elm',onclick:"resmark_elmInd_click()"},
				{id:'resmark_radio_lin_3',elm:'radio',nm:'lin',onclick:'resmark_cols=3;resmark_createTable();','checked':1},
				{id:'resmark_radio_lin_4',elm:'radio',nm:'lin',onclick:'resmark_cols=4;resmark_createTable();',},
				{id:'resmark_radio_lin_5',elm:'radio',nm:'lin',onclick:'resmark_cols=5;resmark_createTable();',},
				{id:'resmark_outp_nom',elm:'text'},
				{id:'resmark_outp_dop',elm:'text'}
			);
		var tags = {
			radio: {t:'input',tp:'radio'},
			'text': {t:'input',tp:'text'}
		}

		for(i = 0; i < ids.length; i++)
		{
			var old = document.getElementById(ids[i].id);
			var elmTag = tags[ids[i].elm].t;
			var newElm = document.createElement(elmTag);

			if(ids[i]['checked']) newElm.setAttribute('checked', ids[i]['checked']);
			if(ids[i].onclick) newElm.setAttribute('onclick', ids[i].onclick);
			if(ids[i].nm) newElm.setAttribute('name', ids[i].nm);
			if(tags[ids[i].elm].t) newElm.setAttribute('type', tags[ids[i].elm].tp);
			
			newElm.setAttribute('id', old.id);
			resmark_replDiv(newElm, old);
		}

		resmark_createTable()

		var js = document.getElementById('resmark_js_disabled');
		js.parentNode.removeChild(js);
	}
}

function resmark_createTable()
{
	resmark_resetTable();
	for(i = 0; i < resmark_colors.length; i++)
	{
		for(j = 0; j < resmark_cols; j++)
		{
			var elm = document.getElementById('resmark_radio_l' + (j+1) + '_' + resmark_colors[i].s);

			elm.parentNode.style.visibility = (resmark_data[resmark_elem][resmark_cols][j+1]['dl'][resmark_colors[i].s]) ? 'hidden' : 'visible';

			var newElm = document.createElement('input');
			var val = resmark_data[resmark_elem][resmark_cols][j+1]['e'][resmark_colors[i].s]
			newElm.setAttribute('type', 'radio');
			newElm.setAttribute('name', 'line'+(j+1));
			if(val) newElm.setAttribute('value', val);
			var onclick = "resmark_line"+(j+1)+"=this.value;";
			onclick += "; resmark_setResCol("+(j+1)+", '"+resmark_colors[i].f+"'); resmark_eval();";
			newElm.setAttribute('onclick', onclick);
			
			newElm.setAttribute('id', elm.id);

			if(i==0)
			{// init main
				resmark_setResCol(j+1, resmark_colors[i].f);
				eval("resmark_line"+(j+1)+"=val;");
				newElm.setAttribute('checked', 1);
				resmark_eval();
			}
			if(i==1 && j==3 && resmark_cols==4)
			{// init 4
				resmark_setResCol(j+1, resmark_colors[i].f);
				eval("resmark_line"+(j+1)+"=val;");
				newElm.setAttribute('checked', 1);
				resmark_eval();
			}
			if(i==1 && j==4 && resmark_cols==5)
			{// init 5
				resmark_setResCol(j+1, resmark_colors[i].f);
				eval("resmark_line"+(j+1)+"=val;");
				newElm.setAttribute('checked', 1);
				//resmark_eval();
			}
			
			resmark_replDiv(newElm, elm);
		}
	}
}

function resmark_resetTable()
{
	for(i = 0; i < resmark_colors.length; i++)
	{
		for(j = 0; j < 5; j++)
		{
			var elm = document.getElementById('resmark_radio_l' + (j+1) + '_' + resmark_colors[i].s);
			elm.parentNode.style.visibility = 'hidden';
			var newElm = document.createElement('div');
			newElm.setAttribute('id', elm.id);
			resmark_replDiv(newElm, elm);
		}
	}
	resmark_setResCols(resmark_def_color);
}

function resmark_eval()
{
	var nom = document.getElementById('resmark_outp_nom');
	var dop = document.getElementById('resmark_outp_dop');
	switch(resmark_cols)
	{
		case 3:
			nom.value = resmark_ohm(eval(resmark_line1 + resmark_line2 + resmark_line3));
			dop.value = '';
			break;
		case 4:
			nom.value = resmark_ohm(eval(resmark_line1 + resmark_line2 + resmark_line3));
			dop.value = resmark_line4 + '%';
			break;
		case 5:
			nom.value = resmark_ohm(eval(resmark_line1 + resmark_line2 + resmark_line3 + resmark_line4));
			dop.value = resmark_line5 + '%';
			break;
	}
}

//- element radio ------------------------------------------------------
function resmark_elmRes_click()
{
	resmark_hideMsg(0);
	resmark_elem = 'res';
	resmark_createTable();
}
function resmark_elmCap_click()
{
	resmark_hideMsg(1);
	resmark_elem = 'cap';
	resmark_createTable();
}
function resmark_elmInd_click()
{
	resmark_hideMsg(0);
	resmark_elem = 'ind';
	resmark_createTable();
}
function resmark_hideMsg(hide)
{
	var e = document.getElementById('resmark_outp_note');
	e.innerHTML = (hide) ? '<b>Примечание:</b> Для цветовой кодировки постоянных конденсаторов на практике используется несколько методик. Здесь представлена одна из них.' : '';
}

//- other ------------------------------------------------------
function resmark_ohm(full)
{
	if(parseInt(full / 1e+9))
	{
		return (full/1e+9) + ' ГОм'
	}
	if(parseInt(full / 1e+6))
	{
		return (full/1e+6) + ' МОм'
	}
	if(parseInt(full / 1e+3))
	{
		return (full/1e+3) + ' кОм'
	}
	return (full) + ' Ом'
}
function resmark_setResCol(col, color)
{
	elm = document.getElementById('resmark_resistor_' + col);
	elm.style.background = color;
}
function resmark_setResCols(colors)
{
	for(i = 0; i < colors.length; i++)
	{
		elm = document.getElementById('resmark_resistor_' + (i+1));
		elm.style.background = colors[i];
	}
}

function resmark_replDiv(newElm, div)
{
	div.parentNode.replaceChild(newElm, div);
}
//</source>