snappymail/build/other/Gruntfile.js
RainLoop Team 333c063cf1 Change build system (Grunt -> Gulp)
Remove attachments on reply (Closes #195)
Do not show deleted (flag \Deleted) messages (Closes #185)
Release commit
2014-06-16 23:56:11 +04:00

534 lines
16 KiB
JavaScript

/**
* @deprecated
*/
/*jshint node: true */
'use strict';
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
cfg: {
devVersion: "0.0.0",
releasesPath: 'build/dist/releases',
releaseSrcPath: '',
releaseFolder: 'rainloop',
releaseZipFile: 'rainloop.zip'
},
less: {
development: {
files: {
'rainloop/v/<%= cfg.devVersion %>/static/css/less.css': 'dev/Styles/@Main.less'
}
}
},
jshint: {
options: {
jshintrc: '.jshintrc'
},
files: [
'Gruntfile.js',
'rainloop/v/<%= cfg.devVersion %>/static/js/app.js',
'rainloop/v/<%= cfg.devVersion %>/static/js/admin.js'
]
},
uglify: {
options: {
mangle: true,
compress: true,
preserveComments: 'some'
},
cookie: {
options: {
banner: '/*! jquery.cookie v1.4.0 (c) 2013 Klaus Hartl | MIT */\n',
preserveComments: 'false'
},
src: 'vendors/jquery-cookie/jquery.cookie.js',
dest: 'vendors/jquery-cookie/jquery.cookie-1.4.0.min.js'
},
ifvisible: {
options: {
banner: '/*!ifvisible.js v1.0.0 (c) 2013 Serkan Yersen | MIT */\n',
preserveComments: 'false'
},
src: 'vendors/ifvisible/src/ifvisible.js',
dest: 'vendors/ifvisible/ifvisible.min.js'
},
wakeup: {
options: {
banner: '/*! jQuery WakeUp plugin (c) 2013 Paul Okopny <paul.okopny@gmail.com> | MIT */\n',
preserveComments: 'false'
},
src: 'vendors/jquery-wakeup/jquery.wakeup.js',
dest: 'vendors/jquery-wakeup/jquery.wakeup.min.js'
},
mousewheel: {
options: {
banner: '/*! jquery.mousewheel v3.1.4 (c) 2013 Brandon Aaron (http://brandon.aaron.sh) | MIT */\n',
preserveComments: 'false'
},
src: 'vendors/jquery-mousewheel/jquery.mousewheel.js',
dest: 'vendors/jquery-mousewheel/jquery.mousewheel-3.1.4.min.js'
},
nano: {
options: {
banner: "/*! nanoScrollerJS v0.7 (c) 2013 James Florentino; modified by RainLoop Team | MIT */\n",
preserveComments: "false"
},
src: 'vendors/jquery-nanoscroller/jquery.nanoscroller.js',
dest: 'vendors/jquery-nanoscroller/jquery.nanoscroller-0.7.min.js'
},
inputosaurus: {
options: {
banner: "/*! Inputosaurus Text v0.1.6 (c) 2013 Dan Kielp <dan@sproutsocial.com>; modified by RainLoop Team | MIT */\n",
preserveComments: "false"
},
src: 'vendors/inputosaurus/inputosaurus.js',
dest: 'vendors/inputosaurus/inputosaurus.min.js'
},
pace: {
src: 'vendors/simple-pace/simple-pace.js',
dest: 'vendors/simple-pace/simple-pace-1.0.min.js'
},
rl: {
src: 'vendors/rl/rl.js',
dest: 'vendors/rl/rl-1.0.min.js'
},
min_app: {
src: 'rainloop/v/<%= cfg.devVersion %>/static/js/app.js',
dest: 'rainloop/v/<%= cfg.devVersion %>/static/js/app.min.js'
},
min_admin: {
src: 'rainloop/v/<%= cfg.devVersion %>/static/js/admin.js',
dest: 'rainloop/v/<%= cfg.devVersion %>/static/js/admin.min.js'
}
},
concat: {
js_index: {
nonull: true,
src: [
"vendors/json2.min.js",
"vendors/simple-pace/simple-pace-1.0.min.js",
"vendors/rl/rl-1.0.min.js"
],
dest: 'rainloop/v/<%= cfg.devVersion %>/static/js/boot.js'
},
js_openpgp: {
nonull: true,
src: [
"vendors/openpgp/openpgp-0.5.1.min.js",
],
dest: 'rainloop/v/<%= cfg.devVersion %>/static/js/openpgp.min.js'
},
js_libs: {
nonull: true,
options: {
separator: '\n\n'
},
src: [
"vendors/modernizr.js",
"vendors/underscore/underscore-1.5.2.min.js",
"vendors/jquery/jquery-1.11.1.min.js",
"vendors/jquery-ui/js/jquery-ui-1.10.3.custom.min.js",
"vendors/jquery-cookie/jquery.cookie-1.4.0.min.js",
"vendors/jquery-finger/jquery.finger.min.js",
"vendors/jquery-mousewheel/jquery.mousewheel-3.1.4.min.js",
"vendors/jquery-scrollstop/jquery.scrollstop.min.js",
"vendors/jquery-lazyload/jquery.lazyload.min.js",
"vendors/jquery-nanoscroller/jquery.nanoscroller-0.7.min.js",
"vendors/jquery-wakeup/jquery.wakeup.min.js",
"vendors/inputosaurus/inputosaurus.min.js",
"vendors/moment/min/moment.min.js ",
"vendors/routes/signals.min.js",
"vendors/routes/hasher.min.js",
"vendors/routes/crossroads.min.js",
"vendors/knockout/knockout-3.1.0.js",
"vendors/knockout-projections/knockout-projections-1.0.0.min.js",
"vendors/ssm/ssm.min.js",
"vendors/jua/jua.min.js",
"vendors/keymaster/keymaster.js",
"vendors/ifvisible/ifvisible.min.js",
"vendors/jquery-magnific-popup/jquery.magnific-popup.min.js",
"vendors/bootstrap/js/bootstrap.min.js",
"dev/Common/_LibsEnd.js"
],
dest: 'rainloop/v/<%= cfg.devVersion %>/static/js/libs.js'
},
js_admin: {
nonull: true,
options: {
stripBanners: true,
banner: '/*! RainLoop Webmail Admin Module (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */\n' +
'(function (window, $, ko, crossroads, hasher, _) {\n',
footer: '\n\n}(window, jQuery, ko, crossroads, hasher, _));'
},
src: [
"dev/Common/_Begin.js",
"dev/Common/_BeginA.js",
"dev/Common/Globals.js",
"dev/Common/Constants.js",
"dev/Common/Enums.js",
"dev/Common/Utils.js",
"dev/Common/Base64.js",
"dev/Common/Knockout.js",
"dev/Common/LinkBuilder.js",
"dev/Common/Plugins.js",
"dev/Storages/LocalStorages/CookieDriver.js",
"dev/Storages/LocalStorages/LocalStorageDriver.js",
"dev/Storages/LocalStorage.js",
"dev/Knoin/AbstractBoot.js",
"dev/Knoin/AbstractViewModel.js",
"dev/Knoin/AbstractScreen.js",
"dev/Knoin/Knoin.js",
"dev/Models/EmailModel.js",
"dev/Models/ContactTagModel.js",
"dev/ViewModels/PopupsDomainViewModel.js",
"dev/ViewModels/PopupsPluginViewModel.js",
"dev/ViewModels/PopupsActivateViewModel.js",
"dev/ViewModels/PopupsLanguagesViewModel.js",
"dev/ViewModels/PopupsAskViewModel.js",
"dev/ViewModels/AdminLoginViewModel.js",
"dev/ViewModels/AdminMenuViewModel.js",
"dev/ViewModels/AdminPaneViewModel.js",
"dev/Admin/General.js",
"dev/Admin/Login.js",
"dev/Admin/Branding.js",
"dev/Admin/Contacts.js",
"dev/Admin/Domains.js",
"dev/Admin/Security.js",
"dev/Admin/Social.js",
"dev/Admin/Plugins.js",
"dev/Admin/Packages.js",
"dev/Admin/Licensing.js",
"dev/Admin/About.js",
"dev/Storages/AbstractData.js",
"dev/Storages/AdminData.js",
"dev/Storages/AbstractAjaxRemote.js",
"dev/Storages/AdminAjaxRemote.js",
"dev/Storages/AbstractCache.js",
"dev/Storages/AdminCache.js",
"dev/Screens/AbstractSettings.js",
"dev/Screens/AdminLogin.js",
"dev/Screens/AdminSettings.js",
"dev/Boots/AbstractApp.js",
"dev/Boots/AdminApp.js",
"dev/Common/_End.js",
"dev/Common/_CoreEnd.js"
],
dest: 'rainloop/v/<%= cfg.devVersion %>/static/js/admin.js'
},
js_app: {
nonull: true,
options: {
stripBanners: true,
banner: '/*! RainLoop Webmail Main Module (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */\n' +
'(function (window, $, ko, crossroads, hasher, moment, Jua, _, ifvisible, key) {\n',
footer: '\n\n}(window, jQuery, ko, crossroads, hasher, moment, Jua, _, ifvisible, key));'
},
src: [
"dev/Common/_Begin.js",
"dev/Common/_BeginW.js",
"dev/Common/Globals.js",
"dev/Common/Constants.js",
"dev/Common/Enums.js",
"dev/Common/Utils.js",
"dev/Common/Base64.js",
"dev/Common/Knockout.js",
"dev/Common/LinkBuilder.js",
"dev/Common/Plugins.js",
"dev/Common/NewHtmlEditorWrapper.js",
"dev/Common/Selector.js",
"dev/Storages/LocalStorages/CookieDriver.js",
"dev/Storages/LocalStorages/LocalStorageDriver.js",
"dev/Storages/LocalStorage.js",
"dev/Knoin/AbstractBoot.js",
"dev/Knoin/AbstractViewModel.js",
"dev/Knoin/AbstractScreen.js",
"dev/Knoin/Knoin.js",
"dev/Models/EmailModel.js",
"dev/Models/ContactModel.js",
"dev/Models/ContactPropertyModel.js",
"dev/Models/ContactTagModel.js",
"dev/Models/AttachmentModel.js",
"dev/Models/ComposeAttachmentModel.js",
"dev/Models/MessageModel.js",
"dev/Models/FolderModel.js",
"dev/Models/AccountModel.js",
"dev/Models/IdentityModel.js",
"dev/Models/FilterConditionModel.js",
"dev/Models/FilterModel.js",
"dev/Models/OpenPgpKeyModel.js",
"dev/ViewModels/PopupsFolderClearViewModel.js",
"dev/ViewModels/PopupsFolderCreateViewModel.js",
"dev/ViewModels/PopupsFolderSystemViewModel.js",
"dev/ViewModels/PopupsComposeViewModel.js",
"dev/ViewModels/PopupsContactsViewModel.js",
"dev/ViewModels/PopupsAdvancedSearchViewModel.js",
"dev/ViewModels/PopupsAddAccountViewModel.js",
"dev/ViewModels/PopupsAddOpenPgpKeyViewModel.js",
"dev/ViewModels/PopupsViewOpenPgpKeyViewModel.js",
"dev/ViewModels/PopupsGenerateNewOpenPgpKeyViewModel.js",
"dev/ViewModels/PopupsComposeOpenPgpViewModel.js",
"dev/ViewModels/PopupsIdentityViewModel.js",
"dev/ViewModels/PopupsLanguagesViewModel.js",
"dev/ViewModels/PopupsTwoFactorTestViewModel.js",
"dev/ViewModels/PopupsAskViewModel.js",
"dev/ViewModels/PopupsKeyboardShortcutsHelpViewModel.js",
"dev/ViewModels/LoginViewModel.js",
"dev/ViewModels/AbstractSystemDropDownViewModel.js",
"dev/ViewModels/MailBoxSystemDropDownViewModel.js",
"dev/ViewModels/SettingsSystemDropDownViewModel.js",
"dev/ViewModels/MailBoxFolderListViewModel.js",
"dev/ViewModels/MailBoxMessageListViewModel.js",
"dev/ViewModels/MailBoxMessageViewViewModel.js",
"dev/ViewModels/SettingsMenuViewModel.js",
"dev/ViewModels/SettingsPaneViewModel.js",
"dev/Settings/General.js",
"dev/Settings/Contacts.js",
"dev/Settings/Accounts.js",
"dev/Settings/Identity.js",
"dev/Settings/Identities.js",
"dev/Settings/Filters.js",
"dev/Settings/Security.js",
"dev/Settings/Social.js",
"dev/Settings/ChangePassword.js",
"dev/Settings/Folders.js",
"dev/Settings/Themes.js",
"dev/Settings/OpenPGP.js",
"dev/Storages/AbstractData.js",
"dev/Storages/WebMailData.js",
"dev/Storages/AbstractAjaxRemote.js",
"dev/Storages/WebMailAjaxRemote.js",
"dev/Storages/AbstractCache.js",
"dev/Storages/WebMailCache.js",
"dev/Screens/AbstractSettings.js",
"dev/Screens/Login.js",
"dev/Screens/MailBox.js",
"dev/Screens/Settings.js",
"dev/Boots/AbstractApp.js",
"dev/Boots/RainLoopApp.js",
"dev/Common/_End.js",
"dev/Common/_CoreEnd.js"
],
dest: 'rainloop/v/<%= cfg.devVersion %>/static/js/app.js'
},
css: {
nonull: true,
src: [
"vendors/jquery-ui/css/smoothness/jquery-ui-1.10.3.custom.css",
"vendors/normalize/normalize.css",
"vendors/fontastic/styles.css",
"vendors/jquery-nanoscroller/nanoscroller.css",
"vendors/jquery-magnific-popup/magnific-popup.css",
"vendors/jquery-magnific-popup/magnific-popup-animations.css",
"vendors/simple-pace/styles.css",
"vendors/inputosaurus/inputosaurus.css",
"vendors/flags/flags-fixed.css",
"rainloop/v/<%= cfg.devVersion %>/static/css/less.css"
],
dest: 'rainloop/v/<%= cfg.devVersion %>/static/css/app.css'
}
},
cssmin: {
css: {
src: 'rainloop/v/<%= cfg.devVersion %>/static/css/app.css',
dest: 'rainloop/v/<%= cfg.devVersion %>/static/css/app.min.css'
}
},
compress: {
build: {
options: {
archive: '<%= cfg.releasesPath %>/<%= cfg.releaseFolder %>/<%= cfg.releaseZipFile %>',
mode: 'zip'
},
files: [{
expand: true,
cwd: '<%= cfg.releasesPath %>/<%= cfg.releaseFolder %>/src/',
src: ['**/*']
}]
}
},
md5: {
build: {
files: {
'<%= cfg.releasesPath %>/<%= cfg.releaseFolder %>/':
'<%= cfg.releasesPath %>/<%= cfg.releaseFolder %>/<%= cfg.releaseZipFile %>'
},
options: {
keepExtension: true,
keepBasename: true,
after: function () {
grunt.file['delete']([
grunt.config('cfg.releasesPath'), grunt.config('cfg.releaseFolder'), grunt.config('cfg.releaseZipFile')
].join("/"));
}
}
}
},
watch: {
js: {
options: {
nospawn: true
},
files: ['dev/**/*.js', 'vendors/**/*.js'],
tasks: ['concat:js_libs', 'concat:js_openpgp', 'concat:js_admin', 'concat:js_app']
},
styles: {
options: {
nospawn: true
},
files: ['dev/Styles/*.less'],
tasks: ['less', 'concat:css']
}
}
});
// dependencies
for (var key in grunt.file.readJSON('package.json').devDependencies) {
if (key.indexOf('grunt-') === 0) {
grunt.loadNpmTasks(key);
}
}
grunt.registerTask('rainloop', 'RainLoop Webmail build task', function () {
var
version = grunt.config('pkg.version'),
release = parseInt(grunt.config('pkg.release'), 10),
releasesPath = grunt.config('cfg.releasesPath'),
devVersion = grunt.config('cfg.devVersion'),
versionFull = version + '.' + release,
dist = releasesPath + '/webmail/' + versionFull + '/src/'
;
grunt.file.mkdir(dist);
grunt.file.mkdir(dist + 'data');
grunt.file.mkdir(dist + 'rainloop/v/' + versionFull);
require('wrench').copyDirSyncRecursive('rainloop/v/' + devVersion,
dist + 'rainloop/v/' + versionFull, {'forceDelete': true});
grunt.file.write(dist + 'data/EMPTY', versionFull);
grunt.file.write(dist + 'index.php',
grunt.file.read('index.php').replace('\'APP_VERSION\', \'0.0.0\'', '\'APP_VERSION\', \'' + versionFull + '\''));
grunt.file.copy(dist + 'index.php', dist + 'rainloop/v/' + versionFull + '/index.php.root');
grunt.file.delete(dist + 'rainloop/v/' + versionFull + '/static/css/less.css');
grunt.config.set('cfg.releaseFolder', 'webmail/' + versionFull);
grunt.config.set('cfg.releaseSrcPath', dist);
grunt.config.set('cfg.releaseZipFile', 'rainloop-' + versionFull + '.zip');
});
grunt.registerTask('rainloop-owncloud', 'RainLoop ownCloud App build task', function () {
var
content = '',
version = grunt.config('pkg.ownCloudPackageVersion'),
releasesPath = grunt.config('cfg.releasesPath'),
versionFull = version,
dist = releasesPath + '/owncloud/' + versionFull + '/src/'
;
grunt.file.mkdir(dist);
grunt.file.mkdir(dist + 'rainloop');
require('wrench').copyDirSyncRecursive('build/owncloud/rainloop-app',
dist + 'rainloop', {'forceDelete': true});
content = grunt.file.read(dist + 'rainloop/appinfo/info.xml');
grunt.file.write(dist + 'rainloop/appinfo/info.xml',
content.replace('<version>0.0.0</version>', '<version>' + versionFull + '</version>'));
grunt.file.write(dist + 'rainloop/appinfo/version', versionFull);
grunt.config.set('cfg.releaseFolder', 'owncloud/' + versionFull);
grunt.config.set('cfg.releaseSrcPath', dist);
grunt.config.set('cfg.releaseZipFile', 'rainloop-owncloud-app-' + versionFull + '.zip');
});
grunt.registerTask('release-inc', 'release inc', function () {
grunt.file.write('package.json',
grunt.file.read('package.json').replace(/"release":\s?"[\d]+",/, '"release": "' +
(1 + parseInt(grunt.config('pkg.release'), 10)) + '",'));
});
grunt.registerTask('rainloop-clean', 'RainLoop Webmail clean task', function () {
var releaseSrcPath = grunt.config('cfg.releaseSrcPath');
if ('' !== releaseSrcPath)
{
require('wrench').rmdirSyncRecursive(releaseSrcPath);
}
});
// uglify
grunt.registerTask('rlmin', ['uglify:min_app', 'uglify:min_admin']);
// uglify (optional)
grunt.registerTask('rl', ['uglify:rl']);
grunt.registerTask('nano', ['uglify:nano']);
grunt.registerTask('pace', ['uglify:pace']);
grunt.registerTask('wakeup', ['uglify:wakeup']);
grunt.registerTask('cookie', ['uglify:cookie']);
grunt.registerTask('mousewheel', ['uglify:mousewheel']);
grunt.registerTask('inputosaurus', ['uglify:inputosaurus']);
grunt.registerTask('ifvisible', ['uglify:ifvisible']);
// ---
grunt.registerTask('fast', ['less', 'concat']);
grunt.registerTask('default', ['less', 'concat', 'cssmin', 'jshint', 'rlmin']);
grunt.registerTask('build', ['default', 'rainloop', 'compress:build', 'md5:build', 'release-inc', 'rainloop-clean']);
grunt.registerTask('owncloud', ['rainloop-owncloud', 'compress:build', 'md5:build', 'rainloop-clean']);
// aliases
grunt.registerTask('u', ['uglify']);
grunt.registerTask('h', ['jshint']);
grunt.registerTask('b', ['build']);
grunt.registerTask('f', ['fast']);
grunt.registerTask('w', ['default', 'watch']);
grunt.registerTask('o', ['owncloud']);
grunt.registerTask('own', ['owncloud']);
};