Plugin Directory

Changeset 3298894


Ignore:
Timestamp:
05/22/2025 04:02:10 PM (9 months ago)
Author:
glewe
Message:

Tagging version 3.9.0

Location:
chordpress
Files:
5 edited
23 copied

Legend:

Unmodified
Added
Removed
  • chordpress/tags/3.9.0/chordpress.php

    r3275645 r3298894  
    1919 * Plugin URI:        https://lewe.gitbook.io/lewe-chordpress/
    2020 * Description:       This plugin renders ChordPro formatted text and chord diagrams in WordPress sites.
    21  * Version:           3.8.2
     21 * Version:           3.9.0
    2222 * Author:            George Lewe
    2323 * Author URI:        https://www.lewe.com
     
    3838 */
    3939define('CHORDPRESS_NAME', 'ChordPress');
    40 define('CHORDPRESS_VERSION', '3.8.2');
     40define('CHORDPRESS_VERSION', '3.9.0');
    4141define('CHORDPRESS_AUTHOR', 'George Lewe');
    4242define('CHORDPRESS_AUTHOR_URI', 'https://www.lewe.com');
  • chordpress/tags/3.9.0/includes/class-chordpress-renderer.php

    r3243398 r3298894  
    496496    array( 'tremolo' => '12', 'diatonic' => '10', 'chromatic' => '12', 'note' => "C4" ),
    497497    array( 'tremolo' => '-', 'diatonic' => '-', 'chromatic' => '12s', 'note' => "C#4" ),
     498  );
     499
     500  private $arrChromaticTranspose = array(
     501    '1' => ['1', '1s', '-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4'],
     502    '1s' => ['1s', '-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4' ],
     503    '-1' => ['-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s' ],
     504    '-1s' => ['-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5' ],
     505    '2' => ['2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s' ],
     506    '-2' => ['-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6' ],
     507    '-2s' => ['-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6' ],
     508    '3' => ['3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s' ],
     509    '3s' => ['3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7' ],
     510    '-3' => ['-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s' ],
     511    '-3s' => ['-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7' ],
     512    '-4' => ['-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s' ],
     513    '4' => ['4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8' ],
     514    '4s' => ['4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8' ],
     515    '-5' => ['-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9' ],
     516    '-5s' => ['-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s' ],
     517    '6' => ['6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9' ],
     518    '-6' => ['-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s' ],
     519    '-6s' => ['-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10' ],
     520    '7' => ['7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10' ],
     521    '7s' => ['7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s' ],
     522    '-7' => ['-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11' ],
     523    '-7s' => ['-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s' ],
     524    '-8' => ['-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11' ],
     525    '8' => ['8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s' ],
     526    '9' => ['9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12' ],
     527    '9s' => ['9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12' ],
     528    '-9' => ['-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s' ],
     529    '-9s' => ['-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ' ],
     530    '10' => ['10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ' ],
     531    '-10' => ['-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ' ],
     532    '-10s' => ['-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ' ],
     533    '11' => ['11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ' ],
     534    '11s' => ['11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ' ],
     535    '-11' => ['-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     536    '-11s' => ['-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     537    '-12' => ['-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     538    '12' => ['12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     539    '12s' => ['12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
    498540  );
    499541
     
    787829          }
    788830
     831          $interactionForm .=
     832            "<div class='cpress-row'>
     833              <div class='cpress-col-2'>";
     834
    789835          $interactionForm .= __('Harmonica', 'chordpress') . "<br>
    790             <div class=\"float-left\">
    791               <select
    792                 class=\"cpress-form-control cpress-form-control-sm cpress-py-0 cpress-px-2\"
    793                 id=\"selTranspose-%cpressID%\"
    794                 onchange=\"transposeHarmonica('%cpressID%', 'selTranspose-', this.value);return false;\"
    795                 title=\"" . __('Only works when using harmonica notation', 'chordpress') . ".\"
    796               >
    797                 <option value=\"diatonic\" " . $selectedDiatonic . ">" . __('Diatonic', 'chordpress') . "</option>
    798                 <option value=\"chromatic\" " . $selectedChromatic . ">" . __('Chromatic', 'chordpress') . "</option>
    799                 <option value=\"tremolo\" " . $selectedTremolo . ">" . __('Tremolo', 'chordpress') . "</option>
    800               </select>
     836            <select
     837              class=\"cpress-form-control cpress-form-control-sm cpress-py-0 cpress-px-2\"
     838              id=\"selTranspose-%cpressID%\"
     839              onchange=\"transposeHarmonica('%cpressID%', 'selTranspose-', this.value);return false;\"
     840              title=\"" . __('Only works when using harmonica notation', 'chordpress') . ".\"
     841            >
     842              <option value=\"diatonic\" " . $selectedDiatonic . ">" . __('Diatonic', 'chordpress') . "</option>
     843              <option value=\"chromatic\" " . $selectedChromatic . ">" . __('Chromatic', 'chordpress') . "</option>
     844              <option value=\"tremolo\" " . $selectedTremolo . ">" . __('Tremolo', 'chordpress') . "</option>
     845            </select>";
     846
     847          $interactionForm .= "
     848            </div>
     849            <div class='cpress-col-3'>";
     850
     851          if ($this->harmonica == 'chromatic') {
     852            $baseNote = "''";
     853            $initialText = '0';
     854            $interactionForm .= "<span id='btnTranspose-chromatic'>" . __('Transpose', 'chordpress') . "<br>
     855              <div class='cpress-btn-group' role='group'>
     856                <button type='button' class='cpress-btn cpress-btn-secondary cpress-btn-sm' onclick=\"transposeChromatic('%cpressID%', 'btnTranspose-', 'down', " . $baseNote . ");\">-</button>
     857                <button id=\"btnTranspose-%cpressID%\" type='button' class='cpress-btn cpress-btn-outline-secondary cpress-btn-sm' onclick=\"transposeChromatic('%cpressID%', 'btnTranspose-', 'reset', " . $baseNote . ");\" value='0'>" . $initialText . "</button>
     858                <button type='button' class='cpress-btn cpress-btn-secondary cpress-btn-sm' onclick=\"transposeChromatic('%cpressID%', 'btnTranspose-', 'up', " . $baseNote . ");\">+</button>
     859              </div>
     860              </span>";
     861          }
     862          $interactionForm .= "
     863              </div>
    801864            </div>";
    802865        }
     
    11201183                $returnText .= "\n";
    11211184              }
     1185              /**
     1186               * If harmonica type is 'chromatic' prepare all transposed values of the harmonica note.
     1187               * They need to be on the page for interactive mode to show/hide them via Javascript.
     1188               */
     1189              if ($this->harmonica == 'chromatic') {
     1190                for ($t = 1; $t <= 11; $t++) {
     1191                  $returnText .= '<div class="chord chord-hidable-%cpressID% key-%cpressID%-chromatic-' . $t . '" style="display:none"><span class="chordshort">' . $this->transposeChromaticNote($theChord, $t) . '</span>&nbsp;</div>';
     1192                  $returnText .= "\n";
     1193                }
     1194                $returnText .= "\n";
     1195              }
    11221196            }
    11231197
     
    12751349     */
    12761350    return $xlatedNote . $this->formatRemainder($rem);
     1351  }
     1352
     1353  /**
     1354   * --------------------------------------------------------------------------
     1355   * Format Chromatic Note.
     1356   * --------------------------------------------------------------------------
     1357   *
     1358   * Processes a Chromatic harmonica note and returns the formatted HTML.
     1359   *
     1360   * @param string $note - Chromatic note, e.g. "1" or "1s" or "-1" or "-1s".
     1361   *
     1362   * @return string - Transposed chromatic note
     1363   * @since 2.8.0
     1364   */
     1365  public function transposeChromaticNote($note, $transpose) {
     1366    if (strlen($note) == 0) return '';
     1367    if ($transpose === 0 || $transpose > 11) return $note;
     1368
     1369    /**
     1370     * Find the submitted note in the chromaticNotes array
     1371     */
     1372    if (array_key_exists($note, $this->arrChromaticTranspose)) {
     1373      $noteToTranspose = $this->arrChromaticTranspose[$note];
     1374      // $noteToTranspose now contains the array object for the submitted note
     1375    } else {
     1376      $noteToTranspose = false; // Note not found
     1377    }
     1378
     1379    if ($noteToTranspose !== false) {
     1380      /**
     1381       * Value found. Add transpose
     1382       */
     1383      return $noteToTranspose[$transpose];
     1384    } else {
     1385      /**
     1386       * Value not found
     1387       */
     1388      return $note;
     1389    }
    12771390  }
    12781391
  • chordpress/tags/3.9.0/languages/chordpress.pot

    r3243398 r3298894  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Lewe ChordPress 3.8.1\n"
     5"Project-Id-Version: Lewe ChordPress 3.9.0\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/chordpress\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-02-19T18:00:13+01:00\n"
     12"POT-Creation-Date: 2025-05-22T18:00:03+02:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.4.0\n"
     
    12481248msgstr ""
    12491249
    1250 #: includes/class-chordpress-renderer.php:698
     1250#: includes/class-chordpress-renderer.php:740
    12511251msgid "Font"
    12521252msgstr ""
    12531253
    1254 #: includes/class-chordpress-renderer.php:725
    1255 #: includes/class-chordpress-renderer.php:744
     1254#: includes/class-chordpress-renderer.php:767
     1255#: includes/class-chordpress-renderer.php:786
     1256#: includes/class-chordpress-renderer.php:854
    12561257msgid "Transpose"
    12571258msgstr ""
    12581259
    1259 #: includes/class-chordpress-renderer.php:746
     1260#: includes/class-chordpress-renderer.php:788
    12601261msgid "Only works for international key names"
    12611262msgstr ""
    12621263
    1263 #: includes/class-chordpress-renderer.php:789
     1264#: includes/class-chordpress-renderer.php:835
    12641265msgid "Harmonica"
    12651266msgstr ""
    12661267
    1267 #: includes/class-chordpress-renderer.php:795
     1268#: includes/class-chordpress-renderer.php:840
    12681269msgid "Only works when using harmonica notation"
    12691270msgstr ""
    12701271
    1271 #: includes/class-chordpress-renderer.php:797
     1272#: includes/class-chordpress-renderer.php:842
    12721273msgid "Diatonic"
    12731274msgstr ""
    12741275
    1275 #: includes/class-chordpress-renderer.php:798
     1276#: includes/class-chordpress-renderer.php:843
    12761277msgid "Chromatic"
    12771278msgstr ""
    12781279
    1279 #: includes/class-chordpress-renderer.php:799
     1280#: includes/class-chordpress-renderer.php:844
    12801281msgid "Tremolo"
    12811282msgstr ""
    12821283
    1283 #: includes/class-chordpress-renderer.php:807
     1284#: includes/class-chordpress-renderer.php:870
    12841285msgid "Print"
    12851286msgstr ""
    12861287
    1287 #: includes/class-chordpress-renderer.php:843
     1288#: includes/class-chordpress-renderer.php:906
    12881289msgid "Composer"
    12891290msgstr ""
    12901291
    1291 #: includes/class-chordpress-renderer.php:844
     1292#: includes/class-chordpress-renderer.php:907
    12921293msgid "Artist"
    12931294msgstr ""
    12941295
    1295 #: includes/class-chordpress-renderer.php:845
     1296#: includes/class-chordpress-renderer.php:908
    12961297msgid "Year"
    12971298msgstr ""
    12981299
    1299 #: includes/class-chordpress-renderer.php:846
     1300#: includes/class-chordpress-renderer.php:909
    13001301msgid "Album"
    13011302msgstr ""
    13021303
    1303 #: includes/class-chordpress-renderer.php:849
     1304#: includes/class-chordpress-renderer.php:912
    13041305msgid "Key (original)"
    13051306msgstr ""
    13061307
    1307 #: includes/class-chordpress-renderer.php:850
     1308#: includes/class-chordpress-renderer.php:913
    13081309msgid "Key (transposed)"
    13091310msgstr ""
    13101311
    1311 #: includes/class-chordpress-renderer.php:857
     1312#: includes/class-chordpress-renderer.php:920
    13121313msgid "Time"
    13131314msgstr ""
    13141315
    1315 #: includes/class-chordpress-renderer.php:858
     1316#: includes/class-chordpress-renderer.php:921
    13161317msgid "Tempo"
    13171318msgstr ""
    13181319
    1319 #: includes/class-chordpress-renderer.php:859
     1320#: includes/class-chordpress-renderer.php:922
    13201321msgid "Capo"
    13211322msgstr ""
    13221323
    1323 #: includes/class-chordpress-renderer.php:889
     1324#: includes/class-chordpress-renderer.php:952
    13241325msgid "These known chords are used in this song"
    13251326msgstr ""
    13261327
    1327 #: includes/class-chordpress-renderer.php:1007
     1328#: includes/class-chordpress-renderer.php:1070
    13281329msgid "Missing square bracket in line"
    13291330msgstr ""
  • chordpress/tags/3.9.0/public/js/chordpress-public.js

    r3234199 r3298894  
    9999        x--;
    100100      } else {
    101         x = 0;
     101        x = 11;
    102102      }
    103103    } else if (direction === 'reset') {
     
    138138/**
    139139 * ----------------------------------------------------------------------------
     140 * Transposes Chromatic.
     141 * ----------------------------------------------------------------------------
     142 *
     143 * This function hides all chromatic note divs, then shows those for the given
     144 * transpose value.
     145 *
     146 * @since 3.8.3
     147 */
     148function transposeChromatic(cpressId, formControlId, direction, baseNote) {
     149
     150  const arrTransposeValues = {
     151    '1': ['1', '1s', '-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4'],
     152    '1s': ['1s', '-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4' ],
     153    '-1': ['-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s' ],
     154    '-1s': ['-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5' ],
     155    '2': ['2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s' ],
     156    '-2': ['-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6' ],
     157    '-2s': ['-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6' ],
     158    '3': ['3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s' ],
     159    '3s': ['3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7' ],
     160    '-3': ['-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s' ],
     161    '-3s': ['-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7' ],
     162    '-4': ['-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s' ],
     163    '4': ['4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8' ],
     164    '4s': ['4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8' ],
     165    '-5': ['-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9' ],
     166    '-5s': ['-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s' ],
     167    '6': ['6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9' ],
     168    '-6': ['-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s' ],
     169    '-6s': ['-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10' ],
     170    '7': ['7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10' ],
     171    '7s': ['7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s' ],
     172    '-7': ['-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11' ],
     173    '-7s': ['-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s' ],
     174    '-8': ['-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11' ],
     175    '8': ['8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s' ],
     176    '9': ['9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12' ],
     177    '9s': ['9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12' ],
     178    '-9': ['-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s' ],
     179    '-9s': ['-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ' ],
     180    '10': ['10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ' ],
     181    '-10': ['-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ' ],
     182    '-10s': ['-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ' ],
     183    '11': ['11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ' ],
     184    '11s': ['11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ' ],
     185    '-11': ['-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     186    '-11s': ['-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     187    '-12': ['-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     188    '12': ['12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     189    '12s': ['12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     190  };
     191
     192  let transposeElementId = "selTranspose-" + cpressId;
     193  if (formControlId) {
     194    transposeElementId = formControlId + cpressId;
     195  }
     196  // console.log(">>> transposeElementId: " + transposeElementId);
     197
     198  /**
     199   * Get value from transpose form element
     200   */
     201  var x = document.getElementById(transposeElementId).value;
     202  // console.log(">>> direction: " + direction);
     203  if (direction) {
     204    if (direction === 'up') {
     205      if (x < 11) {
     206        x++;
     207      } else {
     208        x = 0;
     209      }
     210    } else if (direction === 'down') {
     211      if (x > 0) {
     212        x--;
     213      } else {
     214        x = 11;
     215      }
     216    } else if (direction === 'reset') {
     217      x = 0;
     218    }
     219  }
     220
     221  /**
     222   * Hide all hidable chords
     223   */
     224  var divsToHide = document.getElementsByClassName("chord-hidable-" + cpressId);
     225  // console.log(">>> divsToHide" + divsToHide);
     226  for (var i = 0; i < divsToHide.length; i++) {
     227    divsToHide[i].style.display = "none";
     228  }
     229
     230  /**
     231   * Now show those for the selected transpose value
     232   */
     233  var divsToShow = document.getElementsByClassName("key-" + cpressId + '-chromatic-' + x);
     234  if (x === 0) {
     235    divsToShow = document.getElementsByClassName("key-" + cpressId + '-chromatic');
     236  }
     237  // console.log(">>> divsToShow[0]" + divsToShow[0]);
     238
     239  for (var j = 0; j < divsToShow.length; j++) {
     240    divsToShow[j].style.display = "";
     241  }
     242
     243  /**
     244   * Change value and text of the transpose button
     245   */
     246  if (formControlId === 'btnTranspose-') {
     247    var btn = document.getElementById(transposeElementId);
     248    btn.value = x;
     249    if (baseNote !== '') {
     250      btn.innerText = x + ' (' + arrTransposeValues[baseNote][x] + ')';
     251    } else {
     252      btn.innerText = x;
     253    }
     254  }
     255}
     256
     257/**
     258 * ----------------------------------------------------------------------------
    140259 * Transposes Harmonica.
    141260 * ----------------------------------------------------------------------------
     
    147266 */
    148267function transposeHarmonica(cpressId, formControlId, harmonicaType) {
     268
     269  /**
     270   * Hide/show the transpose button if harmonica type id no chromatic.
     271   */
     272  const transposeButton = document.getElementById('btnTranspose-chromatic');
     273  if (harmonicaType === 'chromatic') {
     274    transposeButton.style.display = "";
     275  } else {
     276    transposeButton.style.display = "none";
     277  }
    149278
    150279  /**
     
    160289   */
    161290  var divsToShow = document.getElementsByClassName("key-" + cpressId + '-' + harmonicaType);
    162   for (var i = 0; i < divsToShow.length; i++) {
    163     divsToShow[i].style.display = "";
     291  for (var j = 0; j < divsToShow.length; j++) {
     292    divsToShow[j].style.display = "";
    164293  }
    165294}
  • chordpress/tags/3.9.0/readme.txt

    r3275645 r3298894  
    55Requires at least: 4.0
    66Tested up to: 6.8
    7 Stable tag: 3.8.2
     7Stable tag: 3.9.0
    88Requires PHP: 5.2.4
    99License: GPLv3
     
    130130
    131131== Changelog ==
     132= 3.9.0 =
     133* 2025-05-22
     134* Added option to transpose chromatic harmonica notes
     135
    132136= 3.8.1 =
    133137* 2025-02-19
  • chordpress/trunk/chordpress.php

    r3275645 r3298894  
    1919 * Plugin URI:        https://lewe.gitbook.io/lewe-chordpress/
    2020 * Description:       This plugin renders ChordPro formatted text and chord diagrams in WordPress sites.
    21  * Version:           3.8.2
     21 * Version:           3.9.0
    2222 * Author:            George Lewe
    2323 * Author URI:        https://www.lewe.com
     
    3838 */
    3939define('CHORDPRESS_NAME', 'ChordPress');
    40 define('CHORDPRESS_VERSION', '3.8.2');
     40define('CHORDPRESS_VERSION', '3.9.0');
    4141define('CHORDPRESS_AUTHOR', 'George Lewe');
    4242define('CHORDPRESS_AUTHOR_URI', 'https://www.lewe.com');
  • chordpress/trunk/includes/class-chordpress-renderer.php

    r3243398 r3298894  
    496496    array( 'tremolo' => '12', 'diatonic' => '10', 'chromatic' => '12', 'note' => "C4" ),
    497497    array( 'tremolo' => '-', 'diatonic' => '-', 'chromatic' => '12s', 'note' => "C#4" ),
     498  );
     499
     500  private $arrChromaticTranspose = array(
     501    '1' => ['1', '1s', '-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4'],
     502    '1s' => ['1s', '-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4' ],
     503    '-1' => ['-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s' ],
     504    '-1s' => ['-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5' ],
     505    '2' => ['2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s' ],
     506    '-2' => ['-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6' ],
     507    '-2s' => ['-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6' ],
     508    '3' => ['3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s' ],
     509    '3s' => ['3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7' ],
     510    '-3' => ['-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s' ],
     511    '-3s' => ['-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7' ],
     512    '-4' => ['-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s' ],
     513    '4' => ['4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8' ],
     514    '4s' => ['4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8' ],
     515    '-5' => ['-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9' ],
     516    '-5s' => ['-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s' ],
     517    '6' => ['6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9' ],
     518    '-6' => ['-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s' ],
     519    '-6s' => ['-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10' ],
     520    '7' => ['7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10' ],
     521    '7s' => ['7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s' ],
     522    '-7' => ['-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11' ],
     523    '-7s' => ['-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s' ],
     524    '-8' => ['-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11' ],
     525    '8' => ['8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s' ],
     526    '9' => ['9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12' ],
     527    '9s' => ['9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12' ],
     528    '-9' => ['-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s' ],
     529    '-9s' => ['-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ' ],
     530    '10' => ['10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ' ],
     531    '-10' => ['-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ' ],
     532    '-10s' => ['-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ' ],
     533    '11' => ['11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ' ],
     534    '11s' => ['11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ' ],
     535    '-11' => ['-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     536    '-11s' => ['-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     537    '-12' => ['-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     538    '12' => ['12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     539    '12s' => ['12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
    498540  );
    499541
     
    787829          }
    788830
     831          $interactionForm .=
     832            "<div class='cpress-row'>
     833              <div class='cpress-col-2'>";
     834
    789835          $interactionForm .= __('Harmonica', 'chordpress') . "<br>
    790             <div class=\"float-left\">
    791               <select
    792                 class=\"cpress-form-control cpress-form-control-sm cpress-py-0 cpress-px-2\"
    793                 id=\"selTranspose-%cpressID%\"
    794                 onchange=\"transposeHarmonica('%cpressID%', 'selTranspose-', this.value);return false;\"
    795                 title=\"" . __('Only works when using harmonica notation', 'chordpress') . ".\"
    796               >
    797                 <option value=\"diatonic\" " . $selectedDiatonic . ">" . __('Diatonic', 'chordpress') . "</option>
    798                 <option value=\"chromatic\" " . $selectedChromatic . ">" . __('Chromatic', 'chordpress') . "</option>
    799                 <option value=\"tremolo\" " . $selectedTremolo . ">" . __('Tremolo', 'chordpress') . "</option>
    800               </select>
     836            <select
     837              class=\"cpress-form-control cpress-form-control-sm cpress-py-0 cpress-px-2\"
     838              id=\"selTranspose-%cpressID%\"
     839              onchange=\"transposeHarmonica('%cpressID%', 'selTranspose-', this.value);return false;\"
     840              title=\"" . __('Only works when using harmonica notation', 'chordpress') . ".\"
     841            >
     842              <option value=\"diatonic\" " . $selectedDiatonic . ">" . __('Diatonic', 'chordpress') . "</option>
     843              <option value=\"chromatic\" " . $selectedChromatic . ">" . __('Chromatic', 'chordpress') . "</option>
     844              <option value=\"tremolo\" " . $selectedTremolo . ">" . __('Tremolo', 'chordpress') . "</option>
     845            </select>";
     846
     847          $interactionForm .= "
     848            </div>
     849            <div class='cpress-col-3'>";
     850
     851          if ($this->harmonica == 'chromatic') {
     852            $baseNote = "''";
     853            $initialText = '0';
     854            $interactionForm .= "<span id='btnTranspose-chromatic'>" . __('Transpose', 'chordpress') . "<br>
     855              <div class='cpress-btn-group' role='group'>
     856                <button type='button' class='cpress-btn cpress-btn-secondary cpress-btn-sm' onclick=\"transposeChromatic('%cpressID%', 'btnTranspose-', 'down', " . $baseNote . ");\">-</button>
     857                <button id=\"btnTranspose-%cpressID%\" type='button' class='cpress-btn cpress-btn-outline-secondary cpress-btn-sm' onclick=\"transposeChromatic('%cpressID%', 'btnTranspose-', 'reset', " . $baseNote . ");\" value='0'>" . $initialText . "</button>
     858                <button type='button' class='cpress-btn cpress-btn-secondary cpress-btn-sm' onclick=\"transposeChromatic('%cpressID%', 'btnTranspose-', 'up', " . $baseNote . ");\">+</button>
     859              </div>
     860              </span>";
     861          }
     862          $interactionForm .= "
     863              </div>
    801864            </div>";
    802865        }
     
    11201183                $returnText .= "\n";
    11211184              }
     1185              /**
     1186               * If harmonica type is 'chromatic' prepare all transposed values of the harmonica note.
     1187               * They need to be on the page for interactive mode to show/hide them via Javascript.
     1188               */
     1189              if ($this->harmonica == 'chromatic') {
     1190                for ($t = 1; $t <= 11; $t++) {
     1191                  $returnText .= '<div class="chord chord-hidable-%cpressID% key-%cpressID%-chromatic-' . $t . '" style="display:none"><span class="chordshort">' . $this->transposeChromaticNote($theChord, $t) . '</span>&nbsp;</div>';
     1192                  $returnText .= "\n";
     1193                }
     1194                $returnText .= "\n";
     1195              }
    11221196            }
    11231197
     
    12751349     */
    12761350    return $xlatedNote . $this->formatRemainder($rem);
     1351  }
     1352
     1353  /**
     1354   * --------------------------------------------------------------------------
     1355   * Format Chromatic Note.
     1356   * --------------------------------------------------------------------------
     1357   *
     1358   * Processes a Chromatic harmonica note and returns the formatted HTML.
     1359   *
     1360   * @param string $note - Chromatic note, e.g. "1" or "1s" or "-1" or "-1s".
     1361   *
     1362   * @return string - Transposed chromatic note
     1363   * @since 2.8.0
     1364   */
     1365  public function transposeChromaticNote($note, $transpose) {
     1366    if (strlen($note) == 0) return '';
     1367    if ($transpose === 0 || $transpose > 11) return $note;
     1368
     1369    /**
     1370     * Find the submitted note in the chromaticNotes array
     1371     */
     1372    if (array_key_exists($note, $this->arrChromaticTranspose)) {
     1373      $noteToTranspose = $this->arrChromaticTranspose[$note];
     1374      // $noteToTranspose now contains the array object for the submitted note
     1375    } else {
     1376      $noteToTranspose = false; // Note not found
     1377    }
     1378
     1379    if ($noteToTranspose !== false) {
     1380      /**
     1381       * Value found. Add transpose
     1382       */
     1383      return $noteToTranspose[$transpose];
     1384    } else {
     1385      /**
     1386       * Value not found
     1387       */
     1388      return $note;
     1389    }
    12771390  }
    12781391
  • chordpress/trunk/languages/chordpress.pot

    r3243398 r3298894  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Lewe ChordPress 3.8.1\n"
     5"Project-Id-Version: Lewe ChordPress 3.9.0\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/chordpress\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-02-19T18:00:13+01:00\n"
     12"POT-Creation-Date: 2025-05-22T18:00:03+02:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.4.0\n"
     
    12481248msgstr ""
    12491249
    1250 #: includes/class-chordpress-renderer.php:698
     1250#: includes/class-chordpress-renderer.php:740
    12511251msgid "Font"
    12521252msgstr ""
    12531253
    1254 #: includes/class-chordpress-renderer.php:725
    1255 #: includes/class-chordpress-renderer.php:744
     1254#: includes/class-chordpress-renderer.php:767
     1255#: includes/class-chordpress-renderer.php:786
     1256#: includes/class-chordpress-renderer.php:854
    12561257msgid "Transpose"
    12571258msgstr ""
    12581259
    1259 #: includes/class-chordpress-renderer.php:746
     1260#: includes/class-chordpress-renderer.php:788
    12601261msgid "Only works for international key names"
    12611262msgstr ""
    12621263
    1263 #: includes/class-chordpress-renderer.php:789
     1264#: includes/class-chordpress-renderer.php:835
    12641265msgid "Harmonica"
    12651266msgstr ""
    12661267
    1267 #: includes/class-chordpress-renderer.php:795
     1268#: includes/class-chordpress-renderer.php:840
    12681269msgid "Only works when using harmonica notation"
    12691270msgstr ""
    12701271
    1271 #: includes/class-chordpress-renderer.php:797
     1272#: includes/class-chordpress-renderer.php:842
    12721273msgid "Diatonic"
    12731274msgstr ""
    12741275
    1275 #: includes/class-chordpress-renderer.php:798
     1276#: includes/class-chordpress-renderer.php:843
    12761277msgid "Chromatic"
    12771278msgstr ""
    12781279
    1279 #: includes/class-chordpress-renderer.php:799
     1280#: includes/class-chordpress-renderer.php:844
    12801281msgid "Tremolo"
    12811282msgstr ""
    12821283
    1283 #: includes/class-chordpress-renderer.php:807
     1284#: includes/class-chordpress-renderer.php:870
    12841285msgid "Print"
    12851286msgstr ""
    12861287
    1287 #: includes/class-chordpress-renderer.php:843
     1288#: includes/class-chordpress-renderer.php:906
    12881289msgid "Composer"
    12891290msgstr ""
    12901291
    1291 #: includes/class-chordpress-renderer.php:844
     1292#: includes/class-chordpress-renderer.php:907
    12921293msgid "Artist"
    12931294msgstr ""
    12941295
    1295 #: includes/class-chordpress-renderer.php:845
     1296#: includes/class-chordpress-renderer.php:908
    12961297msgid "Year"
    12971298msgstr ""
    12981299
    1299 #: includes/class-chordpress-renderer.php:846
     1300#: includes/class-chordpress-renderer.php:909
    13001301msgid "Album"
    13011302msgstr ""
    13021303
    1303 #: includes/class-chordpress-renderer.php:849
     1304#: includes/class-chordpress-renderer.php:912
    13041305msgid "Key (original)"
    13051306msgstr ""
    13061307
    1307 #: includes/class-chordpress-renderer.php:850
     1308#: includes/class-chordpress-renderer.php:913
    13081309msgid "Key (transposed)"
    13091310msgstr ""
    13101311
    1311 #: includes/class-chordpress-renderer.php:857
     1312#: includes/class-chordpress-renderer.php:920
    13121313msgid "Time"
    13131314msgstr ""
    13141315
    1315 #: includes/class-chordpress-renderer.php:858
     1316#: includes/class-chordpress-renderer.php:921
    13161317msgid "Tempo"
    13171318msgstr ""
    13181319
    1319 #: includes/class-chordpress-renderer.php:859
     1320#: includes/class-chordpress-renderer.php:922
    13201321msgid "Capo"
    13211322msgstr ""
    13221323
    1323 #: includes/class-chordpress-renderer.php:889
     1324#: includes/class-chordpress-renderer.php:952
    13241325msgid "These known chords are used in this song"
    13251326msgstr ""
    13261327
    1327 #: includes/class-chordpress-renderer.php:1007
     1328#: includes/class-chordpress-renderer.php:1070
    13281329msgid "Missing square bracket in line"
    13291330msgstr ""
  • chordpress/trunk/public/js/chordpress-public.js

    r3234199 r3298894  
    9999        x--;
    100100      } else {
    101         x = 0;
     101        x = 11;
    102102      }
    103103    } else if (direction === 'reset') {
     
    138138/**
    139139 * ----------------------------------------------------------------------------
     140 * Transposes Chromatic.
     141 * ----------------------------------------------------------------------------
     142 *
     143 * This function hides all chromatic note divs, then shows those for the given
     144 * transpose value.
     145 *
     146 * @since 3.8.3
     147 */
     148function transposeChromatic(cpressId, formControlId, direction, baseNote) {
     149
     150  const arrTransposeValues = {
     151    '1': ['1', '1s', '-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4'],
     152    '1s': ['1s', '-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4' ],
     153    '-1': ['-1', '-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s' ],
     154    '-1s': ['-1s', '2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5' ],
     155    '2': ['2', '-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s' ],
     156    '-2': ['-2', '-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6' ],
     157    '-2s': ['-2s', '3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6' ],
     158    '3': ['3', '3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s' ],
     159    '3s': ['3s', '-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7' ],
     160    '-3': ['-3', '-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s' ],
     161    '-3s': ['-3s', '-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7' ],
     162    '-4': ['-4', '4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s' ],
     163    '4': ['4', '4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8' ],
     164    '4s': ['4s', '-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8' ],
     165    '-5': ['-5', '-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9' ],
     166    '-5s': ['-5s', '6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s' ],
     167    '6': ['6', '-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9' ],
     168    '-6': ['-6', '-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s' ],
     169    '-6s': ['-6s', '7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10' ],
     170    '7': ['7', '7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10' ],
     171    '7s': ['7s', '-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s' ],
     172    '-7': ['-7', '-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11' ],
     173    '-7s': ['-7s', '-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s' ],
     174    '-8': ['-8', '8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11' ],
     175    '8': ['8', '9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s' ],
     176    '9': ['9', '9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12' ],
     177    '9s': ['9s', '-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12' ],
     178    '-9': ['-9', '-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s' ],
     179    '-9s': ['-9s', '10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ' ],
     180    '10': ['10', '-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ' ],
     181    '-10': ['-10', '-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ' ],
     182    '-10s': ['-10s', '11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ' ],
     183    '11': ['11', '11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ' ],
     184    '11s': ['11s', '-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ' ],
     185    '-11': ['-11', '-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     186    '-11s': ['-11s', '-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     187    '-12': ['-12', '12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     188    '12': ['12', '12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     189    '12s': ['12s', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ],
     190  };
     191
     192  let transposeElementId = "selTranspose-" + cpressId;
     193  if (formControlId) {
     194    transposeElementId = formControlId + cpressId;
     195  }
     196  // console.log(">>> transposeElementId: " + transposeElementId);
     197
     198  /**
     199   * Get value from transpose form element
     200   */
     201  var x = document.getElementById(transposeElementId).value;
     202  // console.log(">>> direction: " + direction);
     203  if (direction) {
     204    if (direction === 'up') {
     205      if (x < 11) {
     206        x++;
     207      } else {
     208        x = 0;
     209      }
     210    } else if (direction === 'down') {
     211      if (x > 0) {
     212        x--;
     213      } else {
     214        x = 11;
     215      }
     216    } else if (direction === 'reset') {
     217      x = 0;
     218    }
     219  }
     220
     221  /**
     222   * Hide all hidable chords
     223   */
     224  var divsToHide = document.getElementsByClassName("chord-hidable-" + cpressId);
     225  // console.log(">>> divsToHide" + divsToHide);
     226  for (var i = 0; i < divsToHide.length; i++) {
     227    divsToHide[i].style.display = "none";
     228  }
     229
     230  /**
     231   * Now show those for the selected transpose value
     232   */
     233  var divsToShow = document.getElementsByClassName("key-" + cpressId + '-chromatic-' + x);
     234  if (x === 0) {
     235    divsToShow = document.getElementsByClassName("key-" + cpressId + '-chromatic');
     236  }
     237  // console.log(">>> divsToShow[0]" + divsToShow[0]);
     238
     239  for (var j = 0; j < divsToShow.length; j++) {
     240    divsToShow[j].style.display = "";
     241  }
     242
     243  /**
     244   * Change value and text of the transpose button
     245   */
     246  if (formControlId === 'btnTranspose-') {
     247    var btn = document.getElementById(transposeElementId);
     248    btn.value = x;
     249    if (baseNote !== '') {
     250      btn.innerText = x + ' (' + arrTransposeValues[baseNote][x] + ')';
     251    } else {
     252      btn.innerText = x;
     253    }
     254  }
     255}
     256
     257/**
     258 * ----------------------------------------------------------------------------
    140259 * Transposes Harmonica.
    141260 * ----------------------------------------------------------------------------
     
    147266 */
    148267function transposeHarmonica(cpressId, formControlId, harmonicaType) {
     268
     269  /**
     270   * Hide/show the transpose button if harmonica type id no chromatic.
     271   */
     272  const transposeButton = document.getElementById('btnTranspose-chromatic');
     273  if (harmonicaType === 'chromatic') {
     274    transposeButton.style.display = "";
     275  } else {
     276    transposeButton.style.display = "none";
     277  }
    149278
    150279  /**
     
    160289   */
    161290  var divsToShow = document.getElementsByClassName("key-" + cpressId + '-' + harmonicaType);
    162   for (var i = 0; i < divsToShow.length; i++) {
    163     divsToShow[i].style.display = "";
     291  for (var j = 0; j < divsToShow.length; j++) {
     292    divsToShow[j].style.display = "";
    164293  }
    165294}
  • chordpress/trunk/readme.txt

    r3275645 r3298894  
    55Requires at least: 4.0
    66Tested up to: 6.8
    7 Stable tag: 3.8.2
     7Stable tag: 3.9.0
    88Requires PHP: 5.2.4
    99License: GPLv3
     
    130130
    131131== Changelog ==
     132= 3.9.0 =
     133* 2025-05-22
     134* Added option to transpose chromatic harmonica notes
     135
    132136= 3.8.1 =
    133137* 2025-02-19
Note: See TracChangeset for help on using the changeset viewer.