[web] Restructure and fix builds.

Building web apps seems to be broken. Fix it by restructuring the build
a bit. Namely:
1) Move application-specific TypeScript into "inc/" so all TS share a
  root.
2) Update build step to be a little less confusing.

BUG=None
TEST=local

Review-Url: https://codereview.chromium.org/2985273002
diff --git a/web/.gitignore b/web/.gitignore
index c1caf29..5ce46b9 100644
--- a/web/.gitignore
+++ b/web/.gitignore
@@ -7,8 +7,8 @@
 apps/*/.tmp
 
 # Ignore compiled JavaScript.
-apps/*/scripts-ts/*.js
-apps/*/scripts-ts/*.js.map
+inc/apps/*/*.js
+inc/apps/*/*.js.map
 
 # Tag files for installed Bower/NPM.
 .npm.installed
diff --git a/web/apps/gulp-common.js b/web/apps/gulp-common.js
index be7fc0d..9d01551 100644
--- a/web/apps/gulp-common.js
+++ b/web/apps/gulp-common.js
@@ -59,17 +59,19 @@
 exports.setup_common = function(gulp) {
   // Verify TypeScript file integrity and formatting.
   gulp.task('tslint', function() {
-    process.chdir(exports.base);
+    process.chdir(exports.incDir);
 
-    return gulp.src('inc/*/*.ts')
+    return gulp.src(['**/*.ts', '!bower_components/**'])
         .pipe(tslint({
-            configuration: path.join(exports.base, 'inc', 'tslint.json'),
+            configuration: './tslint.json',
             formatter: 'verbose',
         }))
         .pipe(tslint.report());
   });
 
   gulp.task('check-ts', function() {
+    process.chdir(exports.incDir);
+
     // Transpile each TypeScript module independently into JavaScript.
     var tsconfigPath = path.join(exports.incDir, 'tsconfig.json');
 
@@ -78,13 +80,13 @@
       typeRoots: [path.join(exports.base, 'node_modules', '@types')],
     });
 
-    return gulp.src(['**/*.ts', '!bower_components/**'], {cwd: exports.incDir})
+    return gulp.src(['**/*.ts', '!bower_components/**'])
         .pipe(tsProj());
   });
 
   gulp.task('check-format', function() {
-    process.chdir(exports.base);
-    return gulp.src('inc/*/*.ts')
+    process.chdir(exports.incDir);
+    return gulp.src(['**/*.ts', '!bower_components/**'])
         .pipe(format.checkFormat())
         .on('warning', function(e) {
           process.stdout.write(e.message);
@@ -93,10 +95,10 @@
   });
 
   gulp.task('format', function() {
-    process.chdir(exports.base);
+    process.chdir(exports.incDir);
 
     // The base option ensures the glob doesn't strip prefixes.
-    return gulp.src('inc/*/*.ts', {base: '.'})
+    return gulp.src(['**/*.ts', '!bower_components/**'])
         .pipe(format.format())
         .pipe(gulp.dest('.'));
   });
@@ -109,12 +111,15 @@
 };
 
 // Project-specific tasks.
-exports.setup = function(gulp, config) {
-  var APP = path.basename(config.dir);
+exports.setup = function(gulp, appDir, config) {
+  var APP = path.basename(appDir);
   var DIST = path.join(exports.out, 'dist', APP);
 
   var layout = {
     app: APP,
+    dir: process.cwd(),
+    web: '../..',
+    inc: './inc',
     distPath: DIST,
 
     // NOTE: Takes vararg via "arguments".
@@ -160,7 +165,7 @@
 
   var optimizeHtmlTask = function(src, dest) {
     var assets = $.useref.assets({
-      searchPath: ['.tmp', config.dir]
+      searchPath: ['.tmp', '.']
     });
 
     return gulp.src(src)
@@ -190,21 +195,20 @@
   // Transpiles "inc/*/*.ts" and deposits the result alongside their source
   // "ts" files.
   gulp.task('ts', function() {
-    // Transpile each TypeScript module independently into JavaScript.
-    var tsconfigPath = path.join(exports.incDir, 'tsconfig.json');
-
     // Compile the files in "scripts-ts/*.ts" into a single out file.
-    var scriptsTs = path.join(config.dir, 'scripts-ts');
-    var tsProj = ts.createProject(tsconfigPath, {
+    var appTsDir = path.join(layout.inc, 'apps', layout.app);
+    var tsProj = ts.createProject(path.join(layout.inc, 'tsconfig.json'), {
       typeRoots: [path.join(exports.base, 'node_modules', '@types')],
-      outFile: 'main.js',
+      outFile: path.join(appTsDir, 'main.js'),
     });
 
-    return gulp.src('*.ts', {cwd: scriptsTs, exclude: ['*_test.ts']})
+    return gulp.src(path.join(layout.inc, 'apps', layout.app, '*.ts'), {
+          exclude: ['*_test.ts'],
+        })
         .pipe(sourcemaps.init())
-            .pipe(tsProj())
-            .pipe(sourcemaps.write('.'))
-            .pipe(gulp.dest(scriptsTs));
+        .pipe(tsProj())
+        .pipe(sourcemaps.write('.'))
+        .pipe(gulp.dest(layout.inc))
   });
 
   // Compile and automatically prefix stylesheets
diff --git a/web/apps/logdog-app/elements/logdog-app/logdog-app.html b/web/apps/logdog-app/elements/logdog-app/logdog-app.html
index 0128ac8..6879776 100644
--- a/web/apps/logdog-app/elements/logdog-app/logdog-app.html
+++ b/web/apps/logdog-app/elements/logdog-app/logdog-app.html
@@ -20,7 +20,7 @@
 <link rel="import" href="../../inc/bower_components/paper-toolbar/paper-toolbar.html">
 
 <!-- Inline our main TypeScript -->
-<script src="../../scripts-ts/main.js"></script>
+<script src="../../inc/apps/logdog-app/main.js"></script>
 
 <link rel="import" href="logdog-home-page.html">
 <link rel="import" href="../../inc/logdog-app-base/logdog-app-base.html">
diff --git a/web/apps/logdog-app/gulpfile.js b/web/apps/logdog-app/gulpfile.js
index c48dca2..2cbee4e 100644
--- a/web/apps/logdog-app/gulpfile.js
+++ b/web/apps/logdog-app/gulpfile.js
@@ -11,8 +11,7 @@
 var luci = require('../gulp-common.js');
 var path = require('path');
 
-luci.setup(gulp, {
-  dir: __dirname,
+luci.setup(gulp, __dirname, {
   includes: function(gulp, layout) {
     return gulp.src([
         path.join('inc', 'bower_components', 'page', 'page.js'),
diff --git a/web/apps/logdog-view/elements/logdog-view/logdog-view.html b/web/apps/logdog-view/elements/logdog-view/logdog-view.html
index 2ac08b5..599d123 100644
--- a/web/apps/logdog-view/elements/logdog-view/logdog-view.html
+++ b/web/apps/logdog-view/elements/logdog-view/logdog-view.html
@@ -7,7 +7,7 @@
 <link rel="import" href="../../inc/bower_components/polymer/polymer.html">
 
 <!-- Inline our main TypeScript -->
-<script src="../../scripts-ts/main.js"></script>
+<script src="../../inc/apps/logdog-view/main.js"></script>
 
 <link rel="import" href="../../inc/bower_components/paper-styles/default-theme.html">
 <link rel="import" href="../../inc/bower_components/paper-styles/typography.html">
diff --git a/web/apps/logdog-view/gulpfile.js b/web/apps/logdog-view/gulpfile.js
index 929c690..64e44a1 100644
--- a/web/apps/logdog-view/gulpfile.js
+++ b/web/apps/logdog-view/gulpfile.js
@@ -10,6 +10,4 @@
 var gulp = require('gulp');
 var luci = require('../gulp-common.js');
 
-luci.setup(gulp, {
-  dir: __dirname,
-});
+luci.setup(gulp, __dirname, {});
diff --git a/web/apps/rpcexplorer/gulpfile.js b/web/apps/rpcexplorer/gulpfile.js
index 2b6ba02..1f47583 100644
--- a/web/apps/rpcexplorer/gulpfile.js
+++ b/web/apps/rpcexplorer/gulpfile.js
@@ -11,8 +11,7 @@
 var luci = require('../gulp-common.js');
 var path = require('path');
 
-luci.setup(gulp, {
-  dir: __dirname,
+luci.setup(gulp, __dirname, {
   includes: function(gulp, layout) {
     return gulp.src([
         path.join('inc', 'bower_components', 'bootstrap', 'dist', 'css',
diff --git a/web/apps/logdog-app/scripts-ts/main.ts b/web/inc/apps/logdog-app/main.ts
similarity index 75%
rename from web/apps/logdog-app/scripts-ts/main.ts
rename to web/inc/apps/logdog-app/main.ts
index c5773c9..d9ee3a5 100644
--- a/web/apps/logdog-app/scripts-ts/main.ts
+++ b/web/inc/apps/logdog-app/main.ts
@@ -4,4 +4,4 @@
   that can be found in the LICENSE file.
 */
 
-///<reference path="../inc/logdog-stream-view/model.ts" />
+///<reference path="../../logdog-stream-view/model.ts" />
diff --git a/web/apps/logdog-view/scripts-ts/logdog-view.ts b/web/inc/apps/logdog-view/logdog-view.ts
similarity index 75%
rename from web/apps/logdog-view/scripts-ts/logdog-view.ts
rename to web/inc/apps/logdog-view/logdog-view.ts
index c5773c9..d9ee3a5 100644
--- a/web/apps/logdog-view/scripts-ts/logdog-view.ts
+++ b/web/inc/apps/logdog-view/logdog-view.ts
@@ -4,4 +4,4 @@
   that can be found in the LICENSE file.
 */
 
-///<reference path="../inc/logdog-stream-view/model.ts" />
+///<reference path="../../logdog-stream-view/model.ts" />