From 292bd21feca1210f40e22c79c92aa96981b60a10 Mon Sep 17 00:00:00 2001 From: tombatossals Date: Thu, 4 Sep 2014 23:12:05 +0200 Subject: [PATCH] Updated to the latest angular-leaflet build features --- Gruntfile.js | 303 +------------------ bower.json | 40 ++- dist/angular-openlayers-directive.js | 73 ++--- dist/angular-openlayers-directive.min.js | 4 +- dist/angular-openlayers-directive.pre.js | 358 +++++++++++++++++++++++ examples/simple-example.html | 4 +- grunt/aliases.yaml | 53 ++++ grunt/bower.js | 12 + grunt/bump.js | 19 ++ grunt/changelog.js | 6 + grunt/concat.js | 25 ++ grunt/connect.js | 33 +++ grunt/coveralls.js | 11 + grunt/jshint.js | 60 ++++ grunt/karma.js | 26 ++ grunt/ngAnnotate.js | 12 + grunt/open.js | 12 + grunt/pkg.js | 5 + grunt/protractor.js | 23 ++ grunt/shell.js | 22 ++ grunt/uglify.js | 14 + grunt/watch.js | 20 ++ package.json | 59 ++-- src/directives/center.js | 11 +- src/directives/openlayers.js | 1 - src/services/olHelpers.js | 10 +- src/services/olMapDefaults.js | 1 + 27 files changed, 823 insertions(+), 394 deletions(-) create mode 100644 dist/angular-openlayers-directive.pre.js create mode 100644 grunt/aliases.yaml create mode 100644 grunt/bower.js create mode 100644 grunt/bump.js create mode 100644 grunt/changelog.js create mode 100644 grunt/concat.js create mode 100644 grunt/connect.js create mode 100644 grunt/coveralls.js create mode 100644 grunt/jshint.js create mode 100644 grunt/karma.js create mode 100644 grunt/ngAnnotate.js create mode 100644 grunt/open.js create mode 100644 grunt/pkg.js create mode 100644 grunt/protractor.js create mode 100644 grunt/shell.js create mode 100644 grunt/uglify.js create mode 100644 grunt/watch.js diff --git a/Gruntfile.js b/Gruntfile.js index 90547e5c..6bf35528 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,302 +1,3 @@ -module.exports = function(grunt) { - - require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); - var fs = require('fs'), - saucelabsConfig = fs.existsSync('saucelabs.json') && grunt.file.readJSON('saucelabs.json'); - - grunt.initConfig({ - pkg: grunt.file.readJSON('package.json'), - shell: { - options: { - stdout: true - }, - selenium: { - command: 'node_modules/protractor/bin/webdriver-manager start', - options: { - stdout: false, - async: true - } - }, - protractor_update: { - command: 'node_modules/protractor/bin/webdriver-manager update' - }, - npm_install: { - command: 'npm install' - } - }, - - changelog: {}, - - bump: { - options: { - files: ['package.json'], - updateConfigs: [], - commit: true, - commitMessage: 'Release v%VERSION%', - commitFiles: ['package.json'], - createTag: true, - tagName: 'v%VERSION%', - tagMessage: 'Version %VERSION%', - push: true, - pushTo: 'origin', - gitDescribeOptions: '--tags --always --abbrev=1 --dirty=-d' - } - }, - - connect: { - options: { - base: '' - }, - webserver: { - options: { - port: 8888, - keepalive: true - } - }, - devserver: { - options: { - port: 8888 - } - }, - testserver: { - options: { - port: 9999 - } - }, - coverage: { - options: { - base: 'coverage/', - directory: 'coverage/', - port: 5555, - keepalive: true - } - } - }, - - protractor: { - options: { - keepAlive: true, - configFile: "test/protractor.conf.js" - }, - singlerun: {}, - saucelabs: { - options: { - args: saucelabsConfig - } - }, - auto: { - keepAlive: true, - options: { - args: { - seleniumPort: 4444 - } - } - } - }, - - uglify: { - options: { - banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n' - }, - dist: { - files: { - 'dist/<%= pkg.name %>.min.no-header.js': ['dist/angular-openlayers-directive.ngmin.js'] - } - } - }, - - ngmin: { - directives: { - expand: true, - cwd: 'dist', - src: ['angular-openlayers-directive.js'], - dest: 'dist', - ext: '.ngmin.js', - flatten: 'src/' - } - }, - - jshint: { - options: { - node: true, - browser: true, - esnext: true, - bitwise: true, - curly: true, - eqeqeq: true, - immed: true, - indent: 4, - latedef: true, - newcap: true, - noarg: true, - regexp: true, - undef: true, - unused: true, - trailing: true, - smarttabs: true, - globals: { - angular: false, - OpenLayers: false, - // Jasmine - jasmine : false, - isCommonJS : false, - exports : false, - spyOn : false, - it : false, - xit : false, - expect : false, - runs : false, - waits : false, - waitsFor : false, - beforeEach : false, - afterEach : false, - describe : false, - xdescribe : false, - - // Protractor - protractor: false, - browser: false, - by: false, - element: false - - } - }, - source: { - src: ['src/directives/*.js', 'src/services/*.js'] - }, - tests: { - src: ['test/unit/*.js', 'test/e2e/*.js'], - }, - grunt: { - src: ['Gruntfile.js'] - } - }, - - karma: { - unit: { - configFile: 'test/karma-unit.conf.js', - autoWatch: false, - singleRun: true - }, - unit_auto: { - configFile: 'test/karma-unit.conf.js', - autoWatch: true, - singleRun: false - }, - unit_coverage: { - configFile: 'test/karma-unit.conf.js', - autoWatch: false, - singleRun: true, - //logLevel: 'DEBUG', - reporters: ['progress', 'coverage'], - preprocessors: { - 'dist/angular-openlayers-directive.js': ['coverage'] - }, - coverageReporter: { - type : 'html', - dir : 'coverage/' - } - } - }, - - watch: { - options : { - livereload: 7777 - }, - source: { - files: ['src/**/*.js', 'test/unit/**'], - tasks: [ - 'jshint', - 'concat:dist', - 'ngmin', - 'uglify', - 'test:unit', - 'concat:license' - ] - }, - protractor: { - files: ['src/**/*.js','test/e2e/**/*.js'], - tasks: ['protractor:auto'] - } - }, - - open: { - devserver: { - path: 'http://localhost:8888' - }, - coverage: { - path: 'http://localhost:5555' - } - }, - - bower: { - install: { - // options: { - // targetDir: './bower_components', - // cleanup: true - // } - } - }, - - concat: { - dist: { - options: { - banner: '(function() {\n\n"use strict";\n\n', - footer: '\n}());' - }, - src: [ - 'src/directives/openlayers.js', - 'src/directives/center.js', - //'src/directives/tiles.js', - //'src/directives/legend.js', - //'src/directives/geojson.js', - //'src/directives/layers.js', - //'src/directives/bounds.js', - //'src/directives/markers.js', - //'src/directives/paths.js', - //'src/directives/controls.js', - //'src/directives/eventBroadcast.js', - //'src/directives/maxBounds.js', - 'src/services/*.js' - ], - dest: 'dist/angular-openlayers-directive.js', - }, - license: { - src: [ - 'src/header-MIT-license.txt', - 'dist/angular-openlayers-directive.min.no-header.js' - ], - dest: 'dist/angular-openlayers-directive.min.js', - }, - } - }); - - //single run tests - grunt.registerTask('test', ['jshint','test:unit', 'test:e2e']); - grunt.registerTask('test:unit', ['karma:unit']); - grunt.registerTask('test:e2e', ['shell:protractor_update', 'connect:testserver', 'protractor:singlerun']); - - //autotest and watch tests - grunt.registerTask('autotest', ['karma:unit_auto']); - grunt.registerTask('autotest:unit', ['karma:unit_auto']); - grunt.registerTask('autotest:e2e', ['connect:testserver', 'shell:selenium', 'watch:protractor']); - - //coverage testing - grunt.registerTask('test:coverage', ['karma:unit_coverage']); - grunt.registerTask('coverage', ['karma:unit_coverage', 'open:coverage', 'connect:coverage']); - - //installation-related - grunt.registerTask('install', ['shell:npm_install', 'bower:install', 'shell:protractor_update']); - - //defaults - grunt.registerTask('default', ['watch:source']); - - //development - grunt.registerTask('dev', ['connect:devserver', 'open:devserver', 'watch:source']); - - //server daemon - grunt.registerTask('serve', ['connect:webserver']); - - //travis - grunt.registerTask('travis', 'bower:install', 'test:unit'); +module.exports = function (grunt) { + require('load-grunt-config')(grunt); }; diff --git a/bower.json b/bower.json index 3ac190c3..6d4b4800 100644 --- a/bower.json +++ b/bower.json @@ -1,13 +1,35 @@ { - "name": "angular-leaflet-directive", + "name": "angular-openlayers-directive", + "description": "AngularJS directive to embed an interact with maps managed by OpenLayers library", + "keywords": [ + "angularjs", + "javascript", + "directive", + "openlayers" + ], + "main": [ + "dist/angular-openlayers-directive.js" + ], "dependencies": { - "angular": "1.2.x", - "angular-route": "1.2.x", - "angular-animate": "1.2.x", - "angular-mocks": "1.2.x", - "openlayers": "2.13.x" + "angular": "latest", + "openlayers": "latest" }, - "resolutions": { - "angular": "1.2.4" - } + "devDependencies": { + "jquery": "*", + "bootstrap": "*", + "angular-route": "*", + "angular-animate": "*", + "angular-mocks": "*" + }, + "ignore": [ + "**/.*", + "src", + "doc", + "examples", + "test", + "*.md", + "Gruntfile.js", + "package.json", + "bower.json" + ] } diff --git a/dist/angular-openlayers-directive.js b/dist/angular-openlayers-directive.js index 516a83c2..3a887a89 100644 --- a/dist/angular-openlayers-directive.js +++ b/dist/angular-openlayers-directive.js @@ -2,7 +2,7 @@ "use strict"; -angular.module("openlayers-directive", []).directive('openlayers', function ($log, $q, olHelpers, olMapDefaults, olData) { +angular.module("openlayers-directive", []).directive('openlayers', ["$log", "$q", "olHelpers", "olMapDefaults", "olData", function ($log, $q, olHelpers, olMapDefaults, olData) { var _olMap; return { restrict: "EA", @@ -12,7 +12,7 @@ angular.module("openlayers-directive", []).directive('openlayers', function ($lo defaults: '=defaults' }, template: '
', - controller: function ($scope) { + controller: ["$scope", function ($scope) { _olMap = $q.defer(); this.getMap = function () { return _olMap.promise; @@ -21,7 +21,7 @@ angular.module("openlayers-directive", []).directive('openlayers', function ($lo this.getOpenlayersScope = function() { return $scope; }; - }, + }], link: function(scope, element, attrs) { var isDefined = olHelpers.isDefined, @@ -62,7 +62,6 @@ angular.module("openlayers-directive", []).directive('openlayers', function ($lo } map.render(element[0]); - console.log(map.getProjection()); if (!isDefined(attrs.center)) { map.zoomToMaxExtent(); } @@ -71,9 +70,9 @@ angular.module("openlayers-directive", []).directive('openlayers', function ($lo olData.setMap(map, attrs.id); } }; -}); +}]); -angular.module("openlayers-directive").directive('center', function ($log, $parse, olMapDefaults, olHelpers) { +angular.module("openlayers-directive").directive('center', ["$log", "$parse", "olMapDefaults", "olHelpers", function ($log, $parse, olMapDefaults, olHelpers) { return { restrict: "A", scope: false, @@ -101,16 +100,23 @@ angular.module("openlayers-directive").directive('center', function ($log, $pars }; olScope.$watch("center", function(center) { + var point, proj; if (!isValidCenter(center)) { $log.warn("[AngularJS - Openlayers] invalid 'center'"); - map.setCenter([defaults.center.lon, defaults.center.lat], defaults.center.zoom); + point = new OpenLayers.LonLat(defaults.center.lon, defaults.center.lat); + proj = new OpenLayers.Projection("EPSG:4326"); + point.transform(proj, map.getProjectionObject()); + map.setCenter(point, defaults.center.zoom); return; } if (movingMap) { // Can't update. The map is moving. return; } - map.setCenter([center.lon, center.lat], center.zoom); + point = new OpenLayers.LonLat(center.lon, center.lat); + proj = new OpenLayers.Projection("EPSG:4326"); + point.transform(proj, map.getProjectionObject()); + map.setCenter(point, center.zoom); }, true); map.events.register("movestart", map, function() { @@ -128,9 +134,9 @@ angular.module("openlayers-directive").directive('center', function ($log, $pars }); } }; -}); +}]); -angular.module("openlayers-directive").service('olData', function ($log, $q, olHelpers) { +angular.module("openlayers-directive").service('olData', ["$log", "$q", "olHelpers", function ($log, $q, olHelpers) { var getDefer = olHelpers.getDefer, getUnresolvedDefer = olHelpers.getUnresolvedDefer, setResolvedDefer = olHelpers.setResolvedDefer; @@ -147,9 +153,9 @@ angular.module("openlayers-directive").service('olData', function ($log, $q, olH var defer = getDefer(maps, scopeId); return defer.promise; }; -}); +}]); -angular.module("openlayers-directive").factory('olHelpers', function ($q, $log) { +angular.module("openlayers-directive").factory('olHelpers', ["$q", "$log", function ($q, $log) { var isDefined = function(value) { return angular.isDefined(value); }; @@ -273,7 +279,7 @@ angular.module("openlayers-directive").factory('olHelpers', function ($q, $log) switch(layer.type) { case 'OSM': - var name, url, options; + var name, url, options = {}; if (layer.name) { name = layer.name; } @@ -284,51 +290,28 @@ angular.module("openlayers-directive").factory('olHelpers', function ($q, $log) } } if (layer.projection) { - options = { - projection: new OpenLayers.Projection(layer.projection) - }; + options.projection = new OpenLayers.Projection(layer.projection); } - oLayer = new OpenLayers.Layer.OSM(name, url, options); - break; - - case 'TMS': - var name, url, options={}; - if (layer.name) { - name = layer.name; + if (layer.sphericalMercator === true) { + options.sphericalMercator = true; } - if (layer.url) { - url = layer.url; - if (!isDefined(name)) { - name = "TMS Layer"; - } - } - if (layer.projection) { - angular.extend(options,{projection: new OpenLayers.Projection(layer.projection)}); - } - if(layer.serviceVersion){ - angular.extend(options,{serviceVersion: layer.serviceVersion}); - } - if(layer.fileExtension){ - angular.extend(options,{type: layer.fileExtension}); - } - if(layer.layername){ - angular.extend(options,{layername: layer.layername}); - } - oLayer = new OpenLayers.Layer.TMS(name, url, options); + + oLayer = new OpenLayers.Layer.OSM(name, url, options); break; } return oLayer; } }; -}); +}]); -angular.module("openlayers-directive").factory('olMapDefaults', function ($q, olHelpers) { +angular.module("openlayers-directive").factory('olMapDefaults', ["$q", "olHelpers", function ($q, olHelpers) { function _getDefaults() { return { tileLayer: { name: 'OpenStreetMap', type: 'OSM', + sphericalMercator: true, projection: 'EPSG:4236' }, center: { @@ -369,7 +352,7 @@ angular.module("openlayers-directive").factory('olMapDefaults', function ($q, ol return newDefaults; } }; -}); +}]); }()); \ No newline at end of file diff --git a/dist/angular-openlayers-directive.min.js b/dist/angular-openlayers-directive.min.js index 1bf1566c..917e27c8 100644 --- a/dist/angular-openlayers-directive.min.js +++ b/dist/angular-openlayers-directive.min.js @@ -27,5 +27,5 @@ * @authors https://github.com/tombatossals/angular-leaflet-directive/graphs/contributors */ -/*! angular-openlayers-directive 18-12-2013 */ -!function(){"use strict";angular.module("openlayers-directive",[]).directive("openlayers",["$log","$q","olHelpers","olMapDefaults","olData",function(a,b,c,d,e){var f;return{restrict:"EA",replace:!0,scope:{center:"=center",defaults:"=defaults"},template:'
',controller:["$scope",function(a){f=b.defer(),this.getMap=function(){return f.promise},this.getOpenlayersScope=function(){return a}}],link:function(a,b,g){var h=c.isDefined,i=c.getLayerObject,j=d.setDefaults(a.defaults,g.id);h(g.width)&&(isNaN(g.width)?b.css("width",g.width):b.css("width",g.width+"px")),h(g.height)&&(isNaN(g.height)?b.css("height",g.height):b.css("height",g.height+"px"));var k=new OpenLayers.Map;if(f.resolve(k),!h(g.tiles)&&!h(g.layers)){var l=i(j.tileLayer);k.addLayer(l)}if(h(j.controls.navigation.zoomWheelEnabled)&&j.controls.navigation.zoomWheelEnabled===!0)for(var m=k.getControlsByClass("OpenLayers.Control.Navigation"),n=0;n',controller:["$scope",function(a){f=b.defer(),this.getMap=function(){return f.promise},this.getOpenlayersScope=function(){return a}}],link:function(a,b,g){var h=c.isDefined,i=c.getLayerObject,j=d.setDefaults(a.defaults,g.id);h(g.width)&&(isNaN(g.width)?b.css("width",g.width):b.css("width",g.width+"px")),h(g.height)&&(isNaN(g.height)?b.css("height",g.height):b.css("height",g.height+"px"));var k=new OpenLayers.Map;if(f.resolve(k),!h(g.tiles)&&!h(g.layers)){var l=i(j.tileLayer);k.addLayer(l)}if(h(j.controls.navigation.zoomWheelEnabled)&&j.controls.navigation.zoomWheelEnabled===!0)for(var m=k.getControlsByClass("OpenLayers.Control.Navigation"),n=0;n', + controller: function ($scope) { + _olMap = $q.defer(); + this.getMap = function () { + return _olMap.promise; + }; + + this.getOpenlayersScope = function() { + return $scope; + }; + }, + + link: function(scope, element, attrs) { + var isDefined = olHelpers.isDefined, + getLayerObject = olHelpers.getLayerObject, + defaults = olMapDefaults.setDefaults(scope.defaults, attrs.id); + + // Set width and height if they are defined + if (isDefined(attrs.width)) { + if (isNaN(attrs.width)) { + element.css('width', attrs.width); + } else { + element.css('width', attrs.width + 'px'); + } + } + if (isDefined(attrs.height)) { + if (isNaN(attrs.height)) { + element.css('height', attrs.height); + } else { + element.css('height', attrs.height + 'px'); + } + } + + // Create the Openlayers Map Object with the options + var map = new OpenLayers.Map(); + _olMap.resolve(map); + + // If no layers nor tiles defined, set the default tileLayer + if (!isDefined(attrs.tiles) && (!isDefined(attrs.layers))) { + var layer = getLayerObject(defaults.tileLayer); + map.addLayer(layer); + } + + if (isDefined(defaults.controls.navigation.zoomWheelEnabled) && defaults.controls.navigation.zoomWheelEnabled === true) { + var controls = map.getControlsByClass('OpenLayers.Control.Navigation'); + for (var i=0; i - - + +