Browse Source

Implement desktop UI

dev/WO-783
Mario Volke 9 years ago committed by Tankred Hase
parent
commit
4ef2b834b6
  1. 2
      .gitignore
  2. 271
      Gruntfile.js
  3. 11
      package.json
  4. BIN
      src/font/icons.eot
  5. 28
      src/font/icons.svg
  6. BIN
      src/font/icons.ttf
  7. BIN
      src/font/icons.woff
  8. 21
      src/img/icons/about.svg
  9. 21
      src/img/icons/account.svg
  10. 9
      src/img/icons/add_contact.svg
  11. 9
      src/img/icons/attachment.svg
  12. 9
      src/img/icons/back.svg
  13. 31
      src/img/icons/bug.svg
  14. 7
      src/img/icons/check.svg
  15. 9
      src/img/icons/close.svg
  16. 9
      src/img/icons/close_circle.svg
  17. 39
      src/img/icons/contact.svg
  18. 9
      src/img/icons/decrypted.svg
  19. 16
      src/img/icons/delete.svg
  20. 11
      src/img/icons/draft.svg
  21. 8
      src/img/icons/dropdown.svg
  22. 12
      src/img/icons/encrypted.svg
  23. 12
      src/img/icons/folder.svg
  24. 9
      src/img/icons/forward_light.svg
  25. 16
      src/img/icons/inbox.svg
  26. 9
      src/img/icons/info.svg
  27. 17
      src/img/icons/key.svg
  28. 9
      src/img/icons/navicon.svg
  29. 9
      src/img/icons/offline.svg
  30. 9
      src/img/icons/reply.svg
  31. 9
      src/img/icons/reply_all_light.svg
  32. 9
      src/img/icons/reply_light.svg
  33. 9
      src/img/icons/search.svg
  34. 12
      src/img/icons/sent.svg
  35. 9
      src/img/icons/star.svg
  36. 8
      src/img/icons/star_filled.svg
  37. 16
      src/img/icons/trash.svg
  38. 9
      src/img/icons/write.svg
  39. 5
      src/index.html
  40. 9
      src/js/app.js
  41. 22
      src/js/controller/mail-list.js
  42. 43
      src/js/controller/popover.js
  43. 2
      src/js/controller/write.js
  44. 129
      src/js/directives/common.js
  45. 7
      src/sass/_functions.scss
  46. 15
      src/sass/_grid.scss
  47. 54
      src/sass/_mixins.scss
  48. 396
      src/sass/_normalize.scss
  49. 34
      src/sass/_responsive.scss
  50. 84
      src/sass/_variables.scss
  51. 70
      src/sass/all.scss
  52. 59
      src/sass/base/_config.scss
  53. 14
      src/sass/base/_fonts.scss
  54. 20
      src/sass/base/_scaffolding.scss
  55. 69
      src/sass/blocks/basics/_attachments.scss
  56. 325
      src/sass/blocks/basics/_buttons.scss
  57. 61
      src/sass/blocks/basics/_dropdown.scss
  58. 80
      src/sass/blocks/basics/_form.scss
  59. 62
      src/sass/blocks/basics/_labels.scss
  60. 48
      src/sass/blocks/basics/_mail-addresses.scss
  61. 8
      src/sass/blocks/basics/_spinner.scss
  62. 0
      src/sass/blocks/basics/_tags-input.scss
  63. 62
      src/sass/blocks/basics/_tooltip.scss
  64. 20
      src/sass/blocks/layout/_action-bar.scss
  65. 108
      src/sass/blocks/layout/_app.scss
  66. 47
      src/sass/blocks/layout/_mail-list-wrapper.scss
  67. 199
      src/sass/blocks/layout/_nav.scss
  68. 458
      src/sass/blocks/views/_mail-list.scss
  69. 165
      src/sass/blocks/views/_read.scss
  70. 74
      src/sass/blocks/views/_write.scss
  71. 161
      src/sass/components/_buttons.scss
  72. 24
      src/sass/components/_icons.scss
  73. 25
      src/sass/components/_input.scss
  74. 64
      src/sass/components/_labels.scss
  75. 38
      src/sass/components/_layout.scss
  76. 36
      src/sass/components/_lightbox.scss
  77. 16
      src/sass/components/_mail-addresses.scss
  78. 164
      src/sass/components/_mail-list.scss
  79. 75
      src/sass/components/_nav.scss
  80. 134
      src/sass/components/_popover.scss
  81. 16
      src/sass/components/_scrollbars.scss
  82. 425
      src/sass/lib/_normalize.scss
  83. 61
      src/sass/lib/_scut.scss
  84. 23
      src/sass/mixins/_responsive.scss
  85. 56
      src/sass/mixins/_scrollbar.scss
  86. 17
      src/sass/read-sandbox.scss
  87. 36
      src/sass/utilities/_responsive.scss
  88. 2
      src/sass/views/_about.scss
  89. 4
      src/sass/views/_add-account.scss
  90. 18
      src/sass/views/_contacts.scss
  91. 2
      src/sass/views/_dialog.scss
  92. 7
      src/sass/views/_login.scss
  93. 138
      src/sass/views/_mail-list.scss
  94. 94
      src/sass/views/_navigation.scss
  95. 199
      src/sass/views/_read.scss
  96. 169
      src/sass/views/_write.scss
  97. 4
      src/tpl/about.html
  98. 6
      src/tpl/account.html
  99. 34
      src/tpl/action-bar.html
  100. 102
      src/tpl/add-account.html
  101. Some files were not shown because too many files have changed in this diff Show More

2
.gitignore vendored

@ -5,8 +5,10 @@ test/lib/ @@ -5,8 +5,10 @@ test/lib/
.sass-cache
src/css/
dist/
compile/
release/
test/integration/src/
src/img/icons/all.svg
.elasticbeanstalk/
test/*/index.js
**/*.browserified.js

271
Gruntfile.js

@ -17,53 +17,65 @@ module.exports = function(grunt) { @@ -17,53 +17,65 @@ module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
shell: {
options: {
stderr: false
},
target: {
command: 'dir=$(pwd) && cd node_modules/mailreader/ && npm install --production && cd $dir'
}
},
connect: {
dev: {
options: {
port: 8580,
base: '.',
keepalive: true
}
},
test: {
options: {
port: 8581,
base: '.'
}
}
},
// General
jshint: {
all: ['Gruntfile.js', 'src/*.js', 'src/js/**/*.js', 'test/unit/*-test.js', 'test/integration/*-test.js'],
options: {
jshintrc: '.jshintrc'
}
clean: {
dist: ['dist', 'compile', 'test/lib', 'test/integration/src']
},
mocha_phantomjs: {
all: {
options: {
urls: [
'http://localhost:<%= connect.test.options.port %>/test/unit/index.html',
'http://localhost:<%= connect.test.options.port %>/test/integration/index.html'
]
}
copy: {
npmDev: {
expand: true,
flatten: true,
cwd: './',
src: [
'node_modules/mocha/mocha.css',
'node_modules/mocha/mocha.js',
'node_modules/chai/chai.js',
'node_modules/sinon/pkg/sinon.js',
'node_modules/browsercrow/src/*.js',
'node_modules/browsersmtp/src/*.js',
'src/lib/openpgp/openpgp.js',
'src/lib/openpgp/openpgp.worker.js',
'src/lib/forge/forge.min.js',
'dist/js/pbkdf2-worker.min.js'
],
dest: 'test/lib/'
},
lib: {
expand: true,
flatten: true,
cwd: 'src/lib/',
src: ['openpgp/openpgp.js', 'openpgp/openpgp.worker.js', 'forge/forge.min.js'],
dest: 'dist/js/'
},
font: {
expand: true,
cwd: 'src/font/',
src: ['*'],
dest: 'dist/font/'
},
img: {
expand: true,
cwd: 'src/img/',
src: ['*'],
dest: 'dist/img/'
},
tpl: {
expand: true,
cwd: 'src/tpl/',
src: ['*'],
dest: 'dist/tpl/'
},
app: {
expand: true,
cwd: 'src/',
src: ['*.js', '*.json', 'manifest.*'],
dest: 'dist/'
}
},
clean: {
dist: ['dist', 'test/lib', 'test/integration/src'],
release: ['dist/**/*.browserified.js', 'dist/**/*.js.map']
},
// Stylesheets
sass: {
dist: {
@ -73,7 +85,6 @@ module.exports = function(grunt) { @@ -73,7 +85,6 @@ module.exports = function(grunt) {
}
}
},
autoprefixer: {
options: {
browsers: ['last 2 versions']
@ -85,10 +96,9 @@ module.exports = function(grunt) { @@ -85,10 +96,9 @@ module.exports = function(grunt) {
}
}
},
csso: {
options: {
banner: '/*! Copyright ยฉ <%= grunt.template.today("yyyy") %>, Whiteout Networks GmbH.*/\n'
banner: '/*! Copyright ยฉ 2013, Whiteout Networks GmbH. All rights reserved.*/\n'
},
dist: {
files: {
@ -98,22 +108,12 @@ module.exports = function(grunt) { @@ -98,22 +108,12 @@ module.exports = function(grunt) {
}
},
watch: {
css: {
files: ['src/sass/**/*.scss'],
tasks: ['dist-css', 'manifest']
},
js: {
files: ['src/js/**/*.js'],
tasks: ['dist-js', 'copy:integration', 'manifest']
},
lib: {
files: ['src/lib/**/*.js'],
tasks: ['copy:lib', 'manifest']
},
app: {
files: ['src/*.js', 'src/**/*.html', 'src/**/*.json', 'src/manifest.*', 'src/img/**/*', 'src/font/**/*'],
tasks: ['copy:app', 'copy:ca', 'copy:tpl', 'copy:img', 'copy:font', 'manifest-dev', 'manifest']
// JavaScript
jshint: {
all: ['Gruntfile.js', 'src/*.js', 'src/js/**/*.js', 'test/unit/*-test.js', 'test/integration/*-test.js'],
options: {
jshintrc: '.jshintrc'
}
},
@ -320,58 +320,112 @@ module.exports = function(grunt) { @@ -320,58 +320,112 @@ module.exports = function(grunt) {
}
},
copy: {
npmDev: {
expand: true,
flatten: true,
cwd: './',
src: [
'node_modules/mocha/mocha.css',
'node_modules/mocha/mocha.js',
'node_modules/chai/chai.js',
'node_modules/sinon/pkg/sinon.js',
'node_modules/browsercrow/src/*.js',
'node_modules/browsersmtp/src/*.js',
'src/lib/openpgp/openpgp.min.js',
'src/lib/openpgp/openpgp.worker.min.js',
'src/lib/forge/forge.min.js',
'dist/js/pbkdf2-worker.min.js'
],
dest: 'test/lib/'
mocha_phantomjs: {
all: {
options: {
urls: [
'http://localhost:<%= connect.test.options.port %>/test/unit/index.html',
'http://localhost:<%= connect.test.options.port %>/test/integration/index.html'
]
}
}
},
// Assets
svgmin: {
options: {
plugins: [{
removeViewBox: false
}, {
removeUselessStrokeAndFill: false
}]
},
lib: {
expand: true,
flatten: true,
cwd: 'src/lib/',
src: ['openpgp/openpgp.min.js', 'openpgp/openpgp.worker.min.js', 'forge/forge.min.js'],
dest: 'dist/js/'
icons: {
files: [{
expand: true,
src: ['img/icons/*.svg'],
cwd: 'src/',
dest: 'compile/'
}]
}
},
svgstore: {
options: {
prefix: 'icon-',
svg: {
viewBox: '0 0 100 100',
xmlns: 'http://www.w3.org/2000/svg'
},
cleanup: ['fill', 'stroke']
},
font: {
expand: true,
cwd: 'src/font/',
src: ['*'],
dest: 'dist/font/'
icons: {
files: {
'src/img/icons/all.svg': ['compile/img/icons/*.svg'],
}
}
},
'string-replace': {
index: {
files: {
'dist/index.html': 'src/index.html'
},
options: {
replacements: [{
pattern: /<!-- @import (.*?) -->/ig,
replacement: function(match, p1) {
return grunt.file.read('src/' + p1);
}
}]
}
}
},
// Development
connect: {
dev: {
options: {
port: 8580,
base: '.',
keepalive: true
}
},
img: {
expand: true,
cwd: 'src/img/',
src: ['*'],
dest: 'dist/img/'
test: {
options: {
port: 8581,
base: '.'
}
}
},
// Utilities
watch: {
css: {
files: ['src/sass/**/*.scss'],
tasks: ['dist-css', 'manifest']
},
tpl: {
expand: true,
cwd: 'src/tpl/',
src: ['*'],
dest: 'dist/tpl/'
js: {
files: ['src/js/**/*.js'],
tasks: ['copy:js', 'copy:integration', 'manifest']
},
icons: {
files: ['src/index.html', 'src/img/icons/*.svg', '!src/img/icons/all.svg'],
tasks: ['svgmin', 'svgstore', 'string-replace']
},
lib: {
files: ['src/lib/**/*.js'],
tasks: ['copy:lib', 'manifest']
},
app: {
expand: true,
cwd: 'src/',
src: ['*.html', '*.js', '*.json', 'manifest.*'],
dest: 'dist/'
files: ['src/*.js', 'src/**/*.html', 'src/**/*.json', 'src/manifest.*', 'src/img/**/*', 'src/font/**/*'],
tasks: ['copy:app', 'copy:ca', 'copy:tpl', 'copy:img', 'copy:font', 'manifest-dev', 'manifest']
}
},
// Deployment
compress: {
main: {
options: {
@ -430,13 +484,16 @@ module.exports = function(grunt) { @@ -430,13 +484,16 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-manifest');
grunt.loadNpmTasks('grunt-mocha-phantomjs');
grunt.loadNpmTasks('grunt-exorcise');
grunt.loadNpmTasks('grunt-shell');
grunt.loadNpmTasks('grunt-string-replace');
grunt.loadNpmTasks('grunt-svgmin');
grunt.loadNpmTasks('grunt-svgstore');
// Build tasks
grunt.registerTask('dist-css', ['sass', 'autoprefixer', 'csso']);
grunt.registerTask('dist-js', ['browserify', 'exorcise', 'uglify']);
grunt.registerTask('dist-copy', ['copy']);
grunt.registerTask('dist', ['clean:dist', 'shell', 'dist-css', 'dist-js', 'dist-copy', 'manifest']);
grunt.registerTask('dist-assets', ['svgmin', 'svgstore', 'string-replace']);
grunt.registerTask('dist', ['clean', 'dist-css', 'dist-js', 'dist-assets', 'dist-copy', 'manifest']);
// Test/Dev tasks
grunt.registerTask('dev', ['connect:dev']);
@ -508,8 +565,8 @@ module.exports = function(grunt) { @@ -508,8 +565,8 @@ module.exports = function(grunt) {
}
grunt.registerTask('release-dev', ['dist', 'manifest-dev', 'compress']);
grunt.registerTask('release-test', ['dist', 'manifest-test', 'clean:release', 'compress']);
grunt.registerTask('release-stable', ['dist', 'manifest-stable', 'clean:release', 'compress']);
grunt.registerTask('release-test', ['dist', 'manifest-test', 'compress']);
grunt.registerTask('release-stable', ['dist', 'manifest-stable', 'compress']);
grunt.registerTask('default', ['release-dev']);
};

11
package.json

@ -50,12 +50,13 @@ @@ -50,12 +50,13 @@
"browsersmtp": "https://github.com/whiteout-io/browsersmtp/tarball/master",
"chai": "~1.7.2",
"grunt": "~0.4.1",
"grunt-autoprefixer": "~0.7.2",
"grunt-browserify": "^3.0.1",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-manifest": "^0.4.0",
"grunt-autoprefixer": "~0.7.2",
"grunt-contrib-compress": "~0.5.2",
"grunt-contrib-connect": "~0.5.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-jshint": "~0.6.4",
"grunt-contrib-sass": "~0.7.3",
"grunt-contrib-uglify": "^0.6.0",
@ -63,10 +64,12 @@ @@ -63,10 +64,12 @@
"grunt-shell": "~1.1.1",
"grunt-csso": "~0.6.1",
"grunt-exorcise": "^0.2.0",
"grunt-manifest": "^0.4.0",
"grunt-mocha-phantomjs": "^0.6.0",
"mocha": "^1.21.4",
"sinon": "~1.7.3",
"time-grunt": "^1.0.0"
"time-grunt": "^1.0.0",
"grunt-string-replace": "~1.0.0",
"grunt-svgmin": "~1.0.0",
"grunt-svgstore": "~0.3.4"
}
}

BIN
src/font/icons.eot

Binary file not shown.

28
src/font/icons.svg

@ -1,28 +0,0 @@ @@ -1,28 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icons" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" d="" horiz-adv-x="0" />
<glyph unicode="&#xe000;" d="M512 960c-282.046 0-512-229.954-512-512s229.954-512 512-512c282.046 0 512 229.954 512 512s-229.954 512-512 512zM620.454 448l216.954-216.954-108.454-108.454-216.954 216.954-216.954-216.954-108.454 108.454 216.954 216.954-216.954 216.954 108.454 108.454 216.954-216.954 216.954 216.954 108.454-108.454-216.954-216.954z" />
<glyph unicode="&#xe001;" d="M923.090 828.37h426.728v-125.254h-426.728zM1076.13 976.802h125.254v-426.728h-125.254zM848.85-39.052c-4.654-32.488 0-32.488-46.406-37.096-27.834-4.654-194.84-4.654-366.452-4.654-194.84 0-398.894 0-412.812 4.654-55.668 13.918-23.18 120.6 51.014 171.614 60.322 37.096 180.922 97.42 213.364 102.028 46.406 9.262 51.014 37.096 0 125.254-9.262 18.572-23.18 78.848-23.18 143.778 0 102.028 18.572 171.614 106.682 208.756 18.572 4.654 37.096 9.262 55.668 9.262 60.322 0 115.944-32.488 139.17-83.502 32.488-64.93 18.572-236.544-18.572-296.866-41.752-69.586-37.096-92.766 9.262-102.028 27.834-9.262 120.6-51.014 208.756-97.42 60.326-32.442 92.768-88.112 83.506-143.78zM1136.454 81.548c0-23.18 0-27.834-32.488-32.488-18.572-4.654-102.028-4.654-208.756-4.654-18.572 41.752-51.014 83.502-102.028 106.682-55.668 32.488-115.944 60.322-167.006 83.502 32.488 13.918 60.322 27.834 74.24 32.488 32.488 9.262 37.096 27.834 0 97.42-9.262 18.572-18.572 64.93-23.18 115.944 0 78.848 18.572 134.516 88.11 162.35 13.918 4.654 27.834 4.654 41.752 4.654 46.406 0 88.11-23.18 106.682-64.93 23.18-51.014 13.918-185.53-13.918-236.544-32.488-55.668-27.834-74.24 9.262-78.848 23.18-4.654 92.766-41.752 162.35-78.848 41.8-23.226 69.588-64.978 64.98-106.728z" horiz-adv-x="1348" />
<glyph unicode="&#xe002;" d="M0 551.488l458.048 420.416v-213.312c884.736 0 821.952-840.768 821.952-840.768-175.68 583.552-821.952 414.144-821.952 414.144v-213.312l-458.048 432.832z" horiz-adv-x="1280" />
<glyph unicode="&#xe003;" d="M677.79 796.648c4.876 4.876 39.010 39.010 97.524 58.514 78.020 24.38 160.914 4.876 224.304-58.514s87.772-141.41 58.514-224.304c-19.504-58.514-53.638-97.524-58.514-102.4l-448.61-448.61c-78.020-78.020-273.066-180.42-453.486 0s-78.020 375.466 0 448.61l482.742 482.742c19.504 19.504 48.762 19.504 63.39 0 19.504-19.504 19.504-48.762 0-63.39l-482.742-482.742c-9.752-4.876-160.914-160.914 0-321.828 156.038-156.038 307.2-14.628 321.828 0l448.61 453.486c0 0 24.38 24.38 39.010 63.39 14.628 48.762 4.876 87.772-39.010 131.658-87.772 87.772-175.542 14.628-195.048 0l-419.352-419.352c-14.628-14.628-24.38-39.010 0-68.266 24.38-24.38 48.762-14.628 63.39 0l292.572 292.572c19.504 14.628 48.762 14.628 63.39 0 19.504-19.504 19.504-48.762 0-68.266l-292.572-287.696c-39.010-39.010-121.904-68.266-195.048 0-73.142 68.266-39.010 156.038 0 195.048l429.108 419.348z" horiz-adv-x="1072" />
<glyph unicode="&#xe004;" d="M0 951.326h1445.648v-193.114h-1445.648zM0 137.788h1445.648v-193.174h-1445.648zM0 547.508h1445.648v-193.174h-1445.648z" horiz-adv-x="1444" />
<glyph unicode="&#xe005;" d="M764.712 818.958c26.138 0 46.996-20.912 46.996-46.996v-31.366c0-20.912-15.684-41.822-36.594-46.996v-679.182c0-41.822-36.594-78.362-83.59-78.362l-574.626-0.056c-46.996 0-83.59 36.594-83.59 78.362v679.182c-20.912 5.228-36.596 26.14-36.596 47.050v31.314c0 26.138 20.912 46.996 46.996 46.996h141.042l0.056 57.506c0 46.996 36.54 83.59 78.362 83.59h276.912c46.996 0 83.59-36.594 83.59-83.59v-57.452h141.042zM670.666 30.046c5.228 0 10.456 5.228 10.456 10.456v653.042h-553.822v-653.042c0-5.228 5.228-10.456 10.456-10.456h532.91zM237.030 82.27c-26.138 0-46.996 20.912-46.996 46.996l-0.002 465.004c0 26.138 20.912 41.822 46.996 41.822h10.456c26.138 0 46.996-20.912 46.996-41.822v-465.004c0-26.138-20.912-46.996-46.996-46.996h-10.454zM263.168 886.864c-5.228 0-10.456 0-10.456-10.454v-57.452h302.996v57.452c0 5.228-5.228 10.456-10.456 10.456l-282.084-0.002zM398.982 82.27c-26.138 0-46.996 20.912-46.996 46.996v465.004c0 26.138 20.912 41.822 46.996 41.822h5.228c26.138 0 46.996-20.912 46.996-41.822v-465.004c0-26.138-20.912-46.996-46.996-46.996h-5.228zM560.936 82.27c-26.138 0-46.996 20.912-46.996 46.996v465.004c0 26.138 20.912 41.822 46.996 41.822h10.456c26.138 0 46.996-20.912 46.996-41.822v-465.004c0-26.138-20.912-46.996-46.996-46.996h-10.456z" horiz-adv-x="808" />
<glyph unicode="&#xe006;" d="M876.828 327.396l126.066 126.066v-372.622c0-76.744-60.302-136.988-131.528-136.988l-739.838-0.058c-76.744 0-131.528 60.302-131.528 136.988v734.378c0 76.688 60.302 136.99 131.528 136.99h750.762l-126.066-126.066h-580.836c-27.42 0-49.322-21.902-49.322-49.322v-652.118c0-27.42 21.902-49.322 49.322-49.322h652.118c27.42 0 49.322 21.902 49.322 49.322v202.752zM613.774 239.73l-131.528 131.528-49.322-180.85 180.85 49.322zM657.636 283.592l427.464 427.464-131.586 131.468-427.406-421.944 131.528-136.988zM1134.364 754.858l60.302 60.302-136.988 136.99-60.302-60.302 136.988-136.99z" horiz-adv-x="1194" />
<glyph unicode="&#xe007;" d="M117.76 954.88l906.176-906.112-121.408-121.408-906.176 906.112zM-3.648 57.536l906.112 906.112 121.408-121.344-906.112-906.176z" />
<glyph unicode="&#xe008;" d="M0 960l1024-1024h-1024z" />
<glyph unicode="&#xe009;" d="M681.984 655.104v-119.744h-153.6v119.744c0 81.472-64.768 147.712-144.384 147.712s-144.384-66.24-144.384-147.712v-119.744h-153.6v119.744c-0.064 168.064 133.696 304.896 297.984 304.896 164.352 0 297.984-136.832 297.984-304.896zM0 476.096v-540.096h768v540.096h-768zM308.224-0.896l24.192 195.968 5.12 41.792c-21.632 15.232-35.712 40.64-35.712 69.44 0 11.136 2.112 21.696 5.888 31.296 12.096 30.848 41.664 52.736 76.288 52.736s64.192-21.888 76.288-52.736c3.776-9.664 5.888-20.224 5.888-31.296 0-28.8-14.208-54.272-35.84-69.312l5.184-41.856 24.064-195.968h-151.36z" horiz-adv-x="768" />
<glyph unicode="&#xe010;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM448 704h128v-128h-128zM640 192h-256v64h64v192h-64v64h192v-256h64z" />
<glyph unicode="&#xe011;" d="M768 320.032l-182.82 182.822 438.82 329.15-128.010 127.996-548.52-219.442-172.7 172.706c-49.78 49.778-119.302 61.706-154.502 26.508-35.198-35.198-23.268-104.726 26.51-154.5l172.686-172.684-219.464-548.582 127.99-128.006 329.19 438.868 182.826-182.828v-255.98h127.994l63.992 191.988 191.988 63.996v127.992l-255.98-0.004z" />
<glyph unicode="&#xe012;" d="M1120.549 655.726v-119.954h-155.063v119.954c0 81.92-64.366 146.286-143.36 146.286s-143.36-67.291-143.36-146.286v-119.954h-155.063v119.954c0 166.766 134.583 304.274 298.423 304.274s298.423-137.509 298.423-304.274zM0 477.257v-541.257h766.537v541.257h-766.537zM307.2 0.366l23.406 196.023 5.851 40.96c-20.48 14.629-35.109 40.96-35.109 70.217 0 11.703 2.926 20.48 5.851 32.183 11.703 32.183 40.96 52.663 76.069 52.663s64.366-20.48 76.069-52.663c2.926-8.777 5.851-20.48 5.851-32.183 0-29.257-14.629-55.589-35.109-70.217l5.851-40.96 23.406-196.023h-152.137z" horiz-adv-x="1121" />
<glyph unicode="&#xe013;" d="M1352.048-64l-49.054 141.030c-91.976 257.533-300.455 309.653-459.88 309.653-76.647 0-144.096-12.263-174.754-21.461l9.198-214.611-459.88 389.365 423.090 420.024 9.198-202.347c85.844 3.066 162.491-6.132 233.006-24.527h6.132l3.066-3.066c469.078-122.635 459.88-640.766 459.88-643.832v-150.228zM843.114 441.868c144.096 0 324.982-39.856 441.485-208.479-30.659 150.228-125.701 374.036-407.76 444.551l-6.132 3.066c-70.515 18.395-153.293 24.527-245.269 21.461h-27.593l-6.132 134.898-291.257-288.192 318.85-269.796-6.132 128.766 21.461 6.132c0 0 91.976 27.593 208.479 27.593zM462.946 153.677l-462.946 389.365 423.090 416.958 12.263-171.689-55.186-6.132-6.132 52.12-291.257-288.192 315.784-266.731-3.066 49.054 55.186 6.132z" horiz-adv-x="1355" />
<glyph unicode="&#xe014;" d="M1073.595-64l-40.843 134.199c-81.687 268.399-297.573 323.829-466.781 323.829-61.265 0-110.86-8.752-137.117-11.67v-207.134l-428.855 399.681 428.855 385.094v-198.382c212.969-5.835 376.342-70.017 490.12-192.547 186.712-201.299 166.291-481.368 166.291-493.037l-11.67-140.034zM568.889 449.459c125.447 0 335.499-32.091 455.111-224.638-14.587 93.356-52.513 212.969-142.952 312.16-107.943 116.695-268.399 175.043-475.533 175.043h-26.256v131.282l-300.49-268.399 300.49-277.151v128.365l20.422 5.835c0 0 70.017 17.504 169.208 17.504z" horiz-adv-x="1085" />
<glyph unicode="&#xe015;" d="M458.105-64v272.842h-458.105v495.158l458.105 3.368v252.632l461.474-424.421 101.053-97.684-562.526-501.895zM60.632 269.474h458.105v-198.737l410.947 367.158-53.895 53.895-357.053 330.105v-175.158l-458.105-3.368v-373.895z" horiz-adv-x="1017" />
<glyph unicode="&#xe016;" d="M-0.001 447.998l511.995 511.995 47.513-47.513-511.995-511.995-47.513 47.513zM47.517 495.519l511.995-511.995-47.513-47.513-511.995 511.995 47.513 47.513z" horiz-adv-x="560" />
<glyph unicode="&#xe017;" d="M890 186.6l-169.6 171.8c27.6 48.2 42 101.8 42 155.8 0 175.2-142.4 317.8-317.2 317.8s-317.2-142.6-317.2-317.8c0-175.2 142.4-317.8 317.2-317.8 55.8 0 111 15.4 160.2 44.8l168.8-171.2c3.8-3.8 9.2-6.2 14.6-6.2s10.8 2.2 14.6 6.2l86.6 87.6c8 8.2 8 21 0 29zM445.2 708.2c106.8 0 193.6-87 193.6-194s-86.8-194-193.6-194c-106.8 0-193.6 87-193.6 194s86.8 194 193.6 194z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 9.3 KiB

BIN
src/font/icons.ttf

Binary file not shown.

BIN
src/font/icons.woff

Binary file not shown.

21
src/img/icons/about.svg

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="_x2014_ลฝร“ลฅ_x5F_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 133.5 597.5 574.9" enable-background="new 0 133.5 597.5 574.9" xml:space="preserve">
<g>
<path fill="#535353" d="M420.5,161.8c6.6,0,15.5,0,24.4,2.2c53.1,4.4,112.9,53.1,121.8,146.1V339c0,4.4,0,8.9-2.2,13.3v2.2
c0,4.4-2.2,8.9-2.2,13.3c0,0,0,0,0,2.2c-2.2,8.9-4.4,19.9-8.9,28.8l0,0c-26.6,70.8-90.8,155-223.6,252.4c-2.2,0-2.2,2.2-4.4,2.2
c-4.4,2.2-6.6,4.4-11.1,8.9c-4.4,4.4-11.1,8.9-17.7,11.1c-6.6-4.4-11.1-8.9-17.7-11.1c-4.4-2.2-6.6-4.4-11.1-8.9
c-2.2,0-2.2-2.2-4.4-2.2c-132.8-97.4-197-181.6-223.6-252.4l0,0c-4.4-11.1-6.6-19.9-8.9-28.8c0,0,0,0,0-2.2c0-4.4-2.2-8.9-2.2-13.3
v-2.2c0-4.4,0-8.9,0-13.3v-31c6.6-93,68.6-141.7,121.8-146.1c8.9,0,15.5,0,24.4,0l0,0c8.9,0,17.7,0,26.6,2.2
c44.3,6.6,68.6,31,97.4,64.2c28.8-33.2,53.1-57.6,97.4-64.2C402.8,161.8,411.7,161.8,420.5,161.8 M423.3,133.5
c-11.3,0-20.4,0-31.7,2.3c-43,6.8-72.4,29.4-95.1,54.3c-22.6-24.9-52.1-47.5-95.1-54.3c-9.1-2.3-20.4-2.3-29.4-2.3
c-9.1,0-18.1,0-27.2,2.3C81.5,140.3,9.1,196.9,0,305.5l0,0l0,0v31.7l0,0l0,0c0,4.5,0,9.1,2.3,13.6v2.3c0,4.5,2.3,9.1,2.3,13.6l0,0
l0,0c2.3,11.3,4.5,20.4,9.1,29.4l0,0l2.3,9.1c31.7,86,108.6,174.3,235.4,269.3l2.3,2.3l2.3,2.3l4.5,2.3l6.8,4.5
c6.8,4.5,11.3,9.1,18.1,13.6l13.6,9.1l13.6-9.1c6.8-4.5,11.3-9.1,18.1-13.6c4.5-2.3,6.8-6.8,11.3-9.1l4.5-2.3
c122.2-90.5,199.2-174.3,230.9-258l0,0l4.5-11.3c0,0,0-2.3,2.3-2.3l0,0l0,0c2.3-9.1,6.8-20.4,9.1-29.4l0,0v-2.3
c0-4.5,2.3-9.1,2.3-15.8l0,0V353c0-6.8,2.3-11.3,2.3-15.8l0,0l0,0v-31.7l0,0l0,0c-9.1-108.6-81.5-163-144.9-169.8
C441.4,133.5,432.3,133.5,423.3,133.5L423.3,133.5z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

21
src/img/icons/account.svg

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 20 23" enable-background="new 0 0 20 23" xml:space="preserve">
<g>
<g>
<g>
<path fill="#79C9EC" d="M20,20.3c0-0.6-0.4-6.2-1.7-7.6l-0.1-0.1c0,0-1.2-0.8-2.3-1.1c-0.5-0.1-1.9-0.5-2.6-1.3l-0.1-0.1
l-0.1-0.9c0.2-0.3,0.5-0.8,0.7-1.5c0.2-0.2,0.6-0.7,0.5-1.7V5.3l-0.1-0.1c0,0-0.1-0.1-0.1-0.1c0.1-1.1,0-3.2-1.3-4.1
c-0.2-0.2-1-0.9-2.9-0.9C8.2,0.1,7.4,0.7,7.2,0.9C5.8,1.8,5.8,4,5.8,5.1C5.7,5.1,5.7,5.2,5.7,5.2L5.6,5.3l0,0.5
C5.5,6.9,5.9,7.4,6.1,7.6c0.2,0.7,0.6,1.3,0.7,1.5l-0.1,0.9l-0.1,0.1c-0.8,0.9-2.6,1.3-2.6,1.3c-1.1,0.3-2.3,1.1-2.3,1.1
l-0.1,0.1c-1.3,1.4-1.6,7-1.7,7.6l0,0.2l0.2,0.1C0.3,20.8,3.5,23,10,23c6.5,0,9.7-2.2,9.8-2.3l0.2-0.1L20,20.3z M10,22.1
c-5.3,0-8.3-1.5-9.1-2c0.1-1.8,0.5-5.7,1.4-6.7c0.2-0.1,1.1-0.7,1.9-0.9c0.1,0,2.1-0.4,3.1-1.6l0.3-0.4l0.1-1.6L7.7,8.8
c0,0-0.4-0.6-0.7-1.4L6.8,5.5C6.7,4.7,6.6,2.4,7.7,1.7l0.1-0.1c0,0,0.6-0.6,2.2-0.7c1.6,0.1,2.2,0.7,2.2,0.7v0l0.1,0.1
c1.1,0.7,1,3,0.9,3.9L13,7.4c-0.3,0.8-0.7,1.4-0.7,1.4l-0.1,0.1l0.1,1.6l0.3,0.4c1,1.2,3,1.6,3.1,1.6c0.9,0.2,1.8,0.8,2,0.9
c0.8,1,1.3,5,1.4,6.7C18.3,20.6,15.3,22.1,10,22.1z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

9
src/img/icons/add_contact.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="42" height="32" viewBox="0 0 42 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M28.847 4.113h13.335v3.914h-13.335zM33.629-0.525h3.914v13.335h-3.914zM26.527 31.22c-0.145 1.015 0 1.015-1.45 1.159-0.87 0.145-6.089 0.145-11.452 0.145-6.089 0-12.465 0-12.9-0.145-1.74-0.435-0.724-3.769 1.594-5.363 1.885-1.159 5.654-3.044 6.668-3.188 1.45-0.289 1.594-1.159 0-3.914-0.289-0.58-0.724-2.464-0.724-4.493 0-3.188 0.58-5.363 3.334-6.524 0.58-0.145 1.159-0.289 1.74-0.289 1.885 0 3.623 1.015 4.349 2.609 1.015 2.029 0.58 7.392-0.58 9.277-1.305 2.175-1.159 2.899 0.289 3.188 0.87 0.289 3.769 1.594 6.524 3.044 1.885 1.014 2.899 2.753 2.61 4.493zM35.514 27.452c0 0.724 0 0.87-1.015 1.015-0.58 0.145-3.188 0.145-6.524 0.145-0.58-1.305-1.594-2.609-3.188-3.334-1.74-1.015-3.623-1.885-5.219-2.609 1.015-0.435 1.885-0.87 2.32-1.015 1.015-0.289 1.159-0.87 0-3.044-0.289-0.58-0.58-2.029-0.724-3.623 0-2.464 0.58-4.204 2.753-5.073 0.435-0.145 0.87-0.145 1.305-0.145 1.45 0 2.753 0.724 3.334 2.029 0.724 1.594 0.435 5.798-0.435 7.392-1.015 1.74-0.87 2.32 0.289 2.464 0.724 0.145 2.899 1.305 5.073 2.464 1.306 0.726 2.175 2.031 2.031 3.335z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

9
src/img/icons/attachment.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="34" height="32" viewBox="0 0 34 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M21.181 5.105c0.152-0.152 1.219-1.219 3.048-1.829 2.438-0.762 5.029-0.152 7.009 1.829s2.743 4.419 1.829 7.010c-0.609 1.829-1.676 3.048-1.829 3.2l-14.019 14.019c-2.438 2.438-8.533 5.638-14.171 0s-2.438-11.733 0-14.019l15.086-15.086c0.61-0.61 1.524-0.61 1.981 0 0.61 0.61 0.61 1.524 0 1.981l-15.086 15.086c-0.305 0.152-5.029 5.029 0 10.057 4.876 4.876 9.6 0.457 10.057 0l14.019-14.171c0 0 0.762-0.762 1.219-1.981 0.457-1.524 0.152-2.743-1.219-4.114-2.743-2.743-5.486-0.457-6.095 0l-13.105 13.105c-0.457 0.457-0.762 1.219 0 2.133 0.762 0.762 1.524 0.457 1.981 0l9.143-9.143c0.61-0.457 1.524-0.457 1.981 0 0.61 0.61 0.61 1.524 0 2.133l-9.143 8.991c-1.219 1.219-3.809 2.133-6.095 0s-1.219-4.876 0-6.095l13.41-13.105z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

9
src/img/icons/back.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="32" viewBox="0 0 18 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M-0 16l16-16 1.485 1.485-16 16-1.485-1.485zM1.485 14.515l16 16-1.485 1.485-16-16 1.485-1.485z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 560 B

31
src/img/icons/bug.svg

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="-0.1 374.2 595.3 592.5" enable-background="new -0.1 374.2 595.3 592.5" xml:space="preserve">
<g>
<path fill="#565F73" d="M583,649.5l-84.5-3.6c33.4-48.2,27.3-116-17-160.3c-43.8-43.8-110.6-50.2-158.6-18.2l-3.4-81
c0-7.2-5.9-12.6-13-12.2c-7.2,0-12.6,5.9-12.2,13l4.3,101.7l0,1l0,0.1c-0.3,0-0.6,0-0.9-0.1c-11.3-1-22.6-0.9-33.7,0.2
c0,0,0-0.1,0-0.2c-0.1-1.5-0.5-2.9-1.1-4.3l-38.3-76.9c-2.9-5.9-10.5-8.4-16.8-5.5c-5.9,2.9-8.4,10.5-5.5,16.8l36.9,74.1l0.1,0.2
c-14.2,3.5-28,8.7-41,15.8c-3.4,1.9-6.8,3.9-10.1,6c0.6-0.5,1.2-1,1.8-1.4c2.7-1.7,5.4-3.2,8.1-4.7l-66.8-63.4
c-5.1-5.1-13.1-4.6-17.7,0.4c-4.6,5.1-4.2,13.1,0.4,17.7l62.7,59.5c-5.7,4.4-11.2,9.2-16.5,14.5L29.9,668.8
c-69.4,69,3,247.1,5.9,254.7c0.8,1.7,1.6,2.9,2.9,4.2c1.2,1.3,2.5,2.1,4.1,3c7.6,3,185.4,75.3,254.8,5.9l130.4-130.4
c5.2-5.2,10-10.7,14.4-16.5l62.4,65.8c5,4.7,12.6,5.1,18.1,0.8c5-4.7,5-12.7,0.4-17.7l-66.8-70.5l-0.3-0.3
c6.8-12.6,12-25.9,15.4-39.6c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0,0.1,0.1,0.2,0.1l76.9,38.3c6.3,3.3,13.9,0.8,16.8-5.5
c3.3-6.3,0.8-13.9-5.5-16.8l-76.9-38.3c-2.3-1.2-4.9-1.7-7.3-1.4c-0.1,0-0.2,0-0.3,0c1.3-11.5,1.5-23.1,0.5-34.8l-0.4,0
c0.1-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.2,0.3-0.2c0,0.2,0,0.4,0,0.6l105.5,4.5c6.7,0,12.6-5.1,13-12.2
C595.2,655.8,590.1,649.9,583,649.5z M321.5,519.3c-3.3-0.8-6.6-1.5-9.9-2.2c0,0,0,0-0.1,0c0,0,0,0,0,0c-1,0-2.1-0.2-3.1-0.5
c-0.3-0.1-0.5-0.1-0.8-0.1c0.2,0,0.5,0.1,0.7,0.1c0,0,0,0,0,0c1.1,0.2,2.2,0.4,3.3,0.6c0,0,0,0,0,0s0,0,0,0h0
C315,517.7,318.2,518.4,321.5,519.3z M301.4,515.5c-0.5,0-1-0.1-1.6-0.2C300.4,515.4,300.9,515.5,301.4,515.5z M204.5,535.5
c-0.9,0.8-1.9,1.4-2.9,1.8C202.5,536.7,203.5,536.1,204.5,535.5z M47.9,686.5l130.4-130.3c3.6-3.6,7.3-6.9,11.1-10.1
c15.2,48.2,42.5,93.9,79.6,133.6L52.6,896.2C32.4,839.5,5.3,729.2,47.9,686.5z M410.7,788.8L280.3,919
c-42.7,42.7-153.5,15.1-210.1-5l216.5-216.5c39.8,37.4,85.7,64.8,134.3,79.6C417.8,781.1,414.4,785,410.7,788.8z M434.7,755.2
c-50-14.6-97.8-43.1-137.9-82.8c-0.4-0.4-0.9-0.8-1.3-1.3c-0.5-0.5-1-1-1.5-1.5c-39.6-40.1-68.1-87.4-82.5-137.7
c59.7-32,137.9-18.5,189.6,33.2C453.2,617.2,466.6,695.5,434.7,755.2z M324,519.9c2.5,0.6,4.9,1.4,7.4,2.2c2,0.6,3.9,1.3,5.9,2
c-1.9-0.7-3.9-1.3-5.9-2C328.9,521.3,326.5,520.6,324,519.9z M358.5,533.4c15.4,8,30,18.6,43.1,31.7c7,7.1,13.3,14.6,18.9,22.5
c-5.6-7.9-12-15.4-18.9-22.4C388.8,552.3,374.2,541.6,358.5,533.4z M472.7,644.9c-4.6-21.2-12.8-41.9-24.6-61.1
c11.9,19.2,20.2,39.9,24.8,61.1L472.7,644.9z M472,638.9c-8.8-34-26.9-66-52.5-91.6c-3.1-3.1-6.2-6-9.5-8.9
c3.1,2.8,6.1,5.6,9.1,8.6c10.9,10.9,20.3,22.8,28.2,35.3c-7.8-12.4-17.2-24.2-28.1-35c-27.3-27.5-60.6-45.3-95.1-53.2v0
c8.3,1.9,16.6,4.4,24.7,7.5c-6.8-2.6-13.8-4.9-20.8-6.7c38.3-32.8,97.6-29.4,135.4,8.4C501.1,541.1,504.5,600.3,472,638.9z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

7
src/img/icons/check.svg

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 40.2 29.4" enable-background="new 0 0 40.2 29.4" xml:space="preserve">
<polygon fill="#231F20" points="15.1,29.4 0,14.2 4.2,10 15.1,20.9 36,0 40.2,4.2 "/>
</svg>

After

Width:  |  Height:  |  Size: 551 B

9
src/img/icons/close.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M3.68 0.16l28.318 28.316-3.794 3.794-28.318-28.316zM-0.114 28.202l28.316-28.316 3.794 3.792-28.316 28.318z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 573 B

9
src/img/icons/close_circle.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M16 0c-8.814 0-16 7.186-16 16s7.186 16 16 16c8.814 0 16-7.186 16-16s-7.186-16-16-16zM19.389 16l6.78 6.78-3.389 3.389-6.78-6.78-6.78 6.78-3.389-3.389 6.78-6.78-6.78-6.78 3.389-3.389 6.78 6.78 6.78-6.78 3.389 3.389-6.78 6.78z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 690 B

39
src/img/icons/contact.svg

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 62.4 50.9" enable-background="new 0 0 62.4 50.9" xml:space="preserve">
<g>
<g>
<g>
<path fill="#79C9EC" d="M44.2,45c0-0.2,0-0.5-0.1-0.8c-0.2-3.2-1.1-13.1-3.6-16L40.3,28c-0.1-0.1-2.6-1.8-5.1-2.4
c-0.4-0.1-1.1-0.3-2-0.6c-0.8-0.3-1.6-0.7-2.4-1.2c-0.5-0.3-1-0.7-1.4-1.1l-0.3-0.3L29,20.2c0.4-0.5,1.1-1.8,1.6-3.4
c0.5-0.5,1.4-1.6,1.2-3.9v-1.2l-0.2-0.2c0-0.1-0.2-0.2-0.3-0.3c0.1-2.4,0-7.1-3-9.1c-0.5-0.5-2.2-1.9-6.3-2.1
c-4,0.2-5.8,1.6-6.2,2.1c-2.9,2-3.1,6.8-3,9.1c-0.2,0.1-0.3,0.2-0.3,0.3l-0.2,0.2V13c-0.2,2.3,0.7,3.4,1.2,3.9
c0.5,1.6,1.3,2.8,1.6,3.4l-0.2,2.1l-0.2,0.3C13,24.7,9.1,25.5,9,25.6c-2.5,0.6-5,2.4-5.1,2.4l-0.2,0.2C0.8,31.3,0.1,43.6,0,45
l0,0.5l0.5,0.3c0.3,0.2,7.3,5,21.7,5c13.9,0,20.9-4.5,21.6-5c0,0,0,0,0,0l0.5-0.3L44.2,45z M22.1,48.9c-11.7,0-18.3-3.4-20-4.4
c0.2-3.9,1.2-12.6,3-14.9c0.5-0.3,2.5-1.6,4.3-2.1c0.2,0,4.6-1,6.9-3.5l0.7-0.8l0.2-3.5L17,19.4c0,0-0.9-1.2-1.5-3L15,12.3
c-0.3-1.9-0.4-7,2.1-8.6l0.2-0.2c0,0,1.3-1.4,4.8-1.5C25.7,2.1,27,3.5,27,3.5l0.2,0.2c2.4,1.6,2.3,6.7,2.1,8.6l-0.5,4
c-0.6,1.8-1.5,3-1.5,3L27,19.7l0.3,3.5l0.7,0.8c0.2,0.3,0.5,0.5,0.8,0.8c0.5,0.5,1.1,0.8,1.7,1.1c2.1,1.1,4.2,1.6,4.4,1.6
c1.9,0.5,3.9,1.8,4.4,2.1c1.8,2.2,2.7,10.5,3,14.5c0,0.1,0,0.2,0,0.4c-0.5,0.3-1.4,0.8-2.6,1.3C36.3,47.1,30.5,48.9,22.1,48.9z"
/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#79C9EC" d="M62.4,40.7c-0.1-1.2-0.7-11.9-3.2-14.8L59,25.8c-0.1-0.1-2.3-1.6-4.5-2.2c-1-0.2-3.8-1-5.1-2.5l-0.2-0.3
L49,19c0.3-0.5,1-1.6,1.4-3c0.5-0.4,1.2-1.4,1.1-3.4v-1.1l-0.2-0.2c0-0.1-0.1-0.2-0.3-0.3c0.1-2.1,0-6.3-2.6-8
c-0.4-0.4-2-1.7-5.6-1.8c-3.5,0.1-5.1,1.4-5.5,1.8c-2.6,1.8-2.7,6-2.6,8c-0.1,0.1-0.2,0.2-0.3,0.3l-0.2,0.2v1
c-0.1,2,0.6,3,1.1,3.4c0.5,1.4,1.1,2.5,1.4,3l-0.1,1.8l-0.2,0.3c-1.6,1.8-5.1,2.5-5.1,2.5c-0.2,0-0.4,0.1-0.6,0.2
c-0.8,0.2-1.5,0.6-2.1,0.9c0.5,0.5,1.1,0.8,1.7,1.1c0.5-0.2,1-0.4,1.4-0.5c0.1,0,0.6-0.1,1.4-0.4c1.4-0.5,3.4-1.3,4.7-2.7
l0.6-0.7l0.2-3l-0.2-0.3c0,0-0.8-1.1-1.3-2.6L36.7,12c-0.2-1.6-0.3-6.2,1.8-7.5l0.2-0.2c0,0,1.1-1.2,4.2-1.3
c3.2,0.1,4.3,1.3,4.3,1.3v0l0.2,0.2c2.1,1.4,2,5.9,1.8,7.5l-0.5,3.5c-0.5,1.6-1.3,2.7-1.3,2.7l-0.2,0.3l0.2,3l0.6,0.7
c2,2.2,5.9,3.1,6,3.1c1.7,0.4,3.4,1.5,3.8,1.8c1.7,2,2.5,9.7,2.7,13.1c-1.5,0.9-6.9,3.6-16.4,3.9c-0.4,0-0.8,0-1.2,0
c-0.3,0-0.6,0-0.8,0c0,0.1,0,0.2,0,0.4c-0.5,0.3-1.4,0.8-2.6,1.3c1.1,0.1,2.2,0.1,3.5,0.1c0.2,0,0.5,0,0.7,0
c12.1-0.2,18-4.2,18.3-4.4l0.4-0.3L62.4,40.7z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

9
src/img/icons/decrypted.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="35" height="32" viewBox="0 0 35 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M35.017 9.509v3.749h-4.846v-3.749c0-2.56-2.011-4.571-4.48-4.571s-4.48 2.103-4.48 4.571v3.749h-4.846v-3.749c0-5.211 4.206-9.509 9.326-9.509s9.326 4.297 9.326 9.509zM0 15.086v16.914h23.954v-16.914h-23.954zM9.6 29.989l0.731-6.126 0.183-1.28c-0.64-0.457-1.097-1.28-1.097-2.194 0-0.366 0.091-0.64 0.183-1.006 0.366-1.006 1.28-1.646 2.377-1.646s2.011 0.64 2.377 1.646c0.091 0.274 0.183 0.64 0.183 1.006 0 0.914-0.457 1.737-1.097 2.194l0.183 1.28 0.731 6.126h-4.754z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 926 B

16
src/img/icons/delete.svg

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 25 32" enable-background="new 0 0 25 32" xml:space="preserve">
<g id="icomoon-ignore">
<line fill="none" stroke="#449FDB" x1="0" y1="0" x2="0" y2="0"/>
</g>
<path d="M23.9,4.4c0.8,0,1.5,0.7,1.5,1.5v1c0,0.7-0.5,1.3-1.1,1.5v21.2c0,1.3-1.1,2.4-2.6,2.4l-18,0C2.2,32,1,30.9,1,29.6V8.3
C0.4,8.2-0.1,7.5-0.1,6.9v-1c0-0.8,0.7-1.5,1.5-1.5h4.4l0-1.8C5.8,1.1,6.9,0,8.2,0h8.7c1.5,0,2.6,1.1,2.6,2.6v1.8L23.9,4.4L23.9,4.4
z M21,29.1c0.2,0,0.3-0.2,0.3-0.3V8.3H4v20.4c0,0.2,0.2,0.3,0.3,0.3H21z M7.4,27.4c-0.8,0-1.5-0.7-1.5-1.5V11.4
c0-0.8,0.7-1.3,1.5-1.3h0.3c0.8,0,1.5,0.7,1.5,1.3V26c0,0.8-0.7,1.5-1.5,1.5H7.4z M8.2,2.3c-0.2,0-0.3,0-0.3,0.3v1.8h9.5V2.6
c0-0.2-0.2-0.3-0.3-0.3H8.2z M12.5,27.4c-0.8,0-1.5-0.7-1.5-1.5V11.4c0-0.8,0.7-1.3,1.5-1.3h0.2c0.8,0,1.5,0.7,1.5,1.3V26
c0,0.8-0.7,1.5-1.5,1.5H12.5z M17.5,27.4c-0.8,0-1.5-0.7-1.5-1.5V11.4c0-0.8,0.7-1.3,1.5-1.3h0.3c0.8,0,1.5,0.7,1.5,1.3V26
c0,0.8-0.7,1.5-1.5,1.5H17.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

11
src/img/icons/draft.svg

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="279 397 36 46" enable-background="new 279 397 36 46" xml:space="preserve">
<g id="_x31__1_">
<path fill="#231F20" d="M311,443h-28c-2.2,0-4-1.8-4-4v-38c0-2.2,1.8-4,4-4h18.4l13.6,13.6V439C315,441.2,313.2,443,311,443z
M283,399c-1.1,0-2,0.9-2,2v38c0,1.1,0.9,2,2,2h28c1.1,0,2-0.9,2-2v-27.6L300.6,399H283z"/>
<path fill="#231F20" d="M314,412h-12c-1.1,0-2-0.9-2-2v-12h2v12h12V412z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 783 B

8
src/img/icons/dropdown.svg

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 13 7" enable-background="new 0 0 13 7" xml:space="preserve">
<path d="M12.8,1.8c0.3-0.2,0.3-0.6,0-0.8l-0.9-0.8c-0.3-0.2-0.7-0.2-0.9,0L6.5,4L2.1,0.2c-0.3-0.2-0.7-0.2-0.9,0L0.2,1
c-0.3,0.2-0.3,0.6,0,0.8l5.9,5.1c0.3,0.2,0.7,0.2,0.9,0L12.8,1.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 634 B

12
src/img/icons/encrypted.svg

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 12 16" enable-background="new 0 0 12 16" xml:space="preserve">
<path fill-rule="evenodd" clip-rule="evenodd" fill="#1A171B" d="M10.7,4.8v1.9H8.3V4.8c0-1.3-1-2.3-2.3-2.3c-1.2,0-2.3,1-2.3,2.3
v1.9H1.3V4.8C1.3,2.1,3.4,0,6,0C8.6,0,10.7,2.1,10.7,4.8z"/>
<line fill="#1A171B" x1="10.7" y1="6.6" x2="8.7" y2="6.6"/>
<path fill-rule="evenodd" clip-rule="evenodd" fill="#1A171B" d="M0,7.6L0,16h12V7.6H0z M4.8,15L5.2,12l0.1-0.7
c-0.3-0.2-0.6-0.6-0.6-1.1c0-0.2,0-0.3,0.1-0.5C5,9.2,5.5,8.9,6,8.9c0.5,0,1,0.3,1.2,0.8c0.1,0.2,0.1,0.3,0.1,0.5
c0,0.5-0.2,0.8-0.6,1.1L6.8,12L7.2,15H4.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 969 B

12
src/img/icons/folder.svg

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="273 400 47 40" enable-background="new 273 400 47 40" xml:space="preserve">
<g id="_x32__6_">
<path fill="#231F20" d="M316,440h-39c-2.2,0-4-1.8-4-4v-23c0-2.2,1.8-4,4-4h39c2.2,0,4,1.8,4,4v23C320,438.2,318.2,440,316,440z
M277,411c-1.1,0-2,0.9-2,2v23c0,1.1,0.9,2,2,2h39c1.1,0,2-0.9,2-2v-23c0-1.1-0.9-2-2-2H277z"/>
<path fill="#231F20" d="M320,413h-2v-4c0-1.1-0.9-2-2-2h-20.8c-0.9,0-2.2-0.5-2.8-1.2l-3.2-3.2c-0.3-0.3-1-0.6-1.4-0.6H277
c-1.1,0-2,0.9-2,2v9h-2v-9c0-2.2,1.8-4,4-4h10.8c0.9,0,2.2,0.5,2.8,1.2l3.2,3.2c0.3,0.3,1,0.6,1.4,0.6H316c2.2,0,4,1.8,4,4V413z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 966 B

9
src/img/icons/forward_light.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M14.316 32v-8.526h-14.316v-15.474l14.316-0.105v-7.895l14.421 13.263 3.158 3.053-17.579 15.684zM1.895 21.579h14.316v6.211l12.842-11.474-1.684-1.684-11.158-10.316v5.474l-14.316 0.105v11.684z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 655 B

16
src/img/icons/inbox.svg

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="-0.4 133.7 595.7 570.8" enable-background="new -0.4 133.7 595.7 570.8" xml:space="preserve">
<path fill="#231F20" d="M565.6,492.5l-77.9-307.7l0-0.2c-2.6-11.4-14.7-21-26.4-21H131.6c-9.8,0-23.7,9.4-26.4,21l-0.1,0.2
L28.7,492.4l-29.1-7.2L76,177.7c5.7-24.3,30.6-44.1,55.6-44.1h329.7c25.4,0,49.8,19.3,55.6,44.1l77.8,307.4L565.6,492.5z"/>
<g>
<g>
<path fill="#231F20" d="M566.9,506v155.9c0,8.5-5.7,14.2-14.2,14.2H42.5c-8.5,0-14.2-5.7-14.2-14.2V506h144.6
c12.8,56.7,63.8,99.2,124.7,99.2c59.5,0,112-42.5,124.7-99.2H566.9 M595.3,477.6H409.6c-7.1,0-12.8,5.7-14.2,12.8
c-5.7,48.2-46.8,86.5-97.8,86.5s-92.1-38.3-97.8-86.5c-1.4-7.1-7.1-12.8-14.2-12.8H0v184.3c0,24.1,18.4,42.5,42.5,42.5h510.2
c24.1,0,42.5-18.4,42.5-42.5V477.6L595.3,477.6z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

9
src/img/icons/info.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM16 29c-7.18 0-13-5.82-13-13s5.82-13 13-13 13 5.82 13 13-5.82 13-13 13zM14 8h4v4h-4zM20 24h-8v-2h2v-6h-2v-2h6v8h2z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 656 B

17
src/img/icons/key.svg

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 57.1 59.1" enable-background="new 0 0 57.1 59.1" xml:space="preserve">
<path d="M11,59.1l-8.5-0.2c-0.5,0-1-0.4-1.1-1L0,46.2c0-0.3,0.1-0.6,0.3-0.9C0.5,45.1,0.8,45,1.1,45L6,45l0-4.7
c0-0.3,0.1-0.6,0.3-0.8c0.2-0.2,0.5-0.3,0.8-0.3l4.6,0l0-4.6c0-0.3,0.1-0.6,0.3-0.8c0.2-0.2,0.5-0.3,0.8-0.3l4.6,0l-0.1-6.4
c0-0.3,0.1-0.6,0.3-0.8l4.3-4.3C20.4,16,22.2,9.6,26.6,5.2C29.9,1.9,34.4,0,39.2,0c4.8,0,9.3,1.9,12.7,5.2c7,7,7,18.3,0,25.3
c-3.3,3.3-7.8,5.2-12.6,5.2c-1.4,0-2.7-0.2-4-0.4L11.8,58.8C11.6,59,11.3,59.1,11,59.1L11,59.1z M5.1,56.7l5.5,0.2l23.6-23.6
c0.3-0.3,0.7-0.4,1.1-0.3c1.3,0.3,2.7,0.5,4.1,0.5c4.2,0,8.1-1.6,11-4.5c6.1-6.1,6.1-16.1,0-22.2c-3-3-6.9-4.6-11.1-4.6
c-4.2,0-8.1,1.6-11.1,4.6c-3.9,3.9-5.5,9.8-3.9,15.3c0.1,0.4,0,0.8-0.3,1.1l-4.4,4.4l0.1,7c0,0.3-0.1,0.6-0.3,0.8
c-0.2,0.2-0.5,0.3-0.8,0.3l-4.6,0l0,4.6c0,0.3-0.1,0.6-0.3,0.8c-0.2,0.2-0.5,0.3-0.8,0.3l-4.6,0l0,4.7c0,0.3-0.1,0.6-0.3,0.8
c-0.2,0.2-0.5,0.3-0.8,0.3l-4.7,0l1,8.2L25,33.7c0.4-0.4,1.1-0.4,1.6,0c0.4,0.4,0.4,1.1,0,1.6L5.1,56.7L5.1,56.7z M43.8,19.1
c-1.5,0-3-0.6-4.1-1.7c-2.3-2.3-2.3-5.9,0-8.2c1.1-1.1,2.5-1.7,4.1-1.7c1.5,0,3,0.6,4.1,1.7c1.1,1.1,1.7,2.5,1.7,4.1s-0.6,3-1.7,4.1
C46.8,18.5,45.3,19.1,43.8,19.1L43.8,19.1z M43.8,9.7c-1,0-1.9,0.4-2.5,1c-1.4,1.4-1.4,3.7,0,5.1c0.7,0.7,1.6,1,2.5,1
c1,0,1.9-0.4,2.5-1c0.7-0.7,1-1.6,1-2.5c0-1-0.4-1.9-1-2.5C45.6,10.1,44.7,9.7,43.8,9.7L43.8,9.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

9
src/img/icons/navicon.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="45" height="32" viewBox="0 0 45 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M0 0.271h45.176v6.035h-45.176zM0 25.694h45.176v6.037h-45.176zM0 12.89h45.176v6.037h-45.176z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 558 B

9
src/img/icons/offline.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M24 19.999l-5.713-5.713 13.713-10.286-4-4-17.141 6.858-5.397-5.397c-1.556-1.556-3.728-1.928-4.828-0.828s-0.727 3.273 0.828 4.828l5.396 5.396-6.858 17.143 4 4 10.287-13.715 5.713 5.713v7.999h4l2-6 6-2v-4l-7.999 0z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 679 B

9
src/img/icons/reply.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="40" height="32" viewBox="0 0 40 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M0 12.766l14.314-13.138v6.666c27.648 0 25.686 26.274 25.686 26.274-5.49-18.236-25.686-12.942-25.686-12.942v6.666l-14.314-13.526z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 595 B

9
src/img/icons/reply_all_light.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="42" height="32" viewBox="0 0 42 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M42.252 32l-1.533-4.407c-2.874-8.048-9.389-9.677-14.371-9.677-2.395 0-4.503 0.383-5.461 0.671l0.287 6.707-14.371-12.168 13.222-13.126 0.287 6.323c2.683-0.096 5.078 0.192 7.281 0.766h0.192l0.096 0.096c14.659 3.832 14.371 20.024 14.371 20.12v4.695zM26.347 16.192c4.503 0 10.156 1.245 13.796 6.515-0.958-4.695-3.928-11.689-12.742-13.892l-0.192-0.096c-2.204-0.575-4.79-0.766-7.665-0.671h-0.862l-0.192-4.216-9.102 9.006 9.964 8.431-0.192-4.024 0.671-0.192c0 0 2.874-0.862 6.515-0.862zM14.467 25.198l-14.467-12.168 13.222-13.030 0.383 5.365-1.725 0.192-0.192-1.629-9.102 9.006 9.868 8.335-0.096-1.533 1.725-0.192z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

9
src/img/icons/reply_light.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="34" height="32" viewBox="0 0 34 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M33.55 32l-1.276-4.194c-2.553-8.387-9.299-10.12-14.587-10.12-1.915 0-3.464 0.273-4.285 0.365v6.473l-13.402-12.49 13.402-12.034v6.199c6.655 0.182 11.761 2.188 15.316 6.017 5.835 6.291 5.197 15.043 5.197 15.407l-0.365 4.376zM17.778 15.954c3.92 0 10.484 1.003 14.222 7.020-0.456-2.917-1.641-6.655-4.467-9.755-3.373-3.647-8.387-5.47-14.86-5.47h-0.82v-4.103l-9.39 8.387 9.39 8.661v-4.011l0.638-0.182c0 0 2.188-0.547 5.288-0.547z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 890 B

9
src/img/icons/search.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M27.813 24.169l-5.3-5.369c0.863-1.506 1.313-3.181 1.313-4.869 0-5.475-4.45-9.931-9.912-9.931s-9.912 4.456-9.912 9.931c0 5.475 4.45 9.931 9.912 9.931 1.744 0 3.469-0.481 5.006-1.4l5.275 5.35c0.119 0.119 0.288 0.194 0.456 0.194s0.337-0.069 0.456-0.194l2.706-2.738c0.25-0.256 0.25-0.656 0-0.906zM13.912 7.869c3.338 0 6.050 2.719 6.050 6.063s-2.712 6.062-6.050 6.062c-3.338 0-6.050-2.719-6.050-6.063s2.712-6.063 6.050-6.063z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 887 B

12
src/img/icons/sent.svg

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="_x2014_ลฝร“ลฅ_x5F_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="0 0 24.8 24.8" enable-background="new 0 0 24.8 24.8" xml:space="preserve">
<g>
<path fill="#535353" d="M24.8,0l-9.6,24.8l-5-10.2L0,9.6L24.8,0z M15.1,22.4l8-20.6l-20.6,8l8.4,4.2L15.1,22.4z"/>
</g>
<g>
<rect x="8.1" y="7.6" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -0.7414 14.3968)" fill="#535353" width="17.9" height="1"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 736 B

9
src/img/icons/star.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 137.6 598.5 566.6" enable-background="new 0 137.6 598.5 566.6" xml:space="preserve">
<path fill="#1A171B" d="M480.7,704.3L296,608.8l-184.6,95.5l35-203.7L0,354.1l206.9-28.6l92.3-187.8l92.3,187.8l206.9,28.6
L445.7,500.5L480.7,704.3z M54.1,373.2l121,117.8l-28.6,168.7L296,580.1l149.6,79.6L417,491l124.1-117.8l-168.7-25.5l-73.2-152.8
l-76.4,152.8L54.1,373.2z"/>
</svg>

After

Width:  |  Height:  |  Size: 748 B

8
src/img/icons/star_filled.svg

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 137.6 598.5 566.6" enable-background="new 0 137.6 598.5 566.6" xml:space="preserve">
<path fill="#1A171B" d="M480.7,704.3L296,608.8l-184.6,95.5l35-203.7L0,354.1l206.9-28.6l92.3-187.8l92.3,187.8l206.9,28.6
L445.7,500.5L480.7,704.3z"/>
</svg>

After

Width:  |  Height:  |  Size: 622 B

16
src/img/icons/trash.svg

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="3 47 589.3 746.5" enable-background="new 3 47 589.3 746.5" xml:space="preserve">
<g>
<path fill="#0A0A0A" d="M562.2,150.5c19.1,0,30,14.7,30,33v24.2c0,15.4-8.7,30.1-22.7,33v494.7c0,32.3-27.2,58-60.2,58H86.6
c-33,0-59.5-25.7-59.5-58v-494C12.5,238.5,3,223.9,3,207.7v-24.2c0-18.4,12.4-33,31.5-33h102v-44c0-32.3,25.7-59.5,59.5-59.5H400
c33,0,59.5,27.2,59.5,59.5v44H562.2z M521.5,757.1c4.4,0,9.1-8.9,9.1-14V190.2H65.4v553.6c0,5.1,3.7,13,9.5,13L521.5,757.1z
M182.8,687c-11.7,0-21.3-15.4-21.3-34.5V313.4c0-17.6,9.5-32.3,21.3-32.3h3.7c11,0,20.6,14.7,20.6,32.3v339.1
c0,18.4-9.5,34.5-20.6,34.5H182.8z M196,87.8c-5.1,0-8.1,2.9-8.1,7.3v56h220.9v-56c0-4.4-2.9-7.3-8.1-7.3
C400.8,87.8,196,87.8,196,87.8z M296.5,688.5c-11.7,0-21.3-15.4-21.3-34.5V314.9c0-17.6,9.5-32.3,21.3-32.3h2.9
c11.7,0,21.3,14.7,21.3,32.3V654c0,18.4-9.5,34.5-21.3,34.5H296.5z M414.7,688.5c-11.7,0-20.6-15.4-20.6-34.5V314.9
c0-17.6,8.8-32.3,20.6-32.3h2.9c11.7,0,21.3,14.7,21.3,32.3V654c0,18.4-9.5,34.5-21.3,34.5H414.7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

9
src/img/icons/write.svg

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="37" height="32" viewBox="0 0 37 32">
<g id="icomoon-ignore">
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
</g>
<path d="M27.401 19.769l3.94-3.94v11.644c0 2.398-1.884 4.281-4.11 4.281l-23.12 0.002c-2.398 0-4.11-1.884-4.11-4.281v-22.949c0-2.397 1.884-4.281 4.11-4.281h23.461l-3.94 3.94h-18.151c-0.857 0-1.541 0.684-1.541 1.541v20.379c0 0.857 0.684 1.541 1.541 1.541h20.379c0.857 0 1.541-0.684 1.541-1.541v-6.336zM19.18 22.508l-4.11-4.11-1.541 5.652 5.652-1.541zM20.551 21.138l13.358-13.358-4.112-4.108-13.356 13.186 4.11 4.281zM35.449 6.411l1.884-1.884-4.281-4.281-1.884 1.884 4.281 4.281z" fill="#000000"></path>
</svg>

After

Width:  |  Height:  |  Size: 934 B

5
src/index.html

@ -33,6 +33,11 @@ @@ -33,6 +33,11 @@
<body key-shortcuts>
<!-- inline icons have to come first, hide immediately with inline styles -->
<div style="width: 0; height: 0; visibility: hidden;">
<!-- @import img/icons/all.svg -->
</div>
<div ng-view class="main-app-view"></div>
<!-- error dialog lightbox -->

9
src/js/app.js

@ -15,7 +15,6 @@ if (typeof window.applicationCache !== 'undefined') { @@ -15,7 +15,6 @@ if (typeof window.applicationCache !== 'undefined') {
}
var DialogCtrl = require('./controller/dialog'),
PopoverCtrl = require('./controller/popover'),
AddAccountCtrl = require('./controller/add-account'),
AccountCtrl = require('./controller/account'),
SetPassphraseCtrl = require('./controller/set-passphrase'),
@ -34,6 +33,7 @@ var DialogCtrl = require('./controller/dialog'), @@ -34,6 +33,7 @@ var DialogCtrl = require('./controller/dialog'),
NavigationCtrl = require('./controller/navigation'),
errorUtil = require('./util/error'),
backButtonUtil = require('./util/backbutton-handler');
require('./directives/common');
// init main angular module including dependencies
var app = angular.module('mail', [
@ -46,9 +46,9 @@ var app = angular.module('mail', [ @@ -46,9 +46,9 @@ var app = angular.module('mail', [
'contacts',
'login-new-device',
'privatekey-upload',
'popover',
'infinite-scroll',
'ngTagsInput'
'ngTagsInput',
'woDirectives'
]);
// set router paths
@ -113,5 +113,4 @@ app.controller('SetPassphraseCtrl', SetPassphraseCtrl); @@ -113,5 +113,4 @@ app.controller('SetPassphraseCtrl', SetPassphraseCtrl);
app.controller('PrivateKeyUploadCtrl', PrivateKeyUploadCtrl);
app.controller('ContactsCtrl', ContactsCtrl);
app.controller('AboutCtrl', AboutCtrl);
app.controller('DialogCtrl', DialogCtrl);
app.controller('PopoverCtrl', PopoverCtrl);
app.controller('DialogCtrl', DialogCtrl);

22
src/js/controller/mail-list.js

@ -431,28 +431,6 @@ var MailListCtrl = function($scope, $routeParams) { @@ -431,28 +431,6 @@ var MailListCtrl = function($scope, $routeParams) {
var ngModule = angular.module('mail-list', []);
ngModule.directive('woTouch', function($parse) {
return function(scope, elm, attrs) {
var handler = $parse(attrs.woTouch);
elm.on('touchstart', function() {
elm.addClass('active');
});
elm.on('touchleave touchcancel touchmove touchend', function() {
elm.removeClass('active');
});
elm.on('click', function(event) {
elm.removeClass('active');
scope.$apply(function() {
handler(scope, {
$event: event
});
});
});
};
});
ngModule.directive('listScroll', function() {
return {
link: function(scope, elm, attrs) {

43
src/js/controller/popover.js

@ -1,43 +0,0 @@ @@ -1,43 +0,0 @@
'use strict';
//
// Controller
//
var PopoverCtrl = function($scope) {
$scope.state.popover = {};
};
//
// Directives
//
var ngModule = angular.module('popover', []);
ngModule.directive('popover', function() {
return function(scope, elm, attrs) {
var selector = attrs.popover;
var popover = angular.element(document.querySelector(selector));
elm.on('mouseover', function() {
// set popover position
var top = elm[0].offsetTop;
var left = elm[0].offsetLeft;
var width = elm[0].offsetWidth;
var height = elm[0].offsetHeight;
popover[0].style.transition = 'opacity 0.3s linear';
popover[0].style.top = (top + height / 2 - popover[0].offsetHeight / 2) + 'px';
popover[0].style.left = (left + width) + 'px';
popover[0].style.opacity = '1';
});
elm.on('mouseout', function() {
popover[0].style.transition = 'opacity 0.3s linear, top 0.3s step-end, left 0.3s step-end';
popover[0].style.opacity = '0';
popover[0].style.top = '-9999px';
popover[0].style.left = '-9999px';
});
};
});
module.exports = PopoverCtrl;

2
src/js/controller/write.js

@ -384,7 +384,7 @@ var WriteCtrl = function($scope, $filter, $q) { @@ -384,7 +384,7 @@ var WriteCtrl = function($scope, $filter, $q) {
$scope.tagStyle = function(recipient) {
var classes = ['label'];
if (recipient.secure === false) {
classes.push('label-primary');
classes.push('label--invalid');
}
return classes;
};

129
src/js/directives/common.js

@ -0,0 +1,129 @@ @@ -0,0 +1,129 @@
'use strict';
var ngModule = angular.module('woDirectives', []);
ngModule.directive('woTouch', function($parse) {
var className = 'wo-touch-active';
return function(scope, elm, attrs) {
var handler = $parse(attrs.woTouch);
elm.on('touchstart', function() {
elm.addClass(className);
});
elm.on('touchleave touchcancel touchmove touchend', function() {
elm.removeClass(className);
});
elm.on('click', function(event) {
elm.removeClass(className);
scope.$apply(function() {
handler(scope, {
$event: event
});
});
});
};
});
ngModule.directive('woTooltip', function($document, $timeout) {
return function(scope, elm, attrs) {
var selector = attrs.woTooltip;
var tooltip = $document.find(selector);
elm.on('mouseover', function() {
// Compute tooltip position
var offsetElm = elm.offset();
var offsetTooltipParent = tooltip.offsetParent().offset();
// Set tooltip position
tooltip[0].style.top = (offsetElm.top - offsetTooltipParent.top +
elm[0].offsetHeight / 2 - tooltip[0].offsetHeight / 2) + 'px';
tooltip[0].style.left = (offsetElm.left - offsetTooltipParent.left +
elm[0].offsetWidth) + 'px';
// Wait till browser repaint
$timeout(function() {
tooltip.addClass('tooltip--show');
});
});
elm.on('mouseout', function() {
tooltip.removeClass('tooltip--show');
tooltip[0].style.top = '-9999px';
tooltip[0].style.left = '-9999px';
});
};
});
ngModule.directive('woDropdown', function($document, $timeout) {
return function(scope, elm, attrs) {
var selector = attrs.woDropdown;
var position = attrs.woDropdownPosition;
var dropdown = $document.find(selector);
function appear() {
// Compute dropdown position
var offsetElm = elm.offset();
var offsetDropdownParent = dropdown.offsetParent().offset();
// Set dropdown position
dropdown[0].style.top = (offsetElm.top - offsetDropdownParent.top +
elm[0].offsetHeight) + 'px';
switch (position) {
case 'center':
dropdown[0].style.left = (offsetElm.left - offsetDropdownParent.left +
elm[0].offsetWidth / 2 - dropdown[0].offsetWidth / 2) + 'px';
break;
case 'right':
dropdown[0].style.left = (offsetElm.left - offsetDropdownParent.left +
elm[0].offsetWidth - dropdown[0].offsetWidth) + 'px';
break;
default:
dropdown[0].style.left = (offsetElm.left - offsetDropdownParent.left) + 'px';
}
// Wait till browser repaint
$timeout(function() {
dropdown.addClass('dropdown--show');
});
// class on element to change style if drowdown is visible
elm.addClass('wo-dropdown-active');
}
function disappear() {
dropdown.removeClass('dropdown--show');
dropdown[0].style.top = '-9999px';
dropdown[0].style.left = '-9999px';
elm.removeClass('wo-dropdown-active');
}
function toggle() {
if (dropdown.hasClass('dropdown--show')) {
disappear();
} else {
appear();
}
}
elm.on('touchstart click', toggle);
// close if user clicks outside of dropdown and elm
$document.on('touchstart.woDropdown click.woDropdown', function(e) {
var t = angular.element(e.target);
if (!t.closest(dropdown).length &&
!t.closest(elm).length) {
disappear();
}
});
// remove event listener on document
scope.$on('$destroy', function() {
$document.off('touchstart.woDropdown click.woDropdown');
});
};