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

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
 
Строка 182: Строка 182:
 
newElm.setAttribute('checked', 1);
 
newElm.setAttribute('checked', 1);
 
}
 
}
+
 
 
resmark_replDiv(newElm, elm);
 
resmark_replDiv(newElm, elm);
 
}
 
}
 
}
 
}
 +
if(resmark_cols==5 && resmark_elem=='ind')
 +
{
 +
resmark_line1 = 0;
 +
resmark_line2 = 0;
 +
resmark_line3 = 0;
 +
resmark_line4 = 0;
 +
resmark_line5 = 'NONE!';
 +
resmark_resetTable();
 +
}
 +
 
resmark_eval();
 
resmark_eval();
 
}
 
}

Текущая версия на 17:26, 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'}}
		}
	},
	cap: {
		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-3',gr:'*100e-6',v:'*10e-6',b:'*1e-6',g:'*100e-9','y':'*10e-9',o:'*1e-9',r:'*100e-12',br:'*10e-12',bl:'*1e-12',au:'*0.1e-12',ag:'*0.01e-12'}}
		},
		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-3',gr:'*100e-6',v:'*10e-6',b:'*1e-6',g:'*100e-9','y':'*10e-9',o:'*1e-9',r:'*100e-12',br:'*10e-12',bl:'*1e-12',au:'*0.1e-12',ag:'*0.01e-12'}},
			4:{dl:{v:1,b:1,g:1,'y':1,o:1},e:{w:'+80/-20',gr:'30',r:'2',br:'1',bl:'20',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-3',gr:'*100e-6',v:'*10e-6',b:'*1e-6',g:'*100e-9','y':'*10e-9',o:'*1e-9',r:'*100e-12',br:'*10e-12',bl:'*1e-12',au:'*0.1e-12',ag:'*0.01e-12'}},
			5:{dl:{v:1,b:1,g:1,'y':1,o:1},e:{w:'+80/-20',gr:'30',r:'2',br:'1',bl:'20',au:'5',ag:'10'}}
		}
	},
	ind: {
		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:{w:1,gr:1,v:1,b:1,g:1,'y':1},e:{o:'*1e-3',r:'*100e-6',br:'*10e-6',bl:'*1e-6',au:'*0.1e-6',ag:'*0.01e-6'}}
		},
		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:{w:1,gr:1,v:1,b:1,g:1,'y':1},e:{o:'*1e-3',r:'*100e-6',br:'*10e-6',bl:'*1e-6',au:'*0.1e-6',ag:'*0.01e-6'}},
			4:{dl:{w:1,gr:1,v:1,b:1,g:1,'y':1,o:1,r:1,br:1},e:{bl:'20',au:'5',ag:'10'}}
		},
		5: {
			1:{dl:{w:1,gr:1,v:1,b:1,g:1,'y':1,o:1,r:1,br:1,bl:1,au:1,ag:1},e:{}},
			2:{dl:{w:1,gr:1,v:1,b:1,g:1,'y':1,o:1,r:1,br:1,bl:1,au:1,ag:1},e:{}},
			3:{dl:{w:1,gr:1,v:1,b:1,g:1,'y':1,o:1,r:1,br:1,bl:1,au:1,ag:1},e:{}},
			4:{dl:{w:1,gr:1,v:1,b:1,g:1,'y':1,o:1,r:1,br:1,bl:1,au:1,ag:1},e:{}},
			5:{dl:{w:1,gr:1,v:1,b:1,g:1,'y':1,o:1,r:1,br:1,bl:1,au:1,ag:1},e:{}},
		}
	}
};

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);
			}
			if(i==1 && j==3 && resmark_cols==4 && resmark_elem=='res')
			{// init 4
				resmark_setResCol(j+1, resmark_colors[i].f);
				eval("resmark_line"+(j+1)+"=val;");
				newElm.setAttribute('checked', 1);
			}
			if(i==1 && j==4 && resmark_cols==5 && resmark_elem=='res')
			{// init 5
				resmark_setResCol(j+1, resmark_colors[i].f);
				eval("resmark_line"+(j+1)+"=val;");
				newElm.setAttribute('checked', 1);
			}
			if(i==6 && j==2 && resmark_cols>=3 && resmark_elem=='ind')
			{// init 4
				resmark_setResCol(j+1, resmark_colors[i].f);
				eval("resmark_line"+(j+1)+"=val;");
				newElm.setAttribute('checked', 1);
			}
			if(i==9 && j==3 && resmark_cols==4 && resmark_elem=='ind')
			{// init 4
				resmark_setResCol(j+1, resmark_colors[i].f);
				eval("resmark_line"+(j+1)+"=val;");
				newElm.setAttribute('checked', 1);
			}

			resmark_replDiv(newElm, elm);
		}
	}
	if(resmark_cols==5 && resmark_elem=='ind')
	{
		resmark_line1 = 0;
		resmark_line2 = 0;
		resmark_line3 = 0;
		resmark_line4 = 0;
		resmark_line5 = 'NONE!';
		resmark_resetTable();
	}
	
	resmark_eval();
}

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:
			var temp = eval(resmark_line1 + resmark_line2 + resmark_line3);
			nom.value = (resmark_elem=='res') ? resmark_ohm(temp) : (resmark_elem=='cap') ? resmark_cap(temp) : (resmark_elem=='ind') ? resmark_ind(temp) : temp;
			dop.value = '';
			break;
		case 4:
			var temp = eval(resmark_line1 + resmark_line2 + resmark_line3);
			nom.value = (resmark_elem=='res') ? resmark_ohm(temp) : (resmark_elem=='cap') ? resmark_cap(temp) : (resmark_elem=='ind') ? resmark_ind(temp) : temp;
			dop.value = resmark_line4 + '%';
			break;
		case 5:
			var temp = eval(resmark_line1 + resmark_line2 + resmark_line3 + resmark_line4);
			nom.value = (resmark_elem=='res') ? resmark_ohm(temp) : (resmark_elem=='cap') ? resmark_cap(temp) : (resmark_elem=='ind') ? resmark_ind(temp) : temp;
			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_ind(full)
{
	if(Math.round(full * 1e+3))
	{
		return (full * 1e+3) + ' мГн'
	}
	if(Math.round(full * 1e+6))
	{
		return (full * 1e+6) + ' мкГн'
	}
	return (full) + ' Гн'
}
function resmark_cap(full)
{
	if(Math.round(full * 1e+3))
	{
		return (full * 1e+3) + ' мФ'
	}
	if(Math.round(full * 1e+6))
	{
		return (full * 1e+6) + ' мкФ'
	}
	if(Math.round(full * 1e+9))
	{
		return (full * 1e+9) + ' нФ'
	}
	if(Math.round(full * 1e+12))
	{
		return (full * 1e+12) + ' пФ'
	}
	return (full) + ' Ф'
}
function resmark_ohm(full)
{
	if(Math.round(full / 1e+9))
	{
		return (full/1e+9) + ' ГОм'
	}
	if(Math.round(full / 1e+6))
	{
		return (full/1e+6) + ' МОм'
	}
	if(Math.round(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>