diff --git a/.bowerrc b/.bowerrc index 7c0635e..b5ecdd1 100644 --- a/.bowerrc +++ b/.bowerrc @@ -1,3 +1,3 @@ { - "directory": "sqwidget/lib" + "directory": "lib" } diff --git a/.gitignore b/.gitignore index 1c59990..fa262f4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .DS_Store node_modules/ config.js +lib/ # temporary! dist/ diff --git a/Gruntfile.coffee b/Gruntfile.coffee index c6b7c17..3e0834d 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -3,6 +3,10 @@ module.exports = (grunt) -> grunt.loadNpmTasks 'grunt-contrib-coffee' grunt.loadNpmTasks 'grunt-contrib-clean' grunt.loadNpmTasks 'grunt-contrib-watch' + grunt.loadNpmTasks('grunt-contrib-connect') + grunt.loadNpmTasks('grunt-contrib-copy') + grunt.loadNpmTasks('grunt-karma') + grunt.initConfig @@ -21,21 +25,10 @@ module.exports = (grunt) -> port: 8001 base: 'sqwidget' - widgets: - options: - middleware: (connect, options) -> [ - (req, res, next) -> - res.setHeader('Access-Control-Allow-Origin', '*') - next() - connect.static(options.base) - ] - port: 8002 - base: 'widgets' - coffee: tests: expand: true - cwd: 'sqwidget/tests', + cwd: 'tests', src: '**/*.coffee' dest: 'compiled/tests/js' ext: '.js' @@ -46,49 +39,29 @@ module.exports = (grunt) -> sqwidget: expand: true - cwd: 'sqwidget/app', + cwd: 'src', src: '**/*.coffee' - dest: 'compiled/sqwidget/js' + dest: 'compiled/js' ext: '.js' options: sourceRoot: '../../../app' bare: true sourceMap: true - widgets: - expand: true - cwd: 'widgets/', - src: '**/*.coffee' - dest: 'compiled/widgets/js' - ext: '.js' - options: - bare: true - sourceMap: true - karma: integration: - configFile: 'config/karma.conf.js', + configFile: 'karma.conf.js', watch: sqwidget: - files: ["sqwidget/app/**/*.coffee"] - tasks: ["build"] - - widgets: - files: ["widgets/**/*.coffee"] + files: ["src/**/*.coffee"] tasks: ["build"] karma: - files: ["sqwidget/**/*.coffee", "sqwidget/tests/**/*.coffee"] + files: ["src/**/*.coffee", "tests/**/*.coffee"] tasks: ["build", "karma"] - grunt.loadNpmTasks('grunt-contrib-coffee') - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-contrib-connect') - grunt.loadNpmTasks('grunt-contrib-copy') - grunt.loadNpmTasks('grunt-karma') - grunt.registerTask "build", [ "coffee" ] - grunt.registerTask "test", [ "clean", "build", "karma", "watch:karma" ] + grunt.registerTask "test", [ "clean", "build", "karma" ] grunt.registerTask "default", [ "clean", "build", "connect", "watch" ] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2ed1ca1 --- /dev/null +++ b/Makefile @@ -0,0 +1,21 @@ +PATH := ./node_modules/.bin:${PATH} + +.PHONY : init bower build test dist publish + +init: bower + npm install + +build: + grunt build + +test: + grunt test + +bower: + bower install + +dist: + grunt dist + +publish: dist + npm publish diff --git a/sqwidget/config-sample.js b/config-sample.js similarity index 100% rename from sqwidget/config-sample.js rename to config-sample.js diff --git a/publisher/index.html b/index.html similarity index 100% rename from publisher/index.html rename to index.html diff --git a/config/karma.conf.js b/karma.conf.js similarity index 85% rename from config/karma.conf.js rename to karma.conf.js index a0ae036..722e865 100644 --- a/config/karma.conf.js +++ b/karma.conf.js @@ -6,7 +6,7 @@ module.exports = function(config) { // set pre-processors to empty since karma has stupid defaults preprocessors: { }, // base path, that will be used to resolve files and exclude - basePath: '../', + basePath: '.', // frameworks to use frameworks: ['mocha', 'requirejs'], @@ -15,11 +15,10 @@ module.exports = function(config) { files: [ 'compiled/tests/js/test-main.js', {pattern: 'node_modules/karma-chai-plugins/node_modules/chai/chai.js', included: false}, + {pattern: 'compiled/js/**/*.js', included: false}, {pattern: 'compiled/tests/js/spec/**/*.js', included: false}, - {pattern: 'compiled/tests/js/spec/**/*.js', included: false}, - {pattern: 'compiled/sqwidget/js/**/*.js', included: false}, - {pattern: 'widgets/**', included: false, watch: true}, - {pattern: 'sqwidget/lib/**/*.js', included: false, watched: false}, + {pattern: 'lib/**/*.js', included: false, watched: false}, + {pattern: 'widgets/test/**/*.js', included: false, watched: false}, ], // list of files to exclude @@ -53,7 +52,7 @@ module.exports = function(config) { browsers: [ //'Chrome', //,'Firefox' - 'PhantomJS' + 'Chrome' ], // If browser does not capture in given timeout [ms], kill it diff --git a/package.json b/package.json index 15a4bf5..adefaf5 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,15 @@ { - "name": "pa-widgets", - "title": "Widgets for Press Association", + "name": "sqwidget", + "title": "Sqwidget", "version": "2.0.0", "contributors": [ "Adhip Gupta ", "Simon Elliott " ], + "main": "compiled/js/sqwidget.js", + "engines": { + "node": ">= 0.8.0" + }, "dependencies": {}, "devDependencies": { "grunt": "latest", @@ -13,7 +17,6 @@ "grunt-contrib-clean": "latest", "grunt-contrib-requirejs": "~0.4.1", "grunt-contrib-coffee": "latest", - "grunt-contrib-livereload": "latest", "grunt-contrib-watch": "~0.5.3", "grunt-contrib-copy": "~0.4.1", "karma-script-launcher": "~0.1.0", @@ -27,5 +30,8 @@ "karma-mocha": "~0.1.0", "karma-sinon": "0.0.1", "karma-chai-plugins": "~0.1.3" - } + }, + "scripts": { + "test": "make test" + }, } diff --git a/sqwidget/app/component/resources.coffee b/sqwidget/app/component/resources.coffee deleted file mode 100644 index ce1c0b2..0000000 --- a/sqwidget/app/component/resources.coffee +++ /dev/null @@ -1,24 +0,0 @@ -define ['backbone', 'underscore'], (Backbone, _) -> - module = {} - - # A collection should need to do a few extra things for us: - # - allow a collection 'resource' to be shared between different widgets. - # Multiple widgets should ideally share calls to the sever and the data. - class module.Collection extends Backbone.Collection - sync: (method, model, options) -> - options = _.extend { - type: "GET" - dataType: "jsonp" - }, options - super(method, model, options) - - - class module.Model extends Backbone.Model - sync: (method, model, options) -> - options = _.extend { - type: "GET" - dataType: "jsonp" - }, options - super(method, model, options) - - module diff --git a/sqwidget/compiled b/sqwidget/compiled deleted file mode 120000 index 701492b..0000000 --- a/sqwidget/compiled +++ /dev/null @@ -1 +0,0 @@ -../compiled/sqwidget \ No newline at end of file diff --git a/sqwidget/lib/.gitignore b/sqwidget/lib/.gitignore deleted file mode 100644 index 3c431e5..0000000 --- a/sqwidget/lib/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!*.js diff --git a/sqwidget/tests/test-main.coffee b/sqwidget/tests/test-main.coffee deleted file mode 100644 index a8b7d8c..0000000 --- a/sqwidget/tests/test-main.coffee +++ /dev/null @@ -1,27 +0,0 @@ -tests = [] - -for file of window.__karma__.files - if /spec\//.test(file) - tests.push(file) - - -requirejs.config - baseUrl: "/base/compiled/sqwidget/js/" - paths: - chai: '../../../node_modules/karma-chai-plugins/node_modules/chai/chai' - jquery: '../../../sqwidget/lib/jquery/jquery' - underscore: '../../../sqwidget/lib/underscore-amd/underscore' - backbone: '../../../sqwidget/lib/backbone-amd/backbone' - Ractive: '../../../sqwidget/lib/ractive/Ractive' - text: '../../../sqwidget/lib/requirejs-text/text' - rv: '../../../sqwidget/lib/requirejs-ractive/rv' - normalize: '../../../sqwidget/lib/normalize-css/normalize' - - deps: tests - callback: -> - #set the URI for the example widgets to the karma server port - window.__karma__.start() - -#list all your unit files here -#require ["angular", "angularMocks", "/compiled/js/test/unit.js"], -> - #window.__karma__.start() diff --git a/sqwidget/app/component/core.coffee b/src/component/core.coffee similarity index 96% rename from sqwidget/app/component/core.coffee rename to src/component/core.coffee index a25395b..28f46f7 100644 --- a/sqwidget/app/component/core.coffee +++ b/src/component/core.coffee @@ -1,4 +1,4 @@ -define ['underscore','backbone'], (_, Backbone) -> +define ['underscore', 'backbone'], (_, Backbone) -> class SqwidgetCore constructor: () -> diff --git a/sqwidget/app/widget.coffee b/src/sqwidget.coffee similarity index 63% rename from sqwidget/app/widget.coffee rename to src/sqwidget.coffee index c47da4a..74c297a 100644 --- a/sqwidget/app/widget.coffee +++ b/src/sqwidget.coffee @@ -2,12 +2,6 @@ requirejs.config paths: jquery: '../../lib/jquery/jquery' underscore: '../../lib/underscore-amd/underscore' - backbone: '../../lib/backbone-amd/backbone' - Ractive: '../../lib/ractive/Ractive' - text: '../../lib/requirejs-text/text', - rv: '../../lib/requirejs-ractive/rv', - normalize: '../../lib/normalize-css/normalize' - config: '../../config' # The module that is loaded first requirejs [ diff --git a/sqwidget/tests/spec/core.coffee b/tests/spec/core.coffee similarity index 94% rename from sqwidget/tests/spec/core.coffee rename to tests/spec/core.coffee index 11b8983..4c5b79e 100644 --- a/sqwidget/tests/spec/core.coffee +++ b/tests/spec/core.coffee @@ -18,7 +18,7 @@ define ['chai', 'jquery', 'component/core'], (chai, $, Core) -> assert.ok "Triggered event" assert.equal(src.html(), '
TEST
' - 'Rendered Ractive view correctly' + 'Rendered correctly' ) done() diff --git a/tests/test-main.coffee b/tests/test-main.coffee new file mode 100644 index 0000000..1de8c97 --- /dev/null +++ b/tests/test-main.coffee @@ -0,0 +1,23 @@ +tests = [] + +for file of window.__karma__.files + if /spec\//.test(file) + tests.push(file) + + +requirejs.config + baseUrl: "/base/compiled/js/" + paths: + chai: '../../node_modules/karma-chai-plugins/node_modules/chai/chai' + jquery: '../../lib/jquery/jquery' + underscore: '../../lib/underscore-amd/underscore' + backbone: '../../lib/backbone-amd/backbone' + + deps: tests + callback: -> + #set the URI for the example widgets to the karma server port + window.__karma__.start() + +#list all your unit files here +#require ["angular", "angularMocks", "/compiled/js/test/unit.js"], -> + #window.__karma__.start() diff --git a/widgets/hello-world/css/app.css b/widgets/hello-world/css/app.css deleted file mode 100644 index e5fd584..0000000 --- a/widgets/hello-world/css/app.css +++ /dev/null @@ -1,6 +0,0 @@ -.sqwidget-hello-world { - font-family: "Arial", sans-serif; - font-size: 14px; - background-color: #FAFAFA; - border: solid 1px #EFEFEF; -} diff --git a/widgets/hello-world/js b/widgets/hello-world/js deleted file mode 120000 index fa39cff..0000000 --- a/widgets/hello-world/js +++ /dev/null @@ -1 +0,0 @@ -../../compiled/widgets/js/hello-world/src \ No newline at end of file diff --git a/widgets/hello-world/src/index.coffee b/widgets/hello-world/src/index.coffee deleted file mode 100644 index dfa1b43..0000000 --- a/widgets/hello-world/src/index.coffee +++ /dev/null @@ -1,29 +0,0 @@ -define [ - 'backbone' - 'underscore' - "../../pa-olympics-api/js/index.js" - #"css!./css/app.css" -], (Backbone, _, PAOlympicsApi) -> - module = {views: {}} - - class module.Controller - constructor: ({@settings} = {}) -> - @model = new PAOlympicsApi.Schedule() - @view = new module.views.HelloWorld({@model, @settings}) - @view.render() - - - class module.views.HelloWorld extends Backbone.View - template: "
Hello Widget
" - className: "sqwidget-hello-world" - constructor: ({@settings, @model} = {}) -> - super - @on('rendered', @rendered) - - render: => - @$el.html(@template) - - rendered: => - @$el.html(@settings.message).css("color", @settings.color) - - module diff --git a/widgets/pa-olympics-api/js b/widgets/pa-olympics-api/js deleted file mode 120000 index 9e0580d..0000000 --- a/widgets/pa-olympics-api/js +++ /dev/null @@ -1 +0,0 @@ -../../compiled/widgets/js/pa-olympics-api/src \ No newline at end of file diff --git a/widgets/pa-olympics-api/src/index.coffee b/widgets/pa-olympics-api/src/index.coffee deleted file mode 100644 index 586aae4..0000000 --- a/widgets/pa-olympics-api/src/index.coffee +++ /dev/null @@ -1,68 +0,0 @@ -define [ - 'jquery' - 'underscore' - 'backbone' - 'Ractive' - 'component/resources' - 'config' -], ($, _, Backbone, Ractive, resources, config) -> - module = {} - - class module.Collection extends Backbone.Collection - refreshInterval: config.refresh_interval or 60000 # default refresh time - constructor: (models, options) -> - super(models, options) - @fetch() # fetch immediately after init - @setupRefresh() - - # send all requests from the API as JSONP - sync: (method, model, options) -> - options = _.extend { - type: "GET" - dataType: "jsonp" - }, options - super(method, model, options) - - # add the api_key as a parameter on all the calls. - fetch: (options = {}) => - options.data ?= {} - options.data = _.extend options.data, { - "api_key": config.api_key, - } - super(options) - - # weed out the parent level object to return a proper model-based array. All - # collections should over-ride this to create their own models. - parse: (response, options) => - return response.olympics if response.olympics - - # refresh the data for subscribed collections automatically. - setupRefresh: => - @intervalId = window.setInterval(@fetch, @refreshInterval) - - destroy: => - window.clearInterval(@intervalId) - - - # using Ractive for templates - class module.View extends Backbone.View - template: null - templateContext: -> - if @model?.attributes - return @model.toJSON() - return {} - - render: -> - @$el.html(@template) - - - class module.ScheduleItem extends Backbone.Model - - class module.Schedule extends module.Collection - model: module.ScheduleItem - url: "#{config.api_root}/#{config.games_id}/schedule" - parse: (response, options) => - return response.olympics.schedule if response.olympics.schedule - super - - module diff --git a/widgets/test/css/test.css b/widgets/test/css/test.css deleted file mode 100644 index e69de29..0000000 diff --git a/widgets/test/js b/widgets/test/js deleted file mode 120000 index 2bad32c..0000000 --- a/widgets/test/js +++ /dev/null @@ -1 +0,0 @@ -../../compiled/widgets/js/test/src \ No newline at end of file diff --git a/widgets/test/js/index.js b/widgets/test/js/index.js new file mode 100644 index 0000000..838773e --- /dev/null +++ b/widgets/test/js/index.js @@ -0,0 +1,16 @@ +define(['underscore', 'backbone'], function(_, Backbone) { + var module = { + views: {} + }; + + module.Controller = (function() { + + function Controller(opts) { + opts.el.append("
TEST
"); + } + + return Controller; + + })(); + return module; +}); diff --git a/widgets/test/src/index.coffee b/widgets/test/src/index.coffee deleted file mode 100644 index e258d05..0000000 --- a/widgets/test/src/index.coffee +++ /dev/null @@ -1,20 +0,0 @@ -#Example widget using ractive to handle its view - -define [ - 'underscore' - 'backbone' - 'Ractive' - 'rv!../templates/test.html' - #"css!./css/app.css" -], (_, Backbone, Ractive, template) -> - module = {views: {}} - - class module.Controller - constructor: ({@el, @settings} = {}) -> - view = new Ractive - el: @el, - template: template, - data: - test: "TEST" - - module diff --git a/widgets/test/templates/test.html b/widgets/test/templates/test.html deleted file mode 100644 index 2a6d2d1..0000000 --- a/widgets/test/templates/test.html +++ /dev/null @@ -1 +0,0 @@ -
{{test}}