diff --git a/Gruntfile.js b/Gruntfile.js index 1faef689..119ed795 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -121,6 +121,7 @@ module.exports = function (grunt) { grunt.registerTask('default', ['build']); grunt.registerTask('watch-demo-app', ['browserify:demoAppWatch']); grunt.registerTask('build-demo-app', ['browserify:demoApp']); + grunt.registerTask('build-release', ['build', 'build-demo-app']); grunt.loadNpmTasks('grunt-browserify'); grunt.loadNpmTasks('grunt-contrib-concat'); diff --git a/README.md b/README.md index 10d872f2..2fe754d2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Enables creation of data grid applications in AngularJS. ## Demo -See the demo at http://handsontable.github.io/ngHandsontable +See the demo at http://handsontable.github.io/ngHandsontable. ## Usage diff --git a/demo/build/app.js b/demo/build/app.js index 89a65bf7..ed0fa780 100644 --- a/demo/build/app.js +++ b/demo/build/app.js @@ -38,7 +38,7 @@ require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof requ } config.$inject = ['$sceDelegateProvider', '$httpProvider', '$stateProvider', '$compileProvider', '$urlRouterProvider', 'demoMapProvider']; - app.constant('version', 'v0.9.0'); + app.constant('version', 'v0.10.0'); app.config(config); angular.element(document).ready(function() { diff --git a/dist/ngHandsontable.js b/dist/ngHandsontable.js index ccfa8736..1ed056d7 100644 --- a/dist/ngHandsontable.js +++ b/dist/ngHandsontable.js @@ -1,11 +1,11 @@ /** - * ngHandsontable 0.9.0 + * ngHandsontable 0.10.0 * * Copyright 2012-2015 Marcin Warpechowski * Copyright 2015 Handsoncode sp. z o.o. * Licensed under the MIT license. * https://github.com/handsontable/ngHandsontable - * Date: Thu Mar 03 2016 16:35:01 GMT+0100 (CET) + * Date: Fri Apr 08 2016 16:20:06 GMT+0200 (CEST) */ if (document.all && !document.addEventListener) { // IE 8 and lower @@ -132,6 +132,10 @@ Handsontable.hooks.add('afterContextMenuShow', function() { hot; container.className = this.containerClassName; + + if (!container.id && htSettings.hotId) { + container.id = htSettings.hotId; + } element[0].appendChild(container); hot = new Handsontable(container, htSettings); diff --git a/dist/ngHandsontable.min.js b/dist/ngHandsontable.min.js index 3030a718..824735d9 100644 --- a/dist/ngHandsontable.min.js +++ b/dist/ngHandsontable.min.js @@ -1,11 +1,11 @@ /** - * ngHandsontable 0.9.0 + * ngHandsontable 0.10.0 * * Copyright 2012-2015 Marcin Warpechowski * Copyright 2015 Handsoncode sp. z o.o. * Licensed under the MIT license. * https://github.com/handsontable/ngHandsontable - * Date: Thu Mar 03 2016 16:35:01 GMT+0100 (CET) + * Date: Fri Apr 08 2016 16:20:06 GMT+0200 (CEST) */ -document.all&&!document.addEventListener&&(document.createElement("hot-table"),document.createElement("hot-column"),document.createElement("hot-autocomplete")),angular.module("ngHandsontable.services",[]),angular.module("ngHandsontable.directives",[]),angular.module("ngHandsontable",["ngHandsontable.services","ngHandsontable.directives"]),Handsontable.hooks.add("afterContextMenuShow",function(){Handsontable.eventManager.isHotTableEnv=!1}),function(){function a(a){return{parseAutoComplete:function(b,c,d){b.source=function(e,f){var g=this.instance.getSelected()[0],h=[],i=c[g];if(i){var j=b.optionList;if(j&&j.object){if(angular.isArray(j.object))h=j.object;else{var k=a(j.object)(i);if(angular.isArray(k))if(d)for(var l=0,m=k.length;m>l;l++){var n=k[l][j.property];null!==n&&void 0!==n&&h.push(n)}else h=k;else h=k}f(h)}}}}}}a.$inject=["$parse"],angular.module("ngHandsontable.services").factory("autoCompleteFactory",a)}(),function(){function a(){var a={};return{getInstance:function(b){return a[b]},registerInstance:function(b,c){a[b]=c},removeInstance:function(b){a[b]=void 0}}}a.$inject=[],angular.module("ngHandsontable.services").factory("hotRegisterer",a)}(),function(){function a(a){return a.replace(/[A-Z]/g,function(a){return"-"+a.charAt(0).toLowerCase()})}function b(a){return a.substr(0,1).toUpperCase()+a.substr(1,a.length-1)}function c(c){return{containerClassName:"handsontable-container",initializeHandsontable:function(a,b){var d,e=document.createElement("div");return e.className=this.containerClassName,a[0].appendChild(e),d=new Handsontable(e,b),b.hotId&&c.registerInstance(b.hotId,d),d},updateHandsontableSettings:function(a,b){a&&a.updateSettings(b)},renderHandsontable:function(a){a&&a.render()},mergeSettingsFromScope:function(a,b){var c,d,e,f=angular.extend({},b);for(a=a||{},angular.extend(f,b.settings||{}),c=this.getAvailableSettings(),d=0,e=c.length;e>d;d++)"undefined"!=typeof f[c[d]]&&(a[c[d]]=f[c[d]]);return a},mergeHooksFromScope:function(a,c){var d,e,f,g,h=angular.extend({},c);for(a=a||{},angular.extend(h,c.settings||{}),d=this.getAvailableHooks(),e=0,f=d.length;f>e;e++)g="on"+b(d[e]),("function"==typeof h[d[e]]||"function"==typeof h[g])&&(a[d[e]]=h[d[e]]||h[g]);return a},trimScopeDefinitionAccordingToAttrs:function(a,b){for(var c in a)a.hasOwnProperty(c)&&void 0===b[c]&&void 0===b[a[c].substr(1,a[c].length)]&&delete a[c];return a},getTableScopeDefinition:function(){var a={};return this.applyAvailableSettingsScopeDef(a),this.applyAvailableHooksScopeDef(a),a.datarows="=",a.dataschema="=",a.observeDomVisibility="=",a},getColumnScopeDefinition:function(){var a={};return this.applyAvailableSettingsScopeDef(a),a.data="@",a},applyAvailableSettingsScopeDef:function(a){var b,c,d;for(b=this.getAvailableSettings(),c=0,d=b.length;d>c;c++)a[b[c]]="=";return a},applyAvailableHooksScopeDef:function(a){var c,d,e;for(c=this.getAvailableHooks(),d=0,e=c.length;e>d;d++)a[c[d]]="=on"+b(c[d]);return a},getAvailableSettings:function(b){var c=Object.keys(Handsontable.DefaultSettings.prototype);return-1===c.indexOf("contextMenuCopyPaste")&&c.push("contextMenuCopyPaste"),-1===c.indexOf("handsontable")&&c.push("handsontable"),c.indexOf("settings")>=0&&c.splice(c.indexOf("settings"),1),b&&(c=c.map(a)),c},getAvailableHooks:function(b){var c=Handsontable.hooks.getRegistered();return b&&(c=c.map(function(b){return"on-"+a(b)})),c}}}c.$inject=["hotRegisterer"],angular.module("ngHandsontable.services").factory("settingFactory",c)}(),function(){function a(){return{restrict:"EA",scope:!0,require:"^hotColumn",link:function(a,b,c,d){var e=c.datarows;d.setColumnOptionList(e)}}}a.$inject=[],angular.module("ngHandsontable.directives").directive("hotAutocomplete",a)}(),function(){function a(a){return{restrict:"EA",require:"^hotTable",scope:{},controller:["$scope",function(a){this.setColumnOptionList=function(b){a.column||(a.column={});var c={},d=b.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)\s*$/);d?(c.property=d[1],c.object=d[2]):c.object=b.split(","),a.column.optionList=c}}],compile:function(b,c){var d=this;return this.scope=a.trimScopeDefinitionAccordingToAttrs(a.getColumnScopeDefinition(),c),angular.forEach(Object.keys(this.scope),function(a){d.$$isolateBindings[a]={attrName:a,collection:!1,mode:"data"===a?"@":"=",optional:!1}}),function(b,c,d,e){var f={};angular.forEach(Object.keys(d),function(a){"$"!==a.charAt(0)&&""===d[a]&&(f[a]=!0)}),a.mergeSettingsFromScope(f,b),b.column||(b.column={}),angular.extend(b.column,f),e.setColumnSetting(b.column),b.$on("$destroy",function(){e.removeColumnSetting(b.column)})}}}}a.$inject=["settingFactory"],angular.module("ngHandsontable.directives").directive("hotColumn",a)}(),function(){function a(a,b,c,d){return{restrict:"EA",scope:{},priority:-400,controller:["$scope",function(b){this.setColumnSetting=function(c){b.htSettings||(b.htSettings={}),b.htSettings.columns||(b.htSettings.columns=[]),b.htSettings.columns.push(c),a.updateHandsontableSettings(b.hotInstance,b.htSettings)},this.removeColumnSetting=function(c){b.htSettings.columns.indexOf(c)>-1&&(b.htSettings.columns.splice(b.htSettings.columns.indexOf(c),1),a.updateHandsontableSettings(b.hotInstance,b.htSettings))}}],compile:function(e,f){var g,h=this;return this.scope=a.trimScopeDefinitionAccordingToAttrs(a.getTableScopeDefinition(),f),g=Object.keys(this.scope),angular.forEach(g,function(a){var b=h.scope[a].charAt(0);h.$$isolateBindings[a]={attrName:h.scope[a].length>1?h.scope[a].substr(1,h.scope[a].length):a,collection:"datarows"===a,mode:b,optional:!1}}),function(e,f,h){if(e.settings=d(h.settings)(e.$parent),e.htSettings||(e.htSettings={}),angular.forEach(Object.keys(h),function(a){"$"!==a.charAt(0)&&""===h[a]&&(e.htSettings[a]=!0)}),a.mergeSettingsFromScope(e.htSettings,e),a.mergeHooksFromScope(e.htSettings,e),e.htSettings.data||(e.htSettings.data=e.datarows),e.htSettings.dataSchema=e.dataschema,e.htSettings.hotId=h.hotId,e.htSettings.observeDOMVisibility=e.observeDomVisibility,e.htSettings.columns)for(var i=0,j=e.htSettings.columns.length;j>i;i++){var k=e.htSettings.columns[i];if("autocomplete"===k.type&&k.optionList){if("string"==typeof k.optionList){var l={},m=k.optionList.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)\s*$/);m?(l.property=m[1],l.object=m[2]):l.object=l,k.optionList=l}b.parseAutoComplete(k,e.datarows,!0)}}var n=e.htSettings.afterChange;e.htSettings.afterChange=function(){n&&n.apply(this,arguments),c.$$phase||e.$apply()},e.hotInstance=a.initializeHandsontable(f,e.htSettings),angular.forEach(g,function(b){e.$watch(b,function(c,d){void 0!==c&&("datarows"===b?e.hotInstance.getSettings().data===c?a.renderHandsontable(e.hotInstance):(e.hotInstance.loadData(c),e.htSettings.data=c):c!==d&&(e.htSettings[b]=c,a.updateHandsontableSettings(e.hotInstance,e.htSettings)))},["datarows","columns","rowHeights","colWidths","rowHeaders","colHeaders"].indexOf(b)>=0)}),e.$watchCollection("datarows",function(b,c){c&&c.length===e.htSettings.minSpareRows&&b.length!==e.htSettings.minSpareRows&&(e.htSettings.data=e.datarows,a.updateHandsontableSettings(e.hotInstance,e.htSettings))})}}}}a.$inject=["settingFactory","autoCompleteFactory","$rootScope","$parse"],angular.module("ngHandsontable.directives").directive("hotTable",a)}(); \ No newline at end of file +document.all&&!document.addEventListener&&(document.createElement("hot-table"),document.createElement("hot-column"),document.createElement("hot-autocomplete")),angular.module("ngHandsontable.services",[]),angular.module("ngHandsontable.directives",[]),angular.module("ngHandsontable",["ngHandsontable.services","ngHandsontable.directives"]),Handsontable.hooks.add("afterContextMenuShow",function(){Handsontable.eventManager.isHotTableEnv=!1}),function(){function a(a){return{parseAutoComplete:function(b,c,d){b.source=function(e,f){var g=this.instance.getSelected()[0],h=[],i=c[g];if(i){var j=b.optionList;if(j&&j.object){if(angular.isArray(j.object))h=j.object;else{var k=a(j.object)(i);if(angular.isArray(k))if(d)for(var l=0,m=k.length;m>l;l++){var n=k[l][j.property];null!==n&&void 0!==n&&h.push(n)}else h=k;else h=k}f(h)}}}}}}a.$inject=["$parse"],angular.module("ngHandsontable.services").factory("autoCompleteFactory",a)}(),function(){function a(){var a={};return{getInstance:function(b){return a[b]},registerInstance:function(b,c){a[b]=c},removeInstance:function(b){a[b]=void 0}}}a.$inject=[],angular.module("ngHandsontable.services").factory("hotRegisterer",a)}(),function(){function a(a){return a.replace(/[A-Z]/g,function(a){return"-"+a.charAt(0).toLowerCase()})}function b(a){return a.substr(0,1).toUpperCase()+a.substr(1,a.length-1)}function c(c){return{containerClassName:"handsontable-container",initializeHandsontable:function(a,b){var d,e=document.createElement("div");return e.className=this.containerClassName,!e.id&&b.hotId&&(e.id=b.hotId),a[0].appendChild(e),d=new Handsontable(e,b),b.hotId&&c.registerInstance(b.hotId,d),d},updateHandsontableSettings:function(a,b){a&&a.updateSettings(b)},renderHandsontable:function(a){a&&a.render()},mergeSettingsFromScope:function(a,b){var c,d,e,f=angular.extend({},b);for(a=a||{},angular.extend(f,b.settings||{}),c=this.getAvailableSettings(),d=0,e=c.length;e>d;d++)"undefined"!=typeof f[c[d]]&&(a[c[d]]=f[c[d]]);return a},mergeHooksFromScope:function(a,c){var d,e,f,g,h=angular.extend({},c);for(a=a||{},angular.extend(h,c.settings||{}),d=this.getAvailableHooks(),e=0,f=d.length;f>e;e++)g="on"+b(d[e]),"function"!=typeof h[d[e]]&&"function"!=typeof h[g]||(a[d[e]]=h[d[e]]||h[g]);return a},trimScopeDefinitionAccordingToAttrs:function(a,b){for(var c in a)a.hasOwnProperty(c)&&void 0===b[c]&&void 0===b[a[c].substr(1,a[c].length)]&&delete a[c];return a},getTableScopeDefinition:function(){var a={};return this.applyAvailableSettingsScopeDef(a),this.applyAvailableHooksScopeDef(a),a.datarows="=",a.dataschema="=",a.observeDomVisibility="=",a},getColumnScopeDefinition:function(){var a={};return this.applyAvailableSettingsScopeDef(a),a.data="@",a},applyAvailableSettingsScopeDef:function(a){var b,c,d;for(b=this.getAvailableSettings(),c=0,d=b.length;d>c;c++)a[b[c]]="=";return a},applyAvailableHooksScopeDef:function(a){var c,d,e;for(c=this.getAvailableHooks(),d=0,e=c.length;e>d;d++)a[c[d]]="=on"+b(c[d]);return a},getAvailableSettings:function(b){var c=Object.keys(Handsontable.DefaultSettings.prototype);return-1===c.indexOf("contextMenuCopyPaste")&&c.push("contextMenuCopyPaste"),-1===c.indexOf("handsontable")&&c.push("handsontable"),c.indexOf("settings")>=0&&c.splice(c.indexOf("settings"),1),b&&(c=c.map(a)),c},getAvailableHooks:function(b){var c=Handsontable.hooks.getRegistered();return b&&(c=c.map(function(b){return"on-"+a(b)})),c}}}c.$inject=["hotRegisterer"],angular.module("ngHandsontable.services").factory("settingFactory",c)}(),function(){function a(){return{restrict:"EA",scope:!0,require:"^hotColumn",link:function(a,b,c,d){var e=c.datarows;d.setColumnOptionList(e)}}}a.$inject=[],angular.module("ngHandsontable.directives").directive("hotAutocomplete",a)}(),function(){function a(a){return{restrict:"EA",require:"^hotTable",scope:{},controller:["$scope",function(a){this.setColumnOptionList=function(b){a.column||(a.column={});var c={},d=b.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)\s*$/);d?(c.property=d[1],c.object=d[2]):c.object=b.split(","),a.column.optionList=c}}],compile:function(b,c){var d=this;return this.scope=a.trimScopeDefinitionAccordingToAttrs(a.getColumnScopeDefinition(),c),angular.forEach(Object.keys(this.scope),function(a){d.$$isolateBindings[a]={attrName:a,collection:!1,mode:"data"===a?"@":"=",optional:!1}}),function(b,c,d,e){var f={};angular.forEach(Object.keys(d),function(a){"$"!==a.charAt(0)&&""===d[a]&&(f[a]=!0)}),a.mergeSettingsFromScope(f,b),b.column||(b.column={}),angular.extend(b.column,f),e.setColumnSetting(b.column),b.$on("$destroy",function(){e.removeColumnSetting(b.column)})}}}}a.$inject=["settingFactory"],angular.module("ngHandsontable.directives").directive("hotColumn",a)}(),function(){function a(a,b,c,d){return{restrict:"EA",scope:{},priority:-400,controller:["$scope",function(b){this.setColumnSetting=function(c){b.htSettings||(b.htSettings={}),b.htSettings.columns||(b.htSettings.columns=[]),b.htSettings.columns.push(c),a.updateHandsontableSettings(b.hotInstance,b.htSettings)},this.removeColumnSetting=function(c){b.htSettings.columns.indexOf(c)>-1&&(b.htSettings.columns.splice(b.htSettings.columns.indexOf(c),1),a.updateHandsontableSettings(b.hotInstance,b.htSettings))}}],compile:function(e,f){var g,h=this;return this.scope=a.trimScopeDefinitionAccordingToAttrs(a.getTableScopeDefinition(),f),g=Object.keys(this.scope),angular.forEach(g,function(a){var b=h.scope[a].charAt(0);h.$$isolateBindings[a]={attrName:h.scope[a].length>1?h.scope[a].substr(1,h.scope[a].length):a,collection:"datarows"===a,mode:b,optional:!1}}),function(e,f,h){if(e.settings=d(h.settings)(e.$parent),e.htSettings||(e.htSettings={}),angular.forEach(Object.keys(h),function(a){"$"!==a.charAt(0)&&""===h[a]&&(e.htSettings[a]=!0)}),a.mergeSettingsFromScope(e.htSettings,e),a.mergeHooksFromScope(e.htSettings,e),e.htSettings.data||(e.htSettings.data=e.datarows),e.htSettings.dataSchema=e.dataschema,e.htSettings.hotId=h.hotId,e.htSettings.observeDOMVisibility=e.observeDomVisibility,e.htSettings.columns)for(var i=0,j=e.htSettings.columns.length;j>i;i++){var k=e.htSettings.columns[i];if("autocomplete"===k.type&&k.optionList){if("string"==typeof k.optionList){var l={},m=k.optionList.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)\s*$/);m?(l.property=m[1],l.object=m[2]):l.object=l,k.optionList=l}b.parseAutoComplete(k,e.datarows,!0)}}var n=e.htSettings.afterChange;e.htSettings.afterChange=function(){n&&n.apply(this,arguments),c.$$phase||e.$apply()},e.hotInstance=a.initializeHandsontable(f,e.htSettings),angular.forEach(g,function(b){e.$watch(b,function(c,d){void 0!==c&&("datarows"===b?e.hotInstance.getSettings().data===c?a.renderHandsontable(e.hotInstance):(e.hotInstance.loadData(c),e.htSettings.data=c):c!==d&&(e.htSettings[b]=c,a.updateHandsontableSettings(e.hotInstance,e.htSettings)))},["datarows","columns","rowHeights","colWidths","rowHeaders","colHeaders"].indexOf(b)>=0)}),e.$watchCollection("datarows",function(b,c){c&&c.length===e.htSettings.minSpareRows&&b.length!==e.htSettings.minSpareRows&&(e.htSettings.data=e.datarows,a.updateHandsontableSettings(e.hotInstance,e.htSettings))})}}}}a.$inject=["settingFactory","autoCompleteFactory","$rootScope","$parse"],angular.module("ngHandsontable.directives").directive("hotTable",a)}(); \ No newline at end of file diff --git a/karma.conf.js b/karma.conf.js index 4c6e36f4..f321627b 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -17,9 +17,7 @@ module.exports = function(config) { files: [ 'test/phantom-polyfill.js', 'node_modules/handsontable/dist/handsontable.full.js', - 'src/*.js', - 'src/**/*.js', - 'test/*.spec.js', + 'dist/ngHandsontable.min.js', 'test/**/*.spec.js' ], @@ -71,4 +69,4 @@ module.exports = function(config) { // if true, Karma captures browsers, runs the tests and exits singleRun: false }); -} +}; diff --git a/package.json b/package.json index dac8fcd0..3dac8559 100644 --- a/package.json +++ b/package.json @@ -10,26 +10,26 @@ "url": "https://github.com/handsontable/ngHandsontable/issues" }, "author": "Marcin Warpechowski ", - "version": "0.9.0", + "version": "0.10.0", "devDependencies": { - "angular": "^1.4.2", - "angular-mocks": "^1.4.2", + "angular": "^1.5.0", + "angular-mocks": "^1.5.0", "browserify-replace": "^0.9.0", "grunt": "~0.4.5", - "grunt-browserify": "^3.8.0", - "grunt-contrib-concat": "~0.5.0", - "grunt-contrib-jshint": "^0.10.0", - "grunt-contrib-uglify": "~0.5.1", - "grunt-contrib-watch": "~0.6.1", - "grunt-jscs": "^2.1.0", - "handsontable": "git://github.com/handsontable/handsontable", - "jasmine-core": "^2.3.4", - "karma": "^0.12.37", - "karma-angular": "0.0.6", - "karma-chrome-launcher": "^0.2.0", - "karma-jasmine": "^0.2.2", - "karma-phantomjs-launcher": "^0.2.0", - "phantomjs": "^1.9.17" + "grunt-browserify": "^4.0.0", + "grunt-contrib-concat": "^1.0.0", + "grunt-contrib-jshint": "^1.0.0", + "grunt-contrib-uglify": "^0.11.0", + "grunt-contrib-watch": "^0.6.1", + "grunt-jscs": "^2.8.0", + "handsontable": "^0.24.0", + "jasmine-core": "^2.4.0", + "karma": "^0.13.0", + "karma-angular": "^0.0.6", + "karma-chrome-launcher": "^0.2.2", + "karma-jasmine": "^0.3.7", + "karma-phantomjs-launcher": "^1.0.0", + "phantomjs-prebuilt": "^2.1.4" }, "scripts": { "test": "./node_modules/karma/bin/karma start --single-run --browsers PhantomJS" diff --git a/src/services/settingFactory.js b/src/services/settingFactory.js index 4d3e8f56..18545791 100644 --- a/src/services/settingFactory.js +++ b/src/services/settingFactory.js @@ -31,6 +31,10 @@ hot; container.className = this.containerClassName; + + if (!container.id && htSettings.hotId) { + container.id = htSettings.hotId; + } element[0].appendChild(container); hot = new Handsontable(container, htSettings); diff --git a/test/services/settingFactory.spec.js b/test/services/settingFactory.spec.js index c7ef9a90..8268a79b 100644 --- a/test/services/settingFactory.spec.js +++ b/test/services/settingFactory.spec.js @@ -11,6 +11,7 @@ describe('settingFactory', function() { var element = [{appendChild: jasmine.createSpy('appendChild')}]; var hotSettings = {colHeaders: [1, 2], width: 200, columns: [{width: 100}]}; var hotInstance = {}; + window.HandsontableOrg = Handsontable; window.Handsontable = function(element, settings) { hotInstance.element = element; @@ -27,6 +28,26 @@ describe('settingFactory', function() { window.Handsontable = HandsontableOrg; })); + it('should create new div element with "id" defined from hot-id attribute', inject(function(settingFactory) { + var element = [{appendChild: jasmine.createSpy('appendChild')}]; + var hotSettings = {hotId: 'my-table', colHeaders: [1, 2], width: 200, columns: [{width: 100}]}; + var hotInstance = {}; + + window.HandsontableOrg = Handsontable; + window.Handsontable = function(element, settings) { + hotInstance.element = element; + hotInstance.settings = settings; + }; + + settingFactory.initializeHandsontable(element, hotSettings); + + expect(element[0].appendChild).toHaveBeenCalled(); + expect(element[0].appendChild.calls.argsFor(0)[0].nodeName).toBe('DIV'); + expect(hotInstance.element.id).toBe('my-table'); + + window.Handsontable = HandsontableOrg; + })); + it('should update Handsontable settings (updateHandsontableSettings)', inject(function(settingFactory) { var hotInstance = {updateSettings: jasmine.createSpy('updateSettings')}; var hotSettings = {colHeaders: [1, 2], width: 200, columns: [{width: 100}]};