diff --git a/.gitignore b/.gitignore index d537ab816..bc1e543ec 100644 --- a/.gitignore +++ b/.gitignore @@ -122,3 +122,4 @@ setup/Output/ #VS outout folders bin obj +output/* diff --git a/build.ps1 b/build.ps1 index a5459df3f..9e493454f 100644 --- a/build.ps1 +++ b/build.ps1 @@ -221,15 +221,12 @@ Function PackageTests() Function RunGulp() { Write-Host "##teamcity[progressStart 'Running Gulp']" - $gulpPath = '.\node_modules\gulp\bin\gulp' Invoke-Expression 'npm install' CheckExitCode - Invoke-Expression ('node ' + $gulpPath + ' build') -ErrorAction Continue -Verbose + Invoke-Expression 'gulp build' -ErrorAction Continue -Verbose CheckExitCode - Remove-Item $outputFolder\UI\build.txt -ErrorAction Continue - Write-Host "##teamcity[progressFinish 'Running Gulp']" } diff --git a/commonjsCleanup.linq b/commonjsCleanup.linq new file mode 100644 index 000000000..d9df781c6 --- /dev/null +++ b/commonjsCleanup.linq @@ -0,0 +1,50 @@ + + +void Main() +{ + var files = Directory.GetFiles("c:\\git\\sonarr\\src\\UI","*.js", SearchOption.AllDirectories); + + var moduleRegex = new Regex(@"module.exports\s*=\s*\(function\s*\(\)\s*{\n\s*return\s*(\w|\W)*\)\.call\(this\);$"); + var functionHead = new Regex(@"\s*\(function\s*\(\)\s*{\n\s*return\s*"); + var functionTail = new Regex(@"\}\).call\(this\);$"); + var multiVar = new Regex(@"^(?var\s*\w*\s*=\s*require\(.*\)),"); + var seperateDeclearatuin = new Regex(@"^((\w|\$|_)*\s=\srequire\(.*\))(,|;)", RegexOptions.Multiline); + + foreach (var filePath in files) + { + var text = File.ReadAllText(filePath); + + var newContent = text.Replace("// Generated by uRequire v0.7.0-beta.14 template: 'nodejs'",""); + + newContent = newContent.Replace("var __isAMD = !!(typeof define === 'function' && define.amd),",""); + newContent = newContent.Replace("__isNode = (typeof exports === 'object'),",""); + newContent = newContent.Replace("__isWeb = !__isNode;",""); + newContent = newContent.Replace("\"use strict\";","'use strict';"); + + newContent = newContent.Trim(); + + + + if(moduleRegex.IsMatch(newContent)) + { + filePath.Dump(); + + newContent = functionHead.Replace(newContent," "); + newContent = functionTail.Replace(newContent,""); + } + + if(multiVar.IsMatch(newContent)) + { + newContent = multiVar.Replace(newContent,"$1;"); //first one + + } + + newContent = seperateDeclearatuin.Replace(newContent,"var $1;"); //ones after + newContent.Replace("var $ = require('jquery'), var","var $ = require('jquery');"); + + File.WriteAllText(filePath,newContent.Trim()); + + } +} + +// Define other methods and classes here diff --git a/gulp/build.js b/gulp/build.js index c48e00a24..c772abe68 100644 --- a/gulp/build.js +++ b/gulp/build.js @@ -2,12 +2,11 @@ var gulp = require('gulp'); var runSequence = require('run-sequence'); require('./clean'); -require('./requirejs'); require('./less'); require('./handlebars'); require('./copy'); gulp.task('build', function () { return runSequence('clean', - ['requireJs', 'less', 'handlebars', 'copyHtml', 'copyContent']); + ['webpack', 'less', 'handlebars', 'copyHtml', 'copyContent', 'copyJs']); }); diff --git a/gulp/copy.js b/gulp/copy.js index a83bc8227..2833a37f3 100644 --- a/gulp/copy.js +++ b/gulp/copy.js @@ -5,7 +5,12 @@ var cache = require('gulp-cached'); var paths = require('./paths.js'); gulp.task('copyJs', function () { - return gulp.src(paths.src.scripts) + return gulp.src( + [ + paths.src.root + "piwikCheck.js", + paths.src.root + "polyfills.js", + paths.src.root + "JsLibraries\\handlebars.runtime.js", + ]) .pipe(cache('copyJs')) .pipe(print()) .pipe(gulp.dest(paths.dest.root)); diff --git a/gulp/gulpFile.js b/gulp/gulpFile.js index bc2392266..0f90de37d 100644 --- a/gulp/gulpFile.js +++ b/gulp/gulpFile.js @@ -1,12 +1,12 @@ require('./watch.js'); require('./build.js'); require('./clean.js'); -require('./requirejs.js'); require('./jshint.js'); require('./handlebars.js'); require('./copy.js'); require('./less.js'); require('./stripBom.js'); require('./imageMin.js'); +require('./webpack.js'); diff --git a/gulp/handlebars.js b/gulp/handlebars.js index 4534d52cf..3109f92bf 100644 --- a/gulp/handlebars.js +++ b/gulp/handlebars.js @@ -2,7 +2,6 @@ var gulp = require('gulp'); var handlebars = require('gulp-handlebars'); var declare = require('gulp-declare'); var concat = require('gulp-concat'); -var wrapAmd = require('gulp-wrap-amd'); var wrap = require("gulp-wrap"); var path = require('path'); var streamqueue = require('streamqueue'); @@ -48,10 +47,6 @@ gulp.task('handlebars', function () { partialStream, coreStream ).pipe(concat('templates.js')) - .pipe(wrapAmd({ - deps: ['handlebars'], - params: ['Handlebars'], - exports: 'this["T"]' - })) + .pipe(gulp.dest(paths.dest.root)); }); diff --git a/gulp/jshint.js b/gulp/jshint.js index b144335d3..6ab06b7d8 100644 --- a/gulp/jshint.js +++ b/gulp/jshint.js @@ -15,6 +15,7 @@ gulp.task('jshint', function () { '-W100': false, //Silently deleted characters (in locales) 'undef': true, 'globals': { + 'module': true, 'require': true, 'define': true, 'window': true, diff --git a/gulp/requirejs.js b/gulp/requirejs.js deleted file mode 100644 index 75ffd227e..000000000 --- a/gulp/requirejs.js +++ /dev/null @@ -1,32 +0,0 @@ -var gulp = require('gulp'); -var requirejs = require('requirejs'); -var paths = require('./paths'); - -require('./handlebars.js'); -require('./jshint.js'); - - -gulp.task('requireJs', ['jshint'], function (cb) { - - var config = { - mainConfigFile: 'src/UI/app.js', - fileExclusionRegExp: /^.*\.(?!js$)[^.]+$/, - preserveLicenseComments: false, - dir: paths.dest.root, - optimize: 'none', - removeCombined: true, - inlineText: false, - keepBuildDir: true, - modules: [ - { - name: 'app', - exclude: ['templates.js'] - } - ]}; - - requirejs.optimize(config, function (buildResponse) { - console.log(buildResponse); - cb(); - }); - -}); diff --git a/gulp/watch.js b/gulp/watch.js index 69a489316..61d83c866 100644 --- a/gulp/watch.js +++ b/gulp/watch.js @@ -8,17 +8,19 @@ require('./jshint.js'); require('./handlebars.js'); require('./less.js'); require('./copy.js'); +require('./webpack.js'); -gulp.task('watch', ['jshint', 'handlebars', 'less', 'copyJs', 'copyHtml', 'copyContent'], function () { - gulp.watch([paths.src.scripts, paths.src.exclude.libs], ['jshint', 'copyJs']); +gulp.task('watch', ['jshint', 'handlebars', 'less','copyHtml', 'copyContent','copyJs'], function () { + gulp.start('webpackWatch'); + gulp.watch([paths.src.scripts, paths.src.exclude.libs], ['jshint','copyJs']); gulp.watch(paths.src.templates, ['handlebars']); gulp.watch([paths.src.less, paths.src.exclude.libs], ['less']); gulp.watch([paths.src.html], ['copyHtml']); gulp.watch([paths.src.content + '**/*.*', '!**/*.less'], ['copyContent']); }); -gulp.task('liveReload', ['jshint', 'handlebars', 'less', 'copyJs'], function () { +gulp.task('liveReload', ['jshint', 'handlebars', 'less', 'webPack'], function () { var server = livereload(); gulp.watch([ 'app/**/*.js', diff --git a/gulp/webpack.js b/gulp/webpack.js new file mode 100644 index 000000000..a262d0e0c --- /dev/null +++ b/gulp/webpack.js @@ -0,0 +1,20 @@ +var gulp = require('gulp'); + +var gulpWebpack = require('gulp-webpack'); +var webpack = require('webpack'); +var webpackConfig = require('../webpack.config'); + +webpackConfig.devtool = "#source-map"; + +gulp.task('webpack', function() { + return gulp.src('main.js') + .pipe(gulpWebpack(webpackConfig, webpack)) + .pipe(gulp.dest('')); +}); + +gulp.task('webpackWatch', function() { + webpackConfig.watch = true; + return gulp.src('main.js') + .pipe(gulpWebpack(webpackConfig, webpack)) + .pipe(gulp.dest('')); +}); diff --git a/package.json b/package.json index 252b5f111..3bf8baa94 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "Sonarr", - "version": "0.0.0", + "version": "2.0.0", "description": "Sonarr", - "main": "index.js", + "main": "main.js", "scripts": { "preinstall": "" }, @@ -15,10 +15,10 @@ "gitHead": "9ff7aa1bf7fe38c4c5bdb92f56c8ad556916ed67", "readmeFilename": "readme.md", "dependencies": { + "del": "0.1.3", "fs-extra": "0.12.0", "gulp": "3.8.10", "gulp-cached": "1.0.1", - "del": "0.1.3", "gulp-concat": "2.4.2", "gulp-declare": "0.3.0", "gulp-handlebars": "2.2.0", @@ -26,10 +26,11 @@ "gulp-less": "1.3.6", "gulp-print": "1.1.0", "gulp-replace": "0.5.0", + "gulp-run": "1.6.6", + "webpack": "1.4.15", + "gulp-webpack": "1.2.0", "gulp-wrap": "0.5.0", - "gulp-wrap-amd": "0.3.1", "jshint-stylish": "1.0.0", - "requirejs": "2.1.15", "run-sequence": "1.0.2", "streamqueue": "0.1.1" } diff --git a/src/NzbDrone.Api/Frontend/Mappers/StaticResourceMapper.cs b/src/NzbDrone.Api/Frontend/Mappers/StaticResourceMapper.cs index 3ef823592..c0ba9b889 100644 --- a/src/NzbDrone.Api/Frontend/Mappers/StaticResourceMapper.cs +++ b/src/NzbDrone.Api/Frontend/Mappers/StaticResourceMapper.cs @@ -27,6 +27,7 @@ namespace NzbDrone.Api.Frontend.Mappers { return resourceUrl.StartsWith("/Content") || resourceUrl.EndsWith(".js") || + resourceUrl.EndsWith(".map") || resourceUrl.EndsWith(".css") || (resourceUrl.EndsWith(".ico") && !resourceUrl.Equals("/favicon.ico")) || resourceUrl.EndsWith(".swf"); diff --git a/src/UI/.idea/codeStyleSettings.xml b/src/UI/.idea/codeStyleSettings.xml index c05f974b7..8633a7b78 100644 --- a/src/UI/.idea/codeStyleSettings.xml +++ b/src/UI/.idea/codeStyleSettings.xml @@ -19,6 +19,8 @@