index.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. $(function () {
  2. function slideSeparatorLines(text) {
  3. var lines = text.split('\n');
  4. var separatorLineNumbers = [];
  5. for (i = 0; i < lines.length; i++) {
  6. var line = lines[i];
  7. if (line === '---') {
  8. separatorLineNumbers.push(i);
  9. }
  10. }
  11. return separatorLineNumbers;
  12. }
  13. function currentCursorSlide(cursorLine) {
  14. var text = ace.edit("editor").getValue();
  15. var separatorPositions = slideSeparatorLines(text);
  16. var slideNumber = separatorPositions.length;
  17. separatorPositions.every(function (pos, num) {
  18. if (pos >= cursorLine) {
  19. slideNumber = num;
  20. return false;
  21. }
  22. return true;
  23. });
  24. return slideNumber;
  25. }
  26. var editor = ace.edit("editor");
  27. editor.setTheme("ace/theme/chrome");
  28. editor.getSession().setMode("ace/mode/markdown");
  29. editor.getSession().setUseWrapMode(true);
  30. editor.setShowPrintMargin(true);
  31. $.get('/slides.md', function (data) {
  32. editor.setValue(data, -1);
  33. });
  34. var lastSRow = -1;
  35. ace.edit('editor').getSession().selection.on('changeCursor', function (e) {
  36. var cursorRow = ace.edit('editor').getCursorPosition().row;
  37. if (lastSRow === cursorRow) {
  38. return; // no update
  39. }
  40. lastSRow = cursorRow;
  41. var currentSlide = currentCursorSlide(cursorRow);
  42. $('#slides-frame')[0].contentWindow.postMessage(JSON.stringify({
  43. method: 'slide',
  44. args: [currentSlide]
  45. }), window.location.origin);
  46. });
  47. });