Skip to content

Commit

Permalink
adicionado versão para impressão, mas não é possível imprimir uma var…
Browse files Browse the repository at this point in the history
…ição escolhida
  • Loading branch information
leandro committed Sep 29, 2008
1 parent 113c0ab commit 0db7d8d
Show file tree
Hide file tree
Showing 5 changed files with 175 additions and 14 deletions.
1 change: 1 addition & 0 deletions .htaccess
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DirectoryIndex index.html index.htm
17 changes: 16 additions & 1 deletion css/acordes.css
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,21 @@ body,form,ol,ul,li,p,h1,h2,h3,h4,h5,h6,table,tr,td,img,dt,dd,dl {border-width:0;
.acorde-pestana {background:#d00;height:3px;overflow:hidden;position:absolute;}
.acorde-pricasa {color:#900;font-size:10px;left:0;position:absolute;text-align:right;top:16px;width:10px;}
.acorde-var {color:#dd0;font-size:9px;font-weight:normal;padding-left:3px;}

.js-acorde-print {
float:left;
}
.acorde-print {
font:12px courier,'courier new',monospace;
margin:0 20px 20px 0;
white-space:pre;
}
.acorde-print-head {
font:12px tahoma,verdana,sans-serif;
text-transform:uppercase;
padding-left:3em;
}

/*
.notext {font-size:0;letter-spacing:-2000px;overflow:hidden;text-decoration:none;text-indent:-2000px;}
*/
*/
8 changes: 7 additions & 1 deletion index.htm
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@
<script language="JavaScript" type="text/javascript" src="javascript/jquery-1.2.1.pack.js"></script>
<script language="JavaScript" type="text/javascript" src="javascript/drag.js"></script>
<script language="JavaScript" type="text/javascript" src="javascript/acordes.js"></script>
<script language="JavaScript" type="text/javascript">
$(function() {
A = new AcordeDOM('div.js-acorde');
A.render();
});
</script>
</head>

<body>
Expand Down Expand Up @@ -69,4 +75,4 @@
</div>
</body>

</html>
</html>
102 changes: 90 additions & 12 deletions javascript/acordes.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
$(function() {
A = new AcordeDOM('div.js-acorde');
A.render();
});

var AcordeDOM = function(acorde_seletor) {
var root = this;

Expand Down Expand Up @@ -51,6 +46,66 @@ var AcordeDOM = function(acorde_seletor) {
if(acorde.casa_piso > 1)
$(obj).append(['<div class="acorde-pricasa">' + acorde.casa_piso + '</div>'].join(''));
};

this.print_draw = function(obj, _acorde) {
var
acorde = new Acorde(_acorde = _acorde instanceof Array ? _acorde : _acorde.split(/\s+/)),
cordas = acorde.cordas_status(),
dedos_pos = acorde.dedos_pos(false),
linha_sep = " ===========\n",
linha_ini = " ",
cordas_map = {x: 'X', d: 'P', c: 'O'},
ncordas = 6,
casas = str_repeat('| ', ncordas),
buffer = '',
dedo_cur = 0,
menor_traste = acorde.casa_piso,
casa_ini,
acorde_tam,
i, t, o, row, col, s;

$('h4', obj).nextAll().remove();
$(obj).attr('title', _acorde.join(' '));
$("<div class='acorde-print'>" + linha_sep + "</div>").appendTo(obj);

// desenhando onde e como os dedos serao pressionados
for(i = 0, o = dedos_pos, t = acorde.casas_visuais() * ncordas; i < t; i++) {

if(!i && menor_traste > 1)
buffer += "[" + (menor_traste < 10 ? '0' : '') + menor_traste + "]";

row = Math.floor(i / ncordas);
col = i % ncordas;
s = !col ? (!i && menor_traste > 1 ? '' : linha_ini) : '';
if(dedo_cur >= o.length || row != o[dedo_cur][0]) {
buffer += s + casas.substr(col * 2) + "\n";
i += ncordas - col - 1;
continue;
}

tmp = o[dedo_cur][1] instanceof Array ? o[dedo_cur][1] : [o[dedo_cur][1], 1];
casa_ini = tmp[0];
acorde_tam = tmp[1];
if(col != casa_ini) {
buffer += s + casas.substr(col * 2, (casa_ini - col) * 2);
i += casa_ini - col - 1;
continue;
}

buffer += s + str_repeat(dedo_cur + 1 + ' ', acorde_tam) + (col + acorde_tam == ncordas ? "\n" : '');
i += acorde_tam - 1;
dedo_cur++;

}
$('div.acorde-print', obj).append(buffer);

// rodapé
$('div.acorde-print', obj).append(linha_sep + linha_ini);
for(i = 0, o = cordas.all, t = o.length; i < t; i++)
$('div.acorde-print', obj).append(cordas_map[o[i]] + " ");

}

this.render = function() {
$(acorde_seletor).each(function() {
var
Expand Down Expand Up @@ -78,8 +133,19 @@ var AcordeDOM = function(acorde_seletor) {
root.draw(obj, acorde);
}).fadeTo('slow', 0.7);
}
this.print = function() {
//$(acorde_seletor) PAREI AQUI
this.render_print = function() {
$(acorde_seletor).each(function() {
var
obj = $(this),
acorde_str,
acorde = (acorde_str = $.trim(obj.find('div:eq(1)').html())).split(/\s+/),
a_html;

obj.attr('title', acorde_str);
obj.children().not('h4').hide();
obj.append('<h4 class="acorde-print-head">' + $('div:eq(0)', obj).text() + '</h4>');
root.print_draw(obj, acorde);
});
}
}
var AcordeVariacao = function(acorde_arr) {
Expand Down Expand Up @@ -126,7 +192,7 @@ var Acorde = function(acorde_arr) { // esperado um array com 6 elementos numéri
},
casa_piso = function() {
// retorna a menor casa visualmente falando
return casas_visuais >= acorde[nmax] ? 1 : acorde[nmin];
return casas_visuais >= acorde[nmax] ? 1 : +acorde[nmin];
},
pestana_fronteira = function(acorde, casa) {
var sequencia = array_right_interval(acorde, casa); // [inicio, casas]
Expand Down Expand Up @@ -175,14 +241,21 @@ var Acorde = function(acorde_arr) { // esperado um array com 6 elementos numéri
},
cordas_status = function() {
// retorna um object('hash') indicando quais cordas nao serao tocadas, a primeira a ser tocada e as demais a serem tocadas
var i = 0, t = acorde.length, r = {circles: [], disc: -1, xis: []};
var i = 0, t = acorde.length, r = {circles: [], disc: -1, xis: []}, arr = [];

for(; i < t; i++) {
if(acorde_arr[i].toLowerCase() == 'x')
if(acorde_arr[i].toLowerCase() == 'x') {
arr[i] = 'x';
r.xis[r.xis.length] = i;
else
} else {
r.circles[r.circles.length] = i;
arr[i] = 'c';
}
}

r.disc = r.circles.shift();
arr[r.disc] = 'd';
r.all = arr;
return r;
},
dedos_pos = function(_absoluto) {
Expand Down Expand Up @@ -238,6 +311,11 @@ var Acorde = function(acorde_arr) { // esperado um array com 6 elementos numéri
this.casa_piso = casa_piso();
}

function str_repeat(str, n) {
for(var f = ''; n--; f += str);
return f;
}

function array_repeated(arr, _min) {
// retorna elementos repetidos que estejam repetidos #min ou mais vezes
var
Expand Down Expand Up @@ -366,4 +444,4 @@ function object_keys(obj, filter_fn) {
if(!(e in Object.prototype) || obj[e] != Object.prototype[e]) filter_fn.call(false, obj, e) && (r[r.length] = e);
}
return r;
};
};
61 changes: 61 additions & 0 deletions print-teste.htm
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-BR" lang="pt-BR">

<head>
<title>Acordes</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Language" content="pt-BR" />

<meta name="author" content="Leandro Nascimento Camargo" />

<link href="css/acordes.css" media="all" rel="stylesheet" type="text/css" />
<script language="JavaScript" type="text/javascript" src="javascript/jquery-1.2.1.pack.js"></script>
<script language="JavaScript" type="text/javascript" src="javascript/drag.js"></script>
<script language="JavaScript" type="text/javascript" src="javascript/acordes.js"></script>
<script language="JavaScript" type="text/javascript">
$(function() {
A = new AcordeDOM('div.js-acorde-print');
A.render_print();
});
</script>
</head>
<body>
<div class="js-acorde-print">
<div>G#</div>
<div>11 10 8 8 11 11</div>
<ul>
<li>X X 2 4 4 4</li>
<li>X 1 5 5 5 3</li>
<li>X 0 2 2 2 0</li>
</ul>
</div>
<div class="js-acorde-print">
<div>G#</div>
<div>6 5 0 3 6 6</div>
<ul>
<li>X X 2 4 4 4</li>
<li>X 1 5 5 5 3</li>
<li>X 0 2 2 2 0</li>
</ul>
</div>
<div class="js-acorde-print">
<div>G#</div>
<div>6 5 3 3 6 6</div>
<ul>
<li>X X 2 4 4 4</li>
<li>X 1 5 5 5 3</li>
<li>X 0 2 2 2 0</li>
</ul>
</div>
<div class="js-acorde-print">
<div>G#</div>
<div>6 X X 7 6 10</div>
</div>
</body>

</html>

0 comments on commit 0db7d8d

Please sign in to comment.