342 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			342 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
"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");
 | 
						|
}); |