jquery.fancytree
Version:
jQuery tree view / tree grid plugin with support for keyboard, inline editing, filtering, checkboxes, drag'n'drop, and lazy loading
540 lines (497 loc) • 20 kB
text/coffeescript
###
Build scripts for Fancytree
###
# jshint directives for the generated JS:
###jshint node: true, unused: false ###
"use strict"
module.exports = (grunt) ->
grunt.initConfig
pkg:
grunt.file.readJSON("package.json")
# Project metadata, used by the <banner> directive.
meta:
# banner: "/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - " +
banner: "/*! <%= pkg.title || pkg.name %> - @VERSION - @DATE\n" +
# "<%= grunt.template.today('yyyy-mm-dd HH:mm') %>\n" +
"<%= pkg.homepage ? ' * ' + pkg.homepage + '\\n' : '' %>" +
" * Copyright (c) <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>;" +
" Licensed <%= _.map(pkg.licenses, 'type').join(', ') %> */\n"
clean:
build:
src: [ "build" ]
dist:
src: [ "dist" ]
extMin:
src: [ "build/jquery.fancytree.*.min.js" ]
# compress:
# dist:
# options:
# archive: "archive/<%= pkg.name %>-<%= pkg.version %>.zip"
# files: [
# {expand: true, cwd: "dist/", src: ["**/*"], dest: ""}
# ]
concat:
core:
options:
stripBanners: true
src: ["<banner:meta.banner>"
# "lib/intro.js"
"src/<%= pkg.name %>.js"
# "lib/outro.js"
]
dest: "build/<%= pkg.name %>.js"
all:
options:
stripBanners: true
src: [
"<%= meta.banner %>"
# "lib/intro.js"
"src/jquery.fancytree.js"
# "build/jquery.fancytree.ariagrid.js"
"src/jquery.fancytree.childcounter.js"
"src/jquery.fancytree.clones.js"
# "src/jquery.fancytree.columnview.js"
"src/jquery.fancytree.dnd.js"
"src/jquery.fancytree.dnd5.js"
"src/jquery.fancytree.edit.js"
"src/jquery.fancytree.filter.js"
# "src/jquery.fancytree.fixed.js"
"src/jquery.fancytree.glyph.js"
"src/jquery.fancytree.gridnav.js"
# "src/jquery.fancytree.menu.js"
"src/jquery.fancytree.persist.js"
"src/jquery.fancytree.table.js"
"src/jquery.fancytree.themeroller.js"
"src/jquery.fancytree.wide.js"
# "lib/outro.js"
]
dest: "build/<%= pkg.name %>-all.js"
custom:
options:
banner: "<%= meta.banner %>"
stripBanners: true
process: (src, fspec) ->
# Remove all comments, including /*! ... */
src = src.replace(/\/\*(.|\n)*\*\//g, "")
if /fancytree..+.min.js/.test(fspec)
# If it is an extension:
# Prepend a one-liner instead
fspec = fspec.substr(6) # strip 'build/'
src = "\n/*! Extension '" + fspec + "' */" + src
return src
src: [
"lib/intro.js"
"build/jquery.fancytree.min.js"
# "build/jquery.fancytree.ariagrid.min.js"
"build/jquery.fancytree.childcounter.min.js"
"build/jquery.fancytree.clones.min.js"
# "build/jquery.fancytree.columnview.min.js"
"build/jquery.fancytree.dnd.min.js"
"build/jquery.fancytree.dnd5.min.js"
"build/jquery.fancytree.edit.min.js"
"build/jquery.fancytree.filter.min.js"
# "build/jquery.fancytree.fixed.min.js"
"build/jquery.fancytree.glyph.min.js"
"build/jquery.fancytree.gridnav.min.js"
# "build/jquery.fancytree.menu.min.js"
"build/jquery.fancytree.persist.min.js"
"build/jquery.fancytree.table.min.js"
"build/jquery.fancytree.themeroller.min.js"
"build/jquery.fancytree.wide.min.js"
"lib/outro.js"
]
dest: "build/<%= pkg.name %>-all.min.js"
"all-deps":
options:
banner: "<%= meta.banner %>"
stripBanners: true
process: (src, fspec) ->
# Remove all comments, including /*! ... */
# (but keep disclaimer for jQuery-UI)
if not /jquery-ui..+.min.js/.test(fspec)
src = src.replace(/\/\*(.|\n)*\*\//g, "")
if /jquery.fancytree.min.js/.test(fspec)
src = "\n/*! Fancytree Core */" + src
if /fancytree..+.min.js/.test(fspec)
# If it is an extension:
# Prepend a one-liner instead
fspec = fspec.substr(6) # strip 'build/'
src = "\n/*! Extension '" + fspec + "' */" + src
return src
src: [
"lib/intro.js"
"src/jquery-ui-dependencies/jquery-ui.min.js"
# "build/jquery.fancytree.ariagrid.min.js"
"build/jquery.fancytree.min.js"
"build/jquery.fancytree.childcounter.min.js"
"build/jquery.fancytree.clones.min.js"
# "build/jquery.fancytree.dnd.min.js"
"build/jquery.fancytree.dnd5.min.js"
"build/jquery.fancytree.edit.min.js"
"build/jquery.fancytree.filter.min.js"
# "build/jquery.fancytree.fixed.min.js"
"build/jquery.fancytree.glyph.min.js"
"build/jquery.fancytree.gridnav.min.js"
"build/jquery.fancytree.persist.min.js"
"build/jquery.fancytree.table.min.js"
# "build/jquery.fancytree.themeroller.min.js"
"build/jquery.fancytree.wide.min.js"
"lib/outro.js"
]
dest: "build/<%= pkg.name %>-all-deps.min.js"
connect:
forever:
options:
port: 8080
base: "./"
keepalive: true
dev: # pass on, so subsequent tasks (like watch) can start
options:
port: 8080
base: "./"
keepalive: false
sauce:
options:
hostname: "localhost"
port: 9999
base: ""
keepalive: false
copy:
build: # copy production files to build folder
files: [{
expand: true # required for cwd
cwd: "src/"
src: [
"skin-**/*.{css,gif,md,png,less}"
"skin-common.less"
"*.txt"
]
dest: "build/"
}, {
expand: true
cwd: "src/"
src: [
"jquery.*.js"
]
# src: [
# "skin-**/*.{css,gif,png,less,md}"
# "*.txt"
# "jquery.*.js"
# "skin-common.less"
# ]
dest: "build/src/"
}, {
# src: ["*.txt", "*.md"]
src: ["LICENSE.txt"]
dest: "build/"
}]
dist: # copy build folder to dist
files: [{expand: true, cwd: "build/", src: ["**"], dest: "dist/"}]
cssmin:
options:
report: "min"
build:
expand: true
cwd: "build/"
src: ["**/*.fancytree.css", "!*.min.css"]
dest: "build/"
ext: ".fancytree.min.css"
devUpdate:
main:
options:
reportUpdated: true
updateType: 'prompt' # 'report'
docco:
docs:
src: ["src/jquery.fancytree.childcounter.js"]
options:
output: "doc/annotated-src"
eslint:
# options:
# # See https://github.com/sindresorhus/grunt-eslint/issues/119
# quiet: true
# We have to explicitly declare "src" property otherwise "newer"
# task wouldn't work properly :/
dist:
src: "dist/jquery.js"
dev:
# src: [ "src/**/*.js", "test/**/*.js", "build/**/*.js" ]
src: [ "src/jquery.fancytree.ariagrid.js" ]
exec:
tabfix:
# Cleanup whitespace according to http://contribute.jquery.org/style-guide/js/
# (requires https://github.com/mar10/tabfix)
# cmd: "tabfix -t --line=UNIX -r -m*.js,*.css,*.html,*.json -inode_modules src demo test"
cmd: "tabfix -t -r -m*.js,*.css,*.html,*.json -inode_modules src demo test"
upload:
# FTP upload the demo files (requires https://github.com/mar10/pyftpsync)
cmd: "pyftpsync --progress upload . ftp://www.wwwendt.de/tech/fancytree --delete-unmatched --omit build,node_modules,.*,_*"
# cmd: "pyftpsync --progress upload . ftp://www.wwwendt.de/tech/fancytree --omit build,node_modules,.*,_* -x"
upload_force:
# FTP upload the demo files (requires https://github.com/mar10/pyftpsync)
cmd: "pyftpsync --progress upload . ftp://www.wwwendt.de/tech/fancytree --delete-unmatched --omit build,node_modules,.*,_* --resolve=local --force"
# htmllint:
# all: ["demo/**/*.html", "doc/**/*.html", "test/**/*.html"]
# jsdoc:
# build:
# src: ["src/*.js", "doc/README.md", "doc/jsdoctest.js"]
# options:
# destination: "doc/jsdoc_new"
# # template: "bin/jsdoc3-moogle",
# # template: "node_modules/ink-docstrap/template",
# template: "../docstrap/template",
# configure: "doc/jsdoc.conf.json"
# verbose: true
jshint:
options:
# Linting according to http://contribute.jquery.org/style-guide/js/
jshintrc: ".jshintrc"
beforeConcat: [
# "Gruntfile.js"
"src/*.js"
"3rd-party/**/jquery.fancytree.*.js"
"test/unit/*.js"
"demo/**/*.js"
]
afterConcat: [
"<%= concat.core.dest %>"
"<%= concat.all.dest %>"
]
less:
development:
options:
# paths: ["src/"]
# report: "min"
compress: false
yuicompress: false
# optimization: 10
files: [
{expand: true, cwd: "src/", src: "**/ui.fancytree.less", dest: "src/", ext: ".fancytree.css"}
]
qunit:
build: [
"test/unit/test-core-build.html"
]
develop: [
"test/unit/test-core.html"
"test/unit/test-ext-filter.html"
"test/unit/test-ext-table.html"
"test/unit/test-ext-misc.html"
]
replace: # grunt-text-replace
production:
src: ["build/**/*.js"]
overwrite : true
replacements: [ {
from : /@DATE/g
# https://github.com/felixge/node-dateformat
to : "<%= grunt.template.today('isoUtcDateTime') %>"
},{
from : /buildType:\s*\"[a-zA-Z]+\"/g
to : "buildType: \"production\""
},{
from : /debugLevel:\s*[0-9]/g
to : "debugLevel: 1"
} ]
release:
src: ["dist/**/*.js"]
overwrite : true
replacements: [ {
from : /@VERSION/g
to : "<%= pkg.version %>"
} ]
"saucelabs-qunit":
ui_109:
options:
testname: "Fancytree qunit tests (jQuery 1.9, jQuery UI 1.9)"
urls: ["http://localhost:9999/test/unit/test-jQuery19-ui19.html"]
build: process.env.TRAVIS_JOB_ID
throttled: 5
recordVideo: false
videoUploadOnPass: false
# jQuery 1.9 dropped supports IE 6..?
# jQuery UI 1.9 supports IE 6+ and ?
browsers: [
{ browserName: "internet explorer", version: "6", platform: "Windows XP" }
]
ui_110:
options:
testname: "Fancytree qunit tests (jQuery 1.10, jQuery UI 1.10)"
urls: ["http://localhost:9999/test/unit/test-jQuery110-ui110.html"]
build: process.env.TRAVIS_JOB_ID
throttled: 5
recordVideo: false
videoUploadOnPass: false
# jQuery 1.10 dropped support for IE 6
# jQuery UI 1.10 supports IE 7+ and ?
browsers: [
{ browserName: "internet explorer", version: "7", platform: "Windows XP" }
{ browserName: "internet explorer", version: "8", platform: "Windows 7" }
]
ui_111:
options:
testname: "Fancytree qunit tests (jQuery 1.11, jQuery UI 1.11)"
urls: ["http://localhost:9999/test/unit/test-jQuery111-ui111.html"]
build: process.env.TRAVIS_JOB_ID
throttled: 5
recordVideo: false
videoUploadOnPass: false
# jQuery 1.11 supports IE + and latest Chrome/Edge/Firefox/Safari (-1)
# jQuery UI 1.11 supports IE 7+ and ?
browsers: [
{ browserName: "internet explorer", version: "9", platform: "Windows 7" }
{ browserName: "internet explorer", version: "10", platform: "Windows 8" }
{ browserName: "safari", version: "7", platform: "OS X 10.9" }
{ browserName: "safari", version: "8", platform: "OS X 10.10" }
]
ui_112:
options:
testname: "Fancytree qunit tests (jQuery 3, jQuery UI 1.12)"
urls: ["http://localhost:9999/test/unit/test-core.html"]
build: process.env.TRAVIS_JOB_ID
throttled: 5
recordVideo: false
videoUploadOnPass: false
# jQuery 3 supports IE 9+ and latest Chrome/Edge/Firefox/Safari (-1)
# jQuery UI 1.12 supports IE 11 and latest Chrome/Edge/Firefox/Safari (-1)
browsers: [
{ browserName: "chrome", platform: "Windows 8.1" }
{ browserName: "firefox", platform: "Windows 8.1" }
{ browserName: "firefox", platform: "Linux" }
{ browserName: "internet explorer", version: "11", platform: "Windows 8.1" }
{ browserName: "microsoftedge", platform: "Windows 10" }
{ browserName: "safari", version: "9", platform: "OS X 10.11" }
{ browserName: "safari", version: "10", platform: "OS X 10.12" }
]
uglify:
# build:
# options:
# banner: "<%= meta.banner %>"
# # preserveComments: "some"
# report: "min"
# sourceMap:
# (path) -> path.replace(/.js/, ".js.map")
# sourceMappingURL:
# (path) -> path.replace(/^build\//, "") + ".map"
# sourceMapPrefix: 1 # strip 'build/' from paths
# files:
# "build/<%= pkg.name %>.min.js": ["<%= concat.core.dest %>"],
# "build/<%= pkg.name %>-all.min.js": ["<%= concat.all.dest %>"]
custom:
options: # see https://github.com/gruntjs/grunt-contrib-uglify/issues/366
report: "min"
# preserveComments: "some"
preserveComments: /(?:^!|@(?:license|preserve|cc_on))/
files: [
{
src: ["**/jquery.fancytree*.js", "!*.min.js"]
cwd: "src/"
dest: "build/"
expand: true
rename: (dest, src) ->
folder = src.substring(0, src.lastIndexOf("/"))
filename = src.substring(src.lastIndexOf("/"), src.length)
filename = filename.substring(0, filename.lastIndexOf("."))
return dest + folder + filename + ".min.js"
}
]
# map_all:
# options:
# compress: false
# mangle: false
# sourceMap: true
# preserveComments: 'all'
# files: [
# {
# src: 'build/jquery.fancytree-all.min.js'
# dest: 'build/jquery.fancytree-all.min.js.map'
# }
# ]
watch:
less:
files: "src/**/*.less"
tasks: ["less:development"]
jshint:
options:
atBegin: true
files: ["src/*.js", "test/unit/*.js", "demo/**/*.js"]
tasks: ["jshint:beforeConcat", "eslint:dev"]
yabs:
release:
common: # defaults for all tools
manifests: ['package.json', 'bower.json']
# The following tools are run in order:
run_test: { tasks: ['test'] }
check: { branch: ['master'], canPush: true, clean: true, cmpVersion: 'gte' }
bump: {} # 'bump' also uses the increment mode `yabs:release:MODE`
run_build: { tasks: ['make_release'] }
commit: { add: '.' }
tag: {}
push: { tags: true, useFollowTags: true },
githubRelease:
repo: 'mar10/fancytree'
draft: false
npmPublish: {}
bump_develop: { inc: 'prepatch' }
commit_develop: { message: 'Bump prerelease ({%= version %}) [ci skip]' }
push_develop: {}
# ----------------------------------------------------------------------------
# Load "grunt*" dependencies
for key of grunt.file.readJSON("package.json").devDependencies
grunt.loadNpmTasks key if key isnt "grunt" and key.indexOf("grunt") is 0
# Register tasks
grunt.registerTask "server", ["connect:forever"]
grunt.registerTask "dev", ["connect:dev", "watch"]
grunt.registerTask "tabfix", ["exec:tabfix"]
grunt.registerTask "test", [
"jshint:beforeConcat",
"eslint:dev",
# "csslint",
# "htmllint",
"qunit:develop"
]
grunt.registerTask "sauce", ["connect:sauce", "saucelabs-qunit"]
if parseInt(process.env.TRAVIS_PULL_REQUEST, 10) > 0
# saucelab keys do not work on forks
# http://support.saucelabs.com/entries/25614798
grunt.registerTask "travis", ["test"]
else
grunt.registerTask "travis", ["test", "sauce"]
grunt.registerTask "default", ["test"]
grunt.registerTask "ci", ["test"] # Called by 'npm test'
grunt.registerTask "build", [
"less:development"
"test"
# "jsdoc:build"
"docco:docs"
"clean:build"
"copy:build"
"cssmin:build"
"concat:core"
"concat:all"
"uglify:custom"
"concat:custom"
"concat:all-deps"
"clean:extMin"
"replace:production"
"jshint:afterConcat"
# "uglify:build"
"qunit:build"
]
grunt.registerTask "make_release", [
"exec:tabfix"
"build"
"clean:dist"
"copy:dist"
"clean:build"
"replace:release"
# "compress:dist"
]
grunt.registerTask "upload", [
"build"
"exec:upload"
]
grunt.registerTask "upload_force", [
"build"
"exec:upload_force"
]