From 4fece4cfd3546de5ec8e44a2b06d253222a714b5 Mon Sep 17 00:00:00 2001 From: Alex McPherson Date: Mon, 30 Jun 2014 17:36:02 -0600 Subject: [PATCH 01/10] Little English update --- index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index e740414c..7784fb14 100644 --- a/index.html +++ b/index.html @@ -68,11 +68,11 @@

Bootstrap Switch 3

Documentation in progress!
- It might not seem, but it's actually a lot of work. The goal is to make it as cleanest, most readable and + It might not seem it, but it's actually a lot of work to provide documentation. The goal is to make it as clean, readable and understandable as possible.
If you feel there is something missing, submit a pull request with your changes. Every - help is needed. Many thanks. + bit of help is needed. Many thanks.

@@ -123,4 +123,4 @@

Getting Started

- \ No newline at end of file + From d36e014a09cf9bbc79a3d4309b5db21ccb6e4de4 Mon Sep 17 00:00:00 2001 From: Emanuele Marchi Date: Sat, 26 Jul 2014 16:16:12 +0200 Subject: [PATCH 02/10] updated docs, updated gulp packages --- gulpfile.coffee | 62 ++++++++++++++++++++++++------------------------- index.html | 6 ++--- package.json | 18 +++++++------- 3 files changed, 43 insertions(+), 43 deletions(-) diff --git a/gulpfile.coffee b/gulpfile.coffee index df6ece78..28a2dcd6 100644 --- a/gulpfile.coffee +++ b/gulpfile.coffee @@ -1,5 +1,5 @@ gulp = require 'gulp' -plugins = require('gulp-load-plugins')() +$ = require('gulp-load-plugins')() pkg = require './package.json' name = pkg.name @@ -36,55 +36,55 @@ BANNER = """ gulp.task 'coffee', -> gulp .src "#{SOURCE_PATH}/coffee/#{name}.coffee" - .pipe plugins.changed "#{DIST_PATH}/js" - .pipe plugins.coffeelint './coffeelint.json' - .pipe plugins.coffeelint.reporter() - .on 'error', plugins.util.log - .pipe plugins.coffee() - .on 'error', plugins.util.log - .pipe plugins.header BANNER, pkg: pkg + .pipe $.changed "#{DIST_PATH}/js" + .pipe $.coffeelint './coffeelint.json' + .pipe $.coffeelint.reporter() + .on 'error', $.util.log + .pipe $.coffee() + .on 'error', $.util.log + .pipe $.header BANNER, pkg: pkg .pipe gulp.dest "#{DIST_PATH}/js" - .pipe plugins.uglify() - .pipe plugins.header BANNER, pkg: pkg - .pipe plugins.rename suffix: '.min' + .pipe $.uglify() + .pipe $.header BANNER, pkg: pkg + .pipe $.rename suffix: '.min' .pipe gulp.dest "#{DIST_PATH}/js" gulp.task 'less-bootstrap2', -> gulp .src "#{SOURCE_PATH}/less/bootstrap2/build.less" - .pipe plugins.changed "#{DIST_PATH}/css/bootstrap2" - .pipe plugins.less() - .on 'error', plugins.util.log - .pipe plugins.header BANNER, pkg: pkg - .pipe plugins.rename basename: name + .pipe $.changed "#{DIST_PATH}/css/bootstrap2" + .pipe $.less() + .on 'error', $.util.log + .pipe $.header BANNER, pkg: pkg + .pipe $.rename basename: name .pipe gulp.dest "#{DIST_PATH}/css/bootstrap2" - .pipe plugins.less compress: true, cleancss: true - .pipe plugins.header BANNER, pkg: pkg - .pipe plugins.rename suffix: '.min' + .pipe $.less compress: true, cleancss: true + .pipe $.header BANNER, pkg: pkg + .pipe $.rename suffix: '.min' .pipe gulp.dest "#{DIST_PATH}/css/bootstrap2" gulp.task 'less-bootstrap3', -> gulp .src "#{SOURCE_PATH}/less/bootstrap3/build.less" - .pipe plugins.changed "#{DIST_PATH}/css/bootstrap3" - .pipe plugins.less() - .pipe plugins.header BANNER, pkg: pkg - .pipe plugins.rename basename: name + .pipe $.changed "#{DIST_PATH}/css/bootstrap3" + .pipe $.less() + .pipe $.header BANNER, pkg: pkg + .pipe $.rename basename: name .pipe gulp.dest "#{DIST_PATH}/css/bootstrap3" - .pipe plugins.less compress: true, cleancss: true - .pipe plugins.header BANNER, pkg: pkg - .pipe plugins.rename suffix: '.min' + .pipe $.less compress: true, cleancss: true + .pipe $.header BANNER, pkg: pkg + .pipe $.rename suffix: '.min' .pipe gulp.dest "#{DIST_PATH}/css/bootstrap3" gulp.task 'docs', -> gulp .src "#{SOURCE_PATH}/docs/*.jade" - .pipe plugins.changed './' - .pipe plugins.jade pretty: true + .pipe $.changed './' + .pipe $.jade pretty: true .pipe gulp.dest './' gulp.task 'connect', ['docs'], -> - plugins.connect.server + $.connect.server root: [__dirname] host: SERVER_HOST port: SERVER_PORT @@ -93,7 +93,7 @@ gulp.task 'connect', ['docs'], -> gulp.task 'open', ['connect'], -> gulp .src './index.html' - .pipe plugins.open '', url: "http://#{SERVER_HOST}:#{SERVER_PORT}" + .pipe $.open '', url: "http://#{SERVER_HOST}:#{SERVER_PORT}" gulp.task 'watch', ['connect'], -> gulp.watch "#{SOURCE_PATH}/coffee/#{name}.coffee", ['coffee'] @@ -107,7 +107,7 @@ gulp.task 'watch', ['connect'], -> ] .on 'change', (event) -> gulp.src event.path - .pipe plugins.connect.reload() + .pipe $.connect.reload() gulp.task 'server', ['connect', 'open', 'watch'] gulp.task 'less', ['less-bootstrap2', 'less-bootstrap3'] diff --git a/index.html b/index.html index 7784fb14..e740414c 100644 --- a/index.html +++ b/index.html @@ -68,11 +68,11 @@

Bootstrap Switch 3

Documentation in progress!
- It might not seem it, but it's actually a lot of work to provide documentation. The goal is to make it as clean, readable and + It might not seem, but it's actually a lot of work. The goal is to make it as cleanest, most readable and understandable as possible.
If you feel there is something missing, submit a pull request with your changes. Every - bit of help is needed. Many thanks. + help is needed. Many thanks.

@@ -123,4 +123,4 @@

Getting Started

- + \ No newline at end of file diff --git a/package.json b/package.json index 85bae621..ccf99da5 100644 --- a/package.json +++ b/package.json @@ -37,20 +37,20 @@ "license": "Apache Version 2", "readmeFilename": "README.md", "devDependencies": { - "gulp-coffee": "~1.4.3", - "gulp-util": "~2.2.17", - "gulp-header": "~1.0.2", + "gulp-coffee": "~2.1.1", + "gulp-util": "~3.0.0", + "gulp-header": "~1.0.5", "gulp-uglify": "~0.3.1", "gulp-coffeelint": "~0.3.3", - "gulp": "~3.8.1", - "gulp-less": "~1.2.3", + "gulp": "~3.8.6", + "gulp-less": "~1.3.2", "gulp-rename": "~1.2.0", "gulp-open": "~0.2.8", - "gulp-load-plugins": "~0.5.1", - "gulp-jade": "~0.5.0", + "gulp-load-plugins": "~0.5.3", + "gulp-jade": "~0.6.1", "run-sequence": "~0.3.6", - "gulp-connect": "~2.0.5", + "gulp-connect": "~2.0.6", "coffee-script": "~1.7.1", - "gulp-changed": "~0.3.0" + "gulp-changed": "~0.4.1" } } From 12d4bc7aa56a9c0d030ca96c05613ac6354e494d Mon Sep 17 00:00:00 2001 From: Emanuele Marchi Date: Sun, 24 Aug 2014 14:43:45 +0200 Subject: [PATCH 03/10] added first two tests --- bower.json | 9 +- gulpfile.coffee | 96 ++-- karma.json | 19 + package.json | 9 +- src/coffee/bootstrap-switch.tests.coffee | 27 ++ src/test/bootstrap-switch.coffee | 1 - test/bootstrap-switch.js | 532 +++++++++++++++++++++++ test/bootstrap-switch.tests.js | 36 ++ 8 files changed, 688 insertions(+), 41 deletions(-) create mode 100644 karma.json create mode 100644 src/coffee/bootstrap-switch.tests.coffee delete mode 100644 src/test/bootstrap-switch.coffee create mode 100644 test/bootstrap-switch.js create mode 100644 test/bootstrap-switch.tests.js diff --git a/bower.json b/bower.json index aaf1eba7..63e4fcea 100644 --- a/bower.json +++ b/bower.json @@ -3,8 +3,8 @@ "description": "Turn checkboxes and radio buttons in toggle switches.", "version": "3.0.2", "main": [ - "dist/js/bootstrap-switch.js", - "dist/css/bootstrap3/bootstrap-switch.css" + "./dist/js/bootstrap-switch.js", + "./dist/css/bootstrap3/bootstrap-switch.css" ], "ignore": [ "docs", @@ -19,6 +19,11 @@ "package.json" ], "dependencies": { + "bootstrap": ">=2.3.2", "jquery": ">=1.9.0" + }, + "devDependencies": { + "jquery": "~2.1.1", + "bootstrap": "~3.2.0" } } diff --git a/gulpfile.coffee b/gulpfile.coffee index 28a2dcd6..37508f10 100644 --- a/gulpfile.coffee +++ b/gulpfile.coffee @@ -1,14 +1,20 @@ gulp = require 'gulp' -$ = require('gulp-load-plugins')() +$ = require('gulp-load-plugins') lazy: false +extend = require('util')._extend +karma = require('karma').server +karmaConfig = require './karma.json' pkg = require './package.json' name = pkg.name -SOURCE_PATH = './src' -DIST_PATH = './dist' -DOCS_PATH = "./docs" -SERVER_HOST = 'localhost' -SERVER_PORT = 3000 -BANNER = """ +paths = + src: './src' + dist: './dist' + test: './test' + docs: "./" +server = + host: 'localhost' + port: 3000 +banner = """ /* ======================================================================== * <%= pkg.name %> - v<%= pkg.version %> * <%= pkg.homepage %> @@ -35,74 +41,89 @@ BANNER = """ gulp.task 'coffee', -> gulp - .src "#{SOURCE_PATH}/coffee/#{name}.coffee" - .pipe $.changed "#{DIST_PATH}/js" + .src "#{paths.src}/coffee/#{name}.coffee" + .pipe $.changed "#{paths.dist}/js" .pipe $.coffeelint './coffeelint.json' .pipe $.coffeelint.reporter() .on 'error', $.util.log .pipe $.coffee() .on 'error', $.util.log - .pipe $.header BANNER, pkg: pkg - .pipe gulp.dest "#{DIST_PATH}/js" + .pipe $.header banner, pkg: pkg + .pipe gulp.dest "#{paths.dist}/js" + .pipe gulp.dest paths.test .pipe $.uglify() - .pipe $.header BANNER, pkg: pkg + .pipe $.header banner, pkg: pkg .pipe $.rename suffix: '.min' - .pipe gulp.dest "#{DIST_PATH}/js" + .pipe gulp.dest "#{paths.dist}/js" gulp.task 'less-bootstrap2', -> gulp - .src "#{SOURCE_PATH}/less/bootstrap2/build.less" - .pipe $.changed "#{DIST_PATH}/css/bootstrap2" + .src "#{paths.src}/less/bootstrap2/build.less" + .pipe $.changed "#{paths.dist}/css/bootstrap2" .pipe $.less() .on 'error', $.util.log - .pipe $.header BANNER, pkg: pkg + .pipe $.header banner, pkg: pkg .pipe $.rename basename: name - .pipe gulp.dest "#{DIST_PATH}/css/bootstrap2" + .pipe gulp.dest "#{paths.dist}/css/bootstrap2" .pipe $.less compress: true, cleancss: true - .pipe $.header BANNER, pkg: pkg + .pipe $.header banner, pkg: pkg .pipe $.rename suffix: '.min' - .pipe gulp.dest "#{DIST_PATH}/css/bootstrap2" + .pipe gulp.dest "#{paths.dist}/css/bootstrap2" gulp.task 'less-bootstrap3', -> gulp - .src "#{SOURCE_PATH}/less/bootstrap3/build.less" - .pipe $.changed "#{DIST_PATH}/css/bootstrap3" + .src "#{paths.src}/less/bootstrap3/build.less" + .pipe $.changed "#{paths.dist}/css/bootstrap3" .pipe $.less() - .pipe $.header BANNER, pkg: pkg + .pipe $.header banner, pkg: pkg .pipe $.rename basename: name - .pipe gulp.dest "#{DIST_PATH}/css/bootstrap3" + .pipe gulp.dest "#{paths.dist}/css/bootstrap3" .pipe $.less compress: true, cleancss: true - .pipe $.header BANNER, pkg: pkg + .pipe $.header banner, pkg: pkg .pipe $.rename suffix: '.min' - .pipe gulp.dest "#{DIST_PATH}/css/bootstrap3" + .pipe gulp.dest "#{paths.dist}/css/bootstrap3" gulp.task 'docs', -> gulp - .src "#{SOURCE_PATH}/docs/*.jade" - .pipe $.changed './' + .src "#{paths.src}/docs/*.jade" + .pipe $.changed paths.docs .pipe $.jade pretty: true - .pipe gulp.dest './' + .pipe gulp.dest paths.docs + +gulp.task 'test-coffee', ['coffee'], -> + gulp + .src "#{paths.src}/coffee/#{name}.tests.coffee" + .pipe $.changed paths.test + .pipe $.coffeelint './coffeelint.json' + .pipe $.coffeelint.reporter() + .on 'error', $.util.log + .pipe $.coffee() + .on 'error', $.util.log + .pipe gulp.dest paths.test + +gulp.task 'test-go', ['test-coffee'], (done) -> + karma.start extend(karmaConfig, singleRun: true), done gulp.task 'connect', ['docs'], -> $.connect.server root: [__dirname] - host: SERVER_HOST - port: SERVER_PORT + host: server.host + port: server.port livereload: true gulp.task 'open', ['connect'], -> gulp .src './index.html' - .pipe $.open '', url: "http://#{SERVER_HOST}:#{SERVER_PORT}" + .pipe $.open '', url: "http://#{server.host}:#{server.port}" gulp.task 'watch', ['connect'], -> - gulp.watch "#{SOURCE_PATH}/coffee/#{name}.coffee", ['coffee'] - gulp.watch "#{SOURCE_PATH}/less/bootstrap2/*.less", ['less-bootstrap2'] - gulp.watch "#{SOURCE_PATH}/less/bootstrap3/*.less", ['less-bootstrap3'] - gulp.watch "#{SOURCE_PATH}/docs/*.jade", ['docs'] + gulp.watch "#{paths.src}/coffee/#{name}.coffee", ['coffee'] + gulp.watch "#{paths.src}/less/bootstrap2/*.less", ['less-bootstrap2'] + gulp.watch "#{paths.src}/less/bootstrap3/*.less", ['less-bootstrap3'] + gulp.watch "#{paths.src}/docs/*.jade", ['docs'] gulp.watch [ - "#{DIST_PATH}/js/**/*.js" - "#{DIST_PATH}/css/**/*.css" + "#{paths.dist}/js/**/*.js" + "#{paths.dist}/css/**/*.css" './*.html' ] .on 'change', (event) -> @@ -112,4 +133,5 @@ gulp.task 'watch', ['connect'], -> gulp.task 'server', ['connect', 'open', 'watch'] gulp.task 'less', ['less-bootstrap2', 'less-bootstrap3'] gulp.task 'dist', ['coffee', 'less'] +gulp.task 'test', ['coffee', 'test-coffee', 'test-go'] gulp.task 'default', ['dist', 'docs', 'server'] diff --git a/karma.json b/karma.json new file mode 100644 index 00000000..89d3f772 --- /dev/null +++ b/karma.json @@ -0,0 +1,19 @@ +{ + "frameworks": ["jasmine"], + "files": [ + "bower_components/jquery/dist/jquery.js", + "bower_components/bootstrap/dist/js/bootstrap.js", + "test/bootstrap-switch.js", + "test/bootstrap-switch.tests.js" + ], + "reporters": ["progress"], + "port": 9876, + "colors": true, + "autoWatch": true, + "browsers": ["Firefox"], + "singleRun": false, + "plugins": [ + "karma-jasmine", + "karma-firefox-launcher" + ] +} diff --git a/package.json b/package.json index ccf99da5..94865cf3 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,13 @@ "run-sequence": "~0.3.6", "gulp-connect": "~2.0.6", "coffee-script": "~1.7.1", - "gulp-changed": "~0.4.1" + "gulp-changed": "~0.4.1", + "karma": "~0.12.22", + "karma-firefox-launcher": "~0.1.3", + "karma-jasmine": "~0.1.5" + }, + "scripts": { + "build": "gulp dist", + "test": "gulp test" } } diff --git a/src/coffee/bootstrap-switch.tests.coffee b/src/coffee/bootstrap-switch.tests.coffee new file mode 100644 index 00000000..90db7689 --- /dev/null +++ b/src/coffee/bootstrap-switch.tests.coffee @@ -0,0 +1,27 @@ +describe "Bootstrap Switch", -> + + beforeEach -> + $.support.transition = false + $.fx.off = true + + afterEach -> + $(".#{$.fn.bootstrapSwitch.defaults.baseClass}").bootstrapSwitch "destroy" + + createElement = -> + $("", + type: "checkbox" + class: "switch" + ).appendTo "body" + + getOptions = ($element) -> + $element.data("bootstrap-switch").options + + it "should set the default options as element options, except state", -> + $switch = createElement().prop("checked", true).bootstrapSwitch() + expect(getOptions($switch)).toEqual $.fn.bootstrapSwitch.defaults + + it "should override default options with initialization ones", -> + $switch = createElement().prop("checked", false).bootstrapSwitch() + $switch2 = createElement().bootstrapSwitch state: false + expect(getOptions($switch).state).toBe false + expect(getOptions($switch2).state).toBe false diff --git a/src/test/bootstrap-switch.coffee b/src/test/bootstrap-switch.coffee deleted file mode 100644 index 2093a262..00000000 --- a/src/test/bootstrap-switch.coffee +++ /dev/null @@ -1 +0,0 @@ -describe "Bootstrap Switch", -> \ No newline at end of file diff --git a/test/bootstrap-switch.js b/test/bootstrap-switch.js new file mode 100644 index 00000000..778a25b1 --- /dev/null +++ b/test/bootstrap-switch.js @@ -0,0 +1,532 @@ +/* ======================================================================== + * bootstrap-switch - v3.0.2 + * http://www.bootstrap-switch.org + * ======================================================================== + * Copyright 2012-2013 Mattia Larentis + * + * ======================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== + */ + +(function() { + var __slice = [].slice; + + (function($, window) { + "use strict"; + var BootstrapSwitch; + BootstrapSwitch = (function() { + function BootstrapSwitch(element, options) { + if (options == null) { + options = {}; + } + this.$element = $(element); + this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, { + state: this.$element.is(":checked"), + size: this.$element.data("size"), + animate: this.$element.data("animate"), + disabled: this.$element.is(":disabled"), + readonly: this.$element.is("[readonly]"), + indeterminate: this.$element.data("indeterminate"), + onColor: this.$element.data("on-color"), + offColor: this.$element.data("off-color"), + onText: this.$element.data("on-text"), + offText: this.$element.data("off-text"), + labelText: this.$element.data("label-text"), + baseClass: this.$element.data("base-class"), + wrapperClass: this.$element.data("wrapper-class"), + radioAllOff: this.$element.data("radio-all-off") + }, options); + this.$wrapper = $("
", { + "class": (function(_this) { + return function() { + var classes; + classes = ["" + _this.options.baseClass].concat(_this._getClasses(_this.options.wrapperClass)); + classes.push(_this.options.state ? "" + _this.options.baseClass + "-on" : "" + _this.options.baseClass + "-off"); + if (_this.options.size != null) { + classes.push("" + _this.options.baseClass + "-" + _this.options.size); + } + if (_this.options.animate) { + classes.push("" + _this.options.baseClass + "-animate"); + } + if (_this.options.disabled) { + classes.push("" + _this.options.baseClass + "-disabled"); + } + if (_this.options.readonly) { + classes.push("" + _this.options.baseClass + "-readonly"); + } + if (_this.options.indeterminate) { + classes.push("" + _this.options.baseClass + "-indeterminate"); + } + if (_this.$element.attr("id")) { + classes.push("" + _this.options.baseClass + "-id-" + (_this.$element.attr("id"))); + } + return classes.join(" "); + }; + })(this)() + }); + this.$container = $("
", { + "class": "" + this.options.baseClass + "-container" + }); + this.$on = $("", { + html: this.options.onText, + "class": "" + this.options.baseClass + "-handle-on " + this.options.baseClass + "-" + this.options.onColor + }); + this.$off = $("", { + html: this.options.offText, + "class": "" + this.options.baseClass + "-handle-off " + this.options.baseClass + "-" + this.options.offColor + }); + this.$label = $("