diff --git a/main.js b/main.js index 87ad530c3140651ac7151befa35c6bc3452a13f1..94c44c48056acbda016942b9413bdaa62dbc508b 100644 --- a/main.js +++ b/main.js @@ -1,6 +1,7 @@ var audioButton = false; var midiButton = false; var activateButton; +var dataMidi; var editor; /** @@ -10,42 +11,47 @@ function loadEditor() { editor = ace.edit("editor"); editor.setTheme("ace/theme/tomorrow_night"); editor.session.setMode("ace/mode/css"); + const langTools = ace.require('ace/ext/language_tools'); + + const cssTemplate = { + getCompletions: (editor, session, pos, prefix, callback) => { + // note, won't fire if caret is at a word that does not have these letters + callback(null, [ + { value: '[loud,0,1]', score: 1, meta: 'Audio meter between 0 and 1.' }, + { value: '[low,0,1]', score: 1, meta: 'Audio energy low between 0 and 1.' }, + { value: '[lomi,0,1]', score: 1, meta: 'Audio energy low-mid between 0 and 1.' }, + { value: '[mid,0,1]', score: 1, meta: 'Audio energy mid between 0 and 1.' }, + { value: '[mihi,0,1]', score: 1, meta: 'Audio energy mid-high between 0 and 1.' }, + { value: '[hi,0,1]', score: 1, meta: 'Audio energy treble between 0 and 1.' }, + { value: '[onset:C]', score: 1, meta: 'Audio note C' }, + { value: '[onset:C#]', score: 1, meta: 'Audio note C#' }, + { value: '[onset:D]', score: 1, meta: 'Audio note D' }, + { value: '[onset:D#]', score: 1, meta: 'Audio note D#' }, + { value: '[onset:E]', score: 1, meta: 'Audio note E' }, + { value: '[onset:F]', score: 1, meta: 'Audio note F' }, + { value: '[onset:F#]', score: 1, meta: 'Audio note F#' }, + { value: '[onset:G]', score: 1, meta: 'Audio note G' }, + { value: '[onset:G#]', score: 1, meta: 'Audio note G#' }, + { value: '[onset:A]', score: 1, meta: 'Audio note A' }, + { value: '[onset:A#]', score: 1, meta: 'Audio note A#' }, + { value: '[onset:B]', score: 1, meta: 'Audio note B' }, + { value: '[note:24,0,1]', score: 1, meta: 'MIDI Note C between 0 and 1.' }, + { value: '[note:26,0,1]', score: 1, meta: 'MIDI Note D between 0 and 1.' }, + { value: '[note:28,0,1]', score: 1, meta: 'MIDI Note E between 0 and 1.' }, + { value: '[note:29,0,1]', score: 1, meta: 'MIDI Note F between 0 and 1.' }, + { value: '[note:31,0,1]', score: 1, meta: 'MIDI Note G between 0 and 1.' }, + { value: '[note:33,0,1]', score: 1, meta: 'MIDI Note A between 0 and 1.' }, + { value: '[note:35,0,1]', score: 1, meta: 'MIDI Note B between 0 and 1.' }, + ]); + }, + }; + langTools.addCompleter(cssTemplate); editor.setOptions({ - enableBasicAutocompletion: [{ - getCompletions: (editor, session, pos, prefix, callback) => { - // note, won't fire if caret is at a word that does not have these letters - callback(null, [ - { value: '[loud,0,1]', score: 1, meta: 'Audio meter between 0 and 1.' }, - { value: '[low,0,1]', score: 1, meta: 'Audio energy low between 0 and 1.' }, - { value: '[lomi,0,1]', score: 1, meta: 'Audio energy low-mid between 0 and 1.' }, - { value: '[mid,0,1]', score: 1, meta: 'Audio energy mid between 0 and 1.' }, - { value: '[mihi,0,1]', score: 1, meta: 'Audio energy mid-high between 0 and 1.' }, - { value: '[hi,0,1]', score: 1, meta: 'Audio energy treble between 0 and 1.' }, - { value: '[onset:C]', score: 1, meta: 'Audio note C' }, - { value: '[onset:C#]', score: 1, meta: 'Audio note C#' }, - { value: '[onset:D]', score: 1, meta: 'Audio note D' }, - { value: '[onset:D#]', score: 1, meta: 'Audio note D#' }, - { value: '[onset:E]', score: 1, meta: 'Audio note E' }, - { value: '[onset:F]', score: 1, meta: 'Audio note F' }, - { value: '[onset:F#]', score: 1, meta: 'Audio note F#' }, - { value: '[onset:G]', score: 1, meta: 'Audio note G' }, - { value: '[onset:G#]', score: 1, meta: 'Audio note G#' }, - { value: '[onset:A]', score: 1, meta: 'Audio note A' }, - { value: '[onset:A#]', score: 1, meta: 'Audio note A#' }, - { value: '[onset:B]', score: 1, meta: 'Audio note B' }, - { value: '[note:24,0,1]', score: 1, meta: 'MIDI Note C between 0 and 1.' }, - { value: '[note:26,0,1]', score: 1, meta: 'MIDI Note D between 0 and 1.' }, - { value: '[note:28,0,1]', score: 1, meta: 'MIDI Note E between 0 and 1.' }, - { value: '[note:29,0,1]', score: 1, meta: 'MIDI Note F between 0 and 1.' }, - { value: '[note:31,0,1]', score: 1, meta: 'MIDI Note G between 0 and 1.' }, - { value: '[note:33,0,1]', score: 1, meta: 'MIDI Note A between 0 and 1.' }, - { value: '[note:35,0,1]', score: 1, meta: 'MIDI Note B between 0 and 1.' }, - ]); - }, - }], + enableBasicAutocompletion: true, enableSnippets: true, enableLiveAutocompletion: true }); + chrome.storage.sync.get(['css'], function (result) { editor.setValue(result.css) }); @@ -121,7 +127,17 @@ function onMessage({ type, data }) { break; } case 'midiEvent': { - $('#midiEvent').text(data); + if (dataMidi != data) { + $('#midiEvent').text(data); + if (editor.isFocused()) { + editor.session.insert(editor.getCursorPosition(), data) + } + dataMidi = data; + } + break; + } + case 'midiDevices': { + $('#midiDevices').text(data); break; } }