浏览代码

add commit input

Tony Brix 6 年之前
父节点
当前提交
0f4ac747a2
共有 3 个文件被更改,包括 66 次插入14 次删除
  1. 45 9
      docs/demo/demo.js
  2. 3 1
      docs/demo/index.html
  3. 18 4
      docs/demo/worker.js

+ 45 - 9
docs/demo/demo.js

@@ -16,6 +16,8 @@ onunhandledrejection = function (e) {
 
 
 var $markdownElem = document.querySelector('#markdown');
 var $markdownElem = document.querySelector('#markdown');
 var $markedVerElem = document.querySelector('#markedVersion');
 var $markedVerElem = document.querySelector('#markedVersion');
+var $commitVerElem = document.querySelector('#commitVersion');
+$commitVerElem.style.display = 'none';
 var $markedVer = document.querySelector('#markedCdn');
 var $markedVer = document.querySelector('#markedCdn');
 var $optionsElem = document.querySelector('#options');
 var $optionsElem = document.querySelector('#options');
 var $outputTypeElem = document.querySelector('#outputType');
 var $outputTypeElem = document.querySelector('#outputType');
@@ -35,6 +37,7 @@ var $activeOutputElem = null;
 var search = searchToObject();
 var search = searchToObject();
 
 
 var markedVersions = {
 var markedVersions = {
+  commit: 'commit',
   master: 'https://cdn.jsdelivr.net/gh/markedjs/marked/lib/marked.js'
   master: 'https://cdn.jsdelivr.net/gh/markedjs/marked/lib/marked.js'
 };
 };
 var markedVersionCache = {};
 var markedVersionCache = {};
@@ -76,11 +79,7 @@ fetch('https://data.jsdelivr.com/v1/package/npm/marked')
   .then(function () {
   .then(function () {
     if ('version' in search && search.version) {
     if ('version' in search && search.version) {
       if (!(search.version in markedVersions)) {
       if (!(search.version in markedVersions)) {
-        markedVersions[search.version] = 'https://cdn.jsdelivr.net/gh/markedjs/marked@' + search.version + '/lib/marked.js';
-        var opt = document.createElement('option');
-        opt.textContent = search.version.substring(0, 7);
-        opt.value = search.version;
-        $markedVerElem.insertBefore(opt, $markedVerElem.firstChild);
+        addCommitVersion(search.version);
       }
       }
       $markedVerElem.value = search.version;
       $markedVerElem.value = search.version;
     } else {
     } else {
@@ -106,6 +105,17 @@ fetch('./quickref.md')
     document.querySelector('#quickref').value = text;
     document.querySelector('#quickref').value = text;
   });
   });
 
 
+function addCommitVersion(version) {
+  if (version in markedVersions) {
+    return;
+  }
+  markedVersions[version] = 'https://cdn.jsdelivr.net/gh/markedjs/marked@' + version + '/lib/marked.js';
+  var opt = document.createElement('option');
+  opt.textContent = version.substring(0, 7);
+  opt.value = version;
+  $markedVerElem.insertBefore(opt, $markedVerElem.firstChild);
+}
+
 function handleInputChange() {
 function handleInputChange() {
   handleChange($inputPanes, $inputTypeElem.value);
   handleChange($inputPanes, $inputTypeElem.value);
 }
 }
@@ -132,7 +142,14 @@ $outputTypeElem.addEventListener('change', handleOutputChange, false);
 handleOutputChange();
 handleOutputChange();
 $inputTypeElem.addEventListener('change', handleInputChange, false);
 $inputTypeElem.addEventListener('change', handleInputChange, false);
 handleInputChange();
 handleInputChange();
-$markedVerElem.addEventListener('change', updateVersion, false);
+$markedVerElem.addEventListener('change', function () {
+  if ($markedVerElem.value === 'commit') {
+    $commitVerElem.style.display = '';
+  } else {
+    $commitVerElem.style.display = 'none';
+    updateVersion();
+  }
+}, false);
 
 
 function handleInput() {
 function handleInput() {
   inputDirty = true;
   inputDirty = true;
@@ -148,9 +165,25 @@ $optionsElem.addEventListener('keyup', handleInput, false);
 $optionsElem.addEventListener('keypress', handleInput, false);
 $optionsElem.addEventListener('keypress', handleInput, false);
 $optionsElem.addEventListener('keydown', handleInput, false);
 $optionsElem.addEventListener('keydown', handleInput, false);
 
 
+$commitVerElem.addEventListener('keypress', function (e) {
+  if (e.which === 13) {
+    var commit = $commitVerElem.value.toLowerCase();
+    if (!commit.match(/^[0-9a-f]{40}$/)) {
+      alert('That is not a valid commit');
+      return;
+    }
+    addCommitVersion(commit);
+    $markedVerElem.value = commit;
+    $commitVerElem.style.display = 'none';
+    $commitVerElem.value = '';
+    updateVersion();
+  }
+}, false);
+
 $clearElem.addEventListener('click', function () {
 $clearElem.addEventListener('click', function () {
   $markdownElem.value = '';
   $markdownElem.value = '';
   $markedVerElem.value = 'master';
   $markedVerElem.value = 'master';
+  $commitVerElem.style.display = 'none';
   updateVersion().then(setDefaultOptions);
   updateVersion().then(setDefaultOptions);
 }, false);
 }, false);
 
 
@@ -264,7 +297,7 @@ function updateVersion() {
 var delayTime = 1;
 var delayTime = 1;
 var checkChangeTimeout = null;
 var checkChangeTimeout = null;
 function checkForChanges() {
 function checkForChanges() {
-  if (inputDirty && (typeof marked !== 'undefined' || (useWorker))) {
+  if (inputDirty && (typeof marked !== 'undefined' || (useWorker)) && $markedVerElem.value !== 'commit') {
     inputDirty = false;
     inputDirty = false;
 
 
     updateLink();
     updateLink();
@@ -384,6 +417,7 @@ function messageWorker(message) {
           error = err;
           error = err;
         }
         }
       }
       }
+      error = error.replace(/^Uncaught Error: /, '');
       $previewElem.classList.add('error');
       $previewElem.classList.add('error');
       $htmlElem.classList.add('error');
       $htmlElem.classList.add('error');
       $lexerElem.classList.add('error');
       $lexerElem.classList.add('error');
@@ -391,8 +425,10 @@ function messageWorker(message) {
       setScrollPercent(0);
       setScrollPercent(0);
     };
     };
   }
   }
-  markedWorker.working = true;
-  workerTimeout(0);
+  if (message.task !== 'defaults') {
+    markedWorker.working = true;
+    workerTimeout(0);
+  }
   markedWorker.postMessage(message);
   markedWorker.postMessage(message);
 }
 }
 
 

+ 3 - 1
docs/demo/index.html

@@ -25,8 +25,10 @@
           <a id="permalink">Permalink</a> ·
           <a id="permalink">Permalink</a> ·
           <span>Version: </span>
           <span>Version: </span>
           <select id="markedVersion">
           <select id="markedVersion">
+            <option value="commit">Add Commit:</option>
             <option value="master">master</option>
             <option value="master">master</option>
-          </select> ·
+          </select>
+          <input type="text" id="commitVersion" title="Add commit version" />·
           <button id="clear">Clear</button>
           <button id="clear">Clear</button>
           <select id="inputType">
           <select id="inputType">
             <option value="markdown">Markdown</option>
             <option value="markdown">Markdown</option>

+ 18 - 4
docs/demo/worker.js

@@ -6,8 +6,12 @@ onmessage = function (e) {
     parse(e);
     parse(e);
   } else {
   } else {
     getVersion(e.data.version).then(function (text) {
     getVersion(e.data.version).then(function (text) {
-      // eslint-disable-next-line no-new-func
-      Function(text)();
+      try {
+        // eslint-disable-next-line no-new-func
+        Function(text)();
+      } catch (err) {
+        throw new Error('Cannot load that version of marked');
+      }
       currentVersion = e.data.version;
       currentVersion = e.data.version;
 
 
       parse(e);
       parse(e);
@@ -22,8 +26,18 @@ onunhandledrejection = function (e) {
 function parse(e) {
 function parse(e) {
   switch (e.data.task) {
   switch (e.data.task) {
     case 'defaults':
     case 'defaults':
-      var defaults = marked.getDefaults();
-      defaults.renderer = null;
+
+      var defaults = {};
+      if (typeof marked.getDefaults === 'function') {
+        defaults = marked.getDefaults();
+        delete defaults.renderer;
+      } else if ('defaults' in marked) {
+        for (var prop in marked.defaults) {
+          if (prop !== 'renderer') {
+            defaults[prop] = marked.defaults[prop];
+          }
+        }
+      }
       postMessage({
       postMessage({
         task: e.data.task,
         task: e.data.task,
         defaults: defaults
         defaults: defaults