From 4d27f2a55dd5c508d504c8d36c4f1c8360a7c76b Mon Sep 17 00:00:00 2001 From: shmyga Date: Wed, 3 Jan 2018 17:03:43 +0300 Subject: [PATCH] [build] added webapp task --- build/webapp.js | 28 ++++++++++++ config/deploy.rb | 2 +- gulpfile.js | 3 +- package.json | 6 +++ src/webapp/index.html | 27 ++++++++++++ src/webapp/js/swf.js | 100 ++++++++++++++++++++++++++++++++++++++++++ webapp/index.html | 10 ----- 7 files changed, 164 insertions(+), 12 deletions(-) create mode 100644 build/webapp.js create mode 100644 src/webapp/index.html create mode 100644 src/webapp/js/swf.js delete mode 100644 webapp/index.html diff --git a/build/webapp.js b/build/webapp.js new file mode 100644 index 0000000..4e88e61 --- /dev/null +++ b/build/webapp.js @@ -0,0 +1,28 @@ +const gulp = require('gulp'); +const concat = require('gulp-concat'); +const uglify = require('gulp-uglify'); +const babel = require('gulp-babel'); +const template = require('gulp-template'); + + +const index = () => function index() { + return gulp.src('src/webapp/index.html') + .pipe(template({ + scripts: ['app.min.js'], + swf: 'tankz.swf' + })) + .pipe(gulp.dest('target')) +}; + +const js = () => function js() { + const src = [ + 'src/webapp/js/*.js' + ]; + return gulp.src(src) + .pipe(babel({presets: ['es2015']})) + .pipe(uglify()) + .pipe(concat('app.min.js')) + .pipe(gulp.dest('target')) +}; + +exports['webapp'] = gulp.parallel(index(), js()); \ No newline at end of file diff --git a/config/deploy.rb b/config/deploy.rb index ae58a5c..fa74c84 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -25,7 +25,7 @@ set :npm_env_variables, {} # gulp set :gulp_target_path, -> { release_path } -set :gulp_tasks, 'client' +set :gulp_tasks, 'default' set :gulp_flags, '--no-color' set :gulp_roles, :web before 'deploy:updated', 'gulp' diff --git a/gulpfile.js b/gulpfile.js index 74d8f31..8dc33bd 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -30,5 +30,6 @@ exports.update = prepare.update; merge('./build/prepare'); merge('./build/client'); merge('./build/server'); +merge('./build/webapp'); -exports.default = gulp.series(exports.clean, exports.client, exports.server); \ No newline at end of file +exports.default = gulp.series(exports.clean, exports.client, exports.webapp); \ No newline at end of file diff --git a/package.json b/package.json index 2a36e7c..648a6bc 100755 --- a/package.json +++ b/package.json @@ -5,12 +5,18 @@ "devDependencies": { "ansi-colors": "^1.0.1", "async": "^2.6.0", + "babel-core": "^6.26.0", + "babel-preset-es2015": "^6.24.1", "download": "^6.2.5", "fancy-log": "^1.3.2", "fs-extra": "^5.0.0", "got": "^8.0.1", "gulp": "github:gulpjs/gulp#4.0", + "gulp-babel": "^7.0.0", "gulp-clean": "^0.3.2", + "gulp-concat": "^2.6.1", + "gulp-template": "^5.0.0", + "gulp-uglify": "^3.0.0", "plugin-error": "^0.1.2", "progress": "^2.0.0", "promise-streams": "^2.1.1", diff --git a/src/webapp/index.html b/src/webapp/index.html new file mode 100644 index 0000000..5e0f69a --- /dev/null +++ b/src/webapp/index.html @@ -0,0 +1,27 @@ + + + + + Tank'z + <% scripts.forEach(function(script) { %> + + <% }); %> + + + +
+ + + \ No newline at end of file diff --git a/src/webapp/js/swf.js b/src/webapp/js/swf.js new file mode 100644 index 0000000..d154006 --- /dev/null +++ b/src/webapp/js/swf.js @@ -0,0 +1,100 @@ +const typeOf = (item) => { + if (item == null) return "null"; + if (item.nodeName) { + if (item.nodeType == 1) return "element"; + if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? "textnode" : "whitespace"; + } else if (typeof item.length == "number") { + if (item.callee) return "arguments"; + } + return typeof item; +}; + + +class Swf { + + constructor(element, swf, options) { + this.id = Math.floor(Math.random() * 10000); + this.options = Object.assign({ + quality: "high", + wMode: "opaque", + width: "100%", + height: "100%", + vars: {}, + }, options); + this.element = element; + this.swf = swf; + this.data = { + params: { + id: this.id, + quality: this.options.quality, + allowScriptAccess: "always", + allowFullScreen: true, + wMode: this.options.wMode, + //base: base, + swLiveConnect: true + }, + properties: { + name: this.id, + width: this.options.width, + height: this.options.height + }, + vars: this.options.vars + }; + this.swf = Swf.buildFlashElement(swf, this.data); + this.element.appendChild(this.swf); + } + + static toFlashVars(object, base) { + var queryString = []; + for (var key in object) { + var value = object[key]; + if (base) key = base + ":" + key; + var result; + switch (typeOf(value)) { + case "object": + result = this.toFlashVars(value, key); + break; + case "array": + var qs = {}; + value.each(function (val, i) { + qs[i] = val; + }); + result = this.toFlashVars(qs, key); + break; + default: + result = key + "=" + encodeURIComponent(value); + } + if (value != null) queryString.push(result); + } + return queryString.join("&"); + } + + static buildFlashElement(path, options) { + var params = options.params; + var vars = options.vars; + var properties = options.properties; + + params.flashVars = this.toFlashVars(vars); + var isIE = /*@cc_on!@*/false; + if (isIE) { + properties.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"; + params.movie = path; + } else { + properties.type = "application/x-shockwave-flash"; + } + properties.data = path; + + var build = ""; + } + build += ""; + + var div = document.createElement("div"); + div.innerHTML = build; + return div.firstChild; + } + +} diff --git a/webapp/index.html b/webapp/index.html deleted file mode 100644 index e574d52..0000000 --- a/webapp/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Tank'z - - -

Tank'z

- - \ No newline at end of file