diff --git a/dev/App/Abstract.js b/dev/App/Abstract.js index 9c11006b7..b56fd4f93 100644 --- a/dev/App/Abstract.js +++ b/dev/App/Abstract.js @@ -283,10 +283,7 @@ AbstractApp.prototype.bootstart = function () { - if (window.console && Utils.isFunc(window.console.log)) - { - window.console.log('Psss, hacker! There is nothing interesting :)'); - } + Utils.log('Ps' + 'ss, hac' + 'kers! The' + 're\'s not' + 'hing inte' + 'resting :' + ')'); Events.pub('rl.bootstart'); diff --git a/dev/Model/Filter.js b/dev/Model/Filter.js index 1bf577f90..748f0c6c5 100644 --- a/dev/Model/Filter.js +++ b/dev/Model/Filter.js @@ -195,7 +195,7 @@ } if (Enums.FiltersAction.Vacation === this.actionType() && - ('' === this.actionValueFourth() || -1 === this.actionValueFourth().indexOf('@')) + '' !== this.actionValueFourth() && -1 === this.actionValueFourth().indexOf('@') ) { this.actionValueFourth.error(true); diff --git a/gulpfile.js b/gulpfile.js index d38f654cd..e6ebe3b55 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -200,6 +200,7 @@ cfg.paths.js = { // 'vendors/jsencrypt/jsencrypt.min.js', 'vendors/keymaster/keymaster.min.js', 'vendors/ifvisible/ifvisible.min.js', +// 'vendors/svg4everybody/svg4everybody.js', 'vendors/bootstrap/js/bootstrap.min.js' ] }, diff --git a/rainloop/v/0.0.0/app/templates/Views/User/MailMessageList.html b/rainloop/v/0.0.0/app/templates/Views/User/MailMessageList.html index 5f4636cda..f6b65340a 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/MailMessageList.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/MailMessageList.html @@ -31,7 +31,7 @@
- + - +
diff --git a/rainloop/v/0.0.0/app/templates/Views/User/PopupsFilter.html b/rainloop/v/0.0.0/app/templates/Views/User/PopupsFilter.html index 83aa620e5..b82169a7e 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/PopupsFilter.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/PopupsFilter.html @@ -40,7 +40,7 @@
- +    diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFilters.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFilters.html index dd444447d..ea1c51dcd 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFilters.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFilters.html @@ -9,7 +9,7 @@
- +    @@ -93,7 +93,7 @@ - + diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersActionVacation.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersActionVacation.html index f36b334b3..0e12a70fc 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersActionVacation.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersActionVacation.html @@ -16,7 +16,7 @@
diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionDefault.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionDefault.html index 5a8c70df2..7bf8c166d 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionDefault.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionDefault.html @@ -7,6 +7,6 @@   - + \ No newline at end of file diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionMore.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionMore.html index 8e0f7089f..61ac82ede 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionMore.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionMore.html @@ -9,6 +9,6 @@   - + \ No newline at end of file diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionSize.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionSize.html index 1ae58091d..0830dc800 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionSize.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFiltersConditionSize.html @@ -7,6 +7,6 @@   - + \ No newline at end of file diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolderItem.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolderItem.html index a6246f748..4c80e0f55 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolderItem.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolderItem.html @@ -14,15 +14,15 @@ - + - + - + diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsOpenPGP.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsOpenPGP.html index 09f47cf67..1ebebbb7d 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsOpenPGP.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsOpenPGP.html @@ -12,7 +12,7 @@   
@@ -30,7 +30,9 @@ - + + + @@ -38,12 +40,12 @@ - + - + @@ -51,7 +53,9 @@ - + + + () @@ -60,12 +64,12 @@ - + - + diff --git a/rainloop/v/0.0.0/static/css/svg/icons.svg b/rainloop/v/0.0.0/static/css/svg/icons.svg index c24db56e6..b4b44d0c3 100644 --- a/rainloop/v/0.0.0/static/css/svg/icons.svg +++ b/rainloop/v/0.0.0/static/css/svg/icons.svg @@ -1,7 +1,27 @@ - + + + + + + + + + + + + + + + + + + + + + diff --git a/vendors/fontastic/svg/demo.html b/vendors/fontastic/svg/demo.html index cece46978..44e43c9b0 100644 --- a/vendors/fontastic/svg/demo.html +++ b/vendors/fontastic/svg/demo.html @@ -197,7 +197,27 @@ github.com style (c) Vasily Polovnyov - + + + + + + + + + + + + + + + + + + + + + @@ -217,6 +237,46 @@ github.com style (c) Vasily Polovnyov +
  • + + + + + +
  • + +
  • + + + + + +
  • + +
  • + + + + + +
  • + +
  • + + + + + +
  • + +
  • + + + + + +
  • +

    How to add SVG sprite icons to your project?

    diff --git a/vendors/fontastic/svg/icons.svg b/vendors/fontastic/svg/icons.svg index c24db56e6..b4b44d0c3 100644 --- a/vendors/fontastic/svg/icons.svg +++ b/vendors/fontastic/svg/icons.svg @@ -1,7 +1,27 @@ - + + + + + + + + + + + + + + + + + + + + + diff --git a/vendors/svg4everybody/LICENSE.md b/vendors/svg4everybody/LICENSE.md new file mode 100644 index 000000000..565f84e33 --- /dev/null +++ b/vendors/svg4everybody/LICENSE.md @@ -0,0 +1,15 @@ +# CC0 1.0 Universal License + +Public Domain Dedication + +The person(s) who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission. + +In no way are the patent or trademark rights of any person affected by CC0, nor are the rights that other persons may have in the work or in how the work is used, such as publicity or privacy rights. + +Unless expressly stated otherwise, the person(s) who associated a work with this deed makes no warranties about the work, and disclaims liability for all uses of the work, to the fullest extent permitted by applicable law. + +When using or citing the work, you should not imply endorsement by the author or the affirmer. + +This is a [human-readable summary of the Legal Code](https://creativecommons.org/publicdomain/zero/1.0/) ([read the full text](https://creativecommons.org/publicdomain/zero/1.0/legalcode)). diff --git a/vendors/svg4everybody/README.md b/vendors/svg4everybody/README.md new file mode 100644 index 000000000..91ce31d0f --- /dev/null +++ b/vendors/svg4everybody/README.md @@ -0,0 +1,107 @@ +# SVG for Everybody + +[SVG for Everybody] is a script that adds [external spritemaps] support to otherwise [SVG-capable browsers]. + +To use **svg4everybody**, include the script in your document. + +```html + +``` + +To support IE6-8 as well, include the legacy script instead. + +```html + +``` + +The IE6-8 script needs to be included in the `` in order to shiv the **svg** and **use** elements. + +If running the standard script in IE9-11, be sure to set [X-UA-Compatible] higher than IE8. This can be done with a response header or the following meta tag. + +```html + +``` + +## Usage + +**spritemap.svg:** +```html + + CodePen + YouTube + Twitter + +``` + +This spritemap works fine in **Chrome**, **Firefox**, and **Opera**. [SVG for Everybody] polyfills the experience in **IE9-11**. + +```html + + + +``` + +![3 SVG logos](http://i.imgur.com/87Npdzn.png) + +Older browsers falls back to PNG images. + +```html + + + +``` + +Fallback PNGs point to the same location as their corresponding SVGs, only with the `#` hash replaced by a `.` dot, and with an appended `.png` extension. + +## Readability and accessibility + +Within your spritemap, each sprite may use a `` element to identify itself. + +```html +<symbol id="codepen"><title>CodePen +``` + +When this sprite is used, its title will be read aloud in [JAWS](http://www.freedomscientific.com/products/fs/JAWS-product-page.asp) and [NVDA](http://www.nvaccess.org/). Then, within your document, each sprite may use a `title` attribute to identify itself. + +```html + +``` + +This title will be read aloud in [VoiceOver](http://www.apple.com/accessibility/osx/voiceover/) and [NVDA](http://www.nvaccess.org/). At present, the `title` attribute is the only way to properly read aloud an SVG in VoiceOver. + +For maximum compatibility, both the `title` attribute in the document and the `title` element in the SVG should be used. + +ARIA roles may be used to provide even more accessibility. `role="presentation"` should be used when a sprite decorates other content. + +```html +
    Find me on Twitter +``` + +Alternatively, `role="img"` should be used when a sprite necessitates its own description. + +```html + +``` + +### Futher reading + +- [Tips for creating accessible SVG](https://www.sitepoint.com/tips-accessible-svg/) +- [Using ARIA to enhance SVG accessibility](http://blog.paciellogroup.com/2013/12/using-aria-enhance-svg-accessibility/) +- [SVG symbol a good choice for icons](http://css-tricks.com/svg-symbol-good-choice-icons/) +- [Implementing inline SVG Icons](https://kartikprabhu.com/article/inline-svg-icons) + +## Smaller SVGs + +SVG files, especially exported from various editors, usually contains a lot of redundant and useless information such as editor metadata, comments, hidden elements, default or non-optimal values and other stuff that can be safely removed or converted without affecting SVG rendering result. + +Use a tool like [SVGO](https://github.com/svg/svgo) to optimize SVG spritemaps. + +```sh +$ [sudo] npm install -g svgo +$ svgo spritemap.svg +``` + +[external spritemaps]: http://css-tricks.com/svg-sprites-use-better-icon-fonts/##Browser+Support +[SVG-capable browsers]: http://caniuse.com/svg +[SVG for Everybody]: https://github.com/jonathantneal/svg4everybody +[X-UA-Compatible]: http://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible diff --git a/vendors/svg4everybody/bower.json b/vendors/svg4everybody/bower.json new file mode 100644 index 000000000..28de08c26 --- /dev/null +++ b/vendors/svg4everybody/bower.json @@ -0,0 +1,20 @@ +{ + "name": "svg4everybody", + "homepage": "https://github.com/jonathantneal/svg4everybody", + "authors": [ + "Jonathan Neal " + ], + "description": "Use external SVG spritemaps today.", + "main": ["svg4everybody.js", "svg4everybody.legacy.js"], + "keywords": [ + "svg", + "spritemaps", + "polyfill", + "ie" + ], + "repository": { + "type": "git", + "url": "git@github.com:jonathantneal/svg4everybody.git" + }, + "license": "CC0 1.0" +} diff --git a/vendors/svg4everybody/package.json b/vendors/svg4everybody/package.json new file mode 100644 index 000000000..2ebbeb0ce --- /dev/null +++ b/vendors/svg4everybody/package.json @@ -0,0 +1,18 @@ +{ + "name" : "svg4everybody", + "description" : "Use external SVG spritemaps in any browser", + "keywords" : ["svg", "sprites", "spritemaps", "symbol", "defs", "oldie", "ie8", "ie9", "safari", "external", "icon", "fallback"], + "author" : "Jonathan Neal (http://jonathantneal.com)", + "contributors" : [], + "dependencies" : [], + "main": "svg4everybody.js", + "homepage": "https://github.com/jonathantneal/svg4everybody", + "bugs": { + "url": "https://github.com/jonathantneal/svg4everybody/issues" + }, + "repository" : { + "type": "git", + "url": "git@github.com:jonathantneal/svg4everybody.git" + }, + "version" : "1.0.0" +} diff --git a/vendors/svg4everybody/svg4everybody.js b/vendors/svg4everybody/svg4everybody.js new file mode 100644 index 000000000..41f8ab788 --- /dev/null +++ b/vendors/svg4everybody/svg4everybody.js @@ -0,0 +1,84 @@ +/*! svg4everybody v1.0.0 | github.com/jonathantneal/svg4everybody */ +(function (document, uses, requestAnimationFrame, CACHE, IE9TO11) { + function embed(svg, g) { + if (g) { + var + viewBox = g.getAttribute('viewBox'), + fragment = document.createDocumentFragment(), + clone = g.cloneNode(true); + + if (viewBox) { + svg.setAttribute('viewBox', viewBox); + } + + while (clone.childNodes.length) { + fragment.appendChild(clone.childNodes[0]); + } + + svg.appendChild(fragment); + } + } + + function onload() { + var xhr = this, x = document.createElement('x'), s = xhr.s; + + x.innerHTML = xhr.responseText; + + xhr.onload = function () { + s.splice(0).map(function (array) { + embed(array[0], x.querySelector('#' + array[1].replace(/(\W)/g, '\\$1'))); + }); + }; + + xhr.onload(); + } + + function onframe() { + var use; + + while ((use = uses[0])) { + var + svg = use.parentNode, + url = use.getAttribute('xlink:href').split('#'), + url_root = url[0], + url_hash = url[1]; + + svg.removeChild(use); + + if (url_root.length) { + var xhr = CACHE[url_root] = CACHE[url_root] || new XMLHttpRequest(); + + if (!xhr.s) { + xhr.s = []; + + xhr.open('GET', url_root); + + xhr.onload = onload; + + xhr.send(); + } + + xhr.s.push([svg, url_hash]); + + if (xhr.readyState === 4) { + xhr.onload(); + } + + } else { + embed(svg, document.getElementById(url_hash)); + } + } + + requestAnimationFrame(onframe); + } + + if (IE9TO11) { + onframe(); + } +})( + document, + document.getElementsByTagName('use'), + window.requestAnimationFrame || window.setTimeout, + {}, + /Trident\/[567]\b/.test(navigator.userAgent) || /Edge\/12/.test(navigator.userAgent) || (navigator.userAgent.match(/AppleWebKit\/(\d+)/) || [])[1] < 538 +); diff --git a/vendors/svg4everybody/svg4everybody.legacy.js b/vendors/svg4everybody/svg4everybody.legacy.js new file mode 100644 index 000000000..193a7eea4 --- /dev/null +++ b/vendors/svg4everybody/svg4everybody.legacy.js @@ -0,0 +1,97 @@ +/*! svg4everybody v1.0.0 | github.com/jonathantneal/svg4everybody */ +(function (document, uses, requestAnimationFrame, CACHE, LTEIE8, IE9TO11) { + function embed(svg, g) { + if (g) { + var + viewBox = g.getAttribute('viewBox'), + fragment = document.createDocumentFragment(), + clone = g.cloneNode(true); + + if (viewBox) { + svg.setAttribute('viewBox', viewBox); + } + + while (clone.childNodes.length) { + fragment.appendChild(clone.childNodes[0]); + } + + svg.appendChild(fragment); + } + } + + function onload() { + var xhr = this, x = document.createElement('x'), s = xhr.s; + + x.innerHTML = xhr.responseText; + + xhr.onload = function () { + s.splice(0).map(function (array) { + embed(array[0], x.querySelector('#' + array[1].replace(/(\W)/g, '\\$1'))); + }); + }; + + xhr.onload(); + } + + function onframe() { + var use; + + while ((use = uses[0])) { + if (LTEIE8) { + var img = new Image(), src, q; + + src = use.getAttribute('xlink:href'); + q = (/\?[^#]+/.exec(src) || [''])[0]; + img.src = src.replace(/\?[^#]+/, '').replace('#', '.').replace(/^\./, '') + '.png' + q; + + use.parentNode.replaceChild(img, use); + } else { + var + svg = use.parentNode, + url = use.getAttribute('xlink:href').split('#'), + url_root = url[0], + url_hash = url[1]; + + svg.removeChild(use); + + if (url_root.length) { + var xhr = CACHE[url_root] = CACHE[url_root] || new XMLHttpRequest(); + + if (!xhr.s) { + xhr.s = []; + + xhr.open('GET', url_root); + + xhr.onload = onload; + + xhr.send(); + } + + xhr.s.push([svg, url_hash]); + + if (xhr.readyState === 4) { + xhr.onload(); + } + + } else { + embed(svg, document.getElementById(url_hash)); + } + } + } + + requestAnimationFrame(onframe); + } + + if (LTEIE8 || IE9TO11) { + onframe(); + } +})( + document, + document.getElementsByTagName('use'), + window.requestAnimationFrame || window.setTimeout, + {}, + /MSIE\s[1-8]\b/.test(navigator.userAgent), + /Trident\/[567]\b/.test(navigator.userAgent) || /Edge\/12/.test(navigator.userAgent) || (navigator.userAgent.match(/AppleWebKit\/(\d+)/) || [])[1] < 538, + document.createElement('svg'), + document.createElement('use') +);