diff --git a/CHANGELOG.md b/CHANGELOG.md index 48a93c95..390a44f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [2.0.4](https://github.com/openmail/system1-cmp/compare/v2.0.3...v2.0.4) (2020-09-17) + +### Styling + +- [x] Downsize fonts and spacing mobile +- [x] Downsize spacing desktop +- [x] Add scroll bar +- [x] Auto-position CMP vertically based on purposes + ## [2.0.3](https://github.com/openmail/system1-cmp/compare/v2.0.2...v2.0.3) (2020-09-15) ### Fix diff --git a/README.md b/README.md index ad63e53d..44e1a84e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ TCF 2.0 Consent Management Platform (CMP) UI tool. We are in the process of vali - - [Installation / Use](#installation--use) - [API](#api) - [Customized API](#customized-api) @@ -64,6 +63,8 @@ API signatures have changed from the CMP TCF 1.1, but we've tried to keep the co boxShadow: 'none', secondaryColor: '#869cc0', featuresColor: '#d0d3d7', + shouldAutoResizeModal: true, // resizes modal on stacks screen to push stacks below fold + maxHeightModal: '40vh', }, ccpaApplies: true, gdprApplies: true, @@ -175,6 +176,7 @@ Set configuration for your CMP during the `init` phase. __tcfapi('init', 2, () => {}, { theme: { maxHeightModal: '50vh', + shouldAutoResizeModal: true, primaryColor: '#0099ff', }, canLog: true, // pixel logging for monitoring and alerting @@ -210,6 +212,8 @@ Override styling choices using the following properties: - `textLinkColor`: '#0099ff' - `secondaryColor`: '#869cc0' - `featuresColor`: '#d0d3d7' +- `maxHeightModal`: '40vh' // 40vh by default; enforce a maxheight as a %,px,vh +- `shouldAutoResizeModal`: true // false by default; auto resize modal on stacks screen to push purposes below fold. Works in conjunction with `maxHeightModal` ## Initialize from URL Param diff --git a/package.json b/package.json index fd205f18..c87e8032 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "system1-cmp", - "version": "2.0.3", + "version": "2.0.4", "description": "System1 Consent Management Platform for TCF 1.1 GDPR Compliance", "scripts": { "clean": "rimraf ./dist", @@ -13,10 +13,11 @@ "deploy": "yarn clean && yarn deploy:original && yarn deploy:s1", "build:original": "cross-env NODE_ENV=production webpack --progress --config config/webpack.config.babel.js", "deploy:original": "yarn build:original && yarn upload:original", - "upload:original": "cross-var s3-deploy './dist/{*.?(js|html),docs/**}' --cwd './dist' --region us-west-2 --bucket s1-layout-cdn/cmp --gzip --cache 1440 --distId E5JQ1CRXXPTKM --invalidate '/cmp/*.js /cmp/* /cmp/docs/*'", + "upload:original": "cross-var s3-deploy './dist/{*.?(js|html),docs/**}' --cwd './dist' --region us-west-2 --bucket s1-layout-cdn/cmp --gzip html,js,css,json --cache 1440 --distId E5JQ1CRXXPTKM --invalidate '/cmp/*.js /cmp/* /cmp/docs/*'", "build:s1": "cross-env NODE_ENV=production webpack --progress --config config/s1.webpack.config.babel.js", "deploy:s1": "yarn build:s1 && yarn upload:s1", - "upload:s1": "cross-var s3-deploy './dist/$npm_package_version/**' --cwd './dist/$npm_package_version' --region us-west-2 --bucket s1-layout-cdn/cmp/$npm_package_version --gzip --preventUpdates --immutable", + "upload:s1": "cross-var s3-deploy './dist/$npm_package_version/**' --cwd './dist/$npm_package_version' --region us-west-2 --bucket s1-layout-cdn/cmp/$npm_package_version --gzip html,js,css,json --preventUpdates --cache 604800 --distId E5JQ1CRXXPTKM --invalidate '/cmp/$npm_package_version/*", + "upload:s1:again": "cross-var s3-deploy './dist/$npm_package_version/**' --cwd './dist/$npm_package_version' --region us-west-2 --bucket s1-layout-cdn/cmp/$npm_package_version --gzip html,js,css,json --cache 604800 --distId E5JQ1CRXXPTKM --invalidate '/cmp/$npm_package_version/*'", "deploy:test": "yarn build:s1 && yarn upload:test", "upload:test": "cross-var s3-deploy './dist/$npm_package_version/**' --cwd './dist/$npm_package_version' --region us-west-2 --bucket s1-layout-cdn/cmp/test --gzip --cache 1440 --distId E5JQ1CRXXPTKM --invalidate '/cmp/test/* /cmp/test/*.html'", "prebuild": "npm run clean && mkdirp dist", @@ -115,6 +116,7 @@ "handlebars-loader": "^1.7.1", "js-beautify": "^1.7.5", "lodash": "^4.17.11", + "lodash.debounce": "^4.0.8", "no-case": "^3.0.3", "preact": "^8.4.2", "preact-compat": "^3.18.4", diff --git a/src/s1/components/app.jsx b/src/s1/components/app.jsx index eb804cf0..ef1f2d88 100644 --- a/src/s1/components/app.jsx +++ b/src/s1/components/app.jsx @@ -13,6 +13,17 @@ export default class App extends Component { state = { store: this.props.store, shouldShowModal: false, + maxHeightModal: 0, + }; + + handleMaxHeightChange = (newMaxHeightModal) => { + const { maxHeightModal } = this.state; + if (typeof maxHeightModal !== 'string') { + // once we switch to %/vh based max-height, keep it + this.setState({ + maxHeightModal: newMaxHeightModal, + }); + } }; updateState(store) { @@ -25,6 +36,13 @@ export default class App extends Component { componentDidMount() { const { store } = this.props; + const { + config: { theme }, + } = store; + const { shouldAutoResizeModal, maxHeightModal } = theme; + if (!shouldAutoResizeModal) { + this.handleMaxHeightChange(maxHeightModal); + } store.subscribe(this.updateState.bind(this)); setTimeout(this.componentDidUpdate.bind(this), 100); // delay reveal on first load } @@ -42,7 +60,7 @@ export default class App extends Component { } render(props, state) { - const { store, shouldShowModal } = state; + const { store, shouldShowModal, maxHeightModal } = state; const { tcModel } = store; const { consentScreen } = tcModel; @@ -50,15 +68,30 @@ export default class App extends Component {