diff --git a/assets/css/src/form_editor.styl b/assets/css/src/form_editor.styl index e5c03c06a8..84ea870aa7 100644 --- a/assets/css/src/form_editor.styl +++ b/assets/css/src/form_editor.styl @@ -563,3 +563,6 @@ handle_icon = '../img/handle.png' .CodeMirror border: 1px solid #eee +/* Settings */ +#mailpoet_form_segments.parsley-error + span .select2-selection + border: 1px solid #b94a48 \ No newline at end of file diff --git a/assets/js/src/form_editor/form_editor.js b/assets/js/src/form_editor/form_editor.js index 2a85cefafb..ed128db77c 100644 --- a/assets/js/src/form_editor/form_editor.js +++ b/assets/js/src/form_editor/form_editor.js @@ -402,11 +402,30 @@ var WysijaForm = { } }); - // hide list selection if a list widget has been dragged into the editor - $('mailpoet_settings_segment_selection')[ - (($$('#' + WysijaForm.options.editor + ' [wysija_id="segments"]').length > 0) === true) - ? 'hide' : 'show' - ](); + var hasSegmentSelection = WysijaForm.hasSegmentSelection(); + + if(hasSegmentSelection) { + $('mailpoet_form_segments').writeAttribute('required', false).disable(); + $('mailpoet_settings_segment_selection').hide(); + } else { + $('mailpoet_form_segments').writeAttribute('required', true).enable(); + $('mailpoet_settings_segment_selection').show(); + } + }, + hasSegmentSelection: function() { + return ($$('#' + WysijaForm.options.editor + ' [wysija_id="segments"]').length > 0); + }, + isSegmentSelectionValid: function() { + var segment_selection = $$('#' + WysijaForm.options.editor + ' [wysija_id="segments"]')[0]; + if(segment_selection !== undefined) { + var block = WysijaForm.get(segment_selection).block.getData(); + return ( + (block.params.values !== undefined) + && + (block.params.values.length > 0) + ); + } + return false; }, setBlockPositions: function(event, target) { // release dragging lock diff --git a/assets/js/src/iframe.js b/assets/js/src/iframe.js new file mode 100644 index 0000000000..249b608ca1 --- /dev/null +++ b/assets/js/src/iframe.js @@ -0,0 +1,23 @@ +define('iframe', ['mailpoet', 'jquery'], function(MailPoet, jQuery) { + 'use strict'; + MailPoet.Iframe = { + marginY: 15, + autoSize: function(iframe) { + if(!iframe) return; + + this.setSize( + iframe, + iframe.contentWindow.document.body.scrollHeight + ); + }, + setSize: function(iframe, i) { + if(!iframe) return; + + iframe.style.height = ( + parseInt(i) + this.marginY + ) + "px"; + } + }; + + return MailPoet; +}); diff --git a/assets/js/src/listing/pages.jsx b/assets/js/src/listing/pages.jsx index 46667996d3..3cb404ccac 100644 --- a/assets/js/src/listing/pages.jsx +++ b/assets/js/src/listing/pages.jsx @@ -132,7 +132,7 @@ define(['react', 'classnames'], function(React, classNames) { onKeyUp={ this.handleSetManualPage } onBlur={ this.handleBlurManualPage } aria-describedby="table-paging" - size="1" + size="2" ref="page" value={ pageValue } name="paged" diff --git a/assets/js/src/public.js b/assets/js/src/public.js index 52a41bcbd2..c786133d9b 100644 --- a/assets/js/src/public.js +++ b/assets/js/src/public.js @@ -20,13 +20,18 @@ function( $('form.mailpoet_form').each(function() { var form = $(this); - form.parsley().on('form:submit', function(parsley) { - - var data = form.serializeObject() || {}; - + form.parsley().on('form:validated', function(parsley) { // clear messages form.find('.mailpoet_message').html(''); + // resize iframe + if(window.frameElement !== null) { + MailPoet.Iframe.autoSize(window.frameElement); + } + }); + + form.parsley().on('form:submit', function(parsley) { + var data = form.serializeObject() || {}; // check if we're on the same domain if(isSameDomain(MailPoetForm.ajax_url) === false) { // non ajax post request @@ -68,6 +73,11 @@ function( // reset validation parsley.reset(); } + + // resize iframe + if(window.frameElement !== null) { + MailPoet.Iframe.autoSize(window.frameElement); + } }); } return false; diff --git a/composer.lock b/composer.lock index 84c3cf549c..8d11b98774 100644 --- a/composer.lock +++ b/composer.lock @@ -401,16 +401,16 @@ }, { "name": "soundasleep/html2text", - "version": "0.3.0", + "version": "0.3.1", "source": { "type": "git", "url": "https://github.com/soundasleep/html2text.git", - "reference": "55be17ddbb7234650722f66816ba2b10f66e565f" + "reference": "2a5fd94bf58b653a5a9d777ac6a5593f82d087db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/soundasleep/html2text/zipball/55be17ddbb7234650722f66816ba2b10f66e565f", - "reference": "55be17ddbb7234650722f66816ba2b10f66e565f", + "url": "https://api.github.com/repos/soundasleep/html2text/zipball/2a5fd94bf58b653a5a9d777ac6a5593f82d087db", + "reference": "2a5fd94bf58b653a5a9d777ac6a5593f82d087db", "shasum": "" }, "require": { @@ -447,7 +447,7 @@ "php", "text" ], - "time": "2015-12-18 02:30:26" + "time": "2016-02-25 00:00:36" }, { "name": "sunra/php-simple-html-dom-parser", @@ -547,7 +547,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -606,16 +606,16 @@ }, { "name": "symfony/translation", - "version": "v2.8.2", + "version": "v2.8.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "bc0b666903944858f4ffec01c4e50c63e5c276c0" + "reference": "b7b4ebadd2b5e614ff7d2d6fc63e0ed0578909c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bc0b666903944858f4ffec01c4e50c63e5c276c0", - "reference": "bc0b666903944858f4ffec01c4e50c63e5c276c0", + "url": "https://api.github.com/repos/symfony/translation/zipball/b7b4ebadd2b5e614ff7d2d6fc63e0ed0578909c7", + "reference": "b7b4ebadd2b5e614ff7d2d6fc63e0ed0578909c7", "shasum": "" }, "require": { @@ -666,7 +666,7 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2016-01-03 15:33:41" + "time": "2016-02-02 09:49:18" }, { "name": "tburry/pquery", @@ -785,41 +785,42 @@ "packages-dev": [ { "name": "codeception/codeception", - "version": "2.1.6", + "version": "2.1.7", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "b199941f5e59d1e7fd32d78296c8ab98db873d89" + "reference": "65971b0dee4972710365b6102154cd412a9bf7b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/b199941f5e59d1e7fd32d78296c8ab98db873d89", - "reference": "b199941f5e59d1e7fd32d78296c8ab98db873d89", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/65971b0dee4972710365b6102154cd412a9bf7b1", + "reference": "65971b0dee4972710365b6102154cd412a9bf7b1", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", - "facebook/webdriver": ">=1.0.1", + "facebook/webdriver": ">=1.0.1 <2.0", "guzzlehttp/guzzle": ">=4.1.4 <7.0", "guzzlehttp/psr7": "~1.0", - "php": ">=5.4.0", - "phpunit/phpunit": "~4.8.0", - "symfony/browser-kit": ">=2.4|<3.1", - "symfony/console": ">=2.4|<3.1", - "symfony/css-selector": ">=2.4|<3.1", - "symfony/dom-crawler": ">=2.4|<3.1", - "symfony/event-dispatcher": ">=2.4|<3.1", - "symfony/finder": ">=2.4|<3.1", - "symfony/yaml": ">=2.4|<3.1" + "php": ">=5.4.0 <8.0", + "phpunit/php-code-coverage": ">=2.1.3", + "phpunit/phpunit": ">4.8.20 <6.0", + "symfony/browser-kit": ">=2.5 <3.1", + "symfony/console": ">=2.5 <3.1", + "symfony/css-selector": ">=2.5 <3.1", + "symfony/dom-crawler": ">=2.5 <3.1", + "symfony/event-dispatcher": ">=2.5 <3.1", + "symfony/finder": ">=2.5 <3.1", + "symfony/yaml": ">=2.5 <3.1" }, "require-dev": { "codeception/specify": "~0.3", - "facebook/php-sdk-v4": "~4.0", + "facebook/php-sdk-v4": "~5.0", "flow/jsonpath": "~0.2", "monolog/monolog": "~1.8", "pda/pheanstalk": "~2.0", - "videlalvaro/php-amqplib": "~2.4" + "php-amqplib/php-amqplib": "~2.4" }, "suggest": { "codeception/phpbuiltinserver": "Extension to start and stop PHP built-in web server for your tests", @@ -861,7 +862,7 @@ "functional testing", "unit testing" ], - "time": "2016-02-09 22:27:48" + "time": "2016-03-12 01:15:25" }, { "name": "codeception/verify", @@ -898,33 +899,36 @@ }, { "name": "codegyre/robo", - "version": "0.6.0", + "version": "0.7.1", "source": { "type": "git", "url": "https://github.com/Codegyre/Robo.git", - "reference": "d18185f0494c854d36aa5ee0ad931ee23bbef552" + "reference": "1f4e0621fdc37521e2eaca67f33d1c4e240dc7d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codegyre/Robo/zipball/d18185f0494c854d36aa5ee0ad931ee23bbef552", - "reference": "d18185f0494c854d36aa5ee0ad931ee23bbef552", + "url": "https://api.github.com/repos/Codegyre/Robo/zipball/1f4e0621fdc37521e2eaca67f33d1c4e240dc7d8", + "reference": "1f4e0621fdc37521e2eaca67f33d1c4e240dc7d8", "shasum": "" }, "require": { - "henrikbjorn/lurker": "1.0.*@dev", + "henrikbjorn/lurker": "~1.0", "php": ">=5.4.0", - "symfony/console": "~2.5", - "symfony/filesystem": "~2.5", - "symfony/finder": "~2.5", - "symfony/process": "~2.5" + "symfony/console": "~2.5|~3.0", + "symfony/filesystem": "~2.5|~3.0", + "symfony/finder": "~2.5|~3.0", + "symfony/process": "~2.5|~3.0" }, "require-dev": { - "codeception/aspect-mock": "0.5.*", - "codeception/base": "~2.1", - "codeception/codeception": "2.1", + "codeception/aspect-mock": "0.5.4", + "codeception/base": "~2.1.5", "codeception/verify": "0.2.*", "natxet/cssmin": "~3.0", - "patchwork/jsqueeze": "~1.0" + "patchwork/jsqueeze": "~1.0", + "pear/archive_tar": "~1.0" + }, + "suggest": { + "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively." }, "bin": [ "robo" @@ -946,7 +950,7 @@ } ], "description": "Modern task runner", - "time": "2015-10-30 11:29:52" + "time": "2016-02-25 19:28:51" }, { "name": "doctrine/instantiator", @@ -1109,16 +1113,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.0.3", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea" + "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b1e1c0d55f8083c71eda2c28c12a228d708294ea", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bb9024c526b22f3fe6ae55a561fd70653d470aa8", + "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8", "shasum": "" }, "require": { @@ -1156,20 +1160,20 @@ "keywords": [ "promise" ], - "time": "2015-10-15 22:28:00" + "time": "2016-03-08 01:15:46" }, { "name": "guzzlehttp/psr7", - "version": "1.2.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5d04bdd2881ac89abde1fb78cc234bce24327bb" + "reference": "2e89629ff057ebb49492ba08e6995d3a6a80021b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5d04bdd2881ac89abde1fb78cc234bce24327bb", - "reference": "f5d04bdd2881ac89abde1fb78cc234bce24327bb", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/2e89629ff057ebb49492ba08e6995d3a6a80021b", + "reference": "2e89629ff057ebb49492ba08e6995d3a6a80021b", "shasum": "" }, "require": { @@ -1214,20 +1218,20 @@ "stream", "uri" ], - "time": "2016-01-23 01:23:02" + "time": "2016-02-18 21:54:00" }, { "name": "henrikbjorn/lurker", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/flint/Lurker.git", - "reference": "a020d45b3bc37810aeafe27343c51af8a74c9419" + "reference": "ab45f9cefe600065cc3137a238217598d3a1d062" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/flint/Lurker/zipball/a020d45b3bc37810aeafe27343c51af8a74c9419", - "reference": "a020d45b3bc37810aeafe27343c51af8a74c9419", + "url": "https://api.github.com/repos/flint/Lurker/zipball/ab45f9cefe600065cc3137a238217598d3a1d062", + "reference": "ab45f9cefe600065cc3137a238217598d3a1d062", "shasum": "" }, "require": { @@ -1255,18 +1259,16 @@ ], "authors": [ { - "name": "Henrik Bjornskov", - "email": "henrik@bjrnskov.dk", - "homepage": "http://henrik.bjrnskov.dk" + "name": "Yaroslav Kiliba", + "email": "om.dattaya@gmail.com" }, { "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "email": "ever.zet@gmail.com" }, { - "name": "Yaroslav Kiliba", - "email": "om.dattaya@gmail.com" + "name": "Henrik Bjrnskov", + "email": "henrik@bjrnskov.dk" } ], "description": "Resource Watcher.", @@ -1275,7 +1277,7 @@ "resource", "watching" ], - "time": "2013-05-24 06:47:29" + "time": "2015-10-27 09:19:19" }, { "name": "phpdocumentor/reflection-docblock", @@ -1630,16 +1632,16 @@ }, { "name": "phpunit/phpunit", - "version": "4.8.23", + "version": "4.8.24", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "6e351261f9cd33daf205a131a1ba61c6d33bd483" + "reference": "a1066c562c52900a142a0e2bbf0582994671385e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6e351261f9cd33daf205a131a1ba61c6d33bd483", - "reference": "6e351261f9cd33daf205a131a1ba61c6d33bd483", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1066c562c52900a142a0e2bbf0582994671385e", + "reference": "a1066c562c52900a142a0e2bbf0582994671385e", "shasum": "" }, "require": { @@ -1698,7 +1700,7 @@ "testing", "xunit" ], - "time": "2016-02-11 14:56:33" + "time": "2016-03-14 06:16:08" }, { "name": "phpunit/phpunit-mock-objects", @@ -1974,16 +1976,16 @@ }, { "name": "sebastian/environment", - "version": "1.3.3", + "version": "1.3.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6e7133793a8e5a5714a551a8324337374be209df" + "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e7133793a8e5a5714a551a8324337374be209df", - "reference": "6e7133793a8e5a5714a551a8324337374be209df", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf", + "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf", "shasum": "" }, "require": { @@ -2020,7 +2022,7 @@ "environment", "hhvm" ], - "time": "2015-12-02 08:37:27" + "time": "2016-02-26 18:40:46" }, { "name": "sebastian/exporter", @@ -2229,7 +2231,7 @@ }, { "name": "symfony/browser-kit", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", @@ -2286,22 +2288,25 @@ }, { "name": "symfony/config", - "version": "v2.8.2", + "version": "v2.8.3", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "41ee6c70758f40fa1dbf90d019ae0a66c4a09e74" + "reference": "0f8f94e6a32b5c480024eed5fa5cbd2790d0ad19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/ee4cdda66aff834c8125e8f2c15932461667c521", - "reference": "41ee6c70758f40fa1dbf90d019ae0a66c4a09e74", + "url": "https://api.github.com/repos/symfony/config/zipball/0f8f94e6a32b5c480024eed5fa5cbd2790d0ad19", + "reference": "0f8f94e6a32b5c480024eed5fa5cbd2790d0ad19", "shasum": "" }, "require": { "php": ">=5.3.9", "symfony/filesystem": "~2.3|~3.0.0" }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, "type": "library", "extra": { "branch-alias": { @@ -2332,30 +2337,30 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2016-01-03 15:33:41" + "time": "2016-02-22 16:12:45" }, { "name": "symfony/console", - "version": "v2.8.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d0239fb42f98dd02e7d342f793c5d2cdee0c478d" + "reference": "2ed5e2706ce92313d120b8fe50d1063bcfd12e04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d0239fb42f98dd02e7d342f793c5d2cdee0c478d", - "reference": "d0239fb42f98dd02e7d342f793c5d2cdee0c478d", + "url": "https://api.github.com/repos/symfony/console/zipball/2ed5e2706ce92313d120b8fe50d1063bcfd12e04", + "reference": "2ed5e2706ce92313d120b8fe50d1063bcfd12e04", "shasum": "" }, "require": { - "php": ">=5.3.9", + "php": ">=5.5.9", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1|~3.0.0", - "symfony/process": "~2.1|~3.0.0" + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" }, "suggest": { "psr/log": "For using the console logger", @@ -2365,7 +2370,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2392,11 +2397,11 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-01-14 08:33:16" + "time": "2016-02-28 16:24:34" }, { "name": "symfony/css-selector", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -2449,16 +2454,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "b693a9650aa004576b593ff2e91ae749dc90123d" + "reference": "981c8edb4538f88ba976ed44bdcaa683fce3d6c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b693a9650aa004576b593ff2e91ae749dc90123d", - "reference": "b693a9650aa004576b593ff2e91ae749dc90123d", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/981c8edb4538f88ba976ed44bdcaa683fce3d6c6", + "reference": "981c8edb4538f88ba976ed44bdcaa683fce3d6c6", "shasum": "" }, "require": { @@ -2501,20 +2506,20 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2016-01-25 09:56:57" + "time": "2016-02-28 16:24:34" }, { "name": "symfony/event-dispatcher", - "version": "v2.8.2", + "version": "v2.8.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "ee278f7c851533e58ca307f66305ccb9188aceda" + "reference": "78c468665c9568c3faaa9c416a7134308f2d85c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ee278f7c851533e58ca307f66305ccb9188aceda", - "reference": "ee278f7c851533e58ca307f66305ccb9188aceda", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/78c468665c9568c3faaa9c416a7134308f2d85c3", + "reference": "78c468665c9568c3faaa9c416a7134308f2d85c3", "shasum": "" }, "require": { @@ -2561,20 +2566,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-01-13 10:28:07" + "time": "2016-01-27 05:14:19" }, { "name": "symfony/filesystem", - "version": "v2.8.2", + "version": "v2.8.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "637b64d0ee10f44ae98dbad651b1ecdf35a11e8c" + "reference": "65cb36b6539b1d446527d60457248f30d045464d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/637b64d0ee10f44ae98dbad651b1ecdf35a11e8c", - "reference": "637b64d0ee10f44ae98dbad651b1ecdf35a11e8c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/65cb36b6539b1d446527d60457248f30d045464d", + "reference": "65cb36b6539b1d446527d60457248f30d045464d", "shasum": "" }, "require": { @@ -2610,29 +2615,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-01-13 10:28:07" + "time": "2016-02-22 15:02:30" }, { "name": "symfony/finder", - "version": "v2.8.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "c90fabdd97e431ee19b6383999cf35334dff27da" + "reference": "623bda0abd9aa29e529c8e9c08b3b84171914723" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/c90fabdd97e431ee19b6383999cf35334dff27da", - "reference": "c90fabdd97e431ee19b6383999cf35334dff27da", + "url": "https://api.github.com/repos/symfony/finder/zipball/623bda0abd9aa29e529c8e9c08b3b84171914723", + "reference": "623bda0abd9aa29e529c8e9c08b3b84171914723", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.5.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2659,20 +2664,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-01-14 08:26:52" + "time": "2016-01-27 05:14:46" }, { "name": "symfony/form", - "version": "v2.8.2", + "version": "v2.8.3", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "7fd5e4034cb8e215887136f5e176430bbf5ef085" + "reference": "25b71aec36879b4a84c2ea06603dbe7498b31f06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/b629051c77a4f37c625651d03002760385df4575", - "reference": "7fd5e4034cb8e215887136f5e176430bbf5ef085", + "url": "https://api.github.com/repos/symfony/form/zipball/25b71aec36879b4a84c2ea06603dbe7498b31f06", + "reference": "25b71aec36879b4a84c2ea06603dbe7498b31f06", "shasum": "" }, "require": { @@ -2733,20 +2738,20 @@ ], "description": "Symfony Form Component", "homepage": "https://symfony.com", - "time": "2016-01-12 17:46:01" + "time": "2016-02-28 15:05:09" }, { "name": "symfony/intl", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "7fa23b8f2ddd96260f0154946b69eb0f2c2ce7bc" + "reference": "cafee6f65148dab9058cdb6de5631222aca820d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/7fa23b8f2ddd96260f0154946b69eb0f2c2ce7bc", - "reference": "7fa23b8f2ddd96260f0154946b69eb0f2c2ce7bc", + "url": "https://api.github.com/repos/symfony/intl/zipball/cafee6f65148dab9058cdb6de5631222aca820d0", + "reference": "cafee6f65148dab9058cdb6de5631222aca820d0", "shasum": "" }, "require": { @@ -2808,20 +2813,20 @@ "l10n", "localization" ], - "time": "2016-01-27 05:14:46" + "time": "2016-02-23 15:16:06" }, { "name": "symfony/options-resolver", - "version": "v2.8.2", + "version": "v2.8.3", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "b98ca04f85240531b9ea8a0f00a21f2ecfbdfa51" + "reference": "d1e6e9182d9e5af6367bf85175e708f8b4a828c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b98ca04f85240531b9ea8a0f00a21f2ecfbdfa51", - "reference": "b98ca04f85240531b9ea8a0f00a21f2ecfbdfa51", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d1e6e9182d9e5af6367bf85175e708f8b4a828c0", + "reference": "d1e6e9182d9e5af6367bf85175e708f8b4a828c0", "shasum": "" }, "require": { @@ -2862,26 +2867,29 @@ "configuration", "options" ], - "time": "2016-01-03 15:33:41" + "time": "2016-01-21 09:05:51" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "66b0bb4abda229bc073eff6bbc8f2685bdaac165" + "reference": "8328069d9f5322f0e7b3c3518485acfdc94c3942" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/66b0bb4abda229bc073eff6bbc8f2685bdaac165", - "reference": "66b0bb4abda229bc073eff6bbc8f2685bdaac165", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/8328069d9f5322f0e7b3c3518485acfdc94c3942", + "reference": "8328069d9f5322f0e7b3c3518485acfdc94c3942", "shasum": "" }, "require": { "php": ">=5.3.3", "symfony/intl": "~2.3|~3.0" }, + "suggest": { + "ext-intl": "For best performance" + }, "type": "library", "extra": { "branch-alias": { @@ -2917,29 +2925,29 @@ "portable", "shim" ], - "time": "2016-01-20 09:13:37" + "time": "2016-02-26 16:18:12" }, { "name": "symfony/process", - "version": "v2.8.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "6f1979c3b0f4c22c77a8a8971afaa7dd07f082ac" + "reference": "dfecef47506179db2501430e732adbf3793099c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d9d21cfcc3e202ee34777d6da38897695d4d208d", - "reference": "6f1979c3b0f4c22c77a8a8971afaa7dd07f082ac", + "url": "https://api.github.com/repos/symfony/process/zipball/dfecef47506179db2501430e732adbf3793099c8", + "reference": "dfecef47506179db2501430e732adbf3793099c8", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.5.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2966,20 +2974,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-01-06 09:59:23" + "time": "2016-02-02 13:44:19" }, { "name": "symfony/property-access", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "95363dbabd606e404b6c75095669993bf7ddae4b" + "reference": "f138bcc0cdaf6a6aba99ecab20d235b394f46eba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/95363dbabd606e404b6c75095669993bf7ddae4b", - "reference": "95363dbabd606e404b6c75095669993bf7ddae4b", + "url": "https://api.github.com/repos/symfony/property-access/zipball/f138bcc0cdaf6a6aba99ecab20d235b394f46eba", + "reference": "f138bcc0cdaf6a6aba99ecab20d235b394f46eba", "shasum": "" }, "require": { @@ -3026,20 +3034,20 @@ "property path", "reflection" ], - "time": "2016-01-03 15:35:16" + "time": "2016-02-13 09:23:44" }, { "name": "symfony/routing", - "version": "v2.8.2", + "version": "v2.8.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "5451a8a1874fd4e6a4dd347ea611d86cd8441735" + "reference": "ae38e64bae52753c0f4a1a6583f5ba9bb2b742ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/5451a8a1874fd4e6a4dd347ea611d86cd8441735", - "reference": "5451a8a1874fd4e6a4dd347ea611d86cd8441735", + "url": "https://api.github.com/repos/symfony/routing/zipball/ae38e64bae52753c0f4a1a6583f5ba9bb2b742ab", + "reference": "ae38e64bae52753c0f4a1a6583f5ba9bb2b742ab", "shasum": "" }, "require": { @@ -3062,6 +3070,7 @@ "symfony/config": "For using the all-in-one router or any loader", "symfony/dependency-injection": "For loading routes from a service", "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", "symfony/yaml": "For using the YAML loader" }, "type": "library", @@ -3100,20 +3109,20 @@ "uri", "url" ], - "time": "2016-01-11 16:43:36" + "time": "2016-02-04 13:53:00" }, { "name": "symfony/twig-bridge", - "version": "v2.8.2", + "version": "v2.8.3", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "e33b512de4b769a1c728cd6775e22668ae89fca9" + "reference": "ba898e4714734948dc00c4d776e1d6be165ff8c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/e33b512de4b769a1c728cd6775e22668ae89fca9", - "reference": "e33b512de4b769a1c728cd6775e22668ae89fca9", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/ba898e4714734948dc00c4d776e1d6be165ff8c4", + "reference": "ba898e4714734948dc00c4d776e1d6be165ff8c4", "shasum": "" }, "require": { @@ -3181,20 +3190,20 @@ ], "description": "Symfony Twig Bridge", "homepage": "https://symfony.com", - "time": "2016-01-12 17:46:01" + "time": "2016-02-22 15:02:30" }, { "name": "symfony/yaml", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "3cf0709d7fe936e97bee9e954382e449003f1d9a" + "reference": "b5ba64cd67ecd6887f63868fa781ca094bd1377c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/3cf0709d7fe936e97bee9e954382e449003f1d9a", - "reference": "3cf0709d7fe936e97bee9e954382e449003f1d9a", + "url": "https://api.github.com/repos/symfony/yaml/zipball/b5ba64cd67ecd6887f63868fa781ca094bd1377c", + "reference": "b5ba64cd67ecd6887f63868fa781ca094bd1377c", "shasum": "" }, "require": { @@ -3230,7 +3239,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-02-02 13:44:19" + "time": "2016-02-23 15:16:06" }, { "name": "twig/extensions", diff --git a/lib/Config/Env.php b/lib/Config/Env.php index ec43e0a41a..383f342daf 100644 --- a/lib/Config/Env.php +++ b/lib/Config/Env.php @@ -13,7 +13,7 @@ class Env { static $assets_path; static $assets_url; static $temp_path; - static $temp_URL; + static $temp_url; static $languages_path; static $lib_path; static $plugin_prefix; @@ -39,7 +39,7 @@ class Env { self::$assets_url = plugins_url('/assets', $file); $wp_upload_dir = wp_upload_dir(); self::$temp_path = $wp_upload_dir['path']; - self::$temp_URL = $wp_upload_dir['url']; + self::$temp_url = $wp_upload_dir['url']; self::$languages_path = self::$path . '/lang'; self::$lib_path = self::$path . '/lib'; self::$plugin_prefix = 'mailpoet_'; diff --git a/lib/Config/Initializer.php b/lib/Config/Initializer.php index f325dc4020..32b648ecc9 100644 --- a/lib/Config/Initializer.php +++ b/lib/Config/Initializer.php @@ -131,7 +131,7 @@ class Initializer { } function setupWidget() { - $widget = new Widget(); + $widget = new Widget($this->renderer); $widget->init(); } diff --git a/lib/Config/Renderer.php b/lib/Config/Renderer.php index 90db4ec83a..a1ce2d95fb 100644 --- a/lib/Config/Renderer.php +++ b/lib/Config/Renderer.php @@ -59,7 +59,7 @@ class Renderer { } function detectCache() { - $cache_path = Env::$views_path . '/cache'; + $cache_path = Env::$temp_path . '/cache'; if(WP_DEBUG === false) { return $cache_path; } diff --git a/lib/Config/Widget.php b/lib/Config/Widget.php index f4b9fd2943..f8eeef84ba 100644 --- a/lib/Config/Widget.php +++ b/lib/Config/Widget.php @@ -1,11 +1,17 @@ renderer = $renderer; + } } function init() { @@ -13,11 +19,67 @@ class Widget { if(!is_admin()) { $this->setupDependencies(); + $this->setupIframe(); } else { $this->setupAdminDependencies(); } } + function setupIframe() { + $form_id = (isset($_GET['mailpoet_form_iframe']) ? (int)$_GET['mailpoet_form_iframe'] : 0); + if($form_id > 0) { + $form = Form::findOne($form_id); + + if($form !== false) { + $form_widget = new \MailPoet\Form\Widget(); + $form_html = $form_widget->widget(array( + 'form' => $form_id, + 'form_type' => 'iframe' + )); + + // capture javascripts + ob_start(); + wp_print_scripts('jquery'); + wp_print_scripts('mailpoet_vendor'); + wp_print_scripts('mailpoet_public'); + $scripts = ob_get_contents(); + ob_end_clean(); + + // language attributes + $language_attributes = array(); + $is_rtl = (bool)(function_exists('is_rtl') && is_rtl()); + + if($is_rtl) { + $language_attributes[] = 'dir="rtl"'; + } + + if($lang = get_bloginfo('language')) { + if(get_option('html_type') === 'text/html') { + $language_attributes[] = "lang=\"$lang\""; + } + } + + $language_attributes = apply_filters( + 'language_attributes', implode(' ', $language_attributes) + ); + + $data = array( + 'language_attributes' => $language_attributes, + 'scripts' => $scripts, + 'form' => $form_html, + 'mailpoet_form' => array( + 'ajax_url' => admin_url('admin-ajax.php', 'absolute'), + 'is_rtl' => $is_rtl, + 'token' => Security::generateToken() + ) + ); + + echo $this->renderer->render('form/iframe.html', $data); + exit(); + } + } + } + function registerWidget() { register_widget('\MailPoet\Form\Widget'); } diff --git a/lib/Form/Util/Export.php b/lib/Form/Util/Export.php index 92c65d4a05..533deb8189 100644 --- a/lib/Form/Util/Export.php +++ b/lib/Form/Util/Export.php @@ -17,8 +17,7 @@ class Export { case 'iframe': // generate url to load iframe's content $iframe_url = add_query_arg(array( - 'mailpoet_page' => 'mailpoet_form_iframe', - 'mailpoet_form' => $form['id'] + 'mailpoet_form_iframe' => $form['id'] ), site_url()); // generate iframe @@ -31,7 +30,7 @@ class Export { 'class="mailpoet_form_iframe"', 'vspace="0"', 'tabindex="0"', - 'onload="javascript:(this.style.height = this.contentWindow.document.body.scrollHeight + \'px\');"', + 'onload="MailPoet.Iframe.autoSize(this);"', 'marginwidth="0"', 'marginheight="0"', 'hspace="0"', diff --git a/lib/Form/Widget.php b/lib/Form/Widget.php index 2dfff48ac3..beee17bc97 100644 --- a/lib/Form/Widget.php +++ b/lib/Form/Widget.php @@ -154,7 +154,7 @@ class Widget extends \WP_Widget { $output = ''; if(!empty($body)) { - $form_id = $this->id_base.'_'.$this->number; + $form_id = $this->id_base.'_'.$form['id']; $data = array( 'form_id' => $form_id, diff --git a/lib/Subscribers/ImportExport/Export/Export.php b/lib/Subscribers/ImportExport/Export/Export.php index db3ae84f75..93e1292e3b 100644 --- a/lib/Subscribers/ImportExport/Export/Export.php +++ b/lib/Subscribers/ImportExport/Export/Export.php @@ -226,7 +226,7 @@ class Export { function getExportFileURL($file) { return sprintf( '%s/%s', - Env::$temp_URL, + Env::$temp_url, basename($file) ); } diff --git a/lib/Subscription/Pages.php b/lib/Subscription/Pages.php index 2d59fc1493..2a4fb1158b 100644 --- a/lib/Subscription/Pages.php +++ b/lib/Subscription/Pages.php @@ -19,7 +19,8 @@ class Pages { function init() { $action = $this->getAction(); if($action !== null) { - add_filter('document_title_parts', array($this,'setWindowTitle'), 10, 1); + add_filter('wp_title', array($this,'setWindowTitle'), 10, 1); + add_filter('document_title_parts', array($this,'setWindowTitleParts'), 10, 1); add_filter('the_title', array($this,'setPageTitle'), 10, 1); add_filter('the_content', array($this,'setPageContent'), 10, 1); } @@ -59,7 +60,11 @@ class Pages { return (array_key_exists('mailpoet_preview', $_GET)); } - function setWindowTitle($meta = array()) { + function setWindowTitle($title) { + return $this->setPageTitle($title); + } + + function setWindowTitleParts($meta = array()) { $meta['title'] = $this->setPageTitle($meta['title']); return $meta; } diff --git a/tests/unit/Subscribers/ImportExport/Export/ExportTest.php b/tests/unit/Subscribers/ImportExport/Export/ExportTest.php index e5d1f27bfe..f8aa865e67 100644 --- a/tests/unit/Subscribers/ImportExport/Export/ExportTest.php +++ b/tests/unit/Subscribers/ImportExport/Export/ExportTest.php @@ -141,7 +141,7 @@ class ExportTest extends MailPoetTest { expect( preg_match( '|' . - Env::$temp_URL . '/' . + Env::$temp_url . '/' . basename($this->export->export_file) . '|' , $this->export->export_file_URL) diff --git a/views/form/editor.html b/views/form/editor.html index 5717d364a5..0ed6b84276 100644 --- a/views/form/editor.html +++ b/views/form/editor.html @@ -50,8 +50,8 @@ name="segments" data-placeholder="<%= __('Choose a list') %>" multiple - data-parsley-required="true" data-parsley-required-message="<%= __('You need to select a list.') %>" + required > <% for segment in segments %> @@ -261,14 +261,14 @@ function mailpoet_form_toggle_segments() { // hide list selection if a list widget has been dragged into the editor $('mailpoet_settings_segment_selection')[ - (($$('#' + WysijaForm.options.editor + ' [wysija_id="segments"]').length > 0) === true) + (WysijaForm.hasSegmentSelection()) ? 'hide' : 'show' ](); } function mailpoet_form_fields() { // form editor: default fields - var template = Handlebars.compile(jQuery('#form_template_fields').html()); + var template = Handlebars.compile($('#form_template_fields').html()); var data = { fields: mailpoet_default_fields @@ -439,7 +439,6 @@ // preview form $(document).on('click', '#mailpoet_form_preview', function() { - //mailpoet_form_save(mailpoet_form_preview); mailpoet_form_preview(); return false; }); @@ -462,11 +461,25 @@ var form = WysijaForm.save(); form.id = $('#mailpoet_form_id').val(); - if(jQuery('#mailpoet_form_settings').parsley().isValid() === false) { + // reset error messages + $('#mailpoet_form_settings').parsley().reset(); + + // validate segments to subscribe to + if(WysijaForm.hasSegmentSelection()) { + // validate segment selection in form + if(WysijaForm.isSegmentSelectionValid() === false) { + return false; + } + } + + // check if the form is valid + if($('#mailpoet_form_settings').parsley().isValid() === false) { + // refresh settings and trigger validation mailpoet_toolbar_tab('settings', function() { - jQuery('#mailpoet_form_settings').parsley().validate(); + $('#mailpoet_form_settings').parsley().validate(); }); } else { + // save form MailPoet.Ajax.post({ endpoint: 'forms', action: 'saveEditor', diff --git a/views/form/iframe.html b/views/form/iframe.html new file mode 100644 index 0000000000..c9c45262df --- /dev/null +++ b/views/form/iframe.html @@ -0,0 +1,44 @@ + + + + +> + + + + + + <%= __('MailPoet Subscription Form') %> + <%= stylesheet('public.css') %> + <%= scripts | raw %> + + + <%= form | raw %> + + + \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 9a0bb065dc..84d6b54062 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -178,6 +178,7 @@ config.push(_.extend({}, baseConfig, { public: [ 'mailpoet', 'ajax', + 'iframe', 'jquery.serialize_object', 'public.js' ]