|
@@ -0,0 +1,342 @@
|
|
|
+"use strict";
|
|
|
+
|
|
|
+var os = require("os");
|
|
|
+var gulp = require("gulp");
|
|
|
+var gutil = require("gulp-util");
|
|
|
+var sass = require("gulp-ruby-sass");
|
|
|
+var jshint = require("gulp-jshint");
|
|
|
+var uglify = require("gulp-uglifyjs");
|
|
|
+var rename = require("gulp-rename");
|
|
|
+var concat = require("gulp-concat");
|
|
|
+var notify = require("gulp-notify");
|
|
|
+var header = require("gulp-header");
|
|
|
+var minifycss = require("gulp-minify-css");
|
|
|
+//var jsdoc = require("gulp-jsdoc");
|
|
|
+//var jsdoc2md = require("gulp-jsdoc-to-markdown");
|
|
|
+var pkg = require("./package.json");
|
|
|
+var dateFormat = require("dateformatter").format;
|
|
|
+var replace = require("gulp-replace");
|
|
|
+
|
|
|
+pkg.name = "Editor.md";
|
|
|
+pkg.today = dateFormat;
|
|
|
+
|
|
|
+var headerComment = ["/*",
|
|
|
+ " * <%= pkg.name %>",
|
|
|
+ " *",
|
|
|
+ " * @file <%= fileName(file) %> ",
|
|
|
+ " * @version v<%= pkg.version %> ",
|
|
|
+ " * @description <%= pkg.description %>",
|
|
|
+ " * @license MIT License",
|
|
|
+ " * @author <%= pkg.author %>",
|
|
|
+ " * {@link <%= pkg.homepage %>}",
|
|
|
+ " * @updateTime <%= pkg.today('Y-m-d') %>",
|
|
|
+ " */",
|
|
|
+ "\r\n"].join("\r\n");
|
|
|
+
|
|
|
+var headerMiniComment = "/*! <%= pkg.name %> v<%= pkg.version %> | <%= fileName(file) %> | <%= pkg.description %> | MIT License | By: <%= pkg.author %> | <%= pkg.homepage %> | <%=pkg.today('Y-m-d') %> */\r\n";
|
|
|
+
|
|
|
+var scssTask = function(fileName, path) {
|
|
|
+
|
|
|
+ path = path || "scss/";
|
|
|
+
|
|
|
+ var distPath = "css";
|
|
|
+
|
|
|
+ return sass(path + fileName + ".scss", { style: "expanded", sourcemap: false, noCache : true })
|
|
|
+ .pipe(gulp.dest(distPath))
|
|
|
+ .pipe(header(headerComment, {pkg : pkg, fileName : function(file) {
|
|
|
+ var name = file.path.split(file.base);
|
|
|
+ return name[1].replace("\\", "");
|
|
|
+ }}))
|
|
|
+ .pipe(gulp.dest(distPath))
|
|
|
+ .pipe(rename({ suffix: ".min" }))
|
|
|
+ .pipe(gulp.dest(distPath))
|
|
|
+ .pipe(minifycss())
|
|
|
+ .pipe(gulp.dest(distPath))
|
|
|
+ .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) {
|
|
|
+ var name = file.path.split(file.base);
|
|
|
+ return name[1].replace("\\", "");
|
|
|
+ }}))
|
|
|
+ .pipe(gulp.dest(distPath))
|
|
|
+ .pipe(notify({ message: fileName + ".scss task completed!" }));
|
|
|
+};
|
|
|
+
|
|
|
+gulp.task("scss", function() {
|
|
|
+ return scssTask("editormd");
|
|
|
+});
|
|
|
+
|
|
|
+gulp.task("scss2", function() {
|
|
|
+ return scssTask("editormd.preview");
|
|
|
+});
|
|
|
+
|
|
|
+gulp.task("scss3", function() {
|
|
|
+ return scssTask("editormd.logo");
|
|
|
+});
|
|
|
+
|
|
|
+gulp.task("js", function() {
|
|
|
+ return gulp.src("./src/editormd.js")
|
|
|
+ .pipe(jshint("./.jshintrc"))
|
|
|
+ .pipe(jshint.reporter("default"))
|
|
|
+ .pipe(header(headerComment, {pkg : pkg, fileName : function(file) {
|
|
|
+ var name = file.path.split(file.base);
|
|
|
+ return name[1].replace(/[\\\/]?/, "");
|
|
|
+ }}))
|
|
|
+ .pipe(gulp.dest("./"))
|
|
|
+ .pipe(rename({ suffix: ".min" }))
|
|
|
+ .pipe(uglify()) // {outSourceMap: true, sourceRoot: './'}
|
|
|
+ .pipe(gulp.dest("./"))
|
|
|
+ .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) {
|
|
|
+ var name = file.path.split(file.base + ( (os.platform() === "win32") ? "\\" : "/") );
|
|
|
+ return name[1].replace(/[\\\/]?/, "");
|
|
|
+ }}))
|
|
|
+ .pipe(gulp.dest("./"))
|
|
|
+ .pipe(notify({ message: "editormd.js task complete" }));
|
|
|
+});
|
|
|
+
|
|
|
+gulp.task("amd", function() {
|
|
|
+ var replaceText1 = [
|
|
|
+ 'var cmModePath = "codemirror/mode/";',
|
|
|
+ ' var cmAddonPath = "codemirror/addon/";',
|
|
|
+ '',
|
|
|
+ ' var codeMirrorModules = [',
|
|
|
+ ' "jquery", "marked", "prettify",',
|
|
|
+ ' "katex", "raphael", "underscore", "flowchart", "jqueryflowchart", "sequenceDiagram",',
|
|
|
+ '',
|
|
|
+ ' "codemirror/lib/codemirror",',
|
|
|
+ ' cmModePath + "css/css",',
|
|
|
+ ' cmModePath + "sass/sass",',
|
|
|
+ ' cmModePath + "shell/shell",',
|
|
|
+ ' cmModePath + "sql/sql",',
|
|
|
+ ' cmModePath + "clike/clike",',
|
|
|
+ ' cmModePath + "php/php",',
|
|
|
+ ' cmModePath + "xml/xml",',
|
|
|
+ ' cmModePath + "markdown/markdown",',
|
|
|
+ ' cmModePath + "javascript/javascript",',
|
|
|
+ ' cmModePath + "htmlmixed/htmlmixed",',
|
|
|
+ ' cmModePath + "gfm/gfm",',
|
|
|
+ ' cmModePath + "http/http",',
|
|
|
+ ' cmModePath + "go/go",',
|
|
|
+ ' cmModePath + "dart/dart",',
|
|
|
+ ' cmModePath + "coffeescript/coffeescript",',
|
|
|
+ ' cmModePath + "nginx/nginx",',
|
|
|
+ ' cmModePath + "python/python",',
|
|
|
+ ' cmModePath + "perl/perl",',
|
|
|
+ ' cmModePath + "lua/lua",',
|
|
|
+ ' cmModePath + "r/r", ',
|
|
|
+ ' cmModePath + "ruby/ruby", ',
|
|
|
+ ' cmModePath + "rst/rst",',
|
|
|
+ ' cmModePath + "smartymixed/smartymixed",',
|
|
|
+ ' cmModePath + "vb/vb",',
|
|
|
+ ' cmModePath + "vbscript/vbscript",',
|
|
|
+ ' cmModePath + "velocity/velocity",',
|
|
|
+ ' cmModePath + "xquery/xquery",',
|
|
|
+ ' cmModePath + "yaml/yaml",',
|
|
|
+ ' cmModePath + "erlang/erlang",',
|
|
|
+ ' cmModePath + "jade/jade",',
|
|
|
+ '',
|
|
|
+ ' cmAddonPath + "edit/trailingspace", ',
|
|
|
+ ' cmAddonPath + "dialog/dialog", ',
|
|
|
+ ' cmAddonPath + "search/searchcursor", ',
|
|
|
+ ' cmAddonPath + "search/search", ',
|
|
|
+ ' cmAddonPath + "scroll/annotatescrollbar", ',
|
|
|
+ ' cmAddonPath + "search/matchesonscrollbar", ',
|
|
|
+ ' cmAddonPath + "display/placeholder", ',
|
|
|
+ ' cmAddonPath + "edit/closetag", ',
|
|
|
+ ' cmAddonPath + "fold/foldcode",',
|
|
|
+ ' cmAddonPath + "fold/foldgutter",',
|
|
|
+ ' cmAddonPath + "fold/indent-fold",',
|
|
|
+ ' cmAddonPath + "fold/brace-fold",',
|
|
|
+ ' cmAddonPath + "fold/xml-fold", ',
|
|
|
+ ' cmAddonPath + "fold/markdown-fold",',
|
|
|
+ ' cmAddonPath + "fold/comment-fold", ',
|
|
|
+ ' cmAddonPath + "mode/overlay", ',
|
|
|
+ ' cmAddonPath + "selection/active-line", ',
|
|
|
+ ' cmAddonPath + "edit/closebrackets", ',
|
|
|
+ ' cmAddonPath + "display/fullscreen",',
|
|
|
+ ' cmAddonPath + "search/match-highlighter"',
|
|
|
+ ' ];',
|
|
|
+ '',
|
|
|
+ ' define(codeMirrorModules, factory);'
|
|
|
+ ].join("\r\n");
|
|
|
+
|
|
|
+ var replaceText2 = [
|
|
|
+ "if (typeof define == \"function\" && define.amd) {",
|
|
|
+ " $ = arguments[0];",
|
|
|
+ " marked = arguments[1];",
|
|
|
+ " prettify = arguments[2];",
|
|
|
+ " katex = arguments[3];",
|
|
|
+ " Raphael = arguments[4];",
|
|
|
+ " _ = arguments[5];",
|
|
|
+ " flowchart = arguments[6];",
|
|
|
+ " CodeMirror = arguments[9];",
|
|
|
+ " }"
|
|
|
+ ].join("\r\n");
|
|
|
+
|
|
|
+ gulp.src("src/editormd.js")
|
|
|
+ .pipe(rename({ suffix: ".amd" }))
|
|
|
+ .pipe(gulp.dest('./'))
|
|
|
+ .pipe(header(headerComment, {pkg : pkg, fileName : function(file) {
|
|
|
+ var name = file.path.split(file.base);
|
|
|
+ return name[1].replace(/[\\\/]?/, "");
|
|
|
+ }}))
|
|
|
+ .pipe(gulp.dest("./"))
|
|
|
+ .pipe(replace("/* Require.js define replace */", replaceText1))
|
|
|
+ .pipe(gulp.dest('./'))
|
|
|
+ .pipe(replace("/* Require.js assignment replace */", replaceText2))
|
|
|
+ .pipe(gulp.dest('./'))
|
|
|
+ .pipe(rename({ suffix: ".min" }))
|
|
|
+ .pipe(uglify()) //{outSourceMap: true, sourceRoot: './'}
|
|
|
+ .pipe(gulp.dest("./"))
|
|
|
+ .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) {
|
|
|
+ var name = file.path.split(file.base + ( (os.platform() === "win32") ? "\\" : "/") );
|
|
|
+ return name[1].replace(/[\\\/]?/, "");
|
|
|
+ }}))
|
|
|
+ .pipe(gulp.dest("./"))
|
|
|
+ .pipe(notify({ message: "amd version task complete"}));
|
|
|
+});
|
|
|
+
|
|
|
+
|
|
|
+var codeMirror = {
|
|
|
+ path : {
|
|
|
+ src : {
|
|
|
+ mode : "lib/codemirror/mode",
|
|
|
+ addon : "lib/codemirror/addon"
|
|
|
+ },
|
|
|
+ dist : "lib/codemirror"
|
|
|
+ },
|
|
|
+ modes : [
|
|
|
+ "css",
|
|
|
+ "sass",
|
|
|
+ "shell",
|
|
|
+ "sql",
|
|
|
+ "clike",
|
|
|
+ "php",
|
|
|
+ "xml",
|
|
|
+ "markdown",
|
|
|
+ "javascript",
|
|
|
+ "htmlmixed",
|
|
|
+ "gfm",
|
|
|
+ "http",
|
|
|
+ "go",
|
|
|
+ "dart",
|
|
|
+ "coffeescript",
|
|
|
+ "nginx",
|
|
|
+ "python",
|
|
|
+ "perl",
|
|
|
+ "lua",
|
|
|
+ "r",
|
|
|
+ "ruby",
|
|
|
+ "rst",
|
|
|
+ "smartymixed",
|
|
|
+ "vb",
|
|
|
+ "vbscript",
|
|
|
+ "velocity",
|
|
|
+ "xquery",
|
|
|
+ "yaml",
|
|
|
+ "erlang",
|
|
|
+ "jade",
|
|
|
+ ],
|
|
|
+
|
|
|
+ addons : [
|
|
|
+ "edit/trailingspace",
|
|
|
+ "dialog/dialog",
|
|
|
+ "search/searchcursor",
|
|
|
+ "search/search",
|
|
|
+ "scroll/annotatescrollbar",
|
|
|
+ "search/matchesonscrollbar",
|
|
|
+ "display/placeholder",
|
|
|
+ "edit/closetag",
|
|
|
+ "fold/foldcode",
|
|
|
+ "fold/foldgutter",
|
|
|
+ "fold/indent-fold",
|
|
|
+ "fold/brace-fold",
|
|
|
+ "fold/xml-fold",
|
|
|
+ "fold/markdown-fold",
|
|
|
+ "fold/comment-fold",
|
|
|
+ "mode/overlay",
|
|
|
+ "selection/active-line",
|
|
|
+ "edit/closebrackets",
|
|
|
+ "display/fullscreen",
|
|
|
+ "search/match-highlighter"
|
|
|
+ ]
|
|
|
+};
|
|
|
+
|
|
|
+gulp.task("cm-mode", function() {
|
|
|
+
|
|
|
+ var modes = [
|
|
|
+ codeMirror.path.src.mode + "/meta.js"
|
|
|
+ ];
|
|
|
+
|
|
|
+ for(var i in codeMirror.modes) {
|
|
|
+ var mode = codeMirror.modes[i];
|
|
|
+ modes.push(codeMirror.path.src.mode + "/" + mode + "/" + mode + ".js");
|
|
|
+ }
|
|
|
+
|
|
|
+ return gulp.src(modes)
|
|
|
+ .pipe(concat("modes.min.js"))
|
|
|
+ .pipe(gulp.dest(codeMirror.path.dist))
|
|
|
+ .pipe(uglify()) // {outSourceMap: true, sourceRoot: codeMirror.path.dist}
|
|
|
+ .pipe(gulp.dest(codeMirror.path.dist))
|
|
|
+ .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) {
|
|
|
+ var name = file.path.split(file.base + "\\");
|
|
|
+ return (name[1]?name[1]:name[0]).replace(/\\/g, "");
|
|
|
+ }}))
|
|
|
+ .pipe(gulp.dest(codeMirror.path.dist))
|
|
|
+ .pipe(notify({ message: "codemirror-mode task complete!" }));
|
|
|
+});
|
|
|
+
|
|
|
+gulp.task("cm-addon", function() {
|
|
|
+
|
|
|
+ var addons = [];
|
|
|
+
|
|
|
+ for(var i in codeMirror.addons) {
|
|
|
+ var addon = codeMirror.addons[i];
|
|
|
+ addons.push(codeMirror.path.src.addon + "/" + addon + ".js");
|
|
|
+ }
|
|
|
+
|
|
|
+ return gulp.src(addons)
|
|
|
+ .pipe(concat("addons.min.js"))
|
|
|
+ .pipe(gulp.dest(codeMirror.path.dist))
|
|
|
+ .pipe(uglify()) //{outSourceMap: true, sourceRoot: codeMirror.path.dist}
|
|
|
+ .pipe(gulp.dest(codeMirror.path.dist))
|
|
|
+ .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) {
|
|
|
+ var name = file.path.split(file.base + "\\");
|
|
|
+ return (name[1]?name[1]:name[0]).replace(/\\/g, "");
|
|
|
+ }}))
|
|
|
+ .pipe(gulp.dest(codeMirror.path.dist))
|
|
|
+ .pipe(notify({ message: "codemirror-addon.js task complete" }));
|
|
|
+});
|
|
|
+/*
|
|
|
+gulp.task("jsdoc", function(){
|
|
|
+ return gulp.src(["./src/editormd.js", "README.md"])
|
|
|
+ .pipe(jsdoc.parser())
|
|
|
+ .pipe(jsdoc.generator("./docs/html"));
|
|
|
+});
|
|
|
+
|
|
|
+gulp.task("jsdoc2md", function() {
|
|
|
+ return gulp.src("src/js/editormd.js")
|
|
|
+ .pipe(jsdoc2md())
|
|
|
+ .on("error", function(err){
|
|
|
+ gutil.log(gutil.colors.red("jsdoc2md failed"), err.message);
|
|
|
+ })
|
|
|
+ .pipe(rename(function(path) {
|
|
|
+ path.extname = ".md";
|
|
|
+ }))
|
|
|
+ .pipe(gulp.dest("docs/markdown"));
|
|
|
+});
|
|
|
+*/
|
|
|
+gulp.task("watch", function() {
|
|
|
+ gulp.watch("scss/editormd.scss", ["scss"]);
|
|
|
+ gulp.watch("scss/editormd.preview.scss", ["scss", "scss2"]);
|
|
|
+ gulp.watch("scss/editormd.logo.scss", ["scss", "scss3"]);
|
|
|
+ gulp.watch("src/editormd.js", ["js", "amd"]);
|
|
|
+});
|
|
|
+
|
|
|
+gulp.task("default", function() {
|
|
|
+ gulp.run("scss");
|
|
|
+ gulp.run("scss2");
|
|
|
+ gulp.run("scss3");
|
|
|
+ gulp.run("js");
|
|
|
+ gulp.run("amd");
|
|
|
+ gulp.run("cm-addon");
|
|
|
+ gulp.run("cm-mode");
|
|
|
+});
|