abcjs-rails 1.1.1 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -53,15 +53,43 @@ ABCJS.TuneBook = function(book) {
53
53
  directives += line + '\n';
54
54
  });
55
55
  }
56
+ This.header = directives;
57
+
56
58
  // Now, the tune ends at a blank line, so truncate it if needed. There may be "intertune" stuff.
57
59
  window.ABCJS.parse.each(This.tunes, function(tune) {
58
60
  var end = tune.abc.indexOf('\n\n');
59
61
  if (end > 0)
60
62
  tune.abc = tune.abc.substring(0, end);
63
+ tune.pure = tune.abc;
61
64
  tune.abc = directives + tune.abc;
65
+
66
+ // for the user's convenience, parse and store the title separately. The title is between the first T: and the next \n
67
+ var title = tune.pure.split("T:");
68
+ title = title[1].split("\n");
69
+ tune.title = title[0].replace(/^\s+|\s+$/g, '');;
70
+
71
+ // for the user's convenience, parse and store the id separately. The id is between the first X: and the next \n
72
+ var id = tune.pure.substring(2,tune.pure.indexOf("\n"));
73
+ tune.id = id.replace(/^\s+|\s+$/g, '');
62
74
  });
63
75
  };
64
76
 
77
+ ABCJS.TuneBook.prototype.getTuneById = function (id) {
78
+ for (var i = 0; i < this.tunes.length; i++) {
79
+ if (this.tunes[i].id === id)
80
+ return this.tunes[i];
81
+ }
82
+ return null;
83
+ };
84
+
85
+ ABCJS.TuneBook.prototype.getTuneByTitle = function (title) {
86
+ for (var i = 0; i < this.tunes.length; i++) {
87
+ if (this.tunes[i].title === title)
88
+ return this.tunes[i];
89
+ }
90
+ return null;
91
+ };
92
+
65
93
  function renderEngine(callback, output, abc, parserParams, renderParams) {
66
94
  var isArray = function(testObject) {
67
95
  return testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';
@@ -168,6 +168,14 @@ window.ABCJS.data.Tune = function() {
168
168
  }
169
169
  }
170
170
 
171
+ // Remove the temporary working variables
172
+ for (i = 0; i < this.lines.length; i++) {
173
+ if (this.lines[i].staff) {
174
+ for (s = 0; s < this.lines[i].staff.length; s++)
175
+ delete this.lines[i].staff[s].workingClef;
176
+ }
177
+ }
178
+
171
179
  function cleanUpSlursInLine(line) {
172
180
  var currSlur = [];
173
181
  var x;
@@ -403,11 +411,11 @@ window.ABCJS.data.Tune = function() {
403
411
  var This = this;
404
412
  var pushNote = function(hp) {
405
413
  if (hp.pitches !== undefined) {
406
- var mid = This.lines[This.lineNum].staff[This.staffNum].clef.verticalPos;
414
+ var mid = This.lines[This.lineNum].staff[This.staffNum].workingClef.verticalPos;
407
415
  window.ABCJS.parse.each(hp.pitches, function(p) { p.verticalPos = p.pitch - mid; });
408
416
  }
409
417
  if (hp.gracenotes !== undefined) {
410
- var mid2 = This.lines[This.lineNum].staff[This.staffNum].clef.verticalPos;
418
+ var mid2 = This.lines[This.lineNum].staff[This.staffNum].workingClef.verticalPos;
411
419
  window.ABCJS.parse.each(hp.gracenotes, function(p) { p.verticalPos = p.pitch - mid2; });
412
420
  }
413
421
  This.lines[This.lineNum].staff[This.staffNum].voices[This.voiceNum].push(hp);
@@ -477,6 +485,9 @@ window.ABCJS.data.Tune = function() {
477
485
 
478
486
  this.appendStartingElement = function(type, startChar, endChar, hashParams2)
479
487
  {
488
+ // If we're in the middle of beaming, then end the beam.
489
+ this.closeLine();
490
+
480
491
  // We only ever want implied naturals the first time.
481
492
  var impliedNaturals;
482
493
  if (type === 'key') {
@@ -487,6 +498,12 @@ window.ABCJS.data.Tune = function() {
487
498
  // Clone the object because it will be sticking around for the next line and we don't want the extra fields in it.
488
499
  var hashParams = window.ABCJS.parse.clone(hashParams2);
489
500
 
501
+ // If this is a clef type, then we replace the working clef on the line. This is kept separate from
502
+ // the clef in case there is an inline clef field. We need to know what the current position for
503
+ // the note is.
504
+ if (type === 'clef')
505
+ this.lines[this.lineNum].staff[this.staffNum].workingClef = hashParams;
506
+
490
507
  // These elements should not be added twice, so if the element exists on this line without a note or bar before it, just replace the staff version.
491
508
  var voice = this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum];
492
509
  for (var i = 0; i < voice.length; i++) {
@@ -607,7 +624,7 @@ window.ABCJS.data.Tune = function() {
607
624
  This.appendElement('scale', null, null, { size: params.scale} );
608
625
  };
609
626
  var createStaff = function(params) {
610
- This.lines[This.lineNum].staff[This.staffNum] = {voices: [ ], clef: params.clef, key: params.key};
627
+ This.lines[This.lineNum].staff[This.staffNum] = {voices: [ ], clef: params.clef, key: params.key, workingClef: params.clef };
611
628
  if (params.vocalfont) This.lines[This.lineNum].staff[This.staffNum].vocalfont = params.vocalfont;
612
629
  if (params.bracket) This.lines[This.lineNum].staff[This.staffNum].bracket = params.bracket;
613
630
  if (params.brace) This.lines[This.lineNum].staff[This.staffNum].brace = params.brace;
@@ -683,4 +700,4 @@ window.ABCJS.data.Tune = function() {
683
700
  this.addMetaTextObj = function(key, value) {
684
701
  this.metaText[key] = value;
685
702
  };
686
- }
703
+ };
@@ -1,5 +1,5 @@
1
1
  module Abcjs
2
2
  module Rails
3
- VERSION = "1.1.1"
3
+ VERSION = "1.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abcjs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: '1.3'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-15 00:00:00.000000000 Z
12
+ date: 2012-07-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties