index.js 1.3 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. ace.edit('editor').getSession().selection.on('changeCursor', function(e) {
  35. var cursorRow = ace.edit('editor').getCursorPosition().row;
  36. var currentSlide = currentCursorSlide(cursorRow);
  37. $('#slides-frame')[0].contentWindow.postMessage(JSON.stringify({
  38. method: 'slide',
  39. args: [currentSlide]
  40. }), window.location.origin);
  41. });
  42. });