9 changes: 6 additions & 3 deletions mode/php/php.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion mode/ruby/ruby.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ CodeMirror.defineMode("ruby", function(config) {
"caller", "lambda", "proc", "public", "protected", "private", "require", "load",
"require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__"
]);
var indentWords = wordObj(["def", "class", "case", "for", "while", "module", "then",
var indentWords = wordObj(["def", "class", "case", "for", "while", "until", "module", "then",
"catch", "loop", "proc", "begin"]);
var dedentWords = wordObj(["end", "until"]);
var matching = {"[": "]", "{": "}", "(": ")"};
Expand Down
2 changes: 1 addition & 1 deletion mode/vhdl/vhdl.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE

// Originall written by Alf Nielsen, re-written by Michael Zhou
// Originally written by Alf Nielsen, re-written by Michael Zhou
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
Expand Down
69 changes: 69 additions & 0 deletions mode/vue/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<!doctype html>

<title>CodeMirror: Vue.js mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">

<link rel="stylesheet" href="../../lib/codemirror.css">
<script src="../../lib/codemirror.js"></script>
<script src="../../addon/mode/overlay.js"></script>
<script src="../../addon/mode/simple.js"></script>
<script src="../../addon/selection/selection-pointer.js"></script>
<script src="../xml/xml.js"></script>
<script src="../javascript/javascript.js"></script>
<script src="../css/css.js"></script>
<script src="../coffeescript/coffeescript.js"></script>
<script src="../sass/sass.js"></script>
<script src="../jade/jade.js"></script>

<script src="../handlebars/handlebars.js"></script>
<script src="../htmlmixed/htmlmixed.js"></script>
<script src="vue.js"></script>
<style>.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
<div id=nav>
<a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>

<ul>
<li><a href="../../index.html">Home</a>
<li><a href="../../doc/manual.html">Manual</a>
<li><a href="https://github.com/codemirror/codemirror">Code</a>
</ul>
<ul>
<li><a href="../index.html">Language modes</a>
<li><a class=active href="#">Vue.js mode</a>
</ul>
</div>

<article>
<h2>Vue.js mode</h2>
<form><textarea id="code" name="code">
<template>
<div class="sass">Im am a {{mustache-like}} template</div>
</template>

<script lang="coffee">
module.exports =
props: ['one', 'two', 'three']
</script>

<style lang="sass">
.sass
font-size: 18px
</style>

</textarea></form>
<script>
// Define an extended mixed-mode that understands vbscript and
// leaves mustache/handlebars embedded templates in html mode
var mixedMode = {
name: "vue"
};
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
mode: mixedMode,
selectionPointer: true
});
</script>

<p><strong>MIME types defined:</strong> <code>text/x-vue</code></p>

</article>
69 changes: 69 additions & 0 deletions mode/vue/vue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE

(function (mod) {
"use strict";
if (typeof exports === "object" && typeof module === "object") {// CommonJS
mod(require("../../lib/codemirror"),
require("../../addon/mode/overlay"),
require("../xml/xml"),
require("../javascript/javascript"),
require("../coffeescript/coffeescript"),
require("../css/css"),
require("../sass/sass"),
require("../stylus/stylus"),
require("../jade/jade"),
require("../handlebars/handlebars"));
} else if (typeof define === "function" && define.amd) { // AMD
define(["../../lib/codemirror",
"../../addon/mode/overlay",
"../xml/xml",
"../javascript/javascript",
"../coffeescript/coffeescript",
"../css/css",
"../sass/sass",
"../stylus/stylus",
"../jade/jade",
"../handlebars/handlebars"], mod);
} else { // Plain browser env
mod(CodeMirror);
}
})(function (CodeMirror) {
var tagLanguages = {
script: [
["lang", /coffee(script)?/, "coffeescript"],
["type", /^(?:text|application)\/(?:x-)?coffee(?:script)?$/, "coffeescript"]
],
style: [
["lang", /^stylus$/i, "stylus"],
["lang", /^sass$/i, "sass"],
["type", /^(text\/)?(x-)?styl(us)?$/i, "stylus"],
["type", /^text\/sass/i, "sass"]
],
template: [
["lang", /^vue-template$/i, "vue"],
["lang", /^jade$/i, "jade"],
["lang", /^handlebars$/i, "handlebars"],
["type", /^(text\/)?(x-)?jade$/i, "jade"],
["type", /^text\/x-handlebars-template$/i, "handlebars"],
[null, null, "vue-template"]
]
};

CodeMirror.defineMode("vue-template", function (config, parserConfig) {
var mustacheOverlay = {
token: function (stream) {
if (stream.match(/^\{\{.*?\}\}/)) return "meta mustache";
while (stream.next() && !stream.match("{{", false)) {}
return null;
}
};
return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), mustacheOverlay);
});

CodeMirror.defineMode("vue", function (config) {
return CodeMirror.getMode(config, {name: "htmlmixed", tags: tagLanguages});
}, "htmlmixed", "xml", "javascript", "coffeescript", "css", "sass", "stylus", "jade", "handlebars");

CodeMirror.defineMIME("script/x-vue", "vue");
});
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "codemirror",
"version":"5.6.0",
"version":"5.7.0",
"main": "lib/codemirror.js",
"description": "In-browser code editing made bearable",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion test/driver.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ function runTests(callback) {
}
}
if (!threw) {
if (expFail) callback("fail", test.name, message || "expected failure, but succeeded");
if (expFail) callback("fail", test.name, message || "expected failure, but passed");
else callback("ok", test.name, message);
}
if (!quit) { // Run next test
Expand Down
7 changes: 6 additions & 1 deletion test/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<script src="../keymap/sublime.js"></script>
<script src="../keymap/vim.js"></script>
<script src="../mode/rust/rust.js"></script>
<script src="../mode/mscgen/mscgen.js"></script>

<style type="text/css">
.ok {color: #090;}
Expand Down Expand Up @@ -100,6 +101,7 @@ <h2>Test Suite</h2>

<script src="../mode/clike/test.js"></script>
<script src="../mode/css/test.js"></script>
<script src="../mode/css/gss_test.js"></script>
<script src="../mode/css/scss_test.js"></script>
<script src="../mode/css/less_test.js"></script>
<script src="../mode/gfm/test.js"></script>
Expand All @@ -116,6 +118,9 @@ <h2>Test Suite</h2>
<script src="../mode/xml/test.js"></script>
<script src="../mode/xquery/test.js"></script>
<script src="../mode/rust/test.js"></script>
<script src="../mode/mscgen/mscgen_test.js"></script>
<script src="../mode/mscgen/xu_test.js"></script>
<script src="../mode/mscgen/msgenny_test.js"></script>
<script src="../addon/mode/multiplex_test.js"></script>
<script src="emacs_test.js"></script>
<script src="sql-hint-test.js"></script>
Expand Down Expand Up @@ -203,7 +208,7 @@ <h2>Test Suite</h2>
progress.style.width = (count * (progress.parentNode.clientWidth - 2) / totalTests) + "px";
progressRan.nodeValue = count;
if (type == "ok") {
message = "Test '" + name + "' succeeded";
message = "Test '" + name + "' passed";
if (!verbose) customMessage = false;
} else if (type == "skipped") {
message = "Test '" + name + "' skipped";
Expand Down
1 change: 1 addition & 0 deletions theme/icecoder.css
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,4 @@ ICEcoder default theme by Matt Pass, used in code editor available at https://ic
.cm-s-icecoder .CodeMirror-gutters { background: #141612; min-width: 41px; border-right: 0; }
.cm-s-icecoder .CodeMirror-linenumber { color: #555; cursor: default; }
.cm-s-icecoder .CodeMirror-matchingbracket { border: 1px solid grey; color: black !important; }
.cm-s-icecoder .CodeMirror-activeline-background { background: #000; }