effective_bootstrap 0.9.5 → 0.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +44 -2
- data/app/assets/config/effective_bootstrap_manifest.js +1 -0
- data/app/assets/javascripts/effective_bootstrap.js +1 -0
- data/app/assets/javascripts/effective_editor/input.js +1 -0
- data/app/assets/javascripts/effective_editor/magic-url.js +3 -0
- data/app/assets/javascripts/effective_has_many/initialize.js.coffee +74 -0
- data/app/assets/javascripts/effective_has_many/input.js +2 -0
- data/app/assets/javascripts/effective_has_many/jquery.sortable.js +696 -0
- data/app/assets/stylesheets/effective_bootstrap.scss +1 -0
- data/app/assets/stylesheets/effective_has_many/input.scss +42 -0
- data/app/helpers/effective_form_builder_helper.rb +12 -1
- data/app/models/effective/form_builder.rb +14 -0
- data/app/models/effective/form_inputs/editor.rb +10 -5
- data/app/models/effective/form_inputs/file_field.rb +12 -2
- data/app/models/effective/form_inputs/has_many.rb +175 -0
- data/lib/effective_bootstrap/engine.rb +1 -1
- data/lib/effective_bootstrap/version.rb +1 -1
- metadata +10 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5092faff38f399976a16a668ef167ca4b9f2103db81cb03617a5165a05731c6b
         | 
| 4 | 
            +
              data.tar.gz: 3168ab3c1c38bff6e1f6020a0aea2dadc5e6f2917ffef79827054415cb6b1198
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ff0e00b34d8101166e8eb0d895634e2e5099366953232fa4063c20dd504bfe10641738fb5ed90c99599de0c9f3f3d6a3d029d1cc35548ef8eab0fdb7fcbb27c6
         | 
| 7 | 
            +
              data.tar.gz: e24803d6584be1ff0a1aea39a6790528186c5189974a1a69af5ef95a295665b932e74af3734ec1735a2a82e5ee75ed9d5dbf98af4e6352f71971d250590a68fa
         | 
    
        data/README.md
    CHANGED
    
    | @@ -42,8 +42,8 @@ Add the following to your `application.js`: | |
| 42 42 | 
             
            And to your `application.scss`:
         | 
| 43 43 |  | 
| 44 44 | 
             
            ```sass
         | 
| 45 | 
            -
            @import 'bootstrap' | 
| 46 | 
            -
            @import 'effective_bootstrap' | 
| 45 | 
            +
            @import 'bootstrap'
         | 
| 46 | 
            +
            @import 'effective_bootstrap'
         | 
| 47 47 | 
             
            ```
         | 
| 48 48 |  | 
| 49 49 | 
             
            ## View Helpers
         | 
| @@ -362,6 +362,48 @@ And then in any form, instead of a text area: | |
| 362 362 | 
             
            = f.editor :body
         | 
| 363 363 | 
             
            ```
         | 
| 364 364 |  | 
| 365 | 
            +
            ## Custom has_many
         | 
| 366 | 
            +
             | 
| 367 | 
            +
            This custom form input was inspired by [cocoon](https://github.com/nathanvda/cocoon) but works with more magic.
         | 
| 368 | 
            +
             | 
| 369 | 
            +
            This nested form builder allows has_many resources to be created, updated, destroyed and reordered.
         | 
| 370 | 
            +
             | 
| 371 | 
            +
            Just add `has_many` and `accepts_nested_attributes_for` like normal and then use it in the form:
         | 
| 372 | 
            +
             | 
| 373 | 
            +
            ```ruby
         | 
| 374 | 
            +
            class Author < ApplicationRecord
         | 
| 375 | 
            +
              has_many :books
         | 
| 376 | 
            +
              accepts_nested_attributes_for :books, allow_destroy: true
         | 
| 377 | 
            +
            end
         | 
| 378 | 
            +
            ```
         | 
| 379 | 
            +
             | 
| 380 | 
            +
            and
         | 
| 381 | 
            +
             | 
| 382 | 
            +
            ```haml
         | 
| 383 | 
            +
            = effective_form_with(model: author) do |f|
         | 
| 384 | 
            +
              = f.text_field :name
         | 
| 385 | 
            +
             | 
| 386 | 
            +
              = f.has_many :books do |fb|
         | 
| 387 | 
            +
                = fb.text_field :title
         | 
| 388 | 
            +
                = fb.date_field :published_at
         | 
| 389 | 
            +
            ```
         | 
| 390 | 
            +
             | 
| 391 | 
            +
            If `Book` has an integer `position` field, there will be reorder buttons to drag & drop reorder the items.
         | 
| 392 | 
            +
             | 
| 393 | 
            +
            If `allow_destroy: true` there will be remove buttons.
         | 
| 394 | 
            +
             | 
| 395 | 
            +
            You can customize the has many behaviour by passing the following:
         | 
| 396 | 
            +
             | 
| 397 | 
            +
            ```haml
         | 
| 398 | 
            +
            = f.has_many :books, add: true, remove: true, reorder: true
         | 
| 399 | 
            +
            ```
         | 
| 400 | 
            +
             | 
| 401 | 
            +
            or add an html class:
         | 
| 402 | 
            +
             | 
| 403 | 
            +
            ```haml
         | 
| 404 | 
            +
            = f.has_many :books, class: 'tight'
         | 
| 405 | 
            +
            ```
         | 
| 406 | 
            +
             | 
| 365 407 | 
             
            ## Custom percent_field
         | 
| 366 408 |  | 
| 367 409 | 
             
            This custom form input uses no 3rd party jQuery plugins.
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            //= link_directory ../images/icons
         | 
| @@ -0,0 +1,3 @@ | |
| 1 | 
            +
            // https://github.com/visualjerk/quill-magic-url
         | 
| 2 | 
            +
            !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var r=e();for(var o in r)("object"==typeof exports?exports:t)[o]=r[o]}}(window,(function(){return function(t){var e={};function r(o){if(e[o])return e[o].exports;var n=e[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=t,r.c=e,r.d=function(t,e,o){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)r.d(o,n,function(e){return t[e]}.bind(null,n));return o},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=15)}([function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=r(4),i="function"==typeof Symbol&&"symbol"===o(Symbol("foo")),s=Object.prototype.toString,a=Array.prototype.concat,u=Object.defineProperty,p=u&&function(){var t={};try{for(var e in u(t,"x",{enumerable:!1,value:t}),t)return!1;return t.x===t}catch(t){return!1}}(),c=function(t,e,r,o){var n;(!(e in t)||"function"==typeof(n=o)&&"[object Function]"===s.call(n)&&o())&&(p?u(t,e,{configurable:!0,enumerable:!1,value:r,writable:!0}):t[e]=r)},f=function(t,e){var r=arguments.length>2?arguments[2]:{},o=n(e);i&&(o=a.call(o,Object.getOwnPropertySymbols(e)));for(var s=0;s<o.length;s+=1)c(t,o[s],e[o[s]],r[o[s]])};f.supportsDescriptors=!!p,t.exports=f},function(t,e,r){"use strict";var o=r(20);t.exports=Function.prototype.bind||o},function(t,e,r){function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=r(16),i=r(3),s=r(12),a=r(30),u=String.fromCharCode(0),p=function(t){Array.isArray(t)?this.ops=t:null!=t&&Array.isArray(t.ops)?this.ops=t.ops:this.ops=[]};p.prototype.insert=function(t,e){var r={};return 0===t.length?this:(r.insert=t,null!=e&&"object"===o(e)&&Object.keys(e).length>0&&(r.attributes=e),this.push(r))},p.prototype.delete=function(t){return t<=0?this:this.push({delete:t})},p.prototype.retain=function(t,e){if(t<=0)return this;var r={retain:t};return null!=e&&"object"===o(e)&&Object.keys(e).length>0&&(r.attributes=e),this.push(r)},p.prototype.push=function(t){var e=this.ops.length,r=this.ops[e-1];if(t=s(!0,{},t),"object"===o(r)){if("number"==typeof t.delete&&"number"==typeof r.delete)return this.ops[e-1]={delete:r.delete+t.delete},this;if("number"==typeof r.delete&&null!=t.insert&&(e-=1,"object"!==o(r=this.ops[e-1])))return this.ops.unshift(t),this;if(i(t.attributes,r.attributes)){if("string"==typeof t.insert&&"string"==typeof r.insert)return this.ops[e-1]={insert:r.insert+t.insert},"object"===o(t.attributes)&&(this.ops[e-1].attributes=t.attributes),this;if("number"==typeof t.retain&&"number"==typeof r.retain)return this.ops[e-1]={retain:r.retain+t.retain},"object"===o(t.attributes)&&(this.ops[e-1].attributes=t.attributes),this}}return e===this.ops.length?this.ops.push(t):this.ops.splice(e,0,t),this},p.prototype.chop=function(){var t=this.ops[this.ops.length-1];return t&&t.retain&&!t.attributes&&this.ops.pop(),this},p.prototype.filter=function(t){return this.ops.filter(t)},p.prototype.forEach=function(t){this.ops.forEach(t)},p.prototype.map=function(t){return this.ops.map(t)},p.prototype.partition=function(t){var e=[],r=[];return this.forEach((function(o){(t(o)?e:r).push(o)})),[e,r]},p.prototype.reduce=function(t,e){return this.ops.reduce(t,e)},p.prototype.changeLength=function(){return this.reduce((function(t,e){return e.insert?t+a.length(e):e.delete?t-e.delete:t}),0)},p.prototype.length=function(){return this.reduce((function(t,e){return t+a.length(e)}),0)},p.prototype.slice=function(t,e){t=t||0,"number"!=typeof e&&(e=1/0);for(var r=[],o=a.iterator(this.ops),n=0;n<e&&o.hasNext();){var i;n<t?i=o.next(t-n):(i=o.next(e-n),r.push(i)),n+=a.length(i)}return new p(r)},p.prototype.compose=function(t){var e=a.iterator(this.ops),r=a.iterator(t.ops),o=[],n=r.peek();if(null!=n&&"number"==typeof n.retain&&null==n.attributes){for(var s=n.retain;"insert"===e.peekType()&&e.peekLength()<=s;)s-=e.peekLength(),o.push(e.next());n.retain-s>0&&r.next(n.retain-s)}for(var u=new p(o);e.hasNext()||r.hasNext();)if("insert"===r.peekType())u.push(r.next());else if("delete"===e.peekType())u.push(e.next());else{var c=Math.min(e.peekLength(),r.peekLength()),f=e.next(c),l=r.next(c);if("number"==typeof l.retain){var y={};"number"==typeof f.retain?y.retain=c:y.insert=f.insert;var h=a.attributes.compose(f.attributes,l.attributes,"number"==typeof f.retain);if(h&&(y.attributes=h),u.push(y),!r.hasNext()&&i(u.ops[u.ops.length-1],y)){var b=new p(e.rest());return u.concat(b).chop()}}else"number"==typeof l.delete&&"number"==typeof f.retain&&u.push(l)}return u.chop()},p.prototype.concat=function(t){var e=new p(this.ops.slice());return t.ops.length>0&&(e.push(t.ops[0]),e.ops=e.ops.concat(t.ops.slice(1))),e},p.prototype.diff=function(t,e){if(this.ops===t.ops)return new p;var r=[this,t].map((function(e){return e.map((function(r){if(null!=r.insert)return"string"==typeof r.insert?r.insert:u;throw new Error("diff() called "+(e===t?"on":"with")+" non-document")})).join("")})),o=new p,s=n(r[0],r[1],e),c=a.iterator(this.ops),f=a.iterator(t.ops);return s.forEach((function(t){for(var e=t[1].length;e>0;){var r=0;switch(t[0]){case n.INSERT:r=Math.min(f.peekLength(),e),o.push(f.next(r));break;case n.DELETE:r=Math.min(e,c.peekLength()),c.next(r),o.delete(r);break;case n.EQUAL:r=Math.min(c.peekLength(),f.peekLength(),e);var s=c.next(r),u=f.next(r);i(s.insert,u.insert)?o.retain(r,a.attributes.diff(s.attributes,u.attributes)):o.push(u).delete(r)}e-=r}})),o.chop()},p.prototype.eachLine=function(t,e){e=e||"\n";for(var r=a.iterator(this.ops),o=new p,n=0;r.hasNext();){if("insert"!==r.peekType())return;var i=r.peek(),s=a.length(i)-r.peekLength(),u="string"==typeof i.insert?i.insert.indexOf(e,s)-s:-1;if(u<0)o.push(r.next());else if(u>0)o.push(r.next(u));else{if(!1===t(o,r.next(1).attributes||{},n))return;n+=1,o=new p}}o.length()>0&&t(o,{},n)},p.prototype.transform=function(t,e){if(e=!!e,"number"==typeof t)return this.transformPosition(t,e);for(var r=a.iterator(this.ops),o=a.iterator(t.ops),n=new p;r.hasNext()||o.hasNext();)if("insert"!==r.peekType()||!e&&"insert"===o.peekType())if("insert"===o.peekType())n.push(o.next());else{var i=Math.min(r.peekLength(),o.peekLength()),s=r.next(i),u=o.next(i);if(s.delete)continue;u.delete?n.push(u):n.retain(i,a.attributes.transform(s.attributes,u.attributes,e))}else n.retain(a.length(r.next()));return n.chop()},p.prototype.transformPosition=function(t,e){e=!!e;for(var r=a.iterator(this.ops),o=0;r.hasNext()&&o<=t;){var n=r.peekLength(),i=r.peekType();r.next(),"delete"!==i?("insert"===i&&(o<t||!e)&&(t+=n),o+=n):t-=Math.min(n,t-o)}return t},t.exports=p},function(t,e,r){function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=r(4),i=r(18),s=r(19),a=r(25),u=r(27),p=r(29),c=Date.prototype.getTime;function f(t,e,r){var h=r||{};return!!(h.strict?s(t,e):t===e)||(!t||!e||"object"!==o(t)&&"object"!==o(e)?h.strict?s(t,e):t==e:function(t,e,r){var s,h;if(o(t)!==o(e))return!1;if(l(t)||l(e))return!1;if(t.prototype!==e.prototype)return!1;if(i(t)!==i(e))return!1;var b=a(t),m=a(e);if(b!==m)return!1;if(b||m)return t.source===e.source&&u(t)===u(e);if(p(t)&&p(e))return c.call(t)===c.call(e);var d=y(t),g=y(e);if(d!==g)return!1;if(d||g){if(t.length!==e.length)return!1;for(s=0;s<t.length;s++)if(t[s]!==e[s])return!1;return!0}if(o(t)!==o(e))return!1;try{var v=n(t),S=n(e)}catch(t){return!1}if(v.length!==S.length)return!1;for(v.sort(),S.sort(),s=v.length-1;s>=0;s--)if(v[s]!=S[s])return!1;for(s=v.length-1;s>=0;s--)if(h=v[s],!f(t[h],e[h],r))return!1;return!0}(t,e,h))}function l(t){return null==t}function y(t){return!(!t||"object"!==o(t)||"number"!=typeof t.length)&&("function"==typeof t.copy&&"function"==typeof t.slice&&!(t.length>0&&"number"!=typeof t[0]))}t.exports=f},function(t,e,r){"use strict";var o=Array.prototype.slice,n=r(5),i=Object.keys,s=i?function(t){return i(t)}:r(17),a=Object.keys;s.shim=function(){Object.keys?function(){var t=Object.keys(arguments);return t&&t.length===arguments.length}(1,2)||(Object.keys=function(t){return n(t)?a(o.call(t)):a(t)}):Object.keys=s;return Object.keys||s},t.exports=s},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=Object.prototype.toString;t.exports=function(t){var e=n.call(t),r="[object Arguments]"===e;return r||(r="[object Array]"!==e&&null!==t&&"object"===o(t)&&"number"==typeof t.length&&t.length>=0&&"[object Function]"===n.call(t.callee)),r}},function(t,e,r){"use strict";var o=r(1),n=r(21)("%Function%"),i=n.apply,s=n.call;t.exports=function(){return o.apply(s,arguments)},t.exports.apply=function(){return o.apply(i,arguments)}},function(t,e){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(t){"object"===("undefined"==typeof window?"undefined":r(window))&&(o=window)}t.exports=o},function(t,e,r){"use strict";var o=function(t){return t!=t};t.exports=function(t,e){return 0===t&&0===e?1/t==1/e:t===e||!(!o(t)||!o(e))}},function(t,e,r){"use strict";var o=r(8);t.exports=function(){return"function"==typeof Object.is?Object.is:o}},function(t,e,r){"use strict";var o=Object,n=TypeError;t.exports=function(){if(null!=this&&this!==o(this))throw new n("RegExp.prototype.flags getter called on non-object");var t="";return this.global&&(t+="g"),this.ignoreCase&&(t+="i"),this.multiline&&(t+="m"),this.dotAll&&(t+="s"),this.unicode&&(t+="u"),this.sticky&&(t+="y"),t}},function(t,e,r){"use strict";var o=r(10),n=r(0).supportsDescriptors,i=Object.getOwnPropertyDescriptor,s=TypeError;t.exports=function(){if(!n)throw new s("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");if("gim"===/a/gim.flags){var t=i(RegExp.prototype,"flags");if(t&&"function"==typeof t.get&&"boolean"==typeof/a/.dotAll)return t.get}return o}},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=Object.prototype.hasOwnProperty,i=Object.prototype.toString,s=Object.defineProperty,a=Object.getOwnPropertyDescriptor,u=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===i.call(t)},p=function(t){if(!t||"[object Object]"!==i.call(t))return!1;var e,r=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!r&&!o)return!1;for(e in t);return void 0===e||n.call(t,e)},c=function(t,e){s&&"__proto__"===e.name?s(t,e.name,{enumerable:!0,configurable:!0,value:e.newValue,writable:!0}):t[e.name]=e.newValue},f=function(t,e){if("__proto__"===e){if(!n.call(t,e))return;if(a)return a(t,e).value}return t[e]};t.exports=function t(){var e,r,n,i,s,a,l=arguments[0],y=1,h=arguments.length,b=!1;for("boolean"==typeof l&&(b=l,l=arguments[1]||{},y=2),(null==l||"object"!==o(l)&&"function"!=typeof l)&&(l={});y<h;++y)if(null!=(e=arguments[y]))for(r in e)n=f(l,r),l!==(i=f(e,r))&&(b&&i&&(p(i)||(s=u(i)))?(s?(s=!1,a=n&&u(n)?n:[]):a=n&&p(n)?n:{},c(l,{name:r,newValue:t(b,a,i)})):void 0!==i&&c(l,{name:r,newValue:i}));return l}},function(t,e){(function(e){t.exports=e}).call(this,{})},function(t,e,r){"use strict";function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,o)}return r}function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t){return function(t){if(Array.isArray(t))return u(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||a(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var r=[],o=!0,n=!1,i=void 0;try{for(var s,a=t[Symbol.iterator]();!(o=(s=a.next()).done)&&(r.push(s.value),!e||r.length!==e);o=!0);}catch(t){n=!0,i=t}finally{try{o||null==a.return||a.return()}finally{if(n)throw i}}return r}(t,e)||a(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t,e){if(t){if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(t,e):void 0}}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r<e;r++)o[r]=t[r];return o}var p="undefined"==typeof URL?r(31).URL:URL,c=function(t,e){return e.some((function(e){return e instanceof RegExp?e.test(t):e===t}))},f=function(t,e){if(e=function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?o(Object(r),!0).forEach((function(e){n(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}({defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0},e),Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return function(t,e){var r=e.stripHash,o=t.match(/^data:(.*?),(.*?)(?:#(.*))?$/);if(!o)throw new Error("Invalid URL: ".concat(t));var n=o[1].split(";"),a=o[2],u=r?"":o[3],p=!1;"base64"===n[n.length-1]&&(n.pop(),p=!0);var c=(n.shift()||"").toLowerCase(),f=i(n.map((function(t){var e=s(t.split("=").map((function(t){return t.trim()})),2),r=e[0],o=e[1],n=void 0===o?"":o;return"charset"===r&&"us-ascii"===(n=n.toLowerCase())?"":"".concat(r).concat(n?"=".concat(n):"")})).filter(Boolean));return p&&f.push("base64"),(0!==f.length||c&&"text/plain"!==c)&&f.unshift(c),"data:".concat(f.join(";"),",").concat(p?a.trim():a).concat(u?"#".concat(u):"")}(t,e);var r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));var a=new p(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&"https:"===a.protocol&&(a.protocol="http:"),e.forceHttps&&"http:"===a.protocol&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(function(t,e){return/^(?!\/)/g.test(e)?"".concat(e,"/"):"/"}))),a.pathname&&(a.pathname=decodeURI(a.pathname)),!0===e.removeDirectoryIndex&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){var u=a.pathname.split("/"),f=u[u.length-1];c(f,e.removeDirectoryIndex)&&(u=u.slice(0,u.length-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(var l=0,y=i(a.searchParams.keys());l<y.length;l++){var h=y[l];c(h,e.removeQueryParameters)&&a.searchParams.delete(h)}return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),!e.removeTrailingSlash&&"/"!==a.pathname||""!==a.hash||(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};t.exports=f,t.exports.default=f},function(t,e,r){"use strict";r.r(e),r.d(e,"default",(function(){return h}));var o=r(2),n=r.n(o),i=r(14),s=r.n(i);function a(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var r=[],o=!0,n=!1,i=void 0;try{for(var s,a=t[Symbol.iterator]();!(o=(s=a.next()).done)&&(r.push(s.value),!e||r.length!==e);o=!0);}catch(t){n=!0,i=t}finally{try{o||null==a.return||a.return()}finally{if(n)throw i}}return r}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return u(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return u(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r<e;r++)o[r]=t[r];return o}function p(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,o)}return r}function c(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?p(Object(r),!0).forEach((function(e){f(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):p(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function f(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function l(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}var y={globalRegularExpression:/(https?:\/\/|www\.)[\S]+/g,urlRegularExpression:/(https?:\/\/[\S]+)|(www.[\S]+)/,normalizeRegularExpression:/(https?:\/\/[\S]+)|(www.[\S]+)/,normalizeUrlOptions:{stripWWW:!1}},h=function(){function t(e,r){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.quill=e,r=r||{},this.options=c(c({},y),r),this.registerTypeListener(),this.registerPasteListener()}var e,r,o;return e=t,(r=[{key:"registerPasteListener",value:function(){var t=this;this.quill.clipboard.addMatcher(Node.TEXT_NODE,(function(e,r){if("string"==typeof e.data){var o=e.data.match(t.options.globalRegularExpression);if(o&&o.length>0){var i=new n.a,s=e.data;o.forEach((function(e){var r=s.split(e),o=r.shift();i.insert(o),i.insert(e,{link:t.normalize(e)}),s=r.join(e)})),i.insert(s),r.ops=i.ops}return r}}))}},{key:"registerTypeListener",value:function(){var t=this;this.quill.on("text-change",(function(e){var r=e.ops;if(!(!r||r.length<1||r.length>2)){var o=r[r.length-1];o.insert&&"string"==typeof o.insert&&o.insert.match(/\s/)&&t.checkTextForUrl()}}))}},{key:"checkTextForUrl",value:function(){var t=this.quill.getSelection();if(t){var e=a(this.quill.getLeaf(t.index),1)[0];if(e.text&&"a"!==e.parent.domNode.localName){var r=e.text.match(this.options.urlRegularExpression);if(r){var o=this.quill.getIndex(e)+r.index;this.textToUrl(o,r[0])}}}}},{key:"textToUrl",value:function(t,e){var r=(new n.a).retain(t).delete(e.length).insert(e,{link:this.normalize(e)});this.quill.updateContents(r)}},{key:"normalize",value:function(t){if(this.options.normalizeRegularExpression.test(t))try{return s()(t,this.options.normalizeUrlOptions)}catch(t){console.error(t)}return t}}])&&l(e.prototype,r),o&&l(e,o),t}();window.Quill&&window.Quill.register("modules/magicUrl",h)},function(t,e){function r(t,e,s){if(t==e)return t?[[0,t]]:[];(s<0||t.length<s)&&(s=null);var u=n(t,e),p=t.substring(0,u);u=i(t=t.substring(u),e=e.substring(u));var c=t.substring(t.length-u),f=function(t,e){var s;if(!t)return[[1,e]];if(!e)return[[-1,t]];var a=t.length>e.length?t:e,u=t.length>e.length?e:t,p=a.indexOf(u);if(-1!=p)return s=[[1,a.substring(0,p)],[0,u],[1,a.substring(p+u.length)]],t.length>e.length&&(s[0][0]=s[2][0]=-1),s;if(1==u.length)return[[-1,t],[1,e]];var c=function(t,e){var r=t.length>e.length?t:e,o=t.length>e.length?e:t;if(r.length<4||2*o.length<r.length)return null;function s(t,e,r){for(var o,s,a,u,p=t.substring(r,r+Math.floor(t.length/4)),c=-1,f="";-1!=(c=e.indexOf(p,c+1));){var l=n(t.substring(r),e.substring(c)),y=i(t.substring(0,r),e.substring(0,c));f.length<y+l&&(f=e.substring(c-y,c)+e.substring(c,c+l),o=t.substring(0,r-y),s=t.substring(r+l),a=e.substring(0,c-y),u=e.substring(c+l))}return 2*f.length>=t.length?[o,s,a,u,f]:null}var a,u,p,c,f,l=s(r,o,Math.ceil(r.length/4)),y=s(r,o,Math.ceil(r.length/2));if(!l&&!y)return null;a=y?l&&l[4].length>y[4].length?l:y:l;t.length>e.length?(u=a[0],p=a[1],c=a[2],f=a[3]):(c=a[0],f=a[1],u=a[2],p=a[3]);var h=a[4];return[u,p,c,f,h]}(t,e);if(c){var f=c[0],l=c[1],y=c[2],h=c[3],b=c[4],m=r(f,y),d=r(l,h);return m.concat([[0,b]],d)}return function(t,e){for(var r=t.length,n=e.length,i=Math.ceil((r+n)/2),s=i,a=2*i,u=new Array(a),p=new Array(a),c=0;c<a;c++)u[c]=-1,p[c]=-1;u[s+1]=0,p[s+1]=0;for(var f=r-n,l=f%2!=0,y=0,h=0,b=0,m=0,d=0;d<i;d++){for(var g=-d+y;g<=d-h;g+=2){for(var v=s+g,S=(A=g==-d||g!=d&&u[v-1]<u[v+1]?u[v+1]:u[v-1]+1)-g;A<r&&S<n&&t.charAt(A)==e.charAt(S);)A++,S++;if(u[v]=A,A>r)h+=2;else if(S>n)y+=2;else if(l){if((w=s+f-g)>=0&&w<a&&-1!=p[w]){var j=r-p[w];if(A>=j)return o(t,e,A,S)}}}for(var O=-d+b;O<=d-m;O+=2){for(var w=s+O,x=(j=O==-d||O!=d&&p[w-1]<p[w+1]?p[w+1]:p[w-1]+1)-O;j<r&&x<n&&t.charAt(r-j-1)==e.charAt(n-x-1);)j++,x++;if(p[w]=j,j>r)m+=2;else if(x>n)b+=2;else if(!l){if((v=s+f-O)>=0&&v<a&&-1!=u[v]){var A=u[v];S=s+A-v;if(A>=(j=r-j))return o(t,e,A,S)}}}}return[[-1,t],[1,e]]}(t,e)}(t=t.substring(0,t.length-u),e=e.substring(0,e.length-u));return p&&f.unshift([0,p]),c&&f.push([0,c]),function t(e){e.push([0,""]);var r,o=0,s=0,a=0,u="",p="";for(;o<e.length;)switch(e[o][0]){case 1:a++,p+=e[o][1],o++;break;case-1:s++,u+=e[o][1],o++;break;case 0:s+a>1?(0!==s&&0!==a&&(0!==(r=n(p,u))&&(o-s-a>0&&0==e[o-s-a-1][0]?e[o-s-a-1][1]+=p.substring(0,r):(e.splice(0,0,[0,p.substring(0,r)]),o++),p=p.substring(r),u=u.substring(r)),0!==(r=i(p,u))&&(e[o][1]=p.substring(p.length-r)+e[o][1],p=p.substring(0,p.length-r),u=u.substring(0,u.length-r))),0===s?e.splice(o-a,s+a,[1,p]):0===a?e.splice(o-s,s+a,[-1,u]):e.splice(o-s-a,s+a,[-1,u],[1,p]),o=o-s-a+(s?1:0)+(a?1:0)+1):0!==o&&0==e[o-1][0]?(e[o-1][1]+=e[o][1],e.splice(o,1)):o++,a=0,s=0,u="",p=""}""===e[e.length-1][1]&&e.pop();var c=!1;o=1;for(;o<e.length-1;)0==e[o-1][0]&&0==e[o+1][0]&&(e[o][1].substring(e[o][1].length-e[o-1][1].length)==e[o-1][1]?(e[o][1]=e[o-1][1]+e[o][1].substring(0,e[o][1].length-e[o-1][1].length),e[o+1][1]=e[o-1][1]+e[o+1][1],e.splice(o-1,1),c=!0):e[o][1].substring(0,e[o+1][1].length)==e[o+1][1]&&(e[o-1][1]+=e[o+1][1],e[o][1]=e[o][1].substring(e[o+1][1].length)+e[o+1][1],e.splice(o+1,1),c=!0)),o++;c&&t(e)}(f),null!=s&&(f=function(t,e){var r=function(t,e){if(0===e)return[0,t];for(var r=0,o=0;o<t.length;o++){var n=t[o];if(-1===n[0]||0===n[0]){var i=r+n[1].length;if(e===i)return[o+1,t];if(e<i){t=t.slice();var s=e-r,a=[n[0],n[1].slice(0,s)],u=[n[0],n[1].slice(s)];return t.splice(o,1,a,u),[o+1,t]}r=i}}throw new Error("cursor_pos is out of bounds!")}(t,e),o=r[1],n=r[0],i=o[n],s=o[n+1];if(null==i)return t;if(0!==i[0])return t;if(null!=s&&i[1]+s[1]===s[1]+i[1])return o.splice(n,2,s,i),a(o,n,2);if(null!=s&&0===s[1].indexOf(i[1])){o.splice(n,2,[s[0],i[1]],[0,i[1]]);var u=s[1].slice(i[1].length);return u.length>0&&o.splice(n+2,0,[s[0],u]),a(o,n,3)}return t}(f,s)),f=function(t){for(var e=!1,r=function(t){return t.charCodeAt(0)>=56320&&t.charCodeAt(0)<=57343},o=2;o<t.length;o+=1)0===t[o-2][0]&&((n=t[o-2][1]).charCodeAt(n.length-1)>=55296&&n.charCodeAt(n.length-1)<=56319)&&-1===t[o-1][0]&&r(t[o-1][1])&&1===t[o][0]&&r(t[o][1])&&(e=!0,t[o-1][1]=t[o-2][1].slice(-1)+t[o-1][1],t[o][1]=t[o-2][1].slice(-1)+t[o][1],t[o-2][1]=t[o-2][1].slice(0,-1));var n;if(!e)return t;var i=[];for(o=0;o<t.length;o+=1)t[o][1].length>0&&i.push(t[o]);return i}(f)}function o(t,e,o,n){var i=t.substring(0,o),s=e.substring(0,n),a=t.substring(o),u=e.substring(n),p=r(i,s),c=r(a,u);return p.concat(c)}function n(t,e){if(!t||!e||t.charAt(0)!=e.charAt(0))return 0;for(var r=0,o=Math.min(t.length,e.length),n=o,i=0;r<n;)t.substring(i,n)==e.substring(i,n)?i=r=n:o=n,n=Math.floor((o-r)/2+r);return n}function i(t,e){if(!t||!e||t.charAt(t.length-1)!=e.charAt(e.length-1))return 0;for(var r=0,o=Math.min(t.length,e.length),n=o,i=0;r<n;)t.substring(t.length-n,t.length-i)==e.substring(e.length-n,e.length-i)?i=r=n:o=n,n=Math.floor((o-r)/2+r);return n}var s=r;function a(t,e,r){for(var o=e+r-1;o>=0&&o>=e-1;o--)if(o+1<t.length){var n=t[o],i=t[o+1];n[0]===i[1]&&t.splice(o,2,[n[0],n[1]+i[1]])}return t}s.INSERT=1,s.DELETE=-1,s.EQUAL=0,t.exports=s},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n;if(!Object.keys){var i=Object.prototype.hasOwnProperty,s=Object.prototype.toString,a=r(5),u=Object.prototype.propertyIsEnumerable,p=!u.call({toString:null},"toString"),c=u.call((function(){}),"prototype"),f=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],l=function(t){var e=t.constructor;return e&&e.prototype===t},y={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},h=function(){if("undefined"==typeof window)return!1;for(var t in window)try{if(!y["$"+t]&&i.call(window,t)&&null!==window[t]&&"object"===o(window[t]))try{l(window[t])}catch(t){return!0}}catch(t){return!0}return!1}();n=function(t){var e=null!==t&&"object"===o(t),r="[object Function]"===s.call(t),n=a(t),u=e&&"[object String]"===s.call(t),y=[];if(!e&&!r&&!n)throw new TypeError("Object.keys called on a non-object");var b=c&&r;if(u&&t.length>0&&!i.call(t,0))for(var m=0;m<t.length;++m)y.push(String(m));if(n&&t.length>0)for(var d=0;d<t.length;++d)y.push(String(d));else for(var g in t)b&&"prototype"===g||!i.call(t,g)||y.push(String(g));if(p)for(var v=function(t){if("undefined"==typeof window||!h)return l(t);try{return l(t)}catch(t){return!1}}(t),S=0;S<f.length;++S)v&&"constructor"===f[S]||!i.call(t,f[S])||y.push(f[S]);return y}}t.exports=n},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n="function"==typeof Symbol&&"symbol"===o(Symbol.toStringTag),i=Object.prototype.toString,s=function(t){return!(n&&t&&"object"===o(t)&&Symbol.toStringTag in t)&&"[object Arguments]"===i.call(t)},a=function(t){return!!s(t)||null!==t&&"object"===o(t)&&"number"==typeof t.length&&t.length>=0&&"[object Array]"!==i.call(t)&&"[object Function]"===i.call(t.callee)},u=function(){return s(arguments)}();s.isLegacyArguments=a,t.exports=u?s:a},function(t,e,r){"use strict";var o=r(0),n=r(6),i=r(8),s=r(9),a=r(24),u=n(s(),Object);o(u,{getPolyfill:s,implementation:i,shim:a}),t.exports=u},function(t,e,r){"use strict";var o="Function.prototype.bind called on incompatible ",n=Array.prototype.slice,i=Object.prototype.toString;t.exports=function(t){var e=this;if("function"!=typeof e||"[object Function]"!==i.call(e))throw new TypeError(o+e);for(var r,s=n.call(arguments,1),a=function(){if(this instanceof r){var o=e.apply(this,s.concat(n.call(arguments)));return Object(o)===o?o:this}return e.apply(t,s.concat(n.call(arguments)))},u=Math.max(0,e.length-s.length),p=[],c=0;c<u;c++)p.push("$"+c);if(r=Function("binder","return function ("+p.join(",")+"){ return binder.apply(this,arguments); }")(a),e.prototype){var f=function(){};f.prototype=e.prototype,r.prototype=new f,f.prototype=null}return r}},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=TypeError,i=Object.getOwnPropertyDescriptor;if(i)try{i({},"")}catch(t){i=null}var s=function(){throw new n},a=i?function(){try{return s}catch(t){try{return i(arguments,"callee").get}catch(t){return s}}}():s,u=r(22)(),p=Object.getPrototypeOf||function(t){return t.__proto__},c=void 0,f="undefined"==typeof Uint8Array?void 0:p(Uint8Array),l={"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?void 0:ArrayBuffer,"%ArrayBufferPrototype%":"undefined"==typeof ArrayBuffer?void 0:ArrayBuffer.prototype,"%ArrayIteratorPrototype%":u?p([][Symbol.iterator]()):void 0,"%ArrayPrototype%":Array.prototype,"%ArrayProto_entries%":Array.prototype.entries,"%ArrayProto_forEach%":Array.prototype.forEach,"%ArrayProto_keys%":Array.prototype.keys,"%ArrayProto_values%":Array.prototype.values,"%AsyncFromSyncIteratorPrototype%":void 0,"%AsyncFunction%":void 0,"%AsyncFunctionPrototype%":void 0,"%AsyncGenerator%":void 0,"%AsyncGeneratorFunction%":void 0,"%AsyncGeneratorPrototype%":void 0,"%AsyncIteratorPrototype%":c&&u&&Symbol.asyncIterator?c[Symbol.asyncIterator]():void 0,"%Atomics%":"undefined"==typeof Atomics?void 0:Atomics,"%Boolean%":Boolean,"%BooleanPrototype%":Boolean.prototype,"%DataView%":"undefined"==typeof DataView?void 0:DataView,"%DataViewPrototype%":"undefined"==typeof DataView?void 0:DataView.prototype,"%Date%":Date,"%DatePrototype%":Date.prototype,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%ErrorPrototype%":Error.prototype,"%eval%":eval,"%EvalError%":EvalError,"%EvalErrorPrototype%":EvalError.prototype,"%Float32Array%":"undefined"==typeof Float32Array?void 0:Float32Array,"%Float32ArrayPrototype%":"undefined"==typeof Float32Array?void 0:Float32Array.prototype,"%Float64Array%":"undefined"==typeof Float64Array?void 0:Float64Array,"%Float64ArrayPrototype%":"undefined"==typeof Float64Array?void 0:Float64Array.prototype,"%Function%":Function,"%FunctionPrototype%":Function.prototype,"%Generator%":void 0,"%GeneratorFunction%":void 0,"%GeneratorPrototype%":void 0,"%Int8Array%":"undefined"==typeof Int8Array?void 0:Int8Array,"%Int8ArrayPrototype%":"undefined"==typeof Int8Array?void 0:Int8Array.prototype,"%Int16Array%":"undefined"==typeof Int16Array?void 0:Int16Array,"%Int16ArrayPrototype%":"undefined"==typeof Int16Array?void 0:Int8Array.prototype,"%Int32Array%":"undefined"==typeof Int32Array?void 0:Int32Array,"%Int32ArrayPrototype%":"undefined"==typeof Int32Array?void 0:Int32Array.prototype,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":u?p(p([][Symbol.iterator]())):void 0,"%JSON%":"object"===("undefined"==typeof JSON?"undefined":o(JSON))?JSON:void 0,"%JSONParse%":"object"===("undefined"==typeof JSON?"undefined":o(JSON))?JSON.parse:void 0,"%Map%":"undefined"==typeof Map?void 0:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&u?p((new Map)[Symbol.iterator]()):void 0,"%MapPrototype%":"undefined"==typeof Map?void 0:Map.prototype,"%Math%":Math,"%Number%":Number,"%NumberPrototype%":Number.prototype,"%Object%":Object,"%ObjectPrototype%":Object.prototype,"%ObjProto_toString%":Object.prototype.toString,"%ObjProto_valueOf%":Object.prototype.valueOf,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?void 0:Promise,"%PromisePrototype%":"undefined"==typeof Promise?void 0:Promise.prototype,"%PromiseProto_then%":"undefined"==typeof Promise?void 0:Promise.prototype.then,"%Promise_all%":"undefined"==typeof Promise?void 0:Promise.all,"%Promise_reject%":"undefined"==typeof Promise?void 0:Promise.reject,"%Promise_resolve%":"undefined"==typeof Promise?void 0:Promise.resolve,"%Proxy%":"undefined"==typeof Proxy?void 0:Proxy,"%RangeError%":RangeError,"%RangeErrorPrototype%":RangeError.prototype,"%ReferenceError%":ReferenceError,"%ReferenceErrorPrototype%":ReferenceError.prototype,"%Reflect%":"undefined"==typeof Reflect?void 0:Reflect,"%RegExp%":RegExp,"%RegExpPrototype%":RegExp.prototype,"%Set%":"undefined"==typeof Set?void 0:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&u?p((new Set)[Symbol.iterator]()):void 0,"%SetPrototype%":"undefined"==typeof Set?void 0:Set.prototype,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?void 0:SharedArrayBuffer,"%SharedArrayBufferPrototype%":"undefined"==typeof SharedArrayBuffer?void 0:SharedArrayBuffer.prototype,"%String%":String,"%StringIteratorPrototype%":u?p(""[Symbol.iterator]()):void 0,"%StringPrototype%":String.prototype,"%Symbol%":u?Symbol:void 0,"%SymbolPrototype%":u?Symbol.prototype:void 0,"%SyntaxError%":SyntaxError,"%SyntaxErrorPrototype%":SyntaxError.prototype,"%ThrowTypeError%":a,"%TypedArray%":f,"%TypedArrayPrototype%":f?f.prototype:void 0,"%TypeError%":n,"%TypeErrorPrototype%":n.prototype,"%Uint8Array%":"undefined"==typeof Uint8Array?void 0:Uint8Array,"%Uint8ArrayPrototype%":"undefined"==typeof Uint8Array?void 0:Uint8Array.prototype,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray,"%Uint8ClampedArrayPrototype%":"undefined"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray.prototype,"%Uint16Array%":"undefined"==typeof Uint16Array?void 0:Uint16Array,"%Uint16ArrayPrototype%":"undefined"==typeof Uint16Array?void 0:Uint16Array.prototype,"%Uint32Array%":"undefined"==typeof Uint32Array?void 0:Uint32Array,"%Uint32ArrayPrototype%":"undefined"==typeof Uint32Array?void 0:Uint32Array.prototype,"%URIError%":URIError,"%URIErrorPrototype%":URIError.prototype,"%WeakMap%":"undefined"==typeof WeakMap?void 0:WeakMap,"%WeakMapPrototype%":"undefined"==typeof WeakMap?void 0:WeakMap.prototype,"%WeakSet%":"undefined"==typeof WeakSet?void 0:WeakSet,"%WeakSetPrototype%":"undefined"==typeof WeakSet?void 0:WeakSet.prototype},y=r(1).call(Function.call,String.prototype.replace),h=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,b=/\\(\\)?/g,m=function(t){var e=[];return y(t,h,(function(t,r,o,n){e[e.length]=o?y(n,b,"$1"):r||t})),e},d=function(t,e){if(!(t in l))throw new SyntaxError("intrinsic "+t+" does not exist!");if(void 0===l[t]&&!e)throw new n("intrinsic "+t+" exists, but is not available. Please file an issue!");return l[t]};t.exports=function(t,e){if("string"!=typeof t||0===t.length)throw new TypeError("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof e)throw new TypeError('"allowMissing" argument must be a boolean');for(var r=m(t),o=d("%"+(r.length>0?r[0]:"")+"%",e),s=1;s<r.length;s+=1)if(null!=o)if(i&&s+1>=r.length){var a=i(o,r[s]);if(!e&&!(r[s]in o))throw new n("base intrinsic for "+t+" exists, but the property is not available.");o=a?a.get||a.value:o[r[s]]}else o=o[r[s]];return o}},function(t,e,r){"use strict";(function(e){function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=e.Symbol,i=r(23);t.exports=function(){return"function"==typeof n&&("function"==typeof Symbol&&("symbol"===o(n("foo"))&&("symbol"===o(Symbol("bar"))&&i())))}}).call(this,r(7))},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}t.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"===o(Symbol.iterator))return!0;var t={},e=Symbol("test"),r=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var n=Object.getOwnPropertySymbols(t);if(1!==n.length||n[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var i=Object.getOwnPropertyDescriptor(t,e);if(42!==i.value||!0!==i.enumerable)return!1}return!0}},function(t,e,r){"use strict";var o=r(9),n=r(0);t.exports=function(){var t=o();return n(Object,{is:t},{is:function(){return Object.is!==t}}),t}},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=r(26),i=RegExp.prototype.exec,s=Object.getOwnPropertyDescriptor,a=Object.prototype.toString,u="function"==typeof Symbol&&"symbol"===o(Symbol.toStringTag);t.exports=function(t){if(!t||"object"!==o(t))return!1;if(!u)return"[object RegExp]"===a.call(t);var e=s(t,"lastIndex");return!(!e||!n(e,"value"))&&function(t){try{var e=t.lastIndex;return t.lastIndex=0,i.call(t),!0}catch(t){return!1}finally{t.lastIndex=e}}(t)}},function(t,e,r){"use strict";var o=r(1);t.exports=o.call(Function.call,Object.prototype.hasOwnProperty)},function(t,e,r){"use strict";var o=r(0),n=r(6),i=r(10),s=r(11),a=r(28),u=n(i);o(u,{getPolyfill:s,implementation:i,shim:a}),t.exports=u},function(t,e,r){"use strict";var o=r(0).supportsDescriptors,n=r(11),i=Object.getOwnPropertyDescriptor,s=Object.defineProperty,a=TypeError,u=Object.getPrototypeOf,p=/a/;t.exports=function(){if(!o||!u)throw new a("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");var t=n(),e=u(p),r=i(e,"flags");return r&&r.get===t||s(e,"flags",{configurable:!0,enumerable:!1,get:t}),t}},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=Date.prototype.getDay,i=Object.prototype.toString,s="function"==typeof Symbol&&"symbol"===o(Symbol.toStringTag);t.exports=function(t){return"object"===o(t)&&null!==t&&(s?function(t){try{return n.call(t),!0}catch(t){return!1}}(t):"[object Date]"===i.call(t))}},function(t,e,r){function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=r(3),i=r(12),s={attributes:{compose:function(t,e,r){"object"!==o(t)&&(t={}),"object"!==o(e)&&(e={});var n=i(!0,{},e);for(var s in r||(n=Object.keys(n).reduce((function(t,e){return null!=n[e]&&(t[e]=n[e]),t}),{})),t)void 0!==t[s]&&void 0===e[s]&&(n[s]=t[s]);return Object.keys(n).length>0?n:void 0},diff:function(t,e){"object"!==o(t)&&(t={}),"object"!==o(e)&&(e={});var r=Object.keys(t).concat(Object.keys(e)).reduce((function(r,o){return n(t[o],e[o])||(r[o]=void 0===e[o]?null:e[o]),r}),{});return Object.keys(r).length>0?r:void 0},transform:function(t,e,r){if("object"!==o(t))return e;if("object"===o(e)){if(!r)return e;var n=Object.keys(e).reduce((function(r,o){return void 0===t[o]&&(r[o]=e[o]),r}),{});return Object.keys(n).length>0?n:void 0}}},iterator:function(t){return new a(t)},length:function(t){return"number"==typeof t.delete?t.delete:"number"==typeof t.retain?t.retain:"string"==typeof t.insert?t.insert.length:1}};function a(t){this.ops=t,this.index=0,this.offset=0}a.prototype.hasNext=function(){return this.peekLength()<1/0},a.prototype.next=function(t){t||(t=1/0);var e=this.ops[this.index];if(e){var r=this.offset,o=s.length(e);if(t>=o-r?(t=o-r,this.index+=1,this.offset=0):this.offset+=t,"number"==typeof e.delete)return{delete:t};var n={};return e.attributes&&(n.attributes=e.attributes),"number"==typeof e.retain?n.retain=t:"string"==typeof e.insert?n.insert=e.insert.substr(r,t):n.insert=e.insert,n}return{retain:1/0}},a.prototype.peek=function(){return this.ops[this.index]},a.prototype.peekLength=function(){return this.ops[this.index]?s.length(this.ops[this.index])-this.offset:1/0},a.prototype.peekType=function(){return this.ops[this.index]?"number"==typeof this.ops[this.index].delete?"delete":"number"==typeof this.ops[this.index].retain?"retain":"insert":"retain"},a.prototype.rest=function(){if(this.hasNext()){if(0===this.offset)return this.ops.slice(this.index);var t=this.offset,e=this.index,r=this.next(),o=this.ops.slice(this.index);return this.offset=t,this.index=e,[r].concat(o)}return[]},t.exports=s},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=r(32),i=r(34);function s(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}e.parse=S,e.resolve=function(t,e){return S(t,!1,!0).resolve(e)},e.resolveObject=function(t,e){return t?S(t,!1,!0).resolveObject(e):e},e.format=function(t){i.isString(t)&&(t=S(t));return t instanceof s?t.format():s.prototype.format.call(t)},e.Url=s;var a=/^([a-z0-9.+-]+:)/i,u=/:[0-9]*$/,p=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,c=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),f=["'"].concat(c),l=["%","/","?",";","#"].concat(f),y=["/","?","#"],h=/^[+a-z0-9A-Z_-]{0,63}$/,b=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,m={javascript:!0,"javascript:":!0},d={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},v=r(35);function S(t,e,r){if(t&&i.isObject(t)&&t instanceof s)return t;var o=new s;return o.parse(t,e,r),o}s.prototype.parse=function(t,e,r){if(!i.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+o(t));var s=t.indexOf("?"),u=-1!==s&&s<t.indexOf("#")?"?":"#",c=t.split(u);c[0]=c[0].replace(/\\/g,"/");var S=t=c.join(u);if(S=S.trim(),!r&&1===t.split("#").length){var j=p.exec(S);if(j)return this.path=S,this.href=S,this.pathname=j[1],j[2]?(this.search=j[2],this.query=e?v.parse(this.search.substr(1)):this.search.substr(1)):e&&(this.search="",this.query={}),this}var O=a.exec(S);if(O){var w=(O=O[0]).toLowerCase();this.protocol=w,S=S.substr(O.length)}if(r||O||S.match(/^\/\/[^@\/]+@[^@\/]+/)){var x="//"===S.substr(0,2);!x||O&&d[O]||(S=S.substr(2),this.slashes=!0)}if(!d[O]&&(x||O&&!g[O])){for(var A,P,E=-1,I=0;I<y.length;I++){-1!==(k=S.indexOf(y[I]))&&(-1===E||k<E)&&(E=k)}-1!==(P=-1===E?S.lastIndexOf("@"):S.lastIndexOf("@",E))&&(A=S.slice(0,P),S=S.slice(P+1),this.auth=decodeURIComponent(A)),E=-1;for(I=0;I<l.length;I++){var k;-1!==(k=S.indexOf(l[I]))&&(-1===E||k<E)&&(E=k)}-1===E&&(E=S.length),this.host=S.slice(0,E),S=S.slice(E),this.parseHost(),this.hostname=this.hostname||"";var U="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!U)for(var R=this.hostname.split(/\./),T=(I=0,R.length);I<T;I++){var C=R[I];if(C&&!C.match(h)){for(var F="",D=0,M=C.length;D<M;D++)C.charCodeAt(D)>127?F+="x":F+=C[D];if(!F.match(h)){var N=R.slice(0,I),$=R.slice(I+1),L=C.match(b);L&&(N.push(L[1]),$.unshift(L[2])),$.length&&(S="/"+$.join(".")+S),this.hostname=N.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),U||(this.hostname=n.toASCII(this.hostname));var _=this.port?":"+this.port:"",q=this.hostname||"";this.host=q+_,this.href+=this.host,U&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==S[0]&&(S="/"+S))}if(!m[w])for(I=0,T=f.length;I<T;I++){var W=f[I];if(-1!==S.indexOf(W)){var H=encodeURIComponent(W);H===W&&(H=escape(W)),S=S.split(W).join(H)}}var z=S.indexOf("#");-1!==z&&(this.hash=S.substr(z),S=S.slice(0,z));var B=S.indexOf("?");if(-1!==B?(this.search=S.substr(B),this.query=S.substr(B+1),e&&(this.query=v.parse(this.query)),S=S.slice(0,B)):e&&(this.search="",this.query={}),S&&(this.pathname=S),g[w]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){_=this.pathname||"";var V=this.search||"";this.path=_+V}return this.href=this.format(),this},s.prototype.format=function(){var t=this.auth||"";t&&(t=(t=encodeURIComponent(t)).replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",o=this.hash||"",n=!1,s="";this.host?n=t+this.host:this.hostname&&(n=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(n+=":"+this.port)),this.query&&i.isObject(this.query)&&Object.keys(this.query).length&&(s=v.stringify(this.query));var a=this.search||s&&"?"+s||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||g[e])&&!1!==n?(n="//"+(n||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):n||(n=""),o&&"#"!==o.charAt(0)&&(o="#"+o),a&&"?"!==a.charAt(0)&&(a="?"+a),e+n+(r=r.replace(/[?#]/g,(function(t){return encodeURIComponent(t)})))+(a=a.replace("#","%23"))+o},s.prototype.resolve=function(t){return this.resolveObject(S(t,!1,!0)).format()},s.prototype.resolveObject=function(t){if(i.isString(t)){var e=new s;e.parse(t,!1,!0),t=e}for(var r=new s,o=Object.keys(this),n=0;n<o.length;n++){var a=o[n];r[a]=this[a]}if(r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol){for(var u=Object.keys(t),p=0;p<u.length;p++){var c=u[p];"protocol"!==c&&(r[c]=t[c])}return g[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r}if(t.protocol&&t.protocol!==r.protocol){if(!g[t.protocol]){for(var f=Object.keys(t),l=0;l<f.length;l++){var y=f[l];r[y]=t[y]}return r.href=r.format(),r}if(r.protocol=t.protocol,t.host||d[t.protocol])r.pathname=t.pathname;else{for(var h=(t.pathname||"").split("/");h.length&&!(t.host=h.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==h[0]&&h.unshift(""),h.length<2&&h.unshift(""),r.pathname=h.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var b=r.pathname||"",m=r.search||"";r.path=b+m}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var v=r.pathname&&"/"===r.pathname.charAt(0),S=t.host||t.pathname&&"/"===t.pathname.charAt(0),j=S||v||r.host&&t.pathname,O=j,w=r.pathname&&r.pathname.split("/")||[],x=(h=t.pathname&&t.pathname.split("/")||[],r.protocol&&!g[r.protocol]);if(x&&(r.hostname="",r.port=null,r.host&&(""===w[0]?w[0]=r.host:w.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===h[0]?h[0]=t.host:h.unshift(t.host)),t.host=null),j=j&&(""===h[0]||""===w[0])),S)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,w=h;else if(h.length)w||(w=[]),w.pop(),w=w.concat(h),r.search=t.search,r.query=t.query;else if(!i.isNullOrUndefined(t.search)){if(x)r.hostname=r.host=w.shift(),(k=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=k.shift(),r.host=r.hostname=k.shift());return r.search=t.search,r.query=t.query,i.isNull(r.pathname)&&i.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!w.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var A=w.slice(-1)[0],P=(r.host||t.host||w.length>1)&&("."===A||".."===A)||""===A,E=0,I=w.length;I>=0;I--)"."===(A=w[I])?w.splice(I,1):".."===A?(w.splice(I,1),E++):E&&(w.splice(I,1),E--);if(!j&&!O)for(;E--;E)w.unshift("..");!j||""===w[0]||w[0]&&"/"===w[0].charAt(0)||w.unshift(""),P&&"/"!==w.join("/").substr(-1)&&w.push("");var k,U=""===w[0]||w[0]&&"/"===w[0].charAt(0);x&&(r.hostname=r.host=U?"":w.length?w.shift():"",(k=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=k.shift(),r.host=r.hostname=k.shift()));return(j=j||r.host&&w.length)&&!U&&w.unshift(""),w.length?r.pathname=w.join("/"):(r.pathname=null,r.path=null),i.isNull(r.pathname)&&i.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},s.prototype.parseHost=function(){var t=this.host,e=u.exec(t);e&&(":"!==(e=e[0])&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},function(t,e,r){(function(t,o){var n;function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}
         | 
| 3 | 
            +
            /*! https://mths.be/punycode v1.4.1 by @mathias */!function(s){var a="object"==i(e)&&e&&!e.nodeType&&e,u="object"==i(t)&&t&&!t.nodeType&&t,p="object"==(void 0===o?"undefined":i(o))&&o;p.global!==p&&p.window!==p&&p.self!==p||(s=p);var c,f,l=2147483647,y=/^xn--/,h=/[^\x20-\x7E]/,b=/[\x2E\u3002\uFF0E\uFF61]/g,m={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},d=Math.floor,g=String.fromCharCode;function v(t){throw new RangeError(m[t])}function S(t,e){for(var r=t.length,o=[];r--;)o[r]=e(t[r]);return o}function j(t,e){var r=t.split("@"),o="";return r.length>1&&(o=r[0]+"@",t=r[1]),o+S((t=t.replace(b,".")).split("."),e).join(".")}function O(t){for(var e,r,o=[],n=0,i=t.length;n<i;)(e=t.charCodeAt(n++))>=55296&&e<=56319&&n<i?56320==(64512&(r=t.charCodeAt(n++)))?o.push(((1023&e)<<10)+(1023&r)+65536):(o.push(e),n--):o.push(e);return o}function w(t){return S(t,(function(t){var e="";return t>65535&&(e+=g((t-=65536)>>>10&1023|55296),t=56320|1023&t),e+=g(t)})).join("")}function x(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function A(t,e,r){var o=0;for(t=r?d(t/700):t>>1,t+=d(t/e);t>455;o+=36)t=d(t/35);return d(o+36*t/(t+38))}function P(t){var e,r,o,n,i,s,a,u,p,c,f,y=[],h=t.length,b=0,m=128,g=72;for((r=t.lastIndexOf("-"))<0&&(r=0),o=0;o<r;++o)t.charCodeAt(o)>=128&&v("not-basic"),y.push(t.charCodeAt(o));for(n=r>0?r+1:0;n<h;){for(i=b,s=1,a=36;n>=h&&v("invalid-input"),((u=(f=t.charCodeAt(n++))-48<10?f-22:f-65<26?f-65:f-97<26?f-97:36)>=36||u>d((l-b)/s))&&v("overflow"),b+=u*s,!(u<(p=a<=g?1:a>=g+26?26:a-g));a+=36)s>d(l/(c=36-p))&&v("overflow"),s*=c;g=A(b-i,e=y.length+1,0==i),d(b/e)>l-m&&v("overflow"),m+=d(b/e),b%=e,y.splice(b++,0,m)}return w(y)}function E(t){var e,r,o,n,i,s,a,u,p,c,f,y,h,b,m,S=[];for(y=(t=O(t)).length,e=128,r=0,i=72,s=0;s<y;++s)(f=t[s])<128&&S.push(g(f));for(o=n=S.length,n&&S.push("-");o<y;){for(a=l,s=0;s<y;++s)(f=t[s])>=e&&f<a&&(a=f);for(a-e>d((l-r)/(h=o+1))&&v("overflow"),r+=(a-e)*h,e=a,s=0;s<y;++s)if((f=t[s])<e&&++r>l&&v("overflow"),f==e){for(u=r,p=36;!(u<(c=p<=i?1:p>=i+26?26:p-i));p+=36)m=u-c,b=36-c,S.push(g(x(c+m%b,0))),u=d(m/b);S.push(g(x(u,0))),i=A(r,h,o==n),r=0,++o}++r,++e}return S.join("")}if(c={version:"1.4.1",ucs2:{decode:O,encode:w},decode:P,encode:E,toASCII:function(t){return j(t,(function(t){return h.test(t)?"xn--"+E(t):t}))},toUnicode:function(t){return j(t,(function(t){return y.test(t)?P(t.slice(4).toLowerCase()):t}))}},"object"==i(r(13))&&r(13))void 0===(n=function(){return c}.call(e,r,e,t))||(t.exports=n);else if(a&&u)if(t.exports==a)u.exports=c;else for(f in c)c.hasOwnProperty(f)&&(a[f]=c[f]);else s.punycode=c}(this)}).call(this,r(33)(t),r(7))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}t.exports={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"===o(t)&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}}},function(t,e,r){"use strict";e.decode=e.parse=r(36),e.encode=e.stringify=r(37)},function(t,e,r){"use strict";function o(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,e,r,i){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var u=1e3;i&&"number"==typeof i.maxKeys&&(u=i.maxKeys);var p=t.length;u>0&&p>u&&(p=u);for(var c=0;c<p;++c){var f,l,y,h,b=t[c].replace(a,"%20"),m=b.indexOf(r);m>=0?(f=b.substr(0,m),l=b.substr(m+1)):(f=b,l=""),y=decodeURIComponent(f),h=decodeURIComponent(l),o(s,y)?n(s[y])?s[y].push(h):s[y]=[s[y],h]:s[y]=h}return s};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},function(t,e,r){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var n=function(t){switch(o(t)){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,r,u){return e=e||"&",r=r||"=",null===t&&(t=void 0),"object"===o(t)?s(a(t),(function(o){var a=encodeURIComponent(n(o))+r;return i(t[o])?s(t[o],(function(t){return a+encodeURIComponent(n(t))})).join(e):a+encodeURIComponent(n(t[o]))})).join(e):u?encodeURIComponent(n(u))+r+encodeURIComponent(n(t)):""};var i=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function s(t,e){if(t.map)return t.map(e);for(var r=[],o=0;o<t.length;o++)r.push(e(t[o],o));return r}var a=Object.keys||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.push(r);return e}}])}));
         | 
| @@ -0,0 +1,74 @@ | |
| 1 | 
            +
            assignPositions = (target) ->
         | 
| 2 | 
            +
              $hasMany = $(target)
         | 
| 3 | 
            +
              return unless $hasMany.length > 0
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              $fields = $hasMany.children('.has-many-fields:not(.marked-for-destruction)')
         | 
| 6 | 
            +
              positions = $fields.find("input[name$='[position]']").map(-> this.value).get()
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              if positions.length > 0
         | 
| 9 | 
            +
                index = Math.min.apply(Math, positions) || 0
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                $fields.each((i, obj) ->
         | 
| 12 | 
            +
                  $(obj).find("input[name$='[position]']").first().val(index)
         | 
| 13 | 
            +
                  index = index + 1
         | 
| 14 | 
            +
                )
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              true
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            (this.EffectiveBootstrap || {}).effective_has_many = ($element, options) ->
         | 
| 19 | 
            +
              if options.sortable
         | 
| 20 | 
            +
                $element.sortable(
         | 
| 21 | 
            +
                  containerSelector: '.form-has-many',
         | 
| 22 | 
            +
                  itemSelector: '.has-many-fields',
         | 
| 23 | 
            +
                  handle: '.has-many-move'
         | 
| 24 | 
            +
                  placeholder: "<div class='has-many-placeholder' />",
         | 
| 25 | 
            +
                  onDrop: ($item, container, _super) =>
         | 
| 26 | 
            +
                    assignPositions(container.target)
         | 
| 27 | 
            +
                    _super($item, container)
         | 
| 28 | 
            +
                )
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            $(document).on 'click', '[data-effective-form-has-many-add]', (event) ->
         | 
| 31 | 
            +
              event.preventDefault()
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              $obj = $(event.currentTarget)
         | 
| 34 | 
            +
              $hasMany = $obj.closest('.form-has-many')
         | 
| 35 | 
            +
              return unless $hasMany.length > 0
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              uid = (new Date).valueOf()
         | 
| 38 | 
            +
              template = $obj.data('effective-form-has-many-template').replace(/HASMANYINDEX/g, uid)
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              $fields = $(template).hide().fadeIn('slow')
         | 
| 41 | 
            +
              EffectiveBootstrap.initialize($fields)
         | 
| 42 | 
            +
              $obj.closest('.has-many-links').before($fields)
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              assignPositions($hasMany)
         | 
| 45 | 
            +
              true
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            $(document).on 'click', '[data-effective-form-has-many-remove]', (event) ->
         | 
| 48 | 
            +
              event.preventDefault()
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              $obj = $(event.currentTarget)
         | 
| 51 | 
            +
              $hasMany = $obj.closest('.form-has-many')
         | 
| 52 | 
            +
              return unless $hasMany.length > 0
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              $input = $obj.siblings("input[name$='[_destroy]']").first()
         | 
| 55 | 
            +
              $fields = $obj.closest('.has-many-fields').first()
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              if $input.length > 0
         | 
| 58 | 
            +
                $input.val('true')
         | 
| 59 | 
            +
                $fields.addClass('marked-for-destruction').fadeOut('slow')
         | 
| 60 | 
            +
              else
         | 
| 61 | 
            +
                $fields.fadeOut('slow', -> this.remove())
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              assignPositions($hasMany)
         | 
| 64 | 
            +
              true
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            $(document).on 'click', '[data-effective-form-has-many-reorder]', (event) ->
         | 
| 67 | 
            +
              event.preventDefault()
         | 
| 68 | 
            +
             | 
| 69 | 
            +
              $obj = $(event.currentTarget)
         | 
| 70 | 
            +
              $hasMany = $obj.closest('.form-has-many')
         | 
| 71 | 
            +
              return unless $hasMany.length > 0
         | 
| 72 | 
            +
             | 
| 73 | 
            +
              $hasMany.toggleClass('reordering')
         | 
| 74 | 
            +
              true
         | 
| @@ -0,0 +1,696 @@ | |
| 1 | 
            +
            /* ===================================================
         | 
| 2 | 
            +
             *  jquery-sortable.js v0.9.13
         | 
| 3 | 
            +
             *  http://johnny.github.com/jquery-sortable/
         | 
| 4 | 
            +
             * ===================================================
         | 
| 5 | 
            +
             *  Copyright (c) 2012 Jonas von Andrian
         | 
| 6 | 
            +
             *  All rights reserved.
         | 
| 7 | 
            +
             *
         | 
| 8 | 
            +
             *  Redistribution and use in source and binary forms, with or without
         | 
| 9 | 
            +
             *  modification, are permitted provided that the following conditions are met:
         | 
| 10 | 
            +
             *  * Redistributions of source code must retain the above copyright
         | 
| 11 | 
            +
             *    notice, this list of conditions and the following disclaimer.
         | 
| 12 | 
            +
             *  * Redistributions in binary form must reproduce the above copyright
         | 
| 13 | 
            +
             *    notice, this list of conditions and the following disclaimer in the
         | 
| 14 | 
            +
             *    documentation and/or other materials provided with the distribution.
         | 
| 15 | 
            +
             *  * The name of the author may not be used to endorse or promote products
         | 
| 16 | 
            +
             *    derived from this software without specific prior written permission.
         | 
| 17 | 
            +
             *
         | 
| 18 | 
            +
             *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
         | 
| 19 | 
            +
             *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 20 | 
            +
             *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| 21 | 
            +
             *  DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
         | 
| 22 | 
            +
             *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
         | 
| 23 | 
            +
             *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
         | 
| 24 | 
            +
             *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
         | 
| 25 | 
            +
             *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
         | 
| 26 | 
            +
             *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
         | 
| 27 | 
            +
             *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
         | 
| 28 | 
            +
             * ========================================================== */
         | 
| 29 | 
            +
             | 
| 30 | 
            +
             | 
| 31 | 
            +
            !function ( $, window, pluginName, undefined){
         | 
| 32 | 
            +
              var containerDefaults = {
         | 
| 33 | 
            +
                // If true, items can be dragged from this container
         | 
| 34 | 
            +
                drag: true,
         | 
| 35 | 
            +
                // If true, items can be dropped onto this container
         | 
| 36 | 
            +
                drop: true,
         | 
| 37 | 
            +
                // Exclude items from being draggable, if the
         | 
| 38 | 
            +
                // selector matches the item
         | 
| 39 | 
            +
                exclude: "",
         | 
| 40 | 
            +
                // If true, search for nested containers within an item.If you nest containers,
         | 
| 41 | 
            +
                // either the original selector with which you call the plugin must only match the top containers,
         | 
| 42 | 
            +
                // or you need to specify a group (see the bootstrap nav example)
         | 
| 43 | 
            +
                nested: true,
         | 
| 44 | 
            +
                // If true, the items are assumed to be arranged vertically
         | 
| 45 | 
            +
                vertical: true
         | 
| 46 | 
            +
              }, // end container defaults
         | 
| 47 | 
            +
              groupDefaults = {
         | 
| 48 | 
            +
                // This is executed after the placeholder has been moved.
         | 
| 49 | 
            +
                // $closestItemOrContainer contains the closest item, the placeholder
         | 
| 50 | 
            +
                // has been put at or the closest empty Container, the placeholder has
         | 
| 51 | 
            +
                // been appended to.
         | 
| 52 | 
            +
                afterMove: function ($placeholder, container, $closestItemOrContainer) {
         | 
| 53 | 
            +
                },
         | 
| 54 | 
            +
                // The exact css path between the container and its items, e.g. "> tbody"
         | 
| 55 | 
            +
                containerPath: "",
         | 
| 56 | 
            +
                // The css selector of the containers
         | 
| 57 | 
            +
                containerSelector: "ol, ul",
         | 
| 58 | 
            +
                // Distance the mouse has to travel to start dragging
         | 
| 59 | 
            +
                distance: 0,
         | 
| 60 | 
            +
                // Time in milliseconds after mousedown until dragging should start.
         | 
| 61 | 
            +
                // This option can be used to prevent unwanted drags when clicking on an element.
         | 
| 62 | 
            +
                delay: 0,
         | 
| 63 | 
            +
                // The css selector of the drag handle
         | 
| 64 | 
            +
                handle: "",
         | 
| 65 | 
            +
                // The exact css path between the item and its subcontainers.
         | 
| 66 | 
            +
                // It should only match the immediate items of a container.
         | 
| 67 | 
            +
                // No item of a subcontainer should be matched. E.g. for ol>div>li the itemPath is "> div"
         | 
| 68 | 
            +
                itemPath: "",
         | 
| 69 | 
            +
                // The css selector of the items
         | 
| 70 | 
            +
                itemSelector: "li",
         | 
| 71 | 
            +
                // The class given to "body" while an item is being dragged
         | 
| 72 | 
            +
                bodyClass: "dragging",
         | 
| 73 | 
            +
                // The class giving to an item while being dragged
         | 
| 74 | 
            +
                draggedClass: "dragged",
         | 
| 75 | 
            +
                // Check if the dragged item may be inside the container.
         | 
| 76 | 
            +
                // Use with care, since the search for a valid container entails a depth first search
         | 
| 77 | 
            +
                // and may be quite expensive.
         | 
| 78 | 
            +
                isValidTarget: function ($item, container) {
         | 
| 79 | 
            +
                  return true
         | 
| 80 | 
            +
                },
         | 
| 81 | 
            +
                // Executed before onDrop if placeholder is detached.
         | 
| 82 | 
            +
                // This happens if pullPlaceholder is set to false and the drop occurs outside a container.
         | 
| 83 | 
            +
                onCancel: function ($item, container, _super, event) {
         | 
| 84 | 
            +
                },
         | 
| 85 | 
            +
                // Executed at the beginning of a mouse move event.
         | 
| 86 | 
            +
                // The Placeholder has not been moved yet.
         | 
| 87 | 
            +
                onDrag: function ($item, position, _super, event) {
         | 
| 88 | 
            +
                  $item.css(position)
         | 
| 89 | 
            +
                },
         | 
| 90 | 
            +
                // Called after the drag has been started,
         | 
| 91 | 
            +
                // that is the mouse button is being held down and
         | 
| 92 | 
            +
                // the mouse is moving.
         | 
| 93 | 
            +
                // The container is the closest initialized container.
         | 
| 94 | 
            +
                // Therefore it might not be the container, that actually contains the item.
         | 
| 95 | 
            +
                onDragStart: function ($item, container, _super, event) {
         | 
| 96 | 
            +
                  $item.css({
         | 
| 97 | 
            +
                    height: $item.outerHeight(),
         | 
| 98 | 
            +
                    width: $item.outerWidth()
         | 
| 99 | 
            +
                  })
         | 
| 100 | 
            +
                  $item.addClass(container.group.options.draggedClass)
         | 
| 101 | 
            +
                  $("body").addClass(container.group.options.bodyClass)
         | 
| 102 | 
            +
                },
         | 
| 103 | 
            +
                // Called when the mouse button is being released
         | 
| 104 | 
            +
                onDrop: function ($item, container, _super, event) {
         | 
| 105 | 
            +
                  $item.removeClass(container.group.options.draggedClass).removeAttr("style")
         | 
| 106 | 
            +
                  $("body").removeClass(container.group.options.bodyClass)
         | 
| 107 | 
            +
                  // START MONKEY PATCH (for submitting form when heading positions are changed on touchscreen)
         | 
| 108 | 
            +
                  $item.trigger('movimento:drop:complete', $item)
         | 
| 109 | 
            +
                  // END MONKEY PATCH
         | 
| 110 | 
            +
                },
         | 
| 111 | 
            +
                // Called on mousedown. If falsy value is returned, the dragging will not start.
         | 
| 112 | 
            +
                // Ignore if element clicked is input, select or textarea
         | 
| 113 | 
            +
                onMousedown: function ($item, _super, event) {
         | 
| 114 | 
            +
                  if (!event.target.nodeName.match(/^(input|select|textarea)$/i)) {
         | 
| 115 | 
            +
                    event.preventDefault()
         | 
| 116 | 
            +
                    return true
         | 
| 117 | 
            +
                  }
         | 
| 118 | 
            +
                },
         | 
| 119 | 
            +
                // The class of the placeholder (must match placeholder option markup)
         | 
| 120 | 
            +
                placeholderClass: "placeholder",
         | 
| 121 | 
            +
                // Template for the placeholder. Can be any valid jQuery input
         | 
| 122 | 
            +
                // e.g. a string, a DOM element.
         | 
| 123 | 
            +
                // The placeholder must have the class "placeholder"
         | 
| 124 | 
            +
                placeholder: '<li class="placeholder"></li>',
         | 
| 125 | 
            +
                // If true, the position of the placeholder is calculated on every mousemove.
         | 
| 126 | 
            +
                // If false, it is only calculated when the mouse is above a container.
         | 
| 127 | 
            +
                pullPlaceholder: true,
         | 
| 128 | 
            +
                // Specifies serialization of the container group.
         | 
| 129 | 
            +
                // The pair $parent/$children is either container/items or item/subcontainers.
         | 
| 130 | 
            +
                serialize: function ($parent, $children, parentIsContainer) {
         | 
| 131 | 
            +
                  var result = $.extend({}, $parent.data())
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                  if(parentIsContainer)
         | 
| 134 | 
            +
                    return [$children]
         | 
| 135 | 
            +
                  else if ($children[0]){
         | 
| 136 | 
            +
                    result.children = $children
         | 
| 137 | 
            +
                  }
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                  delete result.subContainers
         | 
| 140 | 
            +
                  delete result.sortable
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                  return result
         | 
| 143 | 
            +
                },
         | 
| 144 | 
            +
                // Set tolerance while dragging. Positive values decrease sensitivity,
         | 
| 145 | 
            +
                // negative values increase it.
         | 
| 146 | 
            +
                tolerance: 0
         | 
| 147 | 
            +
              }, // end group defaults
         | 
| 148 | 
            +
              containerGroups = {},
         | 
| 149 | 
            +
              groupCounter = 0,
         | 
| 150 | 
            +
              emptyBox = {
         | 
| 151 | 
            +
                left: 0,
         | 
| 152 | 
            +
                top: 0,
         | 
| 153 | 
            +
                bottom: 0,
         | 
| 154 | 
            +
                right:0
         | 
| 155 | 
            +
              },
         | 
| 156 | 
            +
              eventNames = {
         | 
| 157 | 
            +
                start: "touchstart.sortable mousedown.sortable",
         | 
| 158 | 
            +
                drop: "touchend.sortable touchcancel.sortable mouseup.sortable",
         | 
| 159 | 
            +
                drag: "touchmove.sortable mousemove.sortable",
         | 
| 160 | 
            +
                scroll: "scroll.sortable"
         | 
| 161 | 
            +
              },
         | 
| 162 | 
            +
              subContainerKey = "subContainers"
         | 
| 163 | 
            +
             | 
| 164 | 
            +
              /*
         | 
| 165 | 
            +
               * a is Array [left, right, top, bottom]
         | 
| 166 | 
            +
               * b is array [left, top]
         | 
| 167 | 
            +
               */
         | 
| 168 | 
            +
              function d(a,b) {
         | 
| 169 | 
            +
                var x = Math.max(0, a[0] - b[0], b[0] - a[1]),
         | 
| 170 | 
            +
                y = Math.max(0, a[2] - b[1], b[1] - a[3])
         | 
| 171 | 
            +
                return x+y;
         | 
| 172 | 
            +
              }
         | 
| 173 | 
            +
             | 
| 174 | 
            +
              function setDimensions(array, dimensions, tolerance, useOffset) {
         | 
| 175 | 
            +
                var i = array.length,
         | 
| 176 | 
            +
                offsetMethod = useOffset ? "offset" : "position"
         | 
| 177 | 
            +
                tolerance = tolerance || 0
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                while(i--){
         | 
| 180 | 
            +
                  var el = array[i].el ? array[i].el : $(array[i]),
         | 
| 181 | 
            +
                  // use fitting method
         | 
| 182 | 
            +
                  pos = el[offsetMethod]()
         | 
| 183 | 
            +
                  pos.left += parseInt(el.css('margin-left'), 10)
         | 
| 184 | 
            +
                  pos.top += parseInt(el.css('margin-top'),10)
         | 
| 185 | 
            +
                  dimensions[i] = [
         | 
| 186 | 
            +
                    pos.left - tolerance,
         | 
| 187 | 
            +
                    pos.left + el.outerWidth() + tolerance,
         | 
| 188 | 
            +
                    pos.top - tolerance,
         | 
| 189 | 
            +
                    pos.top + el.outerHeight() + tolerance
         | 
| 190 | 
            +
                  ]
         | 
| 191 | 
            +
                }
         | 
| 192 | 
            +
              }
         | 
| 193 | 
            +
             | 
| 194 | 
            +
              function getRelativePosition(pointer, element) {
         | 
| 195 | 
            +
                var offset = element.offset()
         | 
| 196 | 
            +
                return {
         | 
| 197 | 
            +
                  left: pointer.left - offset.left,
         | 
| 198 | 
            +
                  top: pointer.top - offset.top
         | 
| 199 | 
            +
                }
         | 
| 200 | 
            +
              }
         | 
| 201 | 
            +
             | 
| 202 | 
            +
              function sortByDistanceDesc(dimensions, pointer, lastPointer) {
         | 
| 203 | 
            +
                pointer = [pointer.left, pointer.top]
         | 
| 204 | 
            +
                lastPointer = lastPointer && [lastPointer.left, lastPointer.top]
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                var dim,
         | 
| 207 | 
            +
                i = dimensions.length,
         | 
| 208 | 
            +
                distances = []
         | 
| 209 | 
            +
             | 
| 210 | 
            +
                while(i--){
         | 
| 211 | 
            +
                  dim = dimensions[i]
         | 
| 212 | 
            +
                  distances[i] = [i,d(dim,pointer), lastPointer && d(dim, lastPointer)]
         | 
| 213 | 
            +
                }
         | 
| 214 | 
            +
                distances = distances.sort(function  (a,b) {
         | 
| 215 | 
            +
                  return b[1] - a[1] || b[2] - a[2] || b[0] - a[0]
         | 
| 216 | 
            +
                })
         | 
| 217 | 
            +
             | 
| 218 | 
            +
                // last entry is the closest
         | 
| 219 | 
            +
                return distances
         | 
| 220 | 
            +
              }
         | 
| 221 | 
            +
             | 
| 222 | 
            +
              function ContainerGroup(options) {
         | 
| 223 | 
            +
                this.options = $.extend({}, groupDefaults, options)
         | 
| 224 | 
            +
                this.containers = []
         | 
| 225 | 
            +
             | 
| 226 | 
            +
                if(!this.options.rootGroup){
         | 
| 227 | 
            +
                  this.scrollProxy = $.proxy(this.scroll, this)
         | 
| 228 | 
            +
                  this.dragProxy = $.proxy(this.drag, this)
         | 
| 229 | 
            +
                  this.dropProxy = $.proxy(this.drop, this)
         | 
| 230 | 
            +
                  this.placeholder = $(this.options.placeholder)
         | 
| 231 | 
            +
             | 
| 232 | 
            +
                  if(!options.isValidTarget)
         | 
| 233 | 
            +
                    this.options.isValidTarget = undefined
         | 
| 234 | 
            +
                }
         | 
| 235 | 
            +
              }
         | 
| 236 | 
            +
             | 
| 237 | 
            +
              ContainerGroup.get = function  (options) {
         | 
| 238 | 
            +
                if(!containerGroups[options.group]) {
         | 
| 239 | 
            +
                  if(options.group === undefined)
         | 
| 240 | 
            +
                    options.group = groupCounter ++
         | 
| 241 | 
            +
             | 
| 242 | 
            +
                  containerGroups[options.group] = new ContainerGroup(options)
         | 
| 243 | 
            +
                }
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                return containerGroups[options.group]
         | 
| 246 | 
            +
              }
         | 
| 247 | 
            +
             | 
| 248 | 
            +
              ContainerGroup.prototype = {
         | 
| 249 | 
            +
                dragInit: function  (e, itemContainer) {
         | 
| 250 | 
            +
                  this.$document = $(itemContainer.el[0].ownerDocument)
         | 
| 251 | 
            +
             | 
| 252 | 
            +
                  // get item to drag
         | 
| 253 | 
            +
                  var closestItem = $(e.target).closest(this.options.itemSelector);
         | 
| 254 | 
            +
                  // using the length of this item, prevents the plugin from being started if there is no handle being clicked on.
         | 
| 255 | 
            +
                  // this may also be helpful in instantiating multidrag.
         | 
| 256 | 
            +
                  if (closestItem.length) {
         | 
| 257 | 
            +
                    this.item = closestItem;
         | 
| 258 | 
            +
                    this.itemContainer = itemContainer;
         | 
| 259 | 
            +
                    if (this.item.is(this.options.exclude) || !this.options.onMousedown(this.item, groupDefaults.onMousedown, e)) {
         | 
| 260 | 
            +
                        return;
         | 
| 261 | 
            +
                    }
         | 
| 262 | 
            +
                    this.setPointer(e);
         | 
| 263 | 
            +
                    this.toggleListeners('on');
         | 
| 264 | 
            +
                    this.setupDelayTimer();
         | 
| 265 | 
            +
                    this.dragInitDone = true;
         | 
| 266 | 
            +
                  }
         | 
| 267 | 
            +
                },
         | 
| 268 | 
            +
                drag: function  (e) {
         | 
| 269 | 
            +
                  if(!this.dragging){
         | 
| 270 | 
            +
                    if(!this.distanceMet(e) || !this.delayMet)
         | 
| 271 | 
            +
                      return
         | 
| 272 | 
            +
             | 
| 273 | 
            +
                    this.options.onDragStart(this.item, this.itemContainer, groupDefaults.onDragStart, e)
         | 
| 274 | 
            +
                    this.item.before(this.placeholder)
         | 
| 275 | 
            +
                    this.dragging = true
         | 
| 276 | 
            +
                  }
         | 
| 277 | 
            +
             | 
| 278 | 
            +
                  this.setPointer(e)
         | 
| 279 | 
            +
                  // place item under the cursor
         | 
| 280 | 
            +
                  this.options.onDrag(this.item,
         | 
| 281 | 
            +
                                      getRelativePosition(this.pointer, this.item.offsetParent()),
         | 
| 282 | 
            +
                                      groupDefaults.onDrag,
         | 
| 283 | 
            +
                                      e)
         | 
| 284 | 
            +
             | 
| 285 | 
            +
                  var p = this.getPointer(e),
         | 
| 286 | 
            +
                  box = this.sameResultBox,
         | 
| 287 | 
            +
                  t = this.options.tolerance
         | 
| 288 | 
            +
             | 
| 289 | 
            +
                  if(!box || box.top - t > p.top || box.bottom + t < p.top || box.left - t > p.left || box.right + t < p.left)
         | 
| 290 | 
            +
                    if(!this.searchValidTarget()){
         | 
| 291 | 
            +
                      this.placeholder.detach()
         | 
| 292 | 
            +
                      this.lastAppendedItem = undefined
         | 
| 293 | 
            +
                    }
         | 
| 294 | 
            +
                },
         | 
| 295 | 
            +
                drop: function  (e) {
         | 
| 296 | 
            +
                  this.toggleListeners('off')
         | 
| 297 | 
            +
             | 
| 298 | 
            +
                  this.dragInitDone = false
         | 
| 299 | 
            +
             | 
| 300 | 
            +
                  if(this.dragging){
         | 
| 301 | 
            +
                    // processing Drop, check if placeholder is detached
         | 
| 302 | 
            +
                    if(this.placeholder.closest("html")[0]){
         | 
| 303 | 
            +
                      this.placeholder.before(this.item).detach()
         | 
| 304 | 
            +
                    } else {
         | 
| 305 | 
            +
                      this.options.onCancel(this.item, this.itemContainer, groupDefaults.onCancel, e)
         | 
| 306 | 
            +
                    }
         | 
| 307 | 
            +
                    this.options.onDrop(this.item, this.getContainer(this.item), groupDefaults.onDrop, e)
         | 
| 308 | 
            +
             | 
| 309 | 
            +
                    // cleanup
         | 
| 310 | 
            +
                    this.clearDimensions()
         | 
| 311 | 
            +
                    this.clearOffsetParent()
         | 
| 312 | 
            +
                    this.lastAppendedItem = this.sameResultBox = undefined
         | 
| 313 | 
            +
                    this.dragging = false
         | 
| 314 | 
            +
                  }
         | 
| 315 | 
            +
                },
         | 
| 316 | 
            +
                searchValidTarget: function  (pointer, lastPointer) {
         | 
| 317 | 
            +
                  if(!pointer){
         | 
| 318 | 
            +
                    pointer = this.relativePointer || this.pointer
         | 
| 319 | 
            +
                    lastPointer = this.lastRelativePointer || this.lastPointer
         | 
| 320 | 
            +
                  }
         | 
| 321 | 
            +
             | 
| 322 | 
            +
                  var distances = sortByDistanceDesc(this.getContainerDimensions(),
         | 
| 323 | 
            +
                                                     pointer,
         | 
| 324 | 
            +
                                                     lastPointer),
         | 
| 325 | 
            +
                  i = distances.length
         | 
| 326 | 
            +
             | 
| 327 | 
            +
                  while(i--){
         | 
| 328 | 
            +
                    var index = distances[i][0],
         | 
| 329 | 
            +
                    distance = distances[i][1]
         | 
| 330 | 
            +
             | 
| 331 | 
            +
                    if(!distance || this.options.pullPlaceholder){
         | 
| 332 | 
            +
                      var container = this.containers[index]
         | 
| 333 | 
            +
                      if(!container.disabled){
         | 
| 334 | 
            +
                        if(!this.$getOffsetParent()){
         | 
| 335 | 
            +
                          var offsetParent = container.getItemOffsetParent()
         | 
| 336 | 
            +
                          pointer = getRelativePosition(pointer, offsetParent)
         | 
| 337 | 
            +
                          lastPointer = getRelativePosition(lastPointer, offsetParent)
         | 
| 338 | 
            +
                        }
         | 
| 339 | 
            +
                        if(container.searchValidTarget(pointer, lastPointer))
         | 
| 340 | 
            +
                          return true
         | 
| 341 | 
            +
                      }
         | 
| 342 | 
            +
                    }
         | 
| 343 | 
            +
                  }
         | 
| 344 | 
            +
                  if(this.sameResultBox)
         | 
| 345 | 
            +
                    this.sameResultBox = undefined
         | 
| 346 | 
            +
                },
         | 
| 347 | 
            +
                movePlaceholder: function  (container, item, method, sameResultBox) {
         | 
| 348 | 
            +
                  var lastAppendedItem = this.lastAppendedItem
         | 
| 349 | 
            +
                  if(!sameResultBox && lastAppendedItem && lastAppendedItem[0] === item[0])
         | 
| 350 | 
            +
                    return;
         | 
| 351 | 
            +
             | 
| 352 | 
            +
                  item[method](this.placeholder)
         | 
| 353 | 
            +
                  this.lastAppendedItem = item
         | 
| 354 | 
            +
                  this.sameResultBox = sameResultBox
         | 
| 355 | 
            +
                  this.options.afterMove(this.placeholder, container, item)
         | 
| 356 | 
            +
                },
         | 
| 357 | 
            +
                getContainerDimensions: function  () {
         | 
| 358 | 
            +
                  if(!this.containerDimensions)
         | 
| 359 | 
            +
                    setDimensions(this.containers, this.containerDimensions = [], this.options.tolerance, !this.$getOffsetParent())
         | 
| 360 | 
            +
                  return this.containerDimensions
         | 
| 361 | 
            +
                },
         | 
| 362 | 
            +
                getContainer: function  (element) {
         | 
| 363 | 
            +
                  return element.closest(this.options.containerSelector).data(pluginName)
         | 
| 364 | 
            +
                },
         | 
| 365 | 
            +
                $getOffsetParent: function  () {
         | 
| 366 | 
            +
                  if(this.offsetParent === undefined){
         | 
| 367 | 
            +
                    var i = this.containers.length - 1,
         | 
| 368 | 
            +
                    offsetParent = this.containers[i].getItemOffsetParent()
         | 
| 369 | 
            +
             | 
| 370 | 
            +
                    if(!this.options.rootGroup){
         | 
| 371 | 
            +
                      while(i--){
         | 
| 372 | 
            +
                        if(offsetParent[0] != this.containers[i].getItemOffsetParent()[0]){
         | 
| 373 | 
            +
                          // If every container has the same offset parent,
         | 
| 374 | 
            +
                          // use position() which is relative to this parent,
         | 
| 375 | 
            +
                          // otherwise use offset()
         | 
| 376 | 
            +
                          // compare #setDimensions
         | 
| 377 | 
            +
                          offsetParent = false
         | 
| 378 | 
            +
                          break;
         | 
| 379 | 
            +
                        }
         | 
| 380 | 
            +
                      }
         | 
| 381 | 
            +
                    }
         | 
| 382 | 
            +
             | 
| 383 | 
            +
                    this.offsetParent = offsetParent
         | 
| 384 | 
            +
                  }
         | 
| 385 | 
            +
                  return this.offsetParent
         | 
| 386 | 
            +
                },
         | 
| 387 | 
            +
                setPointer: function (e) {
         | 
| 388 | 
            +
                  var pointer = this.getPointer(e)
         | 
| 389 | 
            +
             | 
| 390 | 
            +
                  if(this.$getOffsetParent()){
         | 
| 391 | 
            +
                    var relativePointer = getRelativePosition(pointer, this.$getOffsetParent())
         | 
| 392 | 
            +
                    this.lastRelativePointer = this.relativePointer
         | 
| 393 | 
            +
                    this.relativePointer = relativePointer
         | 
| 394 | 
            +
                  }
         | 
| 395 | 
            +
             | 
| 396 | 
            +
                  this.lastPointer = this.pointer
         | 
| 397 | 
            +
                  this.pointer = pointer
         | 
| 398 | 
            +
                },
         | 
| 399 | 
            +
                distanceMet: function (e) {
         | 
| 400 | 
            +
                  var currentPointer = this.getPointer(e)
         | 
| 401 | 
            +
                  return (Math.max(
         | 
| 402 | 
            +
                    Math.abs(this.pointer.left - currentPointer.left),
         | 
| 403 | 
            +
                    Math.abs(this.pointer.top - currentPointer.top)
         | 
| 404 | 
            +
                  ) >= this.options.distance)
         | 
| 405 | 
            +
                },
         | 
| 406 | 
            +
                getPointer: function(e) {
         | 
| 407 | 
            +
                  var o = e.originalEvent || e.originalEvent.touches && e.originalEvent.touches[0]
         | 
| 408 | 
            +
                  return {
         | 
| 409 | 
            +
                    left: e.pageX || o.pageX,
         | 
| 410 | 
            +
                    top: e.pageY || o.pageY
         | 
| 411 | 
            +
                  }
         | 
| 412 | 
            +
                },
         | 
| 413 | 
            +
                setupDelayTimer: function () {
         | 
| 414 | 
            +
                  var that = this
         | 
| 415 | 
            +
                  this.delayMet = !this.options.delay
         | 
| 416 | 
            +
             | 
| 417 | 
            +
                  // init delay timer if needed
         | 
| 418 | 
            +
                  if (!this.delayMet) {
         | 
| 419 | 
            +
                    clearTimeout(this._mouseDelayTimer);
         | 
| 420 | 
            +
                    this._mouseDelayTimer = setTimeout(function() {
         | 
| 421 | 
            +
                      that.delayMet = true
         | 
| 422 | 
            +
                    }, this.options.delay)
         | 
| 423 | 
            +
                  }
         | 
| 424 | 
            +
                },
         | 
| 425 | 
            +
                scroll: function  (e) {
         | 
| 426 | 
            +
                  this.clearDimensions()
         | 
| 427 | 
            +
                  this.clearOffsetParent() // TODO is this needed?
         | 
| 428 | 
            +
                },
         | 
| 429 | 
            +
                toggleListeners: function (method) {
         | 
| 430 | 
            +
                  var that = this,
         | 
| 431 | 
            +
                  events = ['drag','drop','scroll']
         | 
| 432 | 
            +
             | 
| 433 | 
            +
                  $.each(events,function  (i,event) {
         | 
| 434 | 
            +
                    that.$document[method](eventNames[event], that[event + 'Proxy'])
         | 
| 435 | 
            +
                  })
         | 
| 436 | 
            +
                },
         | 
| 437 | 
            +
                clearOffsetParent: function () {
         | 
| 438 | 
            +
                  this.offsetParent = undefined
         | 
| 439 | 
            +
                },
         | 
| 440 | 
            +
                // Recursively clear container and item dimensions
         | 
| 441 | 
            +
                clearDimensions: function  () {
         | 
| 442 | 
            +
                  this.traverse(function(object){
         | 
| 443 | 
            +
                    object._clearDimensions()
         | 
| 444 | 
            +
                  })
         | 
| 445 | 
            +
                },
         | 
| 446 | 
            +
                traverse: function(callback) {
         | 
| 447 | 
            +
                  callback(this)
         | 
| 448 | 
            +
                  var i = this.containers.length
         | 
| 449 | 
            +
                  while(i--){
         | 
| 450 | 
            +
                    this.containers[i].traverse(callback)
         | 
| 451 | 
            +
                  }
         | 
| 452 | 
            +
                },
         | 
| 453 | 
            +
                _clearDimensions: function(){
         | 
| 454 | 
            +
                  this.containerDimensions = undefined
         | 
| 455 | 
            +
                },
         | 
| 456 | 
            +
                _destroy: function () {
         | 
| 457 | 
            +
                  containerGroups[this.options.group] = undefined
         | 
| 458 | 
            +
                }
         | 
| 459 | 
            +
              }
         | 
| 460 | 
            +
             | 
| 461 | 
            +
              function Container(element, options) {
         | 
| 462 | 
            +
                this.el = element
         | 
| 463 | 
            +
                this.options = $.extend( {}, containerDefaults, options)
         | 
| 464 | 
            +
             | 
| 465 | 
            +
                this.group = ContainerGroup.get(this.options)
         | 
| 466 | 
            +
                this.rootGroup = this.options.rootGroup || this.group
         | 
| 467 | 
            +
                this.handle = this.rootGroup.options.handle || this.rootGroup.options.itemSelector
         | 
| 468 | 
            +
             | 
| 469 | 
            +
                var itemPath = this.rootGroup.options.itemPath
         | 
| 470 | 
            +
                this.target = itemPath ? this.el.find(itemPath) : this.el
         | 
| 471 | 
            +
             | 
| 472 | 
            +
                this.target.on(eventNames.start, this.handle, $.proxy(this.dragInit, this))
         | 
| 473 | 
            +
             | 
| 474 | 
            +
                if(this.options.drop)
         | 
| 475 | 
            +
                  this.group.containers.push(this)
         | 
| 476 | 
            +
              }
         | 
| 477 | 
            +
             | 
| 478 | 
            +
              Container.prototype = {
         | 
| 479 | 
            +
                dragInit: function  (e) {
         | 
| 480 | 
            +
                  var rootGroup = this.rootGroup
         | 
| 481 | 
            +
             | 
| 482 | 
            +
                  if( !this.disabled &&
         | 
| 483 | 
            +
                      !rootGroup.dragInitDone &&
         | 
| 484 | 
            +
                      this.options.drag &&
         | 
| 485 | 
            +
                      this.isValidDrag(e)) {
         | 
| 486 | 
            +
                    rootGroup.dragInit(e, this)
         | 
| 487 | 
            +
                  }
         | 
| 488 | 
            +
                },
         | 
| 489 | 
            +
                isValidDrag: function(e) {
         | 
| 490 | 
            +
                  return e.which == 1 ||
         | 
| 491 | 
            +
                    e.type == "touchstart" && e.originalEvent.touches.length == 1
         | 
| 492 | 
            +
                },
         | 
| 493 | 
            +
                searchValidTarget: function  (pointer, lastPointer) {
         | 
| 494 | 
            +
                  var distances = sortByDistanceDesc(this.getItemDimensions(),
         | 
| 495 | 
            +
                                                     pointer,
         | 
| 496 | 
            +
                                                     lastPointer),
         | 
| 497 | 
            +
                  i = distances.length,
         | 
| 498 | 
            +
                  rootGroup = this.rootGroup,
         | 
| 499 | 
            +
                  validTarget = !rootGroup.options.isValidTarget ||
         | 
| 500 | 
            +
                    rootGroup.options.isValidTarget(rootGroup.item, this)
         | 
| 501 | 
            +
             | 
| 502 | 
            +
                  if(!i && validTarget){
         | 
| 503 | 
            +
                    rootGroup.movePlaceholder(this, this.target, "append")
         | 
| 504 | 
            +
                    return true
         | 
| 505 | 
            +
                  } else
         | 
| 506 | 
            +
                    while(i--){
         | 
| 507 | 
            +
                      var index = distances[i][0],
         | 
| 508 | 
            +
                      distance = distances[i][1]
         | 
| 509 | 
            +
                      if(!distance && this.hasChildGroup(index)){
         | 
| 510 | 
            +
                        var found = this.getContainerGroup(index).searchValidTarget(pointer, lastPointer)
         | 
| 511 | 
            +
                        if(found)
         | 
| 512 | 
            +
                          return true
         | 
| 513 | 
            +
                      }
         | 
| 514 | 
            +
                      else if(validTarget){
         | 
| 515 | 
            +
                        this.movePlaceholder(index, pointer)
         | 
| 516 | 
            +
                        return true
         | 
| 517 | 
            +
                      }
         | 
| 518 | 
            +
                    }
         | 
| 519 | 
            +
                },
         | 
| 520 | 
            +
                movePlaceholder: function  (index, pointer) {
         | 
| 521 | 
            +
                  var item = $(this.items[index]),
         | 
| 522 | 
            +
                  dim = this.itemDimensions[index],
         | 
| 523 | 
            +
                  method = "after",
         | 
| 524 | 
            +
                  width = item.outerWidth(),
         | 
| 525 | 
            +
                  height = item.outerHeight(),
         | 
| 526 | 
            +
                  offset = item.offset(),
         | 
| 527 | 
            +
                  sameResultBox = {
         | 
| 528 | 
            +
                    left: offset.left,
         | 
| 529 | 
            +
                    right: offset.left + width,
         | 
| 530 | 
            +
                    top: offset.top,
         | 
| 531 | 
            +
                    bottom: offset.top + height
         | 
| 532 | 
            +
                  }
         | 
| 533 | 
            +
                  if(this.options.vertical){
         | 
| 534 | 
            +
                    var yCenter = (dim[2] + dim[3]) / 2,
         | 
| 535 | 
            +
                    inUpperHalf = pointer.top <= yCenter
         | 
| 536 | 
            +
                    if(inUpperHalf){
         | 
| 537 | 
            +
                      method = "before"
         | 
| 538 | 
            +
                      sameResultBox.bottom -= height / 2
         | 
| 539 | 
            +
                    } else
         | 
| 540 | 
            +
                      sameResultBox.top += height / 2
         | 
| 541 | 
            +
                  } else {
         | 
| 542 | 
            +
                    var xCenter = (dim[0] + dim[1]) / 2,
         | 
| 543 | 
            +
                    inLeftHalf = pointer.left <= xCenter
         | 
| 544 | 
            +
                    if(inLeftHalf){
         | 
| 545 | 
            +
                      method = "before"
         | 
| 546 | 
            +
                      sameResultBox.right -= width / 2
         | 
| 547 | 
            +
                    } else
         | 
| 548 | 
            +
                      sameResultBox.left += width / 2
         | 
| 549 | 
            +
                  }
         | 
| 550 | 
            +
                  if(this.hasChildGroup(index))
         | 
| 551 | 
            +
                    sameResultBox = emptyBox
         | 
| 552 | 
            +
                  this.rootGroup.movePlaceholder(this, item, method, sameResultBox)
         | 
| 553 | 
            +
                },
         | 
| 554 | 
            +
                getItemDimensions: function  () {
         | 
| 555 | 
            +
                  if(!this.itemDimensions){
         | 
| 556 | 
            +
                    this.items = this.$getChildren(this.el, "item").filter(
         | 
| 557 | 
            +
                      ":not(." + this.group.options.placeholderClass + ", ." + this.group.options.draggedClass + ")"
         | 
| 558 | 
            +
                    ).get()
         | 
| 559 | 
            +
                    setDimensions(this.items, this.itemDimensions = [], this.options.tolerance)
         | 
| 560 | 
            +
                  }
         | 
| 561 | 
            +
                  return this.itemDimensions
         | 
| 562 | 
            +
                },
         | 
| 563 | 
            +
                getItemOffsetParent: function  () {
         | 
| 564 | 
            +
                  var offsetParent,
         | 
| 565 | 
            +
                  el = this.el
         | 
| 566 | 
            +
                  // Since el might be empty we have to check el itself and
         | 
| 567 | 
            +
                  // can not do something like el.children().first().offsetParent()
         | 
| 568 | 
            +
                  if(el.css("position") === "relative" || el.css("position") === "absolute"  || el.css("position") === "fixed")
         | 
| 569 | 
            +
                    offsetParent = el
         | 
| 570 | 
            +
                  else
         | 
| 571 | 
            +
                    offsetParent = el.offsetParent()
         | 
| 572 | 
            +
                  return offsetParent
         | 
| 573 | 
            +
                },
         | 
| 574 | 
            +
                hasChildGroup: function (index) {
         | 
| 575 | 
            +
                  return this.options.nested && this.getContainerGroup(index)
         | 
| 576 | 
            +
                },
         | 
| 577 | 
            +
                getContainerGroup: function  (index) {
         | 
| 578 | 
            +
                  var childGroup = $.data(this.items[index], subContainerKey)
         | 
| 579 | 
            +
                  if( childGroup === undefined){
         | 
| 580 | 
            +
                    var childContainers = this.$getChildren(this.items[index], "container")
         | 
| 581 | 
            +
                    childGroup = false
         | 
| 582 | 
            +
             | 
| 583 | 
            +
                    if(childContainers[0]){
         | 
| 584 | 
            +
                      var options = $.extend({}, this.options, {
         | 
| 585 | 
            +
                        rootGroup: this.rootGroup,
         | 
| 586 | 
            +
                        group: groupCounter ++
         | 
| 587 | 
            +
                      })
         | 
| 588 | 
            +
                      childGroup = childContainers[pluginName](options).data(pluginName).group
         | 
| 589 | 
            +
                    }
         | 
| 590 | 
            +
                    $.data(this.items[index], subContainerKey, childGroup)
         | 
| 591 | 
            +
                  }
         | 
| 592 | 
            +
                  return childGroup
         | 
| 593 | 
            +
                },
         | 
| 594 | 
            +
                $getChildren: function (parent, type) {
         | 
| 595 | 
            +
                  var options = this.rootGroup.options,
         | 
| 596 | 
            +
                  path = options[type + "Path"],
         | 
| 597 | 
            +
                  selector = options[type + "Selector"]
         | 
| 598 | 
            +
             | 
| 599 | 
            +
                  parent = $(parent)
         | 
| 600 | 
            +
                  if(path)
         | 
| 601 | 
            +
                    parent = parent.find(path)
         | 
| 602 | 
            +
             | 
| 603 | 
            +
                  return parent.children(selector)
         | 
| 604 | 
            +
                },
         | 
| 605 | 
            +
                _serialize: function (parent, isContainer) {
         | 
| 606 | 
            +
                  var that = this,
         | 
| 607 | 
            +
                  childType = isContainer ? "item" : "container",
         | 
| 608 | 
            +
             | 
| 609 | 
            +
                  children = this.$getChildren(parent, childType).not(this.options.exclude).map(function () {
         | 
| 610 | 
            +
                    return that._serialize($(this), !isContainer)
         | 
| 611 | 
            +
                  }).get()
         | 
| 612 | 
            +
             | 
| 613 | 
            +
                  return this.rootGroup.options.serialize(parent, children, isContainer)
         | 
| 614 | 
            +
                },
         | 
| 615 | 
            +
                traverse: function(callback) {
         | 
| 616 | 
            +
                  $.each(this.items || [], function(item){
         | 
| 617 | 
            +
                    var group = $.data(this, subContainerKey)
         | 
| 618 | 
            +
                    if(group)
         | 
| 619 | 
            +
                      group.traverse(callback)
         | 
| 620 | 
            +
                  });
         | 
| 621 | 
            +
             | 
| 622 | 
            +
                  callback(this)
         | 
| 623 | 
            +
                },
         | 
| 624 | 
            +
                _clearDimensions: function  () {
         | 
| 625 | 
            +
                  this.itemDimensions = undefined
         | 
| 626 | 
            +
                },
         | 
| 627 | 
            +
                _destroy: function() {
         | 
| 628 | 
            +
                  var that = this;
         | 
| 629 | 
            +
             | 
| 630 | 
            +
                  this.target.off(eventNames.start, this.handle);
         | 
| 631 | 
            +
                  this.el.removeData(pluginName)
         | 
| 632 | 
            +
             | 
| 633 | 
            +
                  if(this.options.drop)
         | 
| 634 | 
            +
                    this.group.containers = $.grep(this.group.containers, function(val){
         | 
| 635 | 
            +
                      return val != that
         | 
| 636 | 
            +
                    })
         | 
| 637 | 
            +
             | 
| 638 | 
            +
                  $.each(this.items || [], function(){
         | 
| 639 | 
            +
                    $.removeData(this, subContainerKey)
         | 
| 640 | 
            +
                  })
         | 
| 641 | 
            +
                }
         | 
| 642 | 
            +
              }
         | 
| 643 | 
            +
             | 
| 644 | 
            +
              var API = {
         | 
| 645 | 
            +
                enable: function() {
         | 
| 646 | 
            +
                  this.traverse(function(object){
         | 
| 647 | 
            +
                    object.disabled = false
         | 
| 648 | 
            +
                  })
         | 
| 649 | 
            +
                },
         | 
| 650 | 
            +
                disable: function (){
         | 
| 651 | 
            +
                  this.traverse(function(object){
         | 
| 652 | 
            +
                    object.disabled = true
         | 
| 653 | 
            +
                  })
         | 
| 654 | 
            +
                },
         | 
| 655 | 
            +
                serialize: function () {
         | 
| 656 | 
            +
                  return this._serialize(this.el, true)
         | 
| 657 | 
            +
                },
         | 
| 658 | 
            +
                refresh: function() {
         | 
| 659 | 
            +
                  this.traverse(function(object){
         | 
| 660 | 
            +
                    object._clearDimensions()
         | 
| 661 | 
            +
                  })
         | 
| 662 | 
            +
                },
         | 
| 663 | 
            +
                destroy: function () {
         | 
| 664 | 
            +
                  this.traverse(function(object){
         | 
| 665 | 
            +
                    object._destroy();
         | 
| 666 | 
            +
                  })
         | 
| 667 | 
            +
                }
         | 
| 668 | 
            +
              }
         | 
| 669 | 
            +
             | 
| 670 | 
            +
              $.extend(Container.prototype, API)
         | 
| 671 | 
            +
             | 
| 672 | 
            +
              /**
         | 
| 673 | 
            +
               * jQuery API
         | 
| 674 | 
            +
               *
         | 
| 675 | 
            +
               * Parameters are
         | 
| 676 | 
            +
               *   either options on init
         | 
| 677 | 
            +
               *   or a method name followed by arguments to pass to the method
         | 
| 678 | 
            +
               */
         | 
| 679 | 
            +
              $.fn[pluginName] = function(methodOrOptions) {
         | 
| 680 | 
            +
                var args = Array.prototype.slice.call(arguments, 1)
         | 
| 681 | 
            +
             | 
| 682 | 
            +
                return this.map(function(){
         | 
| 683 | 
            +
                  var $t = $(this),
         | 
| 684 | 
            +
                  object = $t.data(pluginName)
         | 
| 685 | 
            +
             | 
| 686 | 
            +
                  if(object && API[methodOrOptions])
         | 
| 687 | 
            +
                    return API[methodOrOptions].apply(object, args) || this
         | 
| 688 | 
            +
                  else if(!object && (methodOrOptions === undefined ||
         | 
| 689 | 
            +
                                      typeof methodOrOptions === "object"))
         | 
| 690 | 
            +
                    $t.data(pluginName, new Container($t, methodOrOptions))
         | 
| 691 | 
            +
             | 
| 692 | 
            +
                  return this
         | 
| 693 | 
            +
                });
         | 
| 694 | 
            +
              };
         | 
| 695 | 
            +
             | 
| 696 | 
            +
            }(jQuery, window, 'sortable');
         |