"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"); });