Files
library/static/markdown/Gulpfile.js
2019-11-08 11:13:02 +08:00

347 lines
11 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')
})