marionette.modal 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +36 -0
  3. data/Gemfile +4 -0
  4. data/Gruntfile.coffee +109 -0
  5. data/LICENSE +22 -0
  6. data/README.md +42 -0
  7. data/Rakefile +1 -0
  8. data/backbone.marionette.modals-min.js +1 -0
  9. data/backbone.marionette.modals.js +104 -0
  10. data/backbone.modal-min.js +1 -0
  11. data/backbone.modal.js +382 -0
  12. data/examples/1_single_view.html +71 -0
  13. data/examples/2_tab_based.html +104 -0
  14. data/examples/3_stacked_modal_with_marionette.html +105 -0
  15. data/examples/4_wizard.html +132 -0
  16. data/examples/css/style.css +45 -0
  17. data/examples/img/tab-icons.png +0 -0
  18. data/examples/style.css +35 -0
  19. data/examples/vendor/backbone.js +1571 -0
  20. data/examples/vendor/backbone.marionette.modals.js +104 -0
  21. data/examples/vendor/backbone.modal.css +24 -0
  22. data/examples/vendor/backbone.modal.js +382 -0
  23. data/examples/vendor/backbone.modal.theme.css +324 -0
  24. data/examples/vendor/jquery-1.9.1.js +9597 -0
  25. data/examples/vendor/marionette.js +2340 -0
  26. data/examples/vendor/marionette.modal.css +24 -0
  27. data/examples/vendor/marionette.modal.js +370 -0
  28. data/examples/vendor/marionette.modal.theme.css +324 -0
  29. data/examples/vendor/underscore.js +1227 -0
  30. data/lib/marionette.modal/version.rb +3 -0
  31. data/lib/marionette.modal.rb +5 -0
  32. data/marionette.modal-bundled-min.js +1 -0
  33. data/marionette.modal-bundled.js +858 -0
  34. data/marionette.modal-min.js +1 -0
  35. data/marionette.modal.css +24 -0
  36. data/marionette.modal.gemspec +23 -0
  37. data/marionette.modal.js +370 -0
  38. data/marionette.modal.theme.css +324 -0
  39. data/package.json +18 -0
  40. data/src/backbone.marionette.modals.coffee +67 -0
  41. data/src/backbone.modal.coffee +253 -0
  42. data/src/marionette.modal.coffee +248 -0
  43. data/src/marionette.modal.sass +26 -0
  44. data/src/marionette.modal.theme.sass +486 -0
  45. data/src/style.sass +48 -0
  46. data/test/spec/backbone.marionette.modals.spec.js +87 -0
  47. data/test/spec/backbone.modal.spec.js +224 -0
  48. data/test/spec.html +41 -0
  49. data/test/src/backbone.marionette.modals.spec.coffee +47 -0
  50. data/test/src/backbone.modal.spec.coffee +139 -0
  51. metadata +128 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1567a22c11b9eb98b99e4cde8143f84e3a0094bb
4
+ data.tar.gz: 862358399eb5179fd4a9c1c10cdbafc3c8bd45dc
5
+ SHA512:
6
+ metadata.gz: 0464a85f2f28097923ae8c0e180264a14bfdbf807c34a664dc5234eddf1699a328a90f31274d0c8cea25a8578df28b63800e74ea20f7c7296e5f0d2e7670e6a8
7
+ data.tar.gz: 500ad5a1333c5eca8c49abc6ad1e3467713252dfb3af53c83ba881aa6aac6cddded523b56232660a6fe40bc372d7f821f5134d49d350841f10bd9d4ff1b0993c
data/.gitignore ADDED
@@ -0,0 +1,36 @@
1
+ # Ruby Gem
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
19
+
20
+ # NPM
21
+ node_modules
22
+
23
+ # Grunt
24
+ .grunt
25
+
26
+ # SASS/SCSS cache files
27
+ *.scssc
28
+ *.sassc
29
+ .sass-cache
30
+
31
+ # Mac finder artifacts
32
+ .DS_Store
33
+
34
+ # Sublime Text project files
35
+ *.sublime-project
36
+ *.sublime-workspace
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in marionette.modal.gemspec
4
+ gemspec
data/Gruntfile.coffee ADDED
@@ -0,0 +1,109 @@
1
+ module.exports = (grunt) ->
2
+ module.exports = (grunt) ->
3
+ fs = require('fs')
4
+
5
+ grunt.initConfig
6
+ open:
7
+ default:
8
+ url: 'http://localhost:8000'
9
+
10
+ connect:
11
+ default:
12
+ options:
13
+ base: './'
14
+ middleware: (connect, options) ->
15
+ [connect.static(options.base), (req, res, next) ->
16
+ fs.readFile "#{options.base}/test/spec.html", (err, data) ->
17
+ res.writeHead(200)
18
+ res.end(data)
19
+ ]
20
+ examples:
21
+ options:
22
+ port: 5000
23
+ base: './examples/'
24
+ middleware: (connect, options) ->
25
+ [connect.static(options.base), (req, res, next) ->
26
+ fs.readFile "#{options.base}/1_single_view.html", (err, data) ->
27
+ res.writeHead(200)
28
+ res.end(data)
29
+ ]
30
+
31
+ uglify:
32
+ modal:
33
+ src: 'backbone.modal.js'
34
+ dest: 'backbone.modal-min.js'
35
+ marionettemodal:
36
+ src: 'marionette.modal.js'
37
+ dest: 'marionette.modal-min.js'
38
+ modals:
39
+ src: 'backbone.marionette.modals.js'
40
+ dest: 'backbone.marionette.modals-min.js'
41
+ bundled:
42
+ src: 'marionette.modal-bundled.js'
43
+ dest: 'marionette.modal-bundled-min.js'
44
+
45
+ jasmine:
46
+ all:
47
+ src: ['backbone.modal.js', 'marionette.modal.js', 'backbone.marionette.modals.js']
48
+ options:
49
+ specs: 'test/spec/**/*.js'
50
+ outfile: 'test/spec.html'
51
+ host: 'http://127.0.0.1:8000/'
52
+ vendor: ['examples/vendor/jquery-1.9.1.js', 'examples/vendor/underscore.js', 'examples/vendor/backbone.js', 'examples/vendor/marionette.js']
53
+
54
+ coffee:
55
+ all:
56
+ files:
57
+ 'backbone.modal.js': 'src/backbone.modal.coffee'
58
+ 'marionette.modal.js': 'src/marionette.modal.coffee'
59
+ 'backbone.marionette.modals.js': 'src/backbone.marionette.modals.coffee'
60
+ 'marionette.modal-bundled.js': ['src/backbone.modal.coffee', 'src/marionette.modal.coffee', 'src/backbone.marionette.modals.coffee']
61
+
62
+ 'examples/vendor/backbone.modal.js': 'src/backbone.modal.coffee'
63
+ 'examples/vendor/marionette.modal.js': 'src/marionette.modal.coffee'
64
+ 'examples/vendor/backbone.marionette.modals.js': 'src/backbone.marionette.modals.coffee'
65
+ specs:
66
+ files:
67
+ grunt.file.expandMapping(['test/src/**/*.coffee'], 'test/spec/',
68
+ rename: (destBase, destPath) ->
69
+ return destBase + destPath.slice(9, destPath.length).replace(/\.coffee$/, '.js')
70
+ )
71
+
72
+ sass:
73
+ compile:
74
+ files:
75
+ 'marionette.modal.css': 'src/marionette.modal.sass'
76
+ 'marionette.modal.theme.css': 'src/marionette.modal.theme.sass'
77
+ 'examples/vendor/marionette.modal.css': 'src/marionette.modal.sass'
78
+ 'examples/vendor/marionette.modal.theme.css': 'src/marionette.modal.theme.sass'
79
+ 'examples/style.css': 'src/style.sass'
80
+
81
+ concurrent:
82
+ compile: ['coffee', 'sass']
83
+
84
+ regarde:
85
+ livereloadJS:
86
+ files: ['test/**/*.js', 'examples/vendor/*.js']
87
+ tasks: ['livereload']
88
+ livereloadCSS:
89
+ files: ['examples/vendor/marionette.modal.css', 'examples/vendor/marionette.modal.theme.css', 'examples/style.css']
90
+ tasks: ['livereload:marionette.modal.css', 'livereload:examples/vendor/marionette.modal.theme.css', 'livereload:examples/style.css']
91
+ sass:
92
+ files: ['src/**/*.sass']
93
+ tasks: ['sass']
94
+ coffee:
95
+ files: ['src/**/*.coffee', 'test/src/**/*.coffee']
96
+ tasks: ['uglify', 'coffee']
97
+
98
+ grunt.loadNpmTasks 'grunt-contrib-coffee'
99
+ grunt.loadNpmTasks 'grunt-regarde'
100
+ grunt.loadNpmTasks 'grunt-open'
101
+ grunt.loadNpmTasks 'grunt-contrib-connect'
102
+ grunt.loadNpmTasks 'grunt-contrib-livereload'
103
+ grunt.loadNpmTasks 'grunt-contrib-jasmine'
104
+ grunt.loadNpmTasks 'grunt-contrib-uglify'
105
+ grunt.loadNpmTasks 'grunt-contrib-sass'
106
+ grunt.loadNpmTasks 'grunt-concurrent'
107
+
108
+ grunt.registerTask 'build', ['concurrent', 'uglify', 'jasmine:all:build']
109
+ grunt.registerTask 'watch', ['connect', 'build', 'livereload-start', 'open', 'regarde']
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Jared Smith
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ ## Marionette.Modal
2
+
3
+ A plugin for Marionette.js that simplifies creating modals for your marionette application.
4
+
5
+ This project is a fork of the original Backbone.Modal that has tighter integration with the Marionette.js framework.
6
+
7
+ Marionette.Modal.js removes boilerplate code and adds default behaviors and interactions. You can create a simple dialog modal or complex wizards with stacked modals on top of each other in a few lines of code.
8
+
9
+ Documentation is roughly the same as Backbone.Modal. The internals of the base modal view are extending Marionette.View rather than
10
+ Backbone.View in order to take advantage of the builtin functionality that marionette provides.
11
+
12
+ For a complete overview of the forked repo documentation visit: [http://awkward.github.io/backbone.modal/](http://awkward.github.io/backbone.modal/)
13
+
14
+ #### Bundled version
15
+ If you're using Backbone and Marionette.
16
+ * [marionette.modal-bundled-min.js](https://raw.github.com/Outcome-Engenuity/marionette.modal/master/marionette.modal-bundled-min.js)
17
+
18
+ #### Backbone.Modals.js and Backbone.Marionette.Modals.js separate
19
+ If you just want to use the Backbone version without Marionette.
20
+ * [backbone.modal-min.js](https://raw.github.com/Outcome-Engenuity/marionette.modal/master/backbone.modal-min.js)
21
+ * [backbone.marionette.modals-min.js](https://raw.github.com/Outcome-Engenuity/marionette.modal/master/backbone.marionette.modals-min.js)
22
+
23
+ #### CSS files
24
+ There's default style, and you can use our theme to make things look pretty.
25
+ * [marionette.modal.css](https://raw.github.com/Outcome-Engenuity/marionette.modal/master/marionette.modal.css)
26
+ * [marionette.modal.theme.css](https://raw.github.com/Outcome-Engenuity/marionette.modal/master/marionette.modal.theme.css)
27
+
28
+ ### How to contribute
29
+
30
+ To get started `grunt install` to install all dependencies. If you have any requests, please create an issue. If you're working on something yourself, make a pull request and we'll make sure to check it out to get in into the next release.
31
+
32
+ ### Tests
33
+
34
+ ##### (Please note that there are currently no tests written for the marionette.modal view currently. I will make some when time permits.)
35
+
36
+ When you run the project by doing `grunt watch`. This will watch the tests, src and example files. It will open up a browser with the tests on `http://localhost:8000`. When you head over `http://localhost:5000`, it will show the example that's defined in the `Gruntfile.coffee`.
37
+
38
+ ### Legal stuff (MIT License)
39
+
40
+ Copyright (c) 2013 jcsmith1859.
41
+
42
+ Distributed under MIT license.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1 @@
1
+ (function(){var a,b=function(a,b){return function(){return a.apply(b,arguments)}},c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};if("undefined"==typeof Backbone||null===Backbone)throw new Error("Backbone is not defined. Please include the latest version from http://documentcloud.github.com/backbone/backbone.js");Backbone.Marionette.Modals=function(c){function e(){return this.close=b(this.close,this),a=e.__super__.constructor.apply(this,arguments)}return d(e,c),e.prototype.modals=[],e.prototype.zIndex=0,e.prototype.show=function(a,b){var c,d,e,f,g,h;for(null==b&&(b={}),this.ensureEl(),this.modals.length>0&&(c=_.last(this.modals),c.modalEl.addClass(""+c.prefix+"-modal--stacked"),e=this.modals[this.modals.length-1],null!=e&&e.modalEl.removeClass(""+e.prefix+"-modal--stacked-reverse")),a.render(),a.regionEnabled=!0,this.$el.show(),this.$el.append(a.el),this.modals.length>0&&a.$el.css({background:"none"}),Marionette.triggerMethod.call(a,"show"),Marionette.triggerMethod.call(this,"show",a),this.currentView=a,h=this.modals,f=0,g=h.length;g>f;f++)d=h[f],d.undelegateModalEvents();return a.on("modal:close",this.close),this.modals.push(a),this.zIndex++},e.prototype.close=function(){var a,b;return b=this.currentView,b&&!b.isClosed?(b.close?b.close():b.remove&&b.remove(),b.off("modal:close",this.close),this.modals.splice(_.indexOf(this.modals,b),1),this.zIndex--,this.currentView=this.modals[this.zIndex-1],a=_.last(this.modals),a&&(a.modalEl.addClass(""+a.prefix+"-modal--stacked-reverse"),_.delay(function(){return a.modalEl.removeClass(""+a.prefix+"-modal--stacked")},300),0!==this.zIndex&&a.delegateModalEvents()),Marionette.triggerMethod.call(this,"close")):void 0},e.prototype.closeAll=function(){var a,b,c,d,e;for(d=this.modals,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(this.close());return e},e}(Backbone.Marionette.Region)}).call(this);
@@ -0,0 +1,104 @@
1
+ (function() {
2
+ var _ref,
3
+ __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
4
+ __hasProp = {}.hasOwnProperty,
5
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
6
+
7
+ if (typeof Backbone === "undefined" || Backbone === null) {
8
+ throw new Error("Backbone is not defined. Please include the latest version from http://documentcloud.github.com/backbone/backbone.js");
9
+ }
10
+
11
+ Backbone.Marionette.Modals = (function(_super) {
12
+ __extends(Modals, _super);
13
+
14
+ function Modals() {
15
+ this.close = __bind(this.close, this);
16
+ _ref = Modals.__super__.constructor.apply(this, arguments);
17
+ return _ref;
18
+ }
19
+
20
+ Modals.prototype.modals = [];
21
+
22
+ Modals.prototype.zIndex = 0;
23
+
24
+ Modals.prototype.show = function(modal, options) {
25
+ var lastModal, m, secondLastModal, _i, _len, _ref1;
26
+ if (options == null) {
27
+ options = {};
28
+ }
29
+ this.ensureEl();
30
+ if (this.modals.length > 0) {
31
+ lastModal = _.last(this.modals);
32
+ lastModal.modalEl.addClass("" + lastModal.prefix + "-modal--stacked");
33
+ secondLastModal = this.modals[this.modals.length - 1];
34
+ if (secondLastModal != null) {
35
+ secondLastModal.modalEl.removeClass("" + secondLastModal.prefix + "-modal--stacked-reverse");
36
+ }
37
+ }
38
+ modal.render();
39
+ modal.regionEnabled = true;
40
+ this.$el.show();
41
+ this.$el.append(modal.el);
42
+ if (this.modals.length > 0) {
43
+ modal.$el.css({
44
+ background: 'none'
45
+ });
46
+ }
47
+ Marionette.triggerMethod.call(modal, "show");
48
+ Marionette.triggerMethod.call(this, "show", modal);
49
+ this.currentView = modal;
50
+ _ref1 = this.modals;
51
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
52
+ m = _ref1[_i];
53
+ m.undelegateModalEvents();
54
+ }
55
+ modal.on('modal:close', this.close);
56
+ this.modals.push(modal);
57
+ return this.zIndex++;
58
+ };
59
+
60
+ Modals.prototype.close = function() {
61
+ var lastModal, modal,
62
+ _this = this;
63
+ modal = this.currentView;
64
+ if (!modal || modal.isClosed) {
65
+ return;
66
+ }
67
+ if (modal.close) {
68
+ modal.close();
69
+ } else if (modal.remove) {
70
+ modal.remove();
71
+ }
72
+ modal.off('modal:close', this.close);
73
+ this.modals.splice(_.indexOf(this.modals, modal), 1);
74
+ this.zIndex--;
75
+ this.currentView = this.modals[this.zIndex - 1];
76
+ lastModal = _.last(this.modals);
77
+ if (lastModal) {
78
+ lastModal.modalEl.addClass("" + lastModal.prefix + "-modal--stacked-reverse");
79
+ _.delay(function() {
80
+ return lastModal.modalEl.removeClass("" + lastModal.prefix + "-modal--stacked");
81
+ }, 300);
82
+ if (this.zIndex !== 0) {
83
+ lastModal.delegateModalEvents();
84
+ }
85
+ }
86
+ return Marionette.triggerMethod.call(this, "close");
87
+ };
88
+
89
+ Modals.prototype.closeAll = function() {
90
+ var modal, _i, _len, _ref1, _results;
91
+ _ref1 = this.modals;
92
+ _results = [];
93
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
94
+ modal = _ref1[_i];
95
+ _results.push(this.close());
96
+ }
97
+ return _results;
98
+ };
99
+
100
+ return Modals;
101
+
102
+ })(Backbone.Marionette.Region);
103
+
104
+ }).call(this);
@@ -0,0 +1 @@
1
+ (function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a},d=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};if("undefined"==typeof Backbone||null===Backbone)throw new Error("Backbone is not defined. Please include the latest version from http://documentcloud.github.com/backbone/backbone.js");Backbone.Modal=function(b){function e(){this.triggerCancel=a(this.triggerCancel,this),this.triggerSubmit=a(this.triggerSubmit,this),this.triggerView=a(this.triggerView,this),this.clickOutside=a(this.clickOutside,this),this.checkKey=a(this.checkKey,this),this.args=Array.prototype.slice.apply(arguments),Backbone.View.prototype.constructor.apply(this,this.args),this.setUIElements(),this.delegateModalEvents()}return c(e,b),e.prototype.prefix="bbm",e.prototype.render=function(a){var b,c,d=this;return null==a&&(a={}),b=this.serializeData(),this.$el.addClass(""+this.prefix+"-wrapper"),this.modalEl=Backbone.$("<div />").addClass(""+this.prefix+"-modal"),this.template&&this.modalEl.html(this.template(b)),this.$el.html(this.modalEl),Backbone.$("body").on("keyup",this.checkKey),Backbone.$("body").on("click",this.clickOutside),this.viewContainer?(this.viewContainerEl=this.modalEl.find(this.viewContainer),this.viewContainerEl.addClass(""+this.prefix+"-modal__views")):this.viewContainerEl=this.modalEl,this.$el.show(),(null!=(c=this.views)?c.length:void 0)>0&&this.openAt(0),"function"==typeof this.onRender&&this.onRender(),this.modalEl.css({opacity:0}),this.$el.fadeIn({duration:100,complete:function(){return d.modalEl.css({opacity:1}).addClass(""+d.prefix+"-modal--open")}}),this},e.prototype.setUIElements=function(){var a;if(this.template=this.getOption("template"),this.views=this.getOption("views"),null!=(a=this.views)&&(a.length=_.size(this.views)),this.viewContainer=this.getOption("viewContainer"),this.$el.hide(),_.isUndefined(this.template)&&_.isUndefined(this.views))throw new Error("No template or views defined for Backbone.Modal");if(this.template&&this.views&&_.isUndefined(this.viewContainer))throw new Error("No viewContainer defined for Backbone.Modal")},e.prototype.getOption=function(a){return a?this.options&&d.call(this.options,a)>=0&&null!=this.options[a]?this.options[a]:this[a]:void 0},e.prototype.serializeData=function(){var a;return a={},this.model&&(a=_.extend(a,this.model.toJSON())),this.collection&&(a=_.extend(a,{items:this.collection.toJSON()})),a},e.prototype.delegateModalEvents=function(){var a,b,c,d,e,f,g;this.active=!0,a=this.getOption("cancelEl"),e=this.getOption("submitEl"),e&&this.$el.on("click",e,this.triggerSubmit),a&&this.$el.on("click",a,this.triggerCancel),g=[];for(b in this.views)"length"!==b?(c=b.match(/^(\S+)\s*(.*)$/),f=c[1],d=c[2],g.push(this.$el.on(f,d,this.views[b],this.triggerView))):g.push(void 0);return g},e.prototype.undelegateModalEvents=function(){var a,b,c,d,e,f,g;this.active=!1,a=this.getOption("cancelEl"),e=this.getOption("submitEl"),e&&this.$el.off("click",e,this.triggerSubmit),a&&this.$el.off("click",a,this.triggerCancel),g=[];for(b in this.views)"length"!==b?(c=b.match(/^(\S+)\s*(.*)$/),f=c[1],d=c[2],g.push(this.$el.off(f,d,this.views[b],this.triggerView))):g.push(void 0);return g},e.prototype.checkKey=function(a){if(this.active)switch(a.keyCode){case 27:return this.triggerCancel();case 13:return this.triggerSubmit()}},e.prototype.clickOutside=function(a){return Backbone.$(a.target).hasClass(""+this.prefix+"-wrapper")&&this.active?this.triggerCancel(null,!0):void 0},e.prototype.buildView=function(a){var b;if(a)return _.isFunction(a)?(b=new a(this.args[0]),b instanceof Backbone.View?{el:b.render().$el,view:b}:{el:a(this.args[0])}):{view:a,el:a.$el}},e.prototype.triggerView=function(a){var b,c,d,e;null!=a&&"function"==typeof a.preventDefault&&a.preventDefault(),e=a.data,c=this.buildView(e.view),this.currentView&&(this.previousView=this.currentView),this.currentView=c.view||c.el,b=0;for(d in this.views)e.view===this.views[d].view&&(this.currentIndex=b),b++;return e.onActive&&(_.isFunction(e.onActive)?e.onActive(this):_.isString(e.onActive)&&this[e.onActive].call(this,e)),this.shouldAnimate?this.animateToView(c.el):(this.shouldAnimate=!0,this.$(this.viewContainerEl).html(c.el))},e.prototype.animateToView=function(a){var b,c,d,e,f,g,h=this;return e={position:"relative",top:-9999,left:-9999},f=Backbone.$("<tester/>").css(e),f.html(this.$el.clone().css(e)),0!==Backbone.$("tester").length?Backbone.$("tester").replaceWith(f):Backbone.$("body").append(f),b=this.viewContainer?f.find(this.viewContainer):f.find("."+this.prefix+"-modal"),b.removeAttr("style"),d=b.outerHeight(),b.html(a),c=b.outerHeight(),d===c?(this.$(this.viewContainerEl).html(a),null!=(g=this.previousView)?"function"==typeof g.close?g.close():void 0:void 0):(this.$(this.viewContainerEl).css({opacity:0}),this.$(this.viewContainerEl).animate({height:c},100,function(){var b;return h.$(h.viewContainerEl).css({opacity:1}).removeAttr("style"),h.$(h.viewContainerEl).html(a),null!=(b=h.previousView)?"function"==typeof b.close?b.close():void 0:void 0}))},e.prototype.triggerSubmit=function(a){return a&&(null!=a&&a.preventDefault(),!this.beforeSubmit||this.beforeSubmit()!==!1)?("function"==typeof this.submit&&this.submit(),this.regionEnabled?this.trigger("modal:close"):this.close()):void 0},e.prototype.triggerCancel=function(a){return null!=a&&a.preventDefault(),this.beforeCancel&&this.beforeCancel()===!1?void 0:("function"==typeof this.cancel&&this.cancel(),this.regionEnabled?this.trigger("modal:close"):this.close())},e.prototype.close=function(){var a=this;return Backbone.$("body").off("keyup",this.checkKey),Backbone.$("body").off("click",this.clickOutside),"function"==typeof this.onClose&&this.onClose(),this.shouldAnimate=!1,this.modalEl.addClass(""+this.prefix+"-modal--close"),this.$el.fadeOut({duration:200}),_.delay(function(){var b;return null!=(b=a.currentView)&&"function"==typeof b.remove&&b.remove(),a.remove()},200)},e.prototype.openAt=function(a){var b,c,d;b=0;for(c in this.views)"length"!==c&&(b===a&&(d=this.views[c]),b++);return d&&(this.currentIndex=a,this.triggerView({data:d})),this},e.prototype.next=function(){return this.currentIndex+1<this.views.length?this.openAt(this.currentIndex+1):void 0},e.prototype.previous=function(){return this.currentIndex-1<this.views.length-1?this.openAt(this.currentIndex-1):void 0},e}(Backbone.View)}).call(this);