diff --git a/gulpfile.js b/gulpfile.js index 9acef14a2..d79ce5cdb 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -161,9 +161,6 @@ cfg.paths.js = { 'vendors/bootstrap/js/bootstrap.min.js' ] }, - common: { - name: 'common.js' - }, app: { name: 'app.js' }, @@ -244,6 +241,7 @@ gulp.task('js:webpack:clear', function() { return gulp.src([cfg.paths.staticJS + '*.chunk.js', cfg.paths.staticMinJS + '*.chunk.js'], {read: false}) .pipe(require('gulp-rimraf')()); }); + gulp.task('js:webpack', ['js:webpack:clear'], function(callback) { var webpack = require('webpack'), @@ -278,13 +276,6 @@ gulp.task('js:admin', ['js:webpack'], function() { .on('error', gutil.log); }); -gulp.task('js:common', ['js:webpack'], function() { - return gulp.src(cfg.paths.staticJS + cfg.paths.js.common.name) - .pipe(header('/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */\n')) - .pipe(gulp.dest(cfg.paths.staticJS)) - .on('error', gutil.log); -}); - gulp.task('js:chunks', ['js:webpack'], function() { return gulp.src(cfg.paths.staticJS + '*.chunk.js') .pipe(header('/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */\n')) @@ -293,38 +284,10 @@ gulp.task('js:chunks', ['js:webpack'], function() { }); // - min -gulp.task('js:app:min', ['js:app'], function() { - return gulp.src(cfg.paths.staticJS + cfg.paths.js.app.name) +gulp.task('js:min', ['js:app', 'js:admin', 'js:chunks'], function() { + return gulp.src(cfg.paths.staticJS + '*.js') + .pipe(replace(/"rainloop\/v\/([^\/]+)\/static\/js\/"/g, '"rainloop/v/$1/static/js/min/"')) .pipe(uglify(cfg.uglify)) -// .pipe(rename({suffix: '.min'})) - .pipe(header('/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */\n')) - .pipe(gulp.dest(cfg.paths.staticMinJS)) - .on('error', gutil.log); -}); - -gulp.task('js:admin:min', ['js:admin'], function() { - return gulp.src(cfg.paths.staticJS + cfg.paths.js.admin.name) - .pipe(uglify(cfg.uglify)) -// .pipe(rename({suffix: '.min'})) - .pipe(header('/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */\n')) - .pipe(gulp.dest(cfg.paths.staticMinJS)) - .on('error', gutil.log); -}); - -gulp.task('js:common:min', ['js:common'], function() { - return gulp.src(cfg.paths.staticJS + cfg.paths.js.common.name) - .pipe(uglify(cfg.uglify)) -// .pipe(rename({suffix: '.min'})) - .pipe(replace(/rainloop\/v\/([^\/]+)\/static\/js\//g, 'rainloop/v/$1/static/js/min/')) - .pipe(header('/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */\n')) - .pipe(gulp.dest(cfg.paths.staticMinJS)) - .on('error', gutil.log); -}); - -gulp.task('js:chunks:min', ['js:chunks'], function() { - return gulp.src(cfg.paths.staticJS + '*.chunk.js') - .pipe(uglify(cfg.uglify)) -// .pipe(rename({suffix: '.min'})) .pipe(header('/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */\n')) .pipe(gulp.dest(cfg.paths.staticMinJS)) .on('error', gutil.log); @@ -489,10 +452,10 @@ gulp.task('rainloop:owncloud:clean', ['rainloop:owncloud:copy', 'rainloop:ownclo }); // MAIN -gulp.task('default', [ 'js:libs', 'js:boot', 'js:encrypt', 'js:openpgp', 'js:lint', 'js:app:min', 'js:admin:min', 'js:common:min', 'js:chunks:min', 'css:main:min']); -gulp.task('fast', ['js:app', 'js:admin', 'js:common', 'js:chunks', 'css:main']); +gulp.task('default', ['js:libs', 'js:boot', 'js:encrypt', 'js:openpgp', 'js:min', 'css:main:min']); +gulp.task('fast', ['js:app', 'js:admin', 'js:chunks', 'css:main']); -gulp.task('rainloop', ['rainloop:copy', 'rainloop:setup', 'rainloop:zip', 'rainloop:md5', 'rainloop:clean']); +gulp.task('rainloop', ['js:lint', 'rainloop:copy', 'rainloop:setup', 'rainloop:zip', 'rainloop:md5', 'rainloop:clean']); gulp.task('rainloop+', ['rainloop', 'package-inc-release']); gulp.task('owncloud', ['rainloop:owncloud:copy', 'rainloop:owncloud:setup', 'rainloop:owncloud:zip', 'rainloop:owncloud:md5', 'rainloop:owncloud:clean']); diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Service.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Service.php index edc7a6f56..1d07881e9 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Service.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Service.php @@ -204,7 +204,6 @@ class Service 'LibJsLink' => $sStaticPrefix.'js/min/libs.js', 'EditorJsLink' => $sStaticPrefix.'ckeditor/ckeditor.js', 'OpenPgpJsLink' => $sStaticPrefix.'js/min/openpgp.min.js', - 'CommonJsLink' => $sStaticPrefix.'js/'.($bAppJsDebug ? '' : 'min/').'common.js', 'AppJsLink' => $sStaticPrefix.'js/'.($bAppJsDebug ? '' : 'min/').($bAdmin ? 'admin' : 'app').'.js' ); @@ -218,7 +217,6 @@ class Service '{{BaseAppLibsScriptLink}}' => $aData['LibJsLink'], '{{BaseAppEditorScriptLink}}' => $aData['EditorJsLink'], '{{BaseAppOpenPgpScriptLink}}' => $aData['OpenPgpJsLink'], - '{{BaseCommonMainScriptLink}}' => $aData['CommonJsLink'], '{{BaseAppMainScriptLink}}' => $aData['AppJsLink'], '{{BaseAppLoadingDescription}}' => \htmlspecialchars($aData['LoadingDescription'], ENT_QUOTES|ENT_IGNORE, 'UTF-8'), '{{BaseDir}}' => \in_array($aData['Language'], array('ar', 'he', 'ur')) ? 'rtl' : 'ltr' diff --git a/rainloop/v/0.0.0/app/templates/Index.html b/rainloop/v/0.0.0/app/templates/Index.html index bf39dc35a..cb5187b58 100644 --- a/rainloop/v/0.0.0/app/templates/Index.html +++ b/rainloop/v/0.0.0/app/templates/Index.html @@ -82,13 +82,9 @@ .wait(function () { __simplePace(30); }) - .script('{{BaseCommonMainScriptLink}}') - .wait(function () { - __simplePace(5); - }) .script('{{BaseAppMainScriptLink}}') .wait(function () { - __simplePace(15); + __simplePace(20); }) .script(function () { return window.rainloopAppData['PluginsLink'] || null; diff --git a/rainloop/v/0.0.0/static/css/app.css b/rainloop/v/0.0.0/static/css/app.css deleted file mode 100644 index 6bf1bc69f..000000000 --- a/rainloop/v/0.0.0/static/css/app.css +++ /dev/null @@ -1,9548 +0,0 @@ -/*! jQuery UI - v1.10.3 - 2013-11-25 -* http://jqueryui.com -* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.autocomplete.css, jquery.ui.menu.css, jquery.ui.theme.css -* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { - display: none; -} -.ui-helper-hidden-accessible { - position: absolute; - overflow: hidden; - clip: rect(0 0 0 0); - margin: -1px; - padding: 0; - width: 1px; - height: 1px; - border: 0; -} -.ui-helper-reset { - margin: 0; - padding: 0; - outline: 0; - border: 0; - list-style: none; - text-decoration: none; - font-size: 100%; - line-height: 1.3; -} -.ui-helper-clearfix:before, -.ui-helper-clearfix:after { - display: table; - border-collapse: collapse; - content: ""; -} -.ui-helper-clearfix:after { - clear: both; -} -.ui-helper-clearfix { - min-height: 0; /* support: IE7 */ -} -.ui-helper-zfix { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - opacity: 0; - filter: Alpha(Opacity=0); -} - -.ui-front { - z-index: 100; -} - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { - cursor: default !important; -} - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - display: block; - overflow: hidden; - background-repeat: no-repeat; - text-indent: -99999px; -} - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.ui-resizable { - position: relative; -} -.ui-resizable-handle { - position: absolute; - display: block; - font-size: 0.1px; -} -.ui-resizable-disabled .ui-resizable-handle, -.ui-resizable-autohide .ui-resizable-handle { - display: none; -} -.ui-resizable-n { - top: -5px; - left: 0; - width: 100%; - height: 7px; - cursor: n-resize; -} -.ui-resizable-s { - bottom: -5px; - left: 0; - width: 100%; - height: 7px; - cursor: s-resize; -} -.ui-resizable-e { - top: 0; - right: -5px; - width: 7px; - height: 100%; - cursor: e-resize; -} -.ui-resizable-w { - top: 0; - left: -5px; - width: 7px; - height: 100%; - cursor: w-resize; -} -.ui-resizable-se { - right: 1px; - bottom: 1px; - width: 12px; - height: 12px; - cursor: se-resize; -} -.ui-resizable-sw { - bottom: -5px; - left: -5px; - width: 9px; - height: 9px; - cursor: sw-resize; -} -.ui-resizable-nw { - top: -5px; - left: -5px; - width: 9px; - height: 9px; - cursor: nw-resize; -} -.ui-resizable-ne { - top: -5px; - right: -5px; - width: 9px; - height: 9px; - cursor: ne-resize; -} -.ui-selectable-helper { - position: absolute; - z-index: 100; - border: 1px dotted black; -} -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} -.ui-menu { - display: block; - margin: 0; - padding: 2px; - outline: none; - list-style: none; -} -.ui-menu .ui-menu { - position: absolute; - margin-top: -3px; -} -.ui-menu .ui-menu-item { - margin: 0; - padding: 0; - width: 100%; - /* support: IE10, see #8844 */ - list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); -} -.ui-menu .ui-menu-divider { - margin: 5px -2px 5px -2px; - height: 0; - border-width: 1px 0 0 0; - font-size: 0; - line-height: 0; -} -.ui-menu .ui-menu-item a { - display: block; - padding: 2px 0.4em; - min-height: 0; /* support: IE7 */ - text-decoration: none; - font-weight: normal; - line-height: 1.5; -} -.ui-menu .ui-menu-item a.ui-state-focus, -.ui-menu .ui-menu-item a.ui-state-active { - margin: -1px; - font-weight: normal; -} - -.ui-menu .ui-state-disabled { - margin: 0.4em 0 0.2em; - font-weight: normal; - line-height: 1.5; -} -.ui-menu .ui-state-disabled a { - cursor: default; -} - -/* icon support */ -.ui-menu-icons { - position: relative; -} -.ui-menu-icons .ui-menu-item a { - position: relative; - padding-left: 2em; -} - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: 0.2em; - left: 0.2em; -} - -/* right-aligned */ -.ui-menu .ui-menu-icon { - position: static; - float: right; -} - -/* Component containers -----------------------------------*/ -.ui-widget { - font-size: 1.1em; - font-family: Verdana,Arial,sans-serif; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-size: 1em; - font-family: Verdana,Arial,sans-serif; -} -.ui-widget-content { - border: 1px solid #aaaaaa; - /*background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;*/ - background: #ffffff; - color: #222222; -} -.ui-widget-content a { - color: #222222; -} -.ui-widget-header { - border: 1px solid #aaaaaa; - /*background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;*/ - background: #cccccc; - color: #222222; - font-weight: bold; -} -.ui-widget-header a { - color: #222222; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default { - border: 1px solid #cccccc; - /*background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;*/ - background: #eeeeee; - color: #555555; - font-weight: normal; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited { - color: #555555; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus { - border: 1px solid #cccccc; - /* background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;*/ - background: #eeeeee; - color: #212121; - font-weight: normal; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited { - color: #212121; - text-decoration: none; -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active { - border: 1px solid #aaaaaa; - /*background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;*/ - background: #ffffff; - color: #212121; - font-weight: normal; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #212121; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #fcefa1; - /*background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;*/ - background: #fbf9ee; - color: #363636; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #363636; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #cd0a0a; - /*background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;*/ - background: #fef1ec; - color: #cd0a0a; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #cd0a0a; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #cd0a0a; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - font-weight: normal; - opacity: 0.7; - filter: Alpha(Opacity=70); -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - background-image: none; - opacity: 0.35; - filter: Alpha(Opacity=35); -} -.ui-state-disabled .ui-icon { - filter: Alpha(Opacity=35); /* For IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -/* -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url(images/ui-icons_222222_256x240.png); -} -.ui-widget-header .ui-icon { - background-image: url(images/ui-icons_222222_256x240.png); -} -.ui-state-default .ui-icon { - background-image: url(images/ui-icons_888888_256x240.png); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon { - background-image: url(images/ui-icons_454545_256x240.png); -} -.ui-state-active .ui-icon { - background-image: url(images/ui-icons_454545_256x240.png); -} -.ui-state-highlight .ui-icon { - background-image: url(images/ui-icons_2e83ff_256x240.png); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url(images/ui-icons_cd0a0a_256x240.png); -}*/ - -/* positioning */ -/*.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } - ui-icon-seek-first is deprecated, use ui-icon-seek-start instead -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } -*/ - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 2px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 2px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 2px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 2px; -} - -/* Overlays */ -.ui-widget-overlay { - /*background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;*/ - background: #aaaaaa; - opacity: 0.3; - filter: Alpha(Opacity=30); -} -.ui-widget-shadow { - margin: -8px 0 0 -8px; - padding: 8px; - border-radius: 8px; - /*background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;*/ - background: #aaaaaa; - opacity: 0.3; - filter: Alpha(Opacity=30); -} - - -/*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */ - -/* ============================================================================= - HTML5 display definitions - ========================================================================== */ - -/* - * Corrects block display not defined in IE6/7/8/9 & FF3 - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section, -summary { - display: block; -} - -/* - * Corrects inline-block display not defined in IE6/7/8/9 & FF3 - */ - -audio, -canvas, -video { - display: inline-block; - - *display: inline; - *zoom: 1; -} - -/* - * Prevents modern browsers from displaying 'audio' without controls - * Remove excess height in iOS5 devices - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/* - * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4 - * Known issue: no IE6 support - */ - -[hidden] { - display: none; -} - - -/* ============================================================================= - Base - ========================================================================== */ - -/* - * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units - * http://clagnut.com/blog/348/#c790 - * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom - * www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/ - */ - -html { - font-size: 100%; /* 1 */ - - -webkit-text-size-adjust: 100%; /* 2 */ - -ms-text-size-adjust: 100%; /* 2 */ -} - -/* - * Addresses font-family inconsistency between 'textarea' and other form elements. - */ - -html, -button, -input, -select, -textarea { - font-family: sans-serif; -} - -/* - * Addresses margins handled incorrectly in IE6/7 - */ - -body { - margin: 0; -} - - -/* ============================================================================= - Links - ========================================================================== */ - -/* - * Addresses outline displayed oddly in Chrome - */ - -a:focus { - outline: thin dotted; -} - -/* - * Improves readability when focused and also mouse hovered in all browsers - * people.opera.com/patrickl/experiments/keyboard/test - */ - -a:hover, -a:active { - outline: 0; -} - - -/* ============================================================================= - Typography - ========================================================================== */ - -/* - * Addresses font sizes and margins set differently in IE6/7 - * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5 - */ - -h1 { - margin: 0.67em 0; - font-size: 2em; -} - -h2 { - margin: 0.83em 0; - font-size: 1.5em; -} - -h3 { - margin: 1em 0; - font-size: 1.17em; -} - -h4 { - margin: 1.33em 0; - font-size: 1em; -} - -h5 { - margin: 1.67em 0; - font-size: 0.83em; -} - -h6 { - margin: 2.33em 0; - font-size: 0.75em; -} - -/* - * Addresses styling not present in IE7/8/9, S5, Chrome - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/* - * Addresses style set to 'bolder' in FF3+, S4/5, Chrome -*/ - -b, -strong { - font-weight: bold; -} - -blockquote { - margin: 1em 40px; -} - -/* - * Addresses styling not present in S5, Chrome - */ - -dfn { - font-style: italic; -} - -/* - * Addresses styling not present in IE6/7/8/9 - */ - -mark { - background: #ffff00; - color: #000000; -} - -/* - * Addresses margins set differently in IE6/7 - */ - -p, -pre { - margin: 1em 0; -} - -/* - * Corrects font family set oddly in IE6, S4/5, Chrome - * en.wikipedia.org/wiki/User:Davidgothberg/Test59 - */ - -pre, -code, -kbd, -samp { - font-size: 1em; - font-family: monospace, serif; - - _font-family: "courier new", monospace; -} - -/* - * Improves readability of pre-formatted text in all browsers - */ - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -/* - * 1. Addresses CSS quotes not supported in IE6/7 - * 2. Addresses quote property not supported in S4 - */ - -/* 1 */ - -q { - quotes: none; -} - -/* 2 */ - -q:before, -q:after { - content: ""; - content: none; -} - -small { - font-size: 75%; -} - -/* - * Prevents sub and sup affecting line-height in all browsers - * gist.github.com/413930 - */ - -sub, -sup { - position: relative; - vertical-align: baseline; - font-size: 75%; - line-height: 0; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - - -/* ============================================================================= - Lists - ========================================================================== */ - -/* - * Addresses margins set differently in IE6/7 - */ - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -/* - * Addresses paddings set differently in IE6/7 - */ - -menu, -ol, -ul { - padding: 0 0 0 40px; -} - -/* - * Corrects list images handled incorrectly in IE7 - */ - -nav ul, -nav ol { - list-style: none; - list-style-image: none; -} - - -/* ============================================================================= - Embedded content - ========================================================================== */ - -/* - * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3 - * 2. Improves image quality when scaled in IE7 - * code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ - */ - -img { - border: 0; /* 1 */ - -ms-interpolation-mode: bicubic; /* 2 */ -} - -/* - * Corrects overflow displayed oddly in IE9 - */ - -svg:not(:root) { - overflow: hidden; -} - - -/* ============================================================================= - Figures - ========================================================================== */ - -/* - * Addresses margin not present in IE6/7/8/9, S5, O11 - */ - -figure { - margin: 0; -} - - -/* ============================================================================= - Forms - ========================================================================== */ - -/* - * Corrects margin displayed oddly in IE6/7 - */ - -form { - margin: 0; -} - -/* - * Define consistent border, margin, and padding - */ - -fieldset { - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; - border: 1px solid #c0c0c0; -} - -/* - * 1. Corrects color not being inherited in IE6/7/8/9 - * 2. Corrects text not wrapping in FF3 - * 3. Corrects alignment displayed oddly in IE6/7 - */ - -legend { - padding: 0; - border: 0; /* 1 */ - white-space: normal; /* 2 */ - - *margin-left: -7px; /* 3 */ -} - -/* - * 1. Corrects font size not being inherited in all browsers - * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome - * 3. Improves appearance and consistency in all browsers - */ - -button, -input, -select, -textarea { - margin: 0; /* 2 */ - vertical-align: baseline; /* 3 */ - font-size: 100%; /* 1 */ - - *vertical-align: middle; /* 3 */ -} - -/* - * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet - */ - -button, -input { - line-height: normal; /* 1 */ -} - -/* - * 1. Improves usability and consistency of cursor style between image-type 'input' and others - * 2. Corrects inability to style clickable 'input' types in iOS - * 3. Removes inner spacing in IE7 without affecting normal text inputs - * Known issue: inner spacing remains in IE6 - */ - -button, -input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; /* 1 */ - - *overflow: visible; /* 3 */ - -webkit-appearance: button; /* 2 */ -} - -/* - * Re-set default cursor for disabled elements - */ - -button[disabled], -input[disabled] { - cursor: default; -} - -/* - * 1. Addresses box sizing set to content-box in IE8/9 - * 2. Removes excess padding in IE8/9 - * 3. Removes excess padding in IE7 - Known issue: excess padding remains in IE6 - */ - -input[type="checkbox"], -input[type="radio"] { - -moz-box-sizing: border-box; - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ - - *height: 13px; /* 3 */ - *width: 13px; /* 3 */ -} - -/* - * 1. Addresses appearance set to searchfield in S5, Chrome - * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof) - */ - -input[type="search"] { - -moz-box-sizing: content-box; /* 2 */ - box-sizing: content-box; - - -webkit-appearance: textfield; /* 1 */ -} - -/* - * Removes inner padding and search cancel button in S5, Chrome on OS X - */ - -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} - -/* - * Removes inner padding and border in FF3+ - * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/ - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -/* - * 1. Removes default vertical scrollbar in IE6/7/8/9 - * 2. Improves readability and alignment in all browsers - */ - -textarea { - overflow: auto; /* 1 */ - vertical-align: top; /* 2 */ -} - - -/* ============================================================================= - Tables - ========================================================================== */ - -/* - * Remove most spacing between table cells - */ - -table { - border-spacing: 0; - border-collapse: collapse; -} - -@charset "UTF-8"; - -@font-face { - font-weight: normal; - font-style: normal; - font-family: "rainloop"; - src: url("fonts/rainloop.eot"); - src: url("fonts/rainloop.eot?#iefix") format("embedded-opentype"), - url("fonts/rainloop.woff") format("woff"), - url("fonts/rainloop.ttf") format("truetype"), - url("fonts/rainloop.svg#rainloop") format("svg"); -} - -[data-icon]:before { - content: attr(data-icon); - text-transform: none !important; - font-weight: normal !important; - font-style: normal !important; - font-variant: normal !important; - font-family: "rainloop" !important; - line-height: 1; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - speak: none; -} - -[class^="icon-"]:before, -[class*=" icon-"]:before { - text-transform: none !important; - font-weight: normal !important; - font-style: normal !important; - font-variant: normal !important; - font-family: "rainloop" !important; - line-height: 1; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - speak: none; -} - -.icon-arrows-in:before { - content: "\e000"; -} -.icon-arrows-out:before { - content: "\e001"; -} -.icon-list:before { - content: "\e002"; -} -.icon-search:before { - content: "\e003"; -} -.icon-user:before { - content: "\e004"; -} -.icon-user-add:before { - content: "\e005"; -} -.icon-tags:before { - content: "\e006"; -} -.icon-paper-plane:before { - content: "\e007"; -} -.icon-reply:before { - content: "\e008"; -} -.icon-reply-all:before { - content: "\e009"; -} -.icon-forward:before { - content: "\e00a"; -} -.icon-info:before { - content: "\e00b"; -} -.icon-right-dir:before { - content: "\e00c"; -} -.icon-down-dir:before { - content: "\e00d"; -} -.icon-image:before { - content: "\e00e"; -} -.icon-print:before { - content: "\e00f"; -} -.icon-calendar:before { - content: "\e010"; -} -.icon-cog:before { - content: "\e011"; -} -.icon-wrench:before { - content: "\e012"; -} -.icon-rocket:before { - content: "\e013"; -} -.icon-fire:before { - content: "\e014"; -} -.icon-purchase:before { - content: "\e015"; -} -.icon-apple:before { - content: "\e016"; -} -.icon-dropbox:before { - content: "\e017"; -} -.icon-skype:before { - content: "\e018"; -} -.icon-creative-commons:before { - content: "\e019"; -} -.icon-ellipsis:before { - content: "\e01a"; -} -.icon-left:before { - content: "\e01b"; -} -.icon-right:before { - content: "\e01c"; -} -.icon-down:before { - content: "\e01d"; -} -.icon-right-mini:before { - content: "\e01e"; -} -.icon-down-mini:before { - content: "\e01f"; -} -.icon-up:before { - content: "\e020"; -} -.icon-star-empty:before { - content: "\e021"; -} -.icon-star:before { - content: "\e022"; -} -.icon-at:before { - content: "\e023"; -} -.icon-list-add:before { - content: "\e024"; -} -.icon-google:before { - content: "\e025"; -} -.icon-google-plus:before { - content: "\e026"; -} -.icon-twitter:before { - content: "\e027"; -} -.icon-youtube:before { - content: "\e028"; -} -.icon-warning:before { - content: "\e029"; -} -.icon-warning-alt:before { - content: "\e02a"; -} -.icon-power:before { - content: "\e02b"; -} -.icon-plus:before { - content: "\e02c"; -} -.icon-ok:before { - content: "\e02d"; -} -.icon-remove:before { - content: "\e02e"; -} -.icon-file:before { - content: "\e02f"; -} -.icon-file-code:before { - content: "\e030"; -} -.icon-file-chart-graph:before { - content: "\e031"; -} -.icon-file-zip:before { - content: "\e032"; -} -.icon-file-music:before { - content: "\e033"; -} -.icon-file-text:before { - content: "\e034"; -} -.icon-file-bookmark:before { - content: "\e035"; -} -.icon-file-image:before { - content: "\e036"; -} -.icon-file-analytics:before { - content: "\e037"; -} -.icon-file-certificate:before { - content: "\e038"; -} -.icon-attachment:before { - content: "\e039"; -} -.icon-file-excel:before { - content: "\e03a"; -} -.icon-file-movie:before { - content: "\e03b"; -} -.icon-folder-add:before { - content: "\e03c"; -} -.icon-folder:before { - content: "\e03d"; -} -.icon-floppy:before { - content: "\e03e"; -} -.icon-eye:before { - content: "\e03f"; -} -.icon-facebook-alt:before { - content: "\e040"; -} -.icon-facebook:before { - content: "\e041"; -} -.icon-bolt:before { - content: "\e042"; -} -.icon-download:before { - content: "\e043"; -} -.icon-upload:before { - content: "\e044"; -} -.icon-popup:before { - content: "\e045"; -} -.icon-github:before { - content: "\e046"; -} -.icon-telephone:before { - content: "\e047"; -} -.icon-mobile:before { - content: "\e048"; -} -.icon-pencil:before { - content: "\e049"; -} -.icon-trash:before { - content: "\e04a"; -} -.icon-left-middle:before { - content: "\e04b"; -} -.icon-right-middle:before { - content: "\e04c"; -} -.icon-repeat:before { - content: "\e04d"; -} -.icon-key:before { - content: "\e04e"; -} -.icon-lock:before { - content: "\e04f"; -} -.icon-home:before { - content: "\e050"; -} -.icon-address-book:before { - content: "\e051"; -} -.icon-share:before { - content: "\e052"; -} -.icon-suitcase:before { - content: "\e053"; -} -.icon-new-sign:before { - content: "\e054"; -} -.icon-users:before { - content: "\e055"; -} -.icon-earth:before { - content: "\e056"; -} -.icon-mail:before { - content: "\e057"; -} -.icon-checkbox-checked:before { - content: "\e058"; -} -.icon-checkbox-unchecked:before { - content: "\e059"; -} -.icon-checkbox-partial:before { - content: "\e05a"; -} -.icon-radio-checked:before { - content: "\e05b"; -} -.icon-radio-unchecked:before { - content: "\e05c"; -} -.icon-google-drive:before { - content: "\e05d"; -} -.icon-spinner:before { - content: "\e05e"; -} -.icon-archive:before { - content: "\e05f"; -} -.icon-buy-sign:before { - content: "\e060"; -} -.icon-filter:before { - content: "\e061"; -} -.icon-sync:before { - content: "\e062"; -} -.icon-ellipsis-alt:before { - content: "\e063"; -} -.icon-cloud-up:before { - content: "\e064"; -} -.icon-cloud-down:before { - content: "\e065"; -} -.icon-import:before { - content: "\e066"; -} -.icon-export:before { - content: "\e067"; -} -.icon-copy:before { - content: "\e068"; -} -.icon-angry-smiley:before { - content: "\e069"; -} -.icon-happy-smiley:before { - content: "\e06a"; -} -.icon-help:before { - content: "\e06b"; -} -.icon-resize-in:before { - content: "\e06c"; -} -.icon-resize-out:before { - content: "\e06d"; -} - -/** initial setup **/ -.nano { - /* - position : relative; - width : 100%; - height : 100%;*/ - overflow: hidden !important; -} - -.nano .content { - position: absolute; - /*overflow-x : hidden;*/ - top: 0; - right: 0; - bottom: 0; - left: 0; - overflow: scroll; - -webkit-overflow-scrolling: touch; -} - -.nano .content .content-wrapper { - height: 100%; -} - -.nano .content::-webkit-scrollbar { - visibility: hidden; -} -.has-scrollbar .content::-webkit-scrollbar { - /*visibility: visible;*/ - visibility: hidden; -} -.nano-visibility-hidden::-webkit-scrollbar { - visibility: hidden; -} - -.nano > .pane { - position: absolute; - top: 1px; - right: 0; - bottom: 1px; - z-index: 102; - margin: 2px; - width: 5px; - border-radius: 5px; - background: none; - opacity: 0.01; - filter: alpha(opacity=1); - -webkit-transition: 0.4s; - transition: 0.4s; -} - -.nano > .pane2 { - position: absolute; - right: 1px; - bottom: 0; - left: 1px; - z-index: 10000; - margin: 2px; - height: 5px; - border-radius: 5px; - background: none; - opacity: 0.01; - filter: alpha(opacity=1); - -webkit-transition: 0.4s; - transition: 0.4s; -} - -.nano > .pane > .slider { - position: relative; - margin: 0; - width: 5px; - border-radius: 3px; - background-color: #999999; - background-color: rgba(0, 0, 0, 0.3); -} - -.nano > .pane2 > .slider2 { - position: relative; - margin: 0; - height: 5px; - border-radius: 3px; - background-color: #999999; - background-color: rgba(0, 0, 0, 0.3); -} - -.nano:hover > .pane, -.nano:hover > .pane2, -.pane.activescroll, -.pane2.activescroll, -.pane.active, -.pane2.active, -.pane.flashed, -.pane2.flashed { - visibility: visible\9; /* Target only IE7 and IE8 with this hack */ - opacity: 0.99; - filter: alpha(opacity=99); -} - -.nano > .pane:hover, -.nano > .pane.active { - background-color: rgba(0, 0, 0, 0.15); -} -.nano > .pane2:hover, -.nano > .pane2.active { - background-color: rgba(0, 0, 0, 0.15); -} - -.nano > .pane:hover > .slider, -.nano > .pane.active > .slider { - background-color: rgba(0, 0, 0, 0.4); -} -.nano > .pane2:hover > .slider2, -.nano > .pane2.active > .slider2 { - background-color: rgba(0, 0, 0, 0.4); -} - -/* Magnific Popup CSS */ -.mfp-bg { - position: fixed; - top: 0; - left: 0; - z-index: 1042; - overflow: hidden; - width: 100%; - height: 100%; - background: #0b0b0b; - opacity: 0.8; - filter: alpha(opacity=80); -} - -.mfp-wrap { - position: fixed; - top: 0; - left: 0; - z-index: 1043; - width: 100%; - height: 100%; - outline: none !important; - - -webkit-backface-visibility: hidden; -} - -.mfp-container { - position: absolute; - top: 0; - left: 0; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0 8px; - width: 100%; - height: 100%; - text-align: center; -} - -.mfp-container:before { - display: inline-block; - height: 100%; - content: ""; - vertical-align: middle; -} - -.mfp-align-top .mfp-container:before { - display: none; -} - -.mfp-content { - position: relative; - z-index: 1045; - display: inline-block; - margin: 0 auto; - vertical-align: middle; - text-align: left; -} - -.mfp-inline-holder .mfp-content, -.mfp-ajax-holder .mfp-content { - width: 100%; - cursor: auto; -} - -.mfp-ajax-cur { - cursor: progress; -} - -.mfp-zoom-out-cur, -.mfp-zoom-out-cur .mfp-image-holder .mfp-close { - cursor: -webkit-zoom-out; - cursor: zoom-out; -} - -.mfp-zoom { - cursor: pointer; - cursor: -webkit-zoom-in; - cursor: zoom-in; -} - -.mfp-auto-cursor .mfp-content { - cursor: auto; -} - -.mfp-close, -.mfp-arrow, -.mfp-preloader, -.mfp-counter { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.mfp-loading.mfp-figure { - display: none; -} - -.mfp-hide { - display: none !important; -} - -.mfp-preloader { - position: absolute; - top: 50%; - right: 8px; - left: 8px; - z-index: 1044; - margin-top: -0.8em; - width: auto; - color: #cccccc; - text-align: center; -} -.mfp-preloader a { - color: #cccccc; -} -.mfp-preloader a:hover { - color: white; -} - -.mfp-s-ready .mfp-preloader { - display: none; -} - -.mfp-s-error .mfp-content { - display: none; -} - -button.mfp-close, -button.mfp-arrow { - z-index: 1046; - display: block; - overflow: visible; - padding: 0; - outline: none; - border: 0; - background: transparent; - box-shadow: none; - cursor: pointer; - - -webkit-appearance: none; -} -button::-moz-focus-inner { - padding: 0; - border: 0; -} - -.mfp-close { - position: absolute; - top: 0; - right: 0; - padding: 0 0 18px 10px; - width: 44px; - height: 44px; - color: white; - text-align: center; - text-decoration: none; - font-style: normal; - font-size: 28px; - font-family: Arial, Baskerville, monospace; - line-height: 44px; - opacity: 0.65; -} -.mfp-close:hover, -.mfp-close:focus { - opacity: 1; -} -.mfp-close:active { - top: 1px; -} - -.mfp-close-btn-in .mfp-close { - color: #333333; -} - -.mfp-image-holder .mfp-close, -.mfp-iframe-holder .mfp-close { - right: -6px; - padding-right: 6px; - width: 100%; - color: white; - text-align: right; -} - -.mfp-counter { - position: absolute; - top: 0; - right: 0; - color: #cccccc; - font-size: 12px; - line-height: 18px; -} - -.mfp-arrow { - position: absolute; - top: 50%; - margin: 0; - margin-top: -55px; - padding: 0; - width: 90px; - height: 110px; - opacity: 0.65; - - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -.mfp-arrow:active { - margin-top: -54px; -} -.mfp-arrow:hover, -.mfp-arrow:focus { - opacity: 1; -} -.mfp-arrow:before, -.mfp-arrow:after, -.mfp-arrow .mfp-b, -.mfp-arrow .mfp-a { - position: absolute; - top: 0; - left: 0; - display: block; - margin-top: 35px; - margin-left: 35px; - width: 0; - height: 0; - border: medium inset transparent; - content: ""; -} -.mfp-arrow:after, -.mfp-arrow .mfp-a { - top: 8px; - border-top-width: 13px; - border-bottom-width: 13px; -} -.mfp-arrow:before, -.mfp-arrow .mfp-b { - border-top-width: 21px; - border-bottom-width: 21px; -} - -.mfp-arrow-left { - left: 0; -} -.mfp-arrow-left:after, -.mfp-arrow-left .mfp-a { - margin-left: 31px; - border-right: 17px solid white; -} -.mfp-arrow-left:before, -.mfp-arrow-left .mfp-b { - margin-left: 25px; - border-right: 27px solid #3f3f3f; -} - -.mfp-arrow-right { - right: 0; -} -.mfp-arrow-right:after, -.mfp-arrow-right .mfp-a { - margin-left: 39px; - border-left: 17px solid white; -} -.mfp-arrow-right:before, -.mfp-arrow-right .mfp-b { - border-left: 27px solid #3f3f3f; -} - -.mfp-iframe-holder { - padding-top: 40px; - padding-bottom: 40px; -} -.mfp-iframe-holder .mfp-content { - max-width: 900px; - width: 100%; - line-height: 0; -} -.mfp-iframe-holder .mfp-close { - top: -40px; -} - -.mfp-iframe-scaler { - overflow: hidden; - padding-top: 56.25%; - width: 100%; - height: 0; -} -.mfp-iframe-scaler iframe { - position: absolute; - top: 0; - left: 0; - display: block; - width: 100%; - height: 100%; - background: black; - box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); -} - -/* Main image in popup */ -img.mfp-img { - display: block; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 0 auto; - padding: 40px 0 40px; - max-width: 100%; - width: auto; - height: auto; - line-height: 0; -} - -/* The shadow behind the image */ -.mfp-figure { - line-height: 0; -} -.mfp-figure:after { - position: absolute; - top: 40px; - right: 0; - bottom: 40px; - left: 0; - z-index: -1; - display: block; - width: auto; - height: auto; - background: #444444; - box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); - content: ""; -} -.mfp-figure small { - display: block; - color: #bdbdbd; - font-size: 12px; - line-height: 14px; -} - -.mfp-bottom-bar { - position: absolute; - top: 100%; - left: 0; - margin-top: -36px; - width: 100%; - cursor: auto; -} - -.mfp-title { - padding-right: 36px; - color: #f3f3f3; - text-align: left; - word-wrap: break-word; - line-height: 18px; -} - -.mfp-image-holder .mfp-content { - max-width: 100%; -} - -.mfp-gallery .mfp-image-holder .mfp-figure { - cursor: pointer; -} - -@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { - /** - * Remove all paddings around the image on small screen - */ - .mfp-img-mobile .mfp-image-holder { - padding-right: 0; - padding-left: 0; - } - .mfp-img-mobile img.mfp-img { - padding: 0; - } - .mfp-img-mobile .mfp-figure { - /* The shadow behind the image */ - } - .mfp-img-mobile .mfp-figure:after { - top: 0; - bottom: 0; - } - .mfp-img-mobile .mfp-figure small { - display: inline; - margin-left: 5px; - } - .mfp-img-mobile .mfp-bottom-bar { - position: fixed; - top: auto; - bottom: 0; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 0; - padding: 3px 5px; - background: rgba(0, 0, 0, 0.6); - } - .mfp-img-mobile .mfp-bottom-bar:empty { - padding: 0; - } - .mfp-img-mobile .mfp-counter { - top: 3px; - right: 5px; - } - .mfp-img-mobile .mfp-close { - position: fixed; - top: 0; - right: 0; - padding: 0; - width: 35px; - height: 35px; - background: rgba(0, 0, 0, 0.6); - text-align: center; - line-height: 35px; - } -} - -@media all and (max-width: 900px) { - .mfp-arrow { - -webkit-transform: scale(0.75); - -ms-transform: scale(0.75); - transform: scale(0.75); - } - .mfp-arrow-left { - -webkit-transform-origin: 0; - -ms-transform-origin: 0; - transform-origin: 0; - } - .mfp-arrow-right { - -webkit-transform-origin: 100%; - -ms-transform-origin: 100%; - transform-origin: 100%; - } - .mfp-container { - padding-right: 6px; - padding-left: 6px; - } -} - -.mfp-ie7 .mfp-img { - padding: 0; -} -.mfp-ie7 .mfp-bottom-bar { - left: 50%; - margin-top: 5px; - margin-left: -300px; - padding-bottom: 5px; - width: 600px; -} -.mfp-ie7 .mfp-container { - padding: 0; -} -.mfp-ie7 .mfp-content { - padding-top: 44px; -} -.mfp-ie7 .mfp-close { - top: 0; - right: 0; - padding-top: 0; -} - - - -/* overlay at start */ -.mfp-fade.mfp-bg { - opacity: 0; - -webkit-transition: all 0.2s ease-out; - transition: all 0.2s ease-out; -} -/* overlay animate in */ -.mfp-fade.mfp-bg.mfp-ready { - opacity: 0.8; -} -/* overlay animate out */ -.mfp-fade.mfp-bg.mfp-removing { - opacity: 0; -} - -/* content at start */ -.mfp-fade.mfp-wrap .mfp-content { - opacity: 0; - -webkit-transition: all 0.15s ease-out; - transition: all 0.15s ease-out; - -webkit-transform: translateX(-50px); - -ms-transform: translateX(-50px); - transform: translateX(-50px); -} - -/* content animate it */ -.mfp-fade.mfp-wrap.mfp-ready .mfp-content { - opacity: 1; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); -} -/* content animate out */ -.mfp-fade.mfp-wrap.mfp-removing .mfp-content { - opacity: 0; - -webkit-transform: translateX(50px); - -ms-transform: translateX(50px); - transform: translateX(50px); -} - -.simple-pace { - pointer-events: none; - - -webkit-pointer-events: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.simple-pace-inactive { - display: none; -} - -.simple-pace .simple-pace-progress { - position: fixed; - top: 0; - left: 0; - z-index: 2000; - overflow: hidden; - height: 3px; - background-color: #939595; - -webkit-transition: width 0.5s; - transition: width 0.5s; -} - -.simple-pace .simple-pace-progress-inner { - position: absolute; - top: 0; - right: -32px; - bottom: 0; - left: 0; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.3)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.3)), color-stop(0.75, rgba(255, 255, 255, 0.3)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); - background-size: 32px 32px; - -webkit-animation: simple-pace-stripe-animation 500ms linear infinite; - -ms-animation: simple-pace-stripe-animation 500ms linear infinite; - animation: simple-pace-stripe-animation 500ms linear infinite; -} - -@-webkit-keyframes simple-pace-stripe-animation { - 0% { - -webkit-transform: none; - transform: none; - } - 100% { - -webkit-transform: translate(-32px, 0); - transform: translate(-32px, 0); - } -} -@-ms-keyframes simple-pace-stripe-animation { - 0% { - -ms-transform: none; - transform: none; - } - 100% { - -ms-transform: translate(-32px, 0); - transform: translate(-32px, 0); - } -} -@keyframes simple-pace-stripe-animation { - 0% { - -webkit-transform: none; - -webkit-transform: none; - transform: none; - transform: none; - } - 100% { - -webkit-transform: translate(-32px, 0); - -webkit-transform: translate(-32px, 0); - transform: translate(-32px, 0); - transform: translate(-32px, 0); - } -} -.inputosaurus-container { - display: inline-block; - margin: 0 5px 0 0; - padding: 0 3px; - border: 1px solid #bcbec0; - background-color: #ffffff; - font-size: 14px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - cursor: text; -} -.inputosaurus-container li { - display: block; - float: left; - overflow: hidden; - overflow: hidden; - margin: 2px 2px 0; - padding: 2px 3px; - border: #a9cae4 solid 1px; - border-radius: 2px; - background-color: #e5eff7; - box-shadow: 0 1px 0 rgba(255,255,255,0.75) inset; - color: #5b9bcd; - -ms-text-overflow: ellipsis; - text-overflow: ellipsis; - white-space: nowrap; - line-height: 20px; - cursor: default; - - -o-text-overflow: ellipsis; -} -.inputosaurus-container li.inputosaurus-selected { - background-color: #bdd6eb; -} -.inputosaurus-container li a { - padding: 1px; - outline: none; - color: #5b9bcd; - text-decoration: none; - font-size: 16px; -} -.inputosaurus-container .inputosaurus-input { - margin-top: 3px; - border: none; - background-color: #ffffff; - box-shadow: none; -} -.inputosaurus-container .inputosaurus-input input { - margin: 0; - padding: 0 0 1px 1px; - width: 25px; - height: 23px; - outline: none; - border: none; - box-shadow: none; - color: #555555; - font-size: 14px; - line-height: 20px; -} -.inputosaurus-container .inputosaurus-input input:hover { - box-shadow: none; -} -.inputosaurus-input-hidden { - display: none; -} - -.flag-wrapper { - display: inline-block; - width: 24px; - height: 16px; -} - -.flag { - display: inline-block; - width: 16px; - height: 11px; - background: url(flags.png) no-repeat; -} - -.flag.flag-en { - background-position: -144px -154px; -} -.flag.flag-en-us { - background-position: -144px -154px; -} -.flag.flag-en-gb { - background-position: -176px -44px; -} -.flag.flag-en-uk { - background-position: -176px -44px; -} -.flag.flag-en-ca { - background-position: -48px -22px; -} - -.flag.flag-nl, -.flag.flag-nl-nl { - background-position: -80px -110px; -} -.flag.flag-pl, -.flag.flag-pl-pl { - background-position: -32px -121px; -} -.flag.flag-ru, -.flag.flag-ru-ru { - background-position: -224px -121px; -} -.flag.flag-ro, -.flag.flag-ro-ro { - background-position: -192px -121px; -} -.flag.flag-de, -.flag.flag-de-de { - background-position: -80px -33px; -} -.flag.flag-it, -.flag.flag-it-it { - background-position: -208px -66px; -} -.flag.flag-is, -.flag.flag-is-is { - background-position: -192px -66px; -} -.flag.flag-lv, -.flag.flag-lv-lv { - background-position: -112px -88px; -} -.flag.flag-hu, -.flag.flag-hu-hu { - background-position: -32px -66px; -} -.flag.flag-sk, -.flag.flag-sk-sk { - background-position: -144px -132px; -} -.flag.flag-sl, -.flag.flag-sl-si, -.flag.flag-sl-sl { - background-position: -160px -132px; -} -.flag.flag-ua, -.flag.flag-ua-ua, -.flag.flag-uk-ua { - background-position: -96px -154px; -} - -.flag.flag-no, -.flag.flag-nb, -.flag.flag-nb-no { - background-position: -96px -110px; -} - -.flag.flag-fr, -.flag.flag-fr-fr, -.flag.flag-fr-ca { - background-position: -144px -44px; -} -.flag.flag-es, -.flag.flag-es-es, -.flag.flag-es-la { - background-position: -16px -44px; -} - -.flag.flag-ja, -.flag.flag-jp, -.flag.flag-ja-jp { - background-position: -16px -77px; -} - -.flag.flag-ko-kr { - background-position: -144px -77px; -} - -.flag.flag-pt, -.flag.flag-pt-pt { - background-position: -112px -121px; -} -.flag.flag-pt-br { - background-position: -192px -11px; -} - -.flag.flag-tr, -.flag.flag-tr-tr { - background-position: -16px -154px; -} - -.flag.flag-cn, -.flag.flag-zh-tw, -.flag.flag-zh-cn, -.flag.flag-zh-hk { - background-position: -208px -22px; -} -/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; - line-height: 0; -} -.clearfix:after { - clear: both; -} -.hide-text { - border: 0; - background-color: transparent; - color: transparent; - text-shadow: none; - font: 0/0 a; -} -.input-block-level { - display: block; - -moz-box-sizing: border-box; - box-sizing: border-box; - min-height: 30px; - width: 100%; -} -body { - margin: 0; - background-color: #ffffff; - color: #333333; - font-size: 14px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - line-height: 20px; -} -a { - color: #0088cc; - text-decoration: none; -} -a:hover { - color: #005580; - text-decoration: underline; -} -.img-rounded { - border-radius: 6px; -} -.img-polaroid { - padding: 4px; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - background-color: #ffffff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} -.img-circle { - border-radius: 500px; -} -.row { - margin-left: -20px; - - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - margin-left: 20px; -} -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row-fluid { - width: 100%; - - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid [class*="span"] { - display: block; - float: left; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin-left: 2.12765957%; - min-height: 30px; - width: 100%; - - *margin-left: 2.07446809%; -} -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid .span12 { - width: 100%; - - *width: 99.94680851%; -} -.row-fluid .span11 { - width: 91.4893617%; - - *width: 91.43617021%; -} -.row-fluid .span10 { - width: 82.9787234%; - - *width: 82.92553191%; -} -.row-fluid .span9 { - width: 74.46808511%; - - *width: 74.41489362%; -} -.row-fluid .span8 { - width: 65.95744681%; - - *width: 65.90425532%; -} -.row-fluid .span7 { - width: 57.44680851%; - - *width: 57.39361702%; -} -.row-fluid .span6 { - width: 48.93617021%; - - *width: 48.88297872%; -} -.row-fluid .span5 { - width: 40.42553191%; - - *width: 40.37234043%; -} -.row-fluid .span4 { - width: 31.91489362%; - - *width: 31.86170213%; -} -.row-fluid .span3 { - width: 23.40425532%; - - *width: 23.35106383%; -} -.row-fluid .span2 { - width: 14.89361702%; - - *width: 14.84042553%; -} -.row-fluid .span1 { - width: 6.38297872%; - - *width: 6.32978723%; -} -.row-fluid .offset12 { - margin-left: 104.25531915%; - - *margin-left: 104.14893617%; -} -.row-fluid .offset12:first-child { - margin-left: 102.12765957%; - - *margin-left: 102.0212766%; -} -.row-fluid .offset11 { - margin-left: 95.74468085%; - - *margin-left: 95.63829787%; -} -.row-fluid .offset11:first-child { - margin-left: 93.61702128%; - - *margin-left: 93.5106383%; -} -.row-fluid .offset10 { - margin-left: 87.23404255%; - - *margin-left: 87.12765957%; -} -.row-fluid .offset10:first-child { - margin-left: 85.10638298%; - - *margin-left: 85%; -} -.row-fluid .offset9 { - margin-left: 78.72340426%; - - *margin-left: 78.61702128%; -} -.row-fluid .offset9:first-child { - margin-left: 76.59574468%; - - *margin-left: 76.4893617%; -} -.row-fluid .offset8 { - margin-left: 70.21276596%; - - *margin-left: 70.10638298%; -} -.row-fluid .offset8:first-child { - margin-left: 68.08510638%; - - *margin-left: 67.9787234%; -} -.row-fluid .offset7 { - margin-left: 61.70212766%; - - *margin-left: 61.59574468%; -} -.row-fluid .offset7:first-child { - margin-left: 59.57446809%; - - *margin-left: 59.46808511%; -} -.row-fluid .offset6 { - margin-left: 53.19148936%; - - *margin-left: 53.08510638%; -} -.row-fluid .offset6:first-child { - margin-left: 51.06382979%; - - *margin-left: 50.95744681%; -} -.row-fluid .offset5 { - margin-left: 44.68085106%; - - *margin-left: 44.57446809%; -} -.row-fluid .offset5:first-child { - margin-left: 42.55319149%; - - *margin-left: 42.44680851%; -} -.row-fluid .offset4 { - margin-left: 36.17021277%; - - *margin-left: 36.06382979%; -} -.row-fluid .offset4:first-child { - margin-left: 34.04255319%; - - *margin-left: 33.93617021%; -} -.row-fluid .offset3 { - margin-left: 27.65957447%; - - *margin-left: 27.55319149%; -} -.row-fluid .offset3:first-child { - margin-left: 25.53191489%; - - *margin-left: 25.42553191%; -} -.row-fluid .offset2 { - margin-left: 19.14893617%; - - *margin-left: 19.04255319%; -} -.row-fluid .offset2:first-child { - margin-left: 17.0212766%; - - *margin-left: 16.91489362%; -} -.row-fluid .offset1 { - margin-left: 10.63829787%; - - *margin-left: 10.53191489%; -} -.row-fluid .offset1:first-child { - margin-left: 8.5106383%; - - *margin-left: 8.40425532%; -} -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} -.container { - margin-right: auto; - margin-left: auto; - - *zoom: 1; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container-fluid { - padding-right: 20px; - padding-left: 20px; - - *zoom: 1; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.container-fluid:after { - clear: both; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-weight: 200; - font-size: 20px; - line-height: 30px; -} -small { - font-size: 85%; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} -cite { - font-style: normal; -} -.muted { - color: #999999; -} -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - color: inherit; - font-weight: bold; - font-family: inherit; - line-height: 1; - - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - color: #999999; - font-weight: normal; - line-height: 1; -} -h1 { - font-size: 36px; - line-height: 40px; -} -h2 { - font-size: 30px; - line-height: 40px; -} -h3 { - font-size: 24px; - line-height: 40px; -} -h4 { - font-size: 18px; - line-height: 20px; -} -h5 { - font-size: 14px; - line-height: 20px; -} -h6 { - font-size: 12px; - line-height: 20px; -} -h1 small { - font-size: 24px; -} -h2 small { - font-size: 18px; -} -h3 small { - font-size: 14px; -} -h4 small { - font-size: 14px; -} -.page-header { - margin: 20px 0 30px; - padding-bottom: 9px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - margin: 0 0 10px 25px; - padding: 0; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: 20px; -} -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} -dl { - margin-bottom: 20px; -} -dt, -dd { - line-height: 20px; -} -dt { - font-weight: bold; -} -dd { - margin-left: 10px; -} -.dl-horizontal dt { - float: left; - clear: left; - overflow: hidden; - width: 120px; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; -} -.dl-horizontal dd { - margin-left: 130px; -} -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} -abbr[title] { - border-bottom: 1px dotted #999999; - cursor: help; -} -abbr.initialism { - text-transform: uppercase; - font-size: 90%; -} -blockquote { - margin: 0 0 20px; - padding: 0 0 0 15px; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-weight: 300; - font-size: 16px; - line-height: 25px; -} -blockquote small { - display: block; - color: #999999; - line-height: 20px; -} -blockquote small:before { - content: "\2014 \00A0"; -} -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} -blockquote.pull-right small:before { - content: ""; -} -blockquote.pull-right small:after { - content: "\00A0 \2014"; -} -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 20px; -} -code, -pre { - padding: 0 3px 2px; - border-radius: 3px; - color: #333333; - font-size: 12px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - border: 1px solid #e1e1e8; - background-color: #f7f7f9; - color: #dd1144; -} -pre { - display: block; - margin: 0 0 10px; - padding: 9.5px; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - background-color: #f5f5f5; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; - word-break: break-all; - font-size: 13px; - line-height: 20px; -} -pre.prettyprint { - margin-bottom: 20px; -} -pre code { - padding: 0; - border: 0; - background-color: transparent; - color: inherit; -} -.pre-scrollable { - overflow-y: scroll; - max-height: 340px; -} -form { - margin: 0 0 20px; -} -fieldset { - margin: 0; - padding: 0; - border: 0; -} -legend { - display: block; - margin-bottom: 20px; - padding: 0; - width: 100%; - border: 0; - border-bottom: 1px solid #e5e5e5; - color: #333333; - font-size: 21px; - line-height: 40px; -} -legend small { - color: #999999; - font-size: 15px; -} -label, -input, -button, -select, -textarea { - font-weight: normal; - font-size: 14px; - line-height: 20px; -} -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -label { - display: block; - margin-bottom: 5px; -} -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - margin-bottom: 9px; - padding: 4px 6px; - height: 20px; - border-radius: 3px; - color: #555555; - font-size: 14px; - line-height: 20px; -} -input, -textarea { - width: 210px; -} -textarea { - height: auto; -} -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - border: 1px solid #cccccc; - background-color: #ffffff; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - outline: 0; - outline: thin dotted \9; - border-color: rgba(82, 168, 236, 0.8); - /* IE6-9 */ - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 8px rgba(82,168,236,0.6); -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - /* IE7 */ - margin-top: 1px \9; - /* IE8-9 */ - line-height: normal; - cursor: pointer; - - *margin-top: 0; -} -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} -select, -input[type="file"] { - height: 30px; - /* For IE7, add top margin to align select with labels */ - line-height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; -} -select { - width: 220px; - border: 1px solid #bbbbbb; - background-color: #ffffff; -} -select[multiple], -select[size] { - height: auto; -} -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.uneditable-input, -.uneditable-textarea { - border-color: #cccccc; - background-color: #fcfcfc; - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - color: #999999; - cursor: not-allowed; -} -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} -.uneditable-textarea { - width: auto; - height: auto; -} -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} -.radio, -.checkbox { - padding-left: 18px; - min-height: 18px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -18px; -} -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, -.checkbox.inline { - display: inline-block; - margin-bottom: 0; - padding-top: 5px; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} -.controls-row { - *zoom: 1; -} -.controls-row:before, -.controls-row:after { - display: table; - content: ""; - line-height: 0; -} -.controls-row:after { - clear: both; -} -.controls-row [class*="span"] { - float: left; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - background-color: #eeeeee; - cursor: not-allowed; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} -.control-group.warning > label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - color: #c09853; -} -.control-group.warning .checkbox:focus, -.control-group.warning .radio:focus, -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - border-color: #c09853; - background-color: #fcf8e3; - color: #c09853; -} -.control-group.error > label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - color: #b94a48; -} -.control-group.error .checkbox:focus, -.control-group.error .radio:focus, -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - border-color: #b94a48; - background-color: #f2dede; - color: #b94a48; -} -.control-group.success > label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - color: #468847; -} -.control-group.success .checkbox:focus, -.control-group.success .radio:focus, -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - border-color: #468847; - background-color: #dff0d8; - color: #468847; -} -input:focus:required:invalid, -textarea:focus:required:invalid, -select:focus:required:invalid { - border-color: #ee5f5b; - color: #b94a48; -} -input:focus:required:invalid:focus, -textarea:focus:required:invalid:focus, -select:focus:required:invalid:focus { - border-color: #e9322d; - box-shadow: 0 0 6px #f8b9b7; -} -.form-actions { - margin-top: 20px; - margin-bottom: 20px; - padding: 19px 20px 20px; - border-top: 1px solid #e5e5e5; - background-color: #f5f5f5; - - *zoom: 1; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; - line-height: 0; -} -.form-actions:after { - clear: both; -} -.help-block, -.help-inline { - color: #595959; -} -.help-block { - display: block; - margin-bottom: 10px; -} -.help-inline { - display: inline-block; - padding-left: 5px; - vertical-align: middle; - - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; -} -.input-append, -.input-prepend { - margin-bottom: 5px; - white-space: nowrap; - font-size: 0; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - border-radius: 0 3px 3px 0; - vertical-align: top; - font-size: 14px; - - *margin-left: 0; -} -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - padding: 4px 5px; - min-width: 16px; - width: auto; - height: 20px; - border: 1px solid #cccccc; - background-color: #eeeeee; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - font-weight: normal; - font-size: 14px; - line-height: 20px; -} -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn { - margin-left: -1px; - border-radius: 0; - vertical-align: top; -} -.input-append .active, -.input-prepend .active { - border-color: #46a546; - background-color: #a9dba9; -} -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - border-radius: 3px 0 0 3px; -} -.input-append input, -.input-append select, -.input-append .uneditable-input { - border-radius: 3px 0 0 3px; -} -.input-append .add-on:last-child, -.input-append .btn:last-child { - border-radius: 0 3px 3px 0; -} -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - border-radius: 0; -} -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - border-radius: 3px 0 0 3px; -} -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - border-radius: 0 3px 3px 0; -} -input.search-query { - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - margin-bottom: 0; - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - border-radius: 15px; -} -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - border-radius: 0; -} -.form-search .input-append .search-query { - border-radius: 14px 0 0 14px; -} -.form-search .input-append .btn { - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .search-query { - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .btn { - border-radius: 14px 0 0 14px; -} -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; -} -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - margin-bottom: 0; - padding-left: 0; - vertical-align: middle; -} -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} -.control-group { - margin-bottom: 10px; -} -legend + .control-group { - margin-top: 20px; - - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 20px; - - *zoom: 1; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; - line-height: 0; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-label { - float: left; - padding-top: 5px; - width: 140px; - text-align: right; -} -.form-horizontal .controls { - margin-left: 160px; - - *display: inline-block; - *margin-left: 0; - *padding-left: 20px; -} -.form-horizontal .controls:first-child { - *padding-left: 160px; -} -.form-horizontal .help-block { - margin-top: 10px; - margin-bottom: 0; -} -.form-horizontal .form-actions { - padding-left: 160px; -} -table { - max-width: 100%; - border-spacing: 0; - border-collapse: collapse; - background-color: transparent; -} -.table { - margin-bottom: 20px; - width: 100%; -} -.table th, -.table td { - padding: 8px; - border-top: 1px solid #dddddd; - vertical-align: top; - text-align: left; - line-height: 20px; -} -.table th { - font-weight: bold; -} -.table thead th { - vertical-align: bottom; -} -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} -.table tbody + tbody { - border-top: 2px solid #dddddd; -} -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - border-left: 0; - border-radius: 4px; - - *border-collapse: collapse; -} -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-bordered thead:first-child tr:first-child th:first-child, -.table-bordered tbody:first-child tr:first-child td:first-child { - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered thead:first-child tr:first-child th:last-child, -.table-bordered tbody:first-child tr:first-child td:last-child { - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-bordered thead:last-child tr:last-child th:first-child, -.table-bordered tbody:last-child tr:last-child td:first-child, -.table-bordered tfoot:last-child tr:last-child td:first-child { - border-radius: 0 0 0 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.table-bordered thead:last-child tr:last-child th:last-child, -.table-bordered tbody:last-child tr:last-child td:last-child, -.table-bordered tfoot:last-child tr:last-child td:last-child { - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - border-top-right-radius: 4px; - - -moz-border-right-topleft: 4px; -} -.table-striped tbody tr:nth-child(odd) td, -.table-striped tbody tr:nth-child(odd) th { - background-color: #f9f9f9; -} -.table-hover tbody tr:hover td, -.table-hover tbody tr:hover th { - background-color: #f5f5f5; -} -table [class*=span], -.row-fluid table [class*=span] { - display: table-cell; - float: none; - margin-left: 0; -} -table .span1 { - float: none; - margin-left: 0; - width: 44px; -} -table .span2 { - float: none; - margin-left: 0; - width: 124px; -} -table .span3 { - float: none; - margin-left: 0; - width: 204px; -} -table .span4 { - float: none; - margin-left: 0; - width: 284px; -} -table .span5 { - float: none; - margin-left: 0; - width: 364px; -} -table .span6 { - float: none; - margin-left: 0; - width: 444px; -} -table .span7 { - float: none; - margin-left: 0; - width: 524px; -} -table .span8 { - float: none; - margin-left: 0; - width: 604px; -} -table .span9 { - float: none; - margin-left: 0; - width: 684px; -} -table .span10 { - float: none; - margin-left: 0; - width: 764px; -} -table .span11 { - float: none; - margin-left: 0; - width: 844px; -} -table .span12 { - float: none; - margin-left: 0; - width: 924px; -} -table .span13 { - float: none; - margin-left: 0; - width: 1004px; -} -table .span14 { - float: none; - margin-left: 0; - width: 1084px; -} -table .span15 { - float: none; - margin-left: 0; - width: 1164px; -} -table .span16 { - float: none; - margin-left: 0; - width: 1244px; -} -table .span17 { - float: none; - margin-left: 0; - width: 1324px; -} -table .span18 { - float: none; - margin-left: 0; - width: 1404px; -} -table .span19 { - float: none; - margin-left: 0; - width: 1484px; -} -table .span20 { - float: none; - margin-left: 0; - width: 1564px; -} -table .span21 { - float: none; - margin-left: 0; - width: 1644px; -} -table .span22 { - float: none; - margin-left: 0; - width: 1724px; -} -table .span23 { - float: none; - margin-left: 0; - width: 1804px; -} -table .span24 { - float: none; - margin-left: 0; - width: 1884px; -} -.table tbody tr.success td { - background-color: #dff0d8; -} -.table tbody tr.error td { - background-color: #f2dede; -} -.table tbody tr.info td { - background-color: #d9edf7; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; - vertical-align: top; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - margin: 2px 0 0; - padding: 5px 0; - min-width: 160px; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - background-color: #ffffff; - background-clip: padding-box; - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - list-style: none; - - *border-bottom-width: 2px; - *border-right-width: 2px; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - overflow: hidden; - margin: 9px 1px; - height: 1px; - border-bottom: 1px solid #ffffff; - background-color: #e5e5e5; - - *margin: -5px 0 5px; - *width: 100%; -} -.dropdown-menu a { - display: block; - clear: both; - padding: 3px 20px; - color: #333333; - white-space: nowrap; - font-weight: normal; - line-height: 20px; -} -.dropdown-menu li > a:hover, -.dropdown-menu li > a:focus, -.dropdown-submenu:hover > a { - background-color: #0088cc; - background-color: #0081c2; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - color: #ffffff; - text-decoration: none; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { - outline: 0; - background-color: #0088cc; - background-color: #0081c2; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - color: #ffffff; - text-decoration: none; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu .disabled > a, -.dropdown-menu .disabled > a:hover { - color: #999999; -} -.dropdown-menu .disabled > a:hover { - background-color: transparent; - text-decoration: none; - cursor: default; -} -.open { - *z-index: 1000; -} -.open > .dropdown-menu { - display: block; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: "\2191"; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.dropdown-submenu { - position: relative; -} -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - border-radius: 0 6px 6px 6px; -} -.dropdown-submenu:hover .dropdown-menu { - display: block; -} -.dropdown-submenu > a:after { - display: block; - float: right; - margin-top: 5px; - margin-right: -10px; - width: 0; - height: 0; - border-width: 5px 0 5px 5px; - border-style: solid; - border-color: transparent; - border-left-color: #cccccc; - content: " "; -} -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} -.dropdown .dropdown-menu .nav-header { - padding-right: 20px; - padding-left: 20px; -} -.typeahead { - margin-top: 2px; - border-radius: 4px; -} -.well { - margin-bottom: 20px; - padding: 19px; - min-height: 20px; - border: 1px solid #e3e3e3; - border-radius: 4px; - background-color: #f5f5f5; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #dddddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-large { - padding: 24px; - border-radius: 6px; -} -.well-small { - padding: 9px; - border-radius: 3px; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - position: relative; - overflow: hidden; - overflow: visible \9; - height: 0; - -webkit-transition: height 0.35s ease; - transition: height 0.35s ease; -} -.collapse.in { - height: auto; -} -.close { - float: right; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - font-weight: bold; - font-size: 20px; - line-height: 20px; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover { - color: #000000; - text-decoration: none; - opacity: 0.4; - filter: alpha(opacity=40); - cursor: pointer; -} -button.close { - padding: 0; - border: 0; - background: transparent; - cursor: pointer; - - -webkit-appearance: none; -} -.btn { - display: inline-block; - margin-bottom: 0; - padding: 4px 14px; - border: 1px solid #bbbbbb; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border-bottom-color: #a2a2a2; - border-radius: 4px; - background-color: #f5f5f5; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - box-shadow: inset 0 1px 0 rgba(255,255,255,0.2), 0 1px 2px rgba(0,0,0,0.05); - color: #333333; - vertical-align: middle; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - font-size: 14px; - line-height: 20px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: pointer; - - *background-color: #e6e6e6; - *border: 0; - *display: inline; - *line-height: 20px; - *margin-left: 0.3em; - /* IE7 inline-block hack */ - *zoom: 1; -} -.btn:hover, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - background-color: #e6e6e6; - color: #333333; - - *background-color: #d9d9d9; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover { - background-color: #e6e6e6; - /* Buttons in IE7 don't get borders, so darken on hover */ - background-position: 0 -15px; - color: #333333; - text-decoration: none; - -webkit-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; - - *background-color: #d9d9d9; -} -.btn:focus { - outline: thin dotted #333333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, -.btn:active { - outline: 0; - background-color: #e6e6e6; - background-color: #d9d9d9 \9; - background-image: none; - box-shadow: inset 0 2px 4px rgba(0,0,0,0.15), 0 1px 2px rgba(0,0,0,0.05); -} -.btn.disabled, -.btn[disabled] { - background-color: #e6e6e6; - background-image: none; - box-shadow: none; - opacity: 0.65; - filter: alpha(opacity=65); - cursor: default; -} -.btn-large { - padding: 9px 14px; - border-radius: 5px; - font-size: 16px; - line-height: normal; -} -.btn-large [class^="icon-"] { - margin-top: 2px; -} -.btn-small { - padding: 3px 9px; - font-size: 12px; - line-height: 18px; -} -.btn-small [class^="icon-"] { - margin-top: 0; -} -.btn-mini { - padding: 2px 6px; - font-size: 11px; - line-height: 16px; -} -.btn-block { - display: block; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding-right: 0; - padding-left: 0; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} -.btn { - border-color: #c5c5c5; - border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); -} -.btn-primary { - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - background-color: #006dcc; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - - *background-color: #0044cc; -} -.btn-primary:hover, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - background-color: #0044cc; - color: #ffffff; - - *background-color: #003bb3; -} -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} -.btn-warning { - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - background-color: #faa732; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - - *background-color: #f89406; -} -.btn-warning:hover, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - background-color: #f89406; - color: #ffffff; - - *background-color: #df8505; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - background-color: #da4f49; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - - *background-color: #bd362f; -} -.btn-danger:hover, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - background-color: #bd362f; - color: #ffffff; - - *background-color: #a9302a; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - - *background-color: #51a351; -} -.btn-success:hover, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - background-color: #51a351; - color: #ffffff; - - *background-color: #499249; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-info { - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - background-color: #49afcd; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - - *background-color: #2f96b4; -} -.btn-info:hover, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - background-color: #2f96b4; - color: #ffffff; - - *background-color: #2a85a0; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-inverse { - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - background-color: #363636; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - - *background-color: #222222; -} -.btn-inverse:hover, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - background-color: #222222; - color: #ffffff; - - *background-color: #151515; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -button.btn, -input[type="submit"].btn { - *padding-bottom: 3px; - *padding-top: 3px; -} -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-bottom: 7px; - *padding-top: 7px; -} -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-bottom: 3px; - *padding-top: 3px; -} -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-bottom: 1px; - *padding-top: 1px; -} -.btn-link, -.btn-link:active { - background-color: transparent; - background-image: none; - box-shadow: none; -} -.btn-link { - border-color: transparent; - border-radius: 0; - color: #0088cc; - cursor: pointer; -} -.btn-link:hover { - background-color: transparent; - color: #005580; - text-decoration: underline; -} -.btn-group { - position: relative; - white-space: nowrap; - font-size: 0; - - *margin-left: 0.3em; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - margin-top: 10px; - margin-bottom: 10px; - font-size: 0; -} -.btn-toolbar .btn-group { - display: inline-block; - - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; -} -.btn-toolbar .btn + .btn, -.btn-toolbar .btn-group + .btn, -.btn-toolbar .btn + .btn-group { - margin-left: 5px; -} -.btn-group > .btn { - position: relative; - border-radius: 0; -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu { - font-size: 14px; -} -.btn-group > .btn-mini { - font-size: 11px; -} -.btn-group > .btn-small { - font-size: 12px; -} -.btn-group > .btn-large { - font-size: 16px; -} -.btn-group > .btn:first-child { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -.btn-group > .btn.large:first-child { - margin-left: 0; - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; -} -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; - box-shadow: inset 1px 0 0 rgba(255,255,255,0.125), inset 0 1px 0 rgba(255,255,255,0.2), 0 1px 2px rgba(0,0,0,0.05); - - *padding-bottom: 5px; - *padding-top: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-right: 5px; - padding-left: 5px; - - *padding-bottom: 2px; - *padding-top: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-bottom: 4px; - *padding-top: 5px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; - - *padding-bottom: 7px; - *padding-top: 7px; -} -.btn-group.open .dropdown-toggle { - background-image: none; - box-shadow: inset 0 2px 4px rgba(0,0,0,0.15), 0 1px 2px rgba(0,0,0,0.05); -} -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -.btn-mini .caret, -.btn-small .caret, -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-top-width: 5px; - border-right-width: 5px; - border-left-width: 5px; -} -.dropup .btn-large .caret { - border-top: 0; - border-bottom: 5px solid #000000; -} -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.btn-group-vertical { - display: inline-block; - - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; -} -.btn-group-vertical .btn { - display: block; - float: none; - width: 100%; - border-radius: 0; -} -.btn-group-vertical .btn + .btn { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical .btn:first-child { - border-radius: 4px 4px 0 0; -} -.btn-group-vertical .btn:last-child { - border-radius: 0 0 4px 4px; -} -.btn-group-vertical .btn-large:first-child { - border-radius: 6px 6px 0 0; -} -.btn-group-vertical .btn-large:last-child { - border-radius: 0 0 6px 6px; -} -.alert { - margin-bottom: 20px; - padding: 8px 35px 8px 14px; - border: 1px solid #fbeed5; - border-radius: 4px; - background-color: #fcf8e3; - color: #c09853; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.alert h4 { - margin: 0; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} -.alert-success { - border-color: #d6e9c6; - background-color: #dff0d8; - color: #468847; -} -.alert-danger, -.alert-error { - border-color: #eed3d7; - background-color: #f2dede; - color: #b94a48; -} -.alert-info { - border-color: #bce8f1; - background-color: #d9edf7; - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -.nav { - margin-bottom: 20px; - margin-left: 0; - list-style: none; -} -.nav > li > a { - display: block; -} -.nav > li > a:hover { - background-color: #eeeeee; - text-decoration: none; -} -.nav > .pull-right { - float: right; -} -.nav-header { - display: block; - padding: 3px 15px; - color: #999999; - text-transform: uppercase; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - font-weight: bold; - font-size: 11px; - line-height: 20px; -} -.nav li + .nav-header { - margin-top: 9px; -} -.nav-list { - margin-bottom: 0; - padding-right: 15px; - padding-left: 15px; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-right: -15px; - margin-left: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover { - background-color: #0088cc; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); -} -.nav-list [class^="icon-"] { - margin-right: 2px; -} -.nav-list .divider { - overflow: hidden; - margin: 9px 1px; - height: 1px; - border-bottom: 1px solid #ffffff; - background-color: #e5e5e5; - - *margin: -5px 0 5px; - *width: 100%; -} -.nav-tabs, -.nav-pills { - *zoom: 1; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; - line-height: 0; -} -.nav-tabs:after, -.nav-pills:after { - clear: both; -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - margin-right: 2px; - padding-right: 12px; - padding-left: 12px; - line-height: 14px; -} -.nav-tabs { - border-bottom: 1px solid #dddddd; -} -.nav-tabs > li { - margin-bottom: -1px; -} -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; - line-height: 20px; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover { - border: 1px solid #dddddd; - border-bottom-color: transparent; - background-color: #ffffff; - color: #555555; - cursor: default; -} -.nav-pills > li > a { - margin-top: 2px; - margin-bottom: 2px; - padding-top: 8px; - padding-bottom: 8px; - border-radius: 5px; -} -.nav-pills > .active > a, -.nav-pills > .active > a:hover { - background-color: #0088cc; - color: #ffffff; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; -} -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #dddddd; - border-radius: 0; -} -.nav-tabs.nav-stacked > li:first-child > a { - border-top-left-radius: 4px; - border-top-right-radius: 4px; -} -.nav-tabs.nav-stacked > li:last-child > a { - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.nav-tabs.nav-stacked > li > a:hover { - z-index: 2; - border-color: #dddddd; -} -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} -.nav-tabs .dropdown-menu { - border-radius: 0 0 6px 6px; -} -.nav-pills .dropdown-menu { - border-radius: 6px; -} -.nav .dropdown-toggle .caret { - margin-top: 6px; - border-top-color: #0088cc; - border-bottom-color: #0088cc; -} -.nav .dropdown-toggle:hover .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} -.nav .active .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.nav > .dropdown.active > a:hover { - cursor: pointer; -} -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover { - border-color: #999999; - background-color: #999999; - color: #ffffff; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} -.tabs-stacked .open > a:hover { - border-color: #999999; -} -.tabbable { - *zoom: 1; -} -.tabbable:before, -.tabbable:after { - display: table; - content: ""; - line-height: 0; -} -.tabbable:after { - clear: both; -} -.tab-content { - overflow: auto; -} -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} -.tabs-below > .nav-tabs { - border-top: 1px solid #dddddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a { - border-radius: 0 0 4px 4px; -} -.tabs-below > .nav-tabs > li > a:hover { - border-top-color: #dddddd; - border-bottom-color: transparent; -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover { - border-color: transparent #dddddd #dddddd #dddddd; -} -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - margin-right: 0; - margin-bottom: 3px; - min-width: 74px; -} -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #dddddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - border-radius: 4px 0 0 4px; -} -.tabs-left > .nav-tabs > li > a:hover { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover { - border-color: #dddddd transparent #dddddd #dddddd; - - *border-right-color: #ffffff; -} -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #dddddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - border-radius: 0 4px 4px 0; -} -.tabs-right > .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover { - border-color: #dddddd #dddddd #dddddd transparent; - - *border-left-color: #ffffff; -} -.nav > .disabled > a { - color: #999999; -} -.nav > .disabled > a:hover { - background-color: transparent; - text-decoration: none; - cursor: default; -} -.navbar { - overflow: visible; - margin-bottom: 20px; - color: #555555; - - *position: relative; - *z-index: 2; -} -.navbar-inner { - padding-right: 20px; - padding-left: 20px; - min-height: 40px; - border: 1px solid #d4d4d4; - border-radius: 4px; - background-color: #fafafa; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); -} -.navbar .container { - width: auto; -} -.nav-collapse.collapse { - height: auto; -} -.navbar .brand { - display: block; - float: left; - margin-left: -20px; - padding: 10px 20px 10px; - color: #555555; - text-shadow: 0 1px 0 #ffffff; - font-weight: 200; - font-size: 20px; -} -.navbar .brand:hover { - text-decoration: none; -} -.navbar-text { - margin-bottom: 0; - line-height: 40px; -} -.navbar-link { - color: #555555; -} -.navbar-link:hover { - color: #333333; -} -.navbar .divider-vertical { - margin: 0 9px; - height: 40px; - border-right: 1px solid #ffffff; - border-left: 1px solid #f2f2f2; -} -.navbar .btn, -.navbar .btn-group { - margin-top: 6px; -} -.navbar .btn-group .btn { - margin: 0; -} -.navbar-form { - margin-bottom: 0; - - *zoom: 1; -} -.navbar-form:before, -.navbar-form:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-form:after { - clear: both; -} -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 6px; - white-space: nowrap; -} -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} -.navbar-search .search-query { - margin-bottom: 0; - padding: 4px 14px; - border-radius: 15px; - font-weight: normal; - font-size: 13px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - line-height: 1; -} -.navbar-static-top { - position: static; - margin-bottom: 0; - width: 100%; -} -.navbar-static-top .navbar-inner { - border-radius: 0; -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner, -.navbar-static-top .navbar-inner { - border: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-right: 0; - padding-left: 0; - border-radius: 0; -} -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1), 0 1px 10px rgba(0,0,0,0.1); -} -.navbar-fixed-bottom { - bottom: 0; -} -.navbar-fixed-bottom .navbar-inner { - box-shadow: inset 0 1px 0 rgba(0,0,0,0.1), 0 -1px 10px rgba(0,0,0,0.1); -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; -} -.navbar .nav > li { - float: left; -} -.navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #555555; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: transparent; - color: #333333; - text-decoration: none; -} -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - background-color: #e5e5e5; - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - color: #555555; - text-decoration: none; -} -.navbar .btn-navbar { - display: none; - float: right; - margin-right: 5px; - margin-left: 5px; - padding: 7px 10px; - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - background-color: #ededed; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 1px 0 rgba(255,255,255,0.075); - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - - *background-color: #e5e5e5; -} -.navbar .btn-navbar:hover, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - background-color: #e5e5e5; - color: #ffffff; - - *background-color: #d9d9d9; -} -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - border-radius: 1px; - background-color: #f5f5f5; - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} -.navbar .nav > li > .dropdown-menu:before { - position: absolute; - top: -7px; - left: 9px; - display: inline-block; - border-right: 7px solid transparent; - border-bottom: 7px solid #cccccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - border-left: 7px solid transparent; - content: ""; -} -.navbar .nav > li > .dropdown-menu:after { - position: absolute; - top: -6px; - left: 10px; - display: inline-block; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - border-left: 6px solid transparent; - content: ""; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - top: auto; - bottom: -7px; - border-top: 7px solid #cccccc; - border-top-color: rgba(0, 0, 0, 0.2); - border-bottom: 0; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - top: auto; - bottom: -6px; - border-top: 6px solid #ffffff; - border-bottom: 0; -} -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #e5e5e5; - color: #555555; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - right: 12px; - left: auto; -} -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - right: 13px; - left: auto; -} -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - right: 100%; - left: auto; - margin-right: -1px; - margin-left: 0; - border-radius: 6px 0 6px 6px; -} -.navbar-inverse { - color: #999999; -} -.navbar-inverse .navbar-inner { - border-color: #252525; - background-color: #1b1b1b; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); -} -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; -} -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - background-color: transparent; - color: #ffffff; -} -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - background-color: #111111; - color: #ffffff; -} -.navbar-inverse .navbar-link { - color: #999999; -} -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} -.navbar-inverse .divider-vertical { - border-right-color: #222222; - border-left-color: #111111; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #111111; - color: #ffffff; -} -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .navbar-search .search-query { - border-color: #111111; - background-color: #515151; - box-shadow: inset 0 1px 2px rgba(0,0,0,0.1), 0 1px 0 rgba(255,255,255,0.15); - color: #ffffff; - -webkit-transition: none; - transition: none; -} -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - outline: 0; - border: 0; - background-color: #ffffff; - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - color: #333333; - text-shadow: 0 1px 0 #ffffff; -} -.navbar-inverse .btn-navbar { - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - - *background-color: #040404; -} -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - background-color: #040404; - color: #ffffff; - - *background-color: #000000; -} -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} -.breadcrumb { - margin: 0 0 20px; - padding: 8px 15px; - border-radius: 4px; - background-color: #f5f5f5; - list-style: none; -} -.breadcrumb li { - display: inline-block; - text-shadow: 0 1px 0 #ffffff; - - *display: inline; - /* IE7 inline-block hack */ - *zoom: 1; -} -.breadcrumb .divider { - padding: 0 5px; - color: #cccccc; -} -.breadcrumb .active { - color: #999999; -} -.modal-open .dropdown-menu { - z-index: 2050; -} -.modal-open .dropdown.open { - *z-index: 2050; -} -.modal-open .popover { - z-index: 2060; -} -.modal-open .tooltip { - z-index: 2080; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal { - position: fixed; - top: 50%; - left: 50%; - z-index: 1050; - overflow: auto; - margin: -250px 0 0 -280px; - width: 560px; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.3); - /* IE6-7 */ - border-radius: 6px; - background-color: #ffffff; - background-clip: padding-box; - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - - *border: 1px solid #999999; -} -.modal.fade { - top: -25%; - -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; - transition: opacity 0.3s linear, top 0.3s ease-out; -} -.modal.fade.in { - top: 50%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eeeeee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-header h3 { - margin: 0; - line-height: 30px; -} -.modal-body { - overflow-y: auto; - padding: 15px; - max-height: 400px; -} -.modal-form { - margin-bottom: 0; -} -.modal-footer { - margin-bottom: 0; - padding: 14px 15px 15px; - border-top: 1px solid #dddddd; - border-radius: 0 0 6px 6px; - background-color: #f5f5f5; - box-shadow: inset 0 1px 0 #ffffff; - text-align: right; - - *zoom: 1; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; - line-height: 0; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.tooltip { - position: absolute; - z-index: 1030; - display: block; - visibility: visible; - padding: 5px; - font-size: 11px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.tooltip.top { - margin-top: -3px; -} -.tooltip.right { - margin-left: 3px; -} -.tooltip.bottom { - margin-top: 3px; -} -.tooltip.left { - margin-left: -3px; -} -.tooltip-inner { - padding: 3px 8px; - max-width: 200px; - border-radius: 4px; - background-color: #333333; - color: #eeeeee; - text-align: center; - text-decoration: none; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-style: solid; - border-color: transparent; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #333333; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #333333; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #333333; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #333333; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - padding: 1px; - width: 236px; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - background-color: #ffffff; - background-clip: padding-box; - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -} -.popover.top { - margin-bottom: 10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-right: 10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; - background-color: #f7f7f7; - font-weight: normal; - font-size: 14px; - line-height: 18px; -} -.popover-content { - padding: 9px 14px; -} -.popover-content p, -.popover-content ul, -.popover-content ol { - margin-bottom: 0; -} -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: inline-block; - width: 0; - height: 0; - border-style: solid; - border-color: transparent; -} -.popover .arrow:after { - z-index: -1; - content: ""; -} -.popover.top .arrow { - bottom: -10px; - left: 50%; - margin-left: -10px; - border-width: 10px 10px 0; - border-top-color: #ffffff; -} -.popover.top .arrow:after { - bottom: -1px; - left: -11px; - border-width: 11px 11px 0; - border-top-color: rgba(0, 0, 0, 0.25); -} -.popover.right .arrow { - top: 50%; - left: -10px; - margin-top: -10px; - border-width: 10px 10px 10px 0; - border-right-color: #ffffff; -} -.popover.right .arrow:after { - bottom: -11px; - left: -1px; - border-width: 11px 11px 11px 0; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.bottom .arrow { - top: -10px; - left: 50%; - margin-left: -10px; - border-width: 0 10px 10px; - border-bottom-color: #ffffff; -} -.popover.bottom .arrow:after { - top: -1px; - left: -11px; - border-width: 0 11px 11px; - border-bottom-color: rgba(0, 0, 0, 0.25); -} -.popover.left .arrow { - top: 50%; - right: -10px; - margin-top: -10px; - border-width: 10px 0 10px 10px; - border-left-color: #ffffff; -} -.popover.left .arrow:after { - right: -1px; - bottom: -11px; - border-width: 11px 0 11px 11px; - border-left-color: rgba(0, 0, 0, 0.25); -} -.label, -.badge { - background-color: #999999; - color: #ffffff; - vertical-align: baseline; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - white-space: nowrap; - font-weight: bold; - font-size: 11.844px; - line-height: 14px; -} -.label { - padding: 1px 4px 2px; - border-radius: 3px; -} -.badge { - padding: 1px 9px 2px; - border-radius: 9px; -} -a.label:hover, -a.badge:hover { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label-important, -.badge-important { - background-color: #b94a48; -} -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} -.label-warning, -.badge-warning { - background-color: #f89406; -} -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} -.label-success, -.badge-success { - background-color: #468847; -} -.label-success[href], -.badge-success[href] { - background-color: #356635; -} -.label-info, -.badge-info { - background-color: #3a87ad; -} -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} -.label-inverse, -.badge-inverse { - background-color: #333333; -} -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} -.btn-mini .label, -.btn-mini .badge { - top: 0; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - margin-bottom: 20px; - height: 20px; - border-radius: 4px; - background-color: #f7f7f7; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); -} -.progress .bar { - float: left; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 0; - height: 100%; - background-color: #0e90d2; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - color: #ffffff; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - font-size: 12px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress .bar + .bar { - box-shadow: inset 1px 0 0 rgba(0,0,0,0.15), inset 0 -1px 0 rgba(0,0,0,0.15); -} -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { - display: block; -} -.invisible { - visibility: hidden; -} -.affix { - position: fixed; -} -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: text-top; - font-size: 16px; - line-height: 17px; -} -.icon-folder, -.icon-folder-add, -.icon-list { - margin-top: -1px; - margin-left: -1px; - width: 17px; - font-size: 18px; - line-height: 18px; -} -.iconsize24 { - font-size: 24px; - line-height: 24px; -} -/* White icons with optional class, or on hover/active states of certain elements */ -.icon-white, -.nav > .active > a > [class^="icon-"], -.nav > .active > a > [class*=" icon-"] { - color: #ffffff; -} -.g-ui-menu .e-item:hover [class^="icon-"], -.g-ui-menu .e-item:hover [class*=" icon-"] { - color: #ffffff; -} -.icon-none { - background-image: none !important; -} -.icon-checkbox-checked, -.icon-checkbox-unchecked, -.icon-checkbox-partial, -.icon-radio-checked, -.icon-radio-unchecked { - color: #555555; - font-size: 1em; - cursor: pointer; -} -.icon-checkbox-checked:hover, -.icon-checkbox-unchecked:hover, -.icon-checkbox-partial:hover, -.icon-radio-checked:hover, -.icon-radio-unchecked:hover, -.icon-checkbox-checked:active, -.icon-checkbox-unchecked:active, -.icon-checkbox-partial:active, -.icon-radio-checked:active, -.icon-radio-unchecked:active { - color: #000000; -} -.icon-white.icon-checkbox-checked, -.icon-white.icon-checkbox-unchecked, -.icon-white.icon-checkbox-partial, -.icon-white.icon-radio-checked, -.icon-white.icon-radio-unchecked { - color: #eeeeee; -} -.icon-white.icon-checkbox-checked:hover, -.icon-white.icon-checkbox-unchecked:hover, -.icon-white.icon-checkbox-partial:hover, -.icon-white.icon-radio-checked:hover, -.icon-white.icon-radio-unchecked:hover, -.icon-white.icon-checkbox-checked:active, -.icon-white.icon-checkbox-unchecked:active, -.icon-white.icon-checkbox-partial:active, -.icon-white.icon-radio-checked:active, -.icon-white.icon-radio-unchecked:active { - color: #ffffff; -} -.denied-by-browser { - cursor: default; -} -.denied-by-browser .icon-checkbox-checked, -.denied-by-browser icon-checkbox-unchecked { - cursor: default; -} -.right-mini, -.down-mini { - width: 16px; - line-height: 20px; -} -@-webkit-keyframes rotation { - to { - -webkit-transform: rotate(1turn); - transform: rotate(1turn); - } -} -@keyframes rotation { - to { - -webkit-transform: rotate(1turn); - transform: rotate(1turn); - } -} -.icon-spinner { - width: 16px; - height: 16px; -} -.icon-spinner:before { - display: inline-block; - margin-top: 1px; - font-size: 16px; - line-height: 100%; - -webkit-transform-origin: 8px 8px; - -ms-transform-origin: 8px 8px; - transform-origin: 8px 8px; -} -html.no-cssanimations .icon-spinner { - background-image: url("images/sync.png"); - background-repeat: no-repeat; - font-family: Arial; -} -html.no-cssanimations .icon-spinner:before { - content: ""; -} -html.no-cssanimations .icon-spinner.animated { - background-image: url("images/sync.gif"); -} -html.cssanimations .icon-spinner.animated:before { - -webkit-animation: rotation 1s infinite steps(40); - animation: rotation 1s infinite steps(40); -} -body { - background-color: transparent; -} -label { - cursor: pointer; -} -label.inline { - display: inline-block; -} -.legend { - display: block; - margin-bottom: 20px; - padding: 0; - width: 100%; - border: 0; - border-bottom: 1px solid #e5e5e5; - color: #333333; - font-size: 21px; - line-height: 40px; -} -.legend small { - color: #999999; - font-size: 15px; -} -.legend + .control-group { - margin-top: 20px; - - -webkit-margin-top-collapse: separate; -} -.input-append input, -.input-append select, -.input-append .uneditable-input { - border-radius: 3px; -} -select { - width: 223px; -} -.btn-small.btn-small-small { - padding: 3px 9px; - font-size: 11px; - line-height: 11px; -} -.btn.btn-ellipsis { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.btn.btn-narrow { - padding-right: 12px; - padding-left: 12px; -} -.btn-group.btn-group-custom-margin > .btn + .btn { - margin-left: 0; -} -.dropdown-menu { - border-radius: 3px; -} -.btn-group + .btn-group { - margin-left: 3px; -} -.btn { - padding-right: 13px; - padding-left: 13px; - border-color: rgba(0, 0, 0, 0.25) rgba(0, 0, 0, 0.25) rgba(0, 0, 0, 0.25); - background-image: none; - text-shadow: 0 1px 0 #ffffff; - - border-radiu: 3px; -} -.btn.disabled, -.btn[disabled] { - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - opacity: 0.75; -} -.btn.btn-dark-disabled-border.disabled, -.btn.btn-dark-disabled-border[disabled] { - border-color: #aaaaaa; -} -html.rgba.textshadow .btn.btn-danger, -html.rgba.textshadow .btn.btn-success, -html.rgba.textshadow .btn.btn-primary { - text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3); -} -.btn-toolbar { - margin-top: 0; - margin-bottom: 0; -} -.dropdown-menu { - border-radius: 0; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); -} -.tooltip { - z-index: 2000 !important; - overflow: hidden; - text-overflow: ellipsis; - font-size: 14px; -} -.tooltip.in { - opacity: 1; -} -.tooltip .tooltip-inner { - padding: 5px 10px; - max-width: 380px; - border-radius: 2px; - text-shadow: 0 0 5px rgba(0, 0, 0, 0.2); -} -.tooltip .tooltip-big { - padding: 0 10px; - white-space: nowrap; - font-size: 18px; -} -.btn-group > .btn:first-child { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -.btn-group > .btn.large:first-child { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -.dropdown.colored-toggle.open .btn.dropdown-toggle { - color: #bd362f; -} -.dropdown.colored-toggle.open .btn.dropdown-toggle .caret { - border-top-color: #bd362f; -} -.dropdown.colored-toggle.open .btn.dropdown-toggle [class^="icon-"]:before { - color: #bd362f; -} -textarea, -input[type="text"], -input[type="password"], -input[type="email"], -input[type="search"] { - border: 1px solid #cccccc; -} -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="email"]:focus, -input[type="search"]:focus { - border: 1px solid #999999; - background-color: #ffffff; - box-shadow: none; -} -input[type="text"], -input[type="password"], -input[type="email"], -input[type="search"] { - height: 20px; - line-height: 20px; -} -select { - border: 1px solid #cccccc; -} -.alert a { - text-decoration: underline; -} -.alert.alert-null-left-margin { - margin-left: 0; -} -.alert.alert-error a { - color: #b94a48; -} -.nav-tabs > li > a { - color: #555555; -} -.popover { - z-index: 2000; -} -html.no-rgba .modal { - border-width: 0 !important; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.1; - filter: alpha(opacity=10); -} -.popups { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1100; - overflow: auto; -} -.popups .modal { - position: static; - z-index: 1101; - overflow: hidden; - margin: 5% auto; - background-color: transparent; - box-shadow: 0 5px 80px rgba(0, 0, 0, 0.3); -} -.popups .modal .modal-body { - max-height: none; - background-color: #ffffff; -} -.modal.fade { - top: 0; - -webkit-transition: none; - transition: none; -} -.modal.fade.in { - top: 0; -} -.modal.loginContent .modal-body, -.modal.loginAdminContent .modal-body { - background-color: transparent !important; -} -.picker.modal-dialog-bg, -.picker.picker-dialog-bg { - z-index: 2000 !important; -} -.picker.modal-dialog, -.picker.picker-dialog { - z-index: 2001 !important; -} -.form-horizontal.long-label .control-group .control-label { - width: 160px; -} -.form-horizontal.long-label .control-group .controls { - margin-left: 180px; -} -.control-label.remove-padding-top { - padding-top: 0; -} -.inputosaurus-container { - padding: 2px; - width: 99%; - border: 1px solid #cccccc; - border-radius: 3px; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - line-height: 20px; - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} -.inputosaurus-container.inputosaurus-focused { - border: 1px solid #999999; - background-color: #ffffff; - box-shadow: none; -} -.inputosaurus-container li { - position: relative; - z-index: 100; - margin: 2px 2px 2px; - padding: 2px 15px 2px 5px; - max-width: 500px; - border: 1px solid #aaaaaa; - background-color: #eeeeee; - color: #555555; - line-height: 18px; -} -.inputosaurus-container li.ui-draggable.ui-draggable-dragging { - z-index: 101; -} -.inputosaurus-container li a { - position: absolute; - top: 1px; - right: 2px; - color: #999999; - font-size: 12px; -} -.inputosaurus-container li a:hover { - color: #666666; -} -.inputosaurus-container li span { - padding-right: 3px; -} -.inputosaurus-container li.inputosaurus-required { - padding-right: 5px; -} -.inputosaurus-container li.inputosaurus-selected { - background-color: #dddddd; -} -.inputosaurus-container .inputosaurus-input { - margin: 1px 10px 1px 0; - height: 22px; -} -.inputosaurus-container .inputosaurus-input input { - padding-left: 0; - height: 21px; - border: 0; -} -.ui-autocomplete { - z-index: 2000; -} -.inputosaurus-fake-span { - position: absolute; - top: 0; - left: -5000px; -} -/*.cke_button__sourcedialog_label { - display: none !important; -}*/ -.cke_plain { - z-index: 1; - overflow: auto; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 0; - padding: 10px; - padding-right: 0; - outline: none; - border: 0; - border-radius: 0; - background-color: #ffffff; - box-shadow: none; - color: #333333; - /*font-family: arial, sans-serif;*/ - white-space: pre-wrap; - font-size: 13px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - line-height: 16px; - resize: none; -} -.cke_plain:focus, -.cke_source:focus { - border: 0; -} -.b-compose .cke_chrome { - border-right: 0; - border-bottom: 0; - border-left: 0; - box-shadow: none; -} -.cke_wysiwyg_div { - padding: 10px !important; - color: #333333; - font-size: 13px; - font-family: arial, sans-serif; - line-height: 16px; -} -.cke_wysiwyg_div ul { - padding-left: 40px; -} -.cke_wysiwyg_div ul li { - list-style-type: disc !important; -} -.cke_wysiwyg_div ol { - padding-left: 40px; -} -.cke_wysiwyg_div ol li { - list-style-type: decimal !important; -} -.cke_wysiwyg_div pre { - margin: 0; - padding: 0; - border: none; - background: #ffffff; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} -.cke_wysiwyg_div blockquote { - margin: 5px 0 5px 5px; - padding-left: 5px; - border: 0; - border-left: solid 2px #444444; -} -.cke_wysiwyg_div blockquote * { - color: #333333; - font-size: 13px; - font-family: arial, sans-serif; - line-height: 16px; -} -.cke_wysiwyg_div img { - vertical-align: bottom; -} -.cke_wysiwyg_div a { - color: blue; - text-decoration: underline; -} -.cke_wysiwyg_div a:visited { - color: #660099; -} -.cke_wysiwyg_div a:active { - color: red; -} -.g-ui-user-select-none { - standard-user-select: none; - touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - webkit-touch-callout: none; -} -.g-ui-user-select-allow { - standard-user-select: inherit; - touch-callout: inherit; - -webkit-user-select: inherit; - -moz-user-select: inherit; - -ms-user-select: inherit; - user-select: inherit; - webkit-touch-callout: inherit; -} -.g-ui-clearfix { - *zoom: 1; -} -.g-ui-clearfix:before, -.g-ui-clearfix:after { - display: table; - content: ""; - line-height: 0; -} -.g-ui-clearfix:after { - clear: both; -} -.g-ui-link { - color: #336699; - text-decoration: underline; - cursor: pointer; -} -.g-ui-min-height-300 { - min-height: 300px; -} -.g-ui-absolute-reset { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 0; - margin: 0; - padding: 0; - border: 0; -} -.g-ui-menu { - overflow-x: hidden; - overflow-y: auto; - max-width: 300px; - max-height: 400px; -} -.g-ui-menu .e-link { - text-decoration: none; - cursor: pointer; -} -.g-ui-menu .e-item.selected > .e-link { - background-color: #eeeeee !important; -} -.g-ui-menu .e-item > .e-link:focus, -.g-ui-menu .e-item > .e-link:hover { - background-color: #555555; - background-image: none; - color: #ffffff; -} -.g-ui-menu .e-item.disabled > .e-link { - background-color: #ffffff; - background-image: none; - color: grey; - cursor: not-allowed; -} -.g-ui-menu .e-item.disabled [class^="icon-"] { - color: grey; -} -.g-ui-table { - display: table; - width: 100%; -} -.g-ui-table .e-row { - display: table-row; -} -.g-ui-table .e-cell { - display: table-cell; - vertical-align: top; - text-align: left; -} -.g-ui-height-100proc { - height: 100%; -} -.g-ui-resizable-delimiter-highlight { - border: none; - border-right: 6px solid #aaaaaa; -} -.e-pagenator .e-page { - display: inline-block; - padding: 3px; - color: #999999; - text-decoration: none; - font-size: 22px; - cursor: pointer; -} -.e-pagenator .e-page:hover .e-page-number { - color: #555555; -} -.e-pagenator .e-page.current .e-page-number { - border-bottom: 2px solid #000000; - color: #333333; - font-size: 25px; -} -html.rgba .g-ui-resizable-delimiter-highlight { - border-right-color: rgba(0, 0, 0, 0.2); -} -.settings-saved-trigger { - display: inline-block; - font-size: 16px; - line-height: 17px; -} -.settings-saved-trigger .animated { - color: green; -} -.settings-saved-trigger .success { - color: green; - opacity: 0; - -webkit-transition: opacity 0.5s linear; - transition: opacity 0.5s linear; -} -.settings-saved-trigger .error { - color: red; - opacity: 0; - -webkit-transition: opacity 0.5s linear; - transition: opacity 0.5s linear; -} -.settings-saved-trigger .visible { - opacity: 1; -} -.settings-saved-trigger-input.success { - border-color: green !important; - -webkit-transition: border-color 0.5s linear; - transition: border-color 0.5s linear; -} -.settings-saved-trigger-input.error { - border-color: red !important; - -webkit-transition: border-color 0.5s linear; - transition: border-color 0.5s linear; -} -e-spinner { - display: none; -} -html.cssanimations .e-spinner { - display: block; - margin: 5px auto 0; - width: 100px; - text-align: center; -} -html.cssanimations .e-spinner .e-bounce { - display: inline-block; - margin: 0 5px; - width: 15px; - height: 15px; - border-radius: 100%; - background-color: #dddddd; - box-shadow: 0 0 3px rgba(0, 0, 0, 0.3); - -webkit-animation: bouncedelay 1.4s infinite ease-in-out; - animation: bouncedelay 1.4s infinite ease-in-out; - /* Prevent first frame from flickering when animation starts */ - - -webkit-animation-fill-mode: both; - animation-fill-mode: both; -} -html.cssanimations .e-spinner .bounce1 { - -webkit-animation-delay: -0.32s; - animation-delay: -0.32s; -} -html.cssanimations .e-spinner .bounce2 { - -webkit-animation-delay: -0.16s; - animation-delay: -0.16s; -} -@-webkit-keyframes bouncedelay { - 0%, - 80%, - 100% { - -webkit-transform: scale(0); - transform: scale(0); - } - 40% { - -webkit-transform: scale(1); - transform: scale(1); - } -} -@keyframes bouncedelay { - 0%, - 80%, - 100% { - -webkit-transform: scale(0); - transform: scale(0); - } - 40% { - -webkit-transform: scale(1); - transform: scale(1); - } -} -html { - overflow: hidden; - margin: 0; - padding: 0; - height: 100%; - font-family: Arial, Verdana, Geneva, sans-serif; -} -body { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - overflow: hidden; - margin: 0; - padding: 0; - height: 100%; - background-color: #e3e3e3; - font-family: Arial, Verdana, Geneva, sans-serif; - - -webkit-touch-callout: none; -} -textarea { - resize: none; -} -option:disabled { - color: #aaaaaa; - cursor: not-allowed; -} -body:before { - position: fixed; - top: -10px; - left: 0; - z-index: 100; - width: 100%; - height: 8px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.6); - content: ""; -} -* { - outline: none; -} -select:focus { - outline: none; -} -html.mobile * { - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -#rl-bg { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: -1; -} -#rl-content { - width: 100%; - height: 100%; -} -#rl-center { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 0; - margin: 0; - padding: 0; - min-width: 600px; - min-height: 400px; - border: 0; -} -#rl-top { - position: absolute; - top: 0; - right: 0; - bottom: 0; - bottom: auto; - left: 0; - z-index: 0; - z-index: 2; - margin: 0; - padding: 0; - border: 0; -} -#rl-bottom { - position: absolute; - top: 0; - top: auto; - right: 0; - bottom: 0; - left: 0; - z-index: 0; - z-index: 1; - margin: 0; - padding: 0; - border: 0; -} -#rl-left { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 0; - margin: 0; - padding: 0; - min-width: 60px; - width: 200px; - border: 0; -} -#rl-right { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - left: 200px; - z-index: 0; - z-index: 1; - margin: 0; - padding: 0; - border: 0; -} -#rl-sub-left { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 500px; -} -#rl-sub-right { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 500px; -} -html.ssm-state-desktop-large #rl-left { - width: 220px; -} -html.ssm-state-desktop-large #rl-right { - left: 220px; -} -html.ssm-state-desktop-large #rl-sub-left { - width: 500px; -} -html.ssm-state-desktop-large #rl-sub-right { - left: 500px; -} -html.ssm-state-desktop-large .b-compose.modal { - width: 1000px; -} -html.ssm-state-desktop-large .b-contacts-content.modal { - width: 900px; -} -html.ssm-state-desktop #rl-left { - width: 200px; -} -html.ssm-state-desktop #rl-right { - left: 200px; -} -html.ssm-state-desktop #rl-sub-left { - width: 400px; -} -html.ssm-state-desktop #rl-sub-right { - left: 400px; -} -html.ssm-state-desktop .b-compose.modal { - width: 1000px; -} -html.ssm-state-desktop .b-contacts-content.modal { - width: 900px; -} -html.ssm-state-tablet #rl-left, -html.ssm-state-mobile #rl-left { - width: 155px; -} -html.ssm-state-tablet #rl-right, -html.ssm-state-mobile #rl-right { - left: 155px; -} -html.ssm-state-tablet #rl-sub-left, -html.ssm-state-mobile #rl-sub-left { - width: 310px; -} -html.ssm-state-tablet #rl-sub-left .messageList .inputSearch, -html.ssm-state-mobile #rl-sub-left .messageList .inputSearch { - width: 200px; -} -html.ssm-state-tablet #rl-sub-right, -html.ssm-state-mobile #rl-sub-right { - left: 310px; -} -html.ssm-state-tablet .b-compose.modal, -html.ssm-state-mobile .b-compose.modal { - width: 700px; -} -html.ssm-state-tablet .b-contacts-content.modal, -html.ssm-state-mobile .b-contacts-content.modal { - width: 700px; -} -html.ssm-state-tablet .b-contacts-content.modal .contactValueInput, -html.ssm-state-mobile .b-contacts-content.modal .contactValueInput { - width: 200px; -} -html.ssm-state-tablet .b-compose.modal { - width: 700px; -} -html.ssm-state-tablet .b-contacts-content.modal { - width: 800px; -} -html.ssm-state-tablet .b-contacts-content.modal .contactValueInput { - width: 250px; -} -.show-on-panel-disabled { - display: none; -} -html.rl-left-panel-disabled #rl-left { - width: 60px !important; -} -html.rl-left-panel-disabled #rl-left .show-on-panel-disabled { - display: block; -} -html.rl-left-panel-disabled #rl-left .opacity-on-panel-disabled { - opacity: 0.3; -} -html.rl-left-panel-disabled #rl-left .visibility-hidden-on-panel-disabled { - visibility: hidden; -} -html.rl-left-panel-disabled #rl-left .hide-on-panel-disabled { - display: none; -} -html.rl-left-panel-disabled #rl-left.ui-state-disabled { - opacity: 1; -} -html.rl-left-panel-disabled #rl-right { - left: 60px !important; -} -.ui-resizable-helper { - border-right: 5px solid #777777; - border-right-color: rgba(255, 255, 255, 0.7); -} -html.rl-no-preview-pane #rl-sub-left { - right: 5px !important; - width: inherit; -} -html.rl-no-preview-pane #rl-sub-left .messageList .inputSearch { - width: 300px !important; -} -html.rl-no-preview-pane #rl-sub-right { - left: 0 !important; -} -html.rl-no-preview-pane #rl-right .ui-resizable-handle { - display: none !important; -} -.visible-on-ctrl, -.visible-on-ctrl-btn { - display: none; -} -.hidden-on-ctrl-btn { - display: inline-block; -} -html.rl-ctrl-key-pressed .visible-on-ctrl { - display: inline-block; -} -html.rl-ctrl-key-pressed .btn-group.open .visible-on-ctrl-btn { - display: inline-block; -} -html.rl-ctrl-key-pressed .hidden-on-ctrl { - display: none; -} -html.rl-ctrl-key-pressed .btn-group.open .hidden-on-ctrl-btn { - display: none; -} -#rl-loading, -#rl-loading-error { - position: absolute; - top: 50%; - margin: 0; - margin-top: -60px; - width: 100%; - height: 65px; - background-color: transparent; - color: #000000; - text-align: center; - font-size: 30px; -} -#rl-loading-error { - display: none; - background-image: none; -} -.nano:before, -.nano:after { - position: absolute; - left: 0; - z-index: 102; - display: none; - width: 100%; - height: 10px; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); - content: ""; -} -.nano:before { - top: -10px; -} -.nano:after { - bottom: -10px; -} -.nano.nano-scrolllimit-top:before, -.nano.nano-scrolllimit-bottom:after { - display: block; -} -.b-system-drop-down .b-toolbar { - position: absolute; - top: 0; - right: 0; - z-index: 103; - padding: 10px 8px; - height: 30px; -} -.b-system-drop-down .e-facebook-name { - display: inline-block; - padding-top: 4px; -} -.b-system-drop-down .btn.system-dropdown { - padding-right: 10px; - padding-left: 10px; -} -.b-system-drop-down .button-fb-logout { - margin: 5px; -} -.b-system-drop-down .email-title { - display: inline-block; - overflow: hidden; - max-width: 200px; - text-align: left; - text-overflow: ellipsis; -} -.b-login-content { - height: 100%; - text-align: center; -} -.b-login-content .loginFormWrapper { - display: inline-block; - vertical-align: middle; - text-align: center; -} -.b-login-content .loginFormWrapper .descWrapper { - margin-bottom: 10px; -} -.b-login-content .loginFormWrapper .descWrapper .desc { - padding: 2px; - font-size: 18px; -} -.b-login-content .loginFormWrapper .alertError { - max-width: 450px; -} -.b-login-content .loginFormWrapper .loginForm { - float: none; - margin: 0; - background-color: #efefef; - color: #333333; - text-align: left; -} -.b-login-content .loginFormWrapper .control-label { - font-size: 16px; - line-height: 30px; -} -.b-login-content .loginFormWrapper .control-group { - margin-bottom: 25px; -} -.b-login-content .loginFormWrapper .wrapper { - padding: 40px 40px 10px 40px; -} -.b-login-content .loginFormWrapper #recaptcha_image img { - border: 1px solid #cccccc; - border-radius: 3px; -} -.b-login-content .loginFormWrapper .inputLoginForm, -.b-login-content .loginFormWrapper .inputEmail, -.b-login-content .loginFormWrapper .inputLogin, -.b-login-content .loginFormWrapper .inputPassword, -.b-login-content .loginFormWrapper .inputAdditionalCode { - height: 30px; - font-size: 18px; - line-height: 29px; -} -.b-login-content .loginFormWrapper .signMeLabel { - margin-top: 5px; -} -.b-login-content .loginFormWrapper .input-append .add-on { - position: relative; - z-index: 1000; - margin-left: -35px; - height: 30px; - border: 0; - background: none; -} -.b-login-content .loginFormWrapper .input-append .add-on i { - color: #999999; - font-size: 17px; - line-height: 29px; -} -.b-login-content .loginFormWrapper .control-group.error .add-on i { - color: #b94a48; -} -.b-login-content .buttonLogin { - margin: 0; -} -.b-login-content .alert { - margin: 0 0 20px 0; - text-align: left; -} -.b-login-content .loginAfter { - display: inline-block; - width: 0; - height: 90%; - vertical-align: middle; -} -.b-login-content .flag-selector { - margin-bottom: 0; -} -.popups .b-ask-content .modal-header { - background-color: #ffffff; -} -.popups .b-ask-content .modal-body { - text-align: center; -} -.popups .b-ask-content .desc-place { - font-size: 18px; -} -.popups .b-shortcuts-content.modal { - width: 700px; -} -.popups .b-shortcuts-content .modal-header { - background-color: #ffffff; -} -.b-folders .b-toolbar { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 101; - padding: 10px 10px 0 8px; - height: 30px; - color: #ffffff; -} -.b-folders .b-footer { - position: absolute; - right: 0; - bottom: 20px; - left: 0; - z-index: 101; - padding: 0 10px 0 5px; - height: 20px; -} -.b-folders .b-content { - position: absolute; - top: 58px; - right: 0; - bottom: 45px; - left: 0; - overflow: hidden; - overflow-y: auto; - min-width: 100px; -} -.b-folders .b-content .content { - -webkit-overflow-scrolling: touch; -} -.b-folders .b-list-delimiter { - margin: 10px; - border-top: 0 solid #000000; - border-bottom: 1px solid #999999; -} -.b-folders .b-content .e-item { - overflow: hidden; - white-space: nowrap; -} -.b-folders .b-content .e-item .e-link { - position: relative; - z-index: 1; - display: block; - padding: 0; - padding-right: 10px; - padding-left: 10px; - height: 34px; - outline: 0; - background-color: transparent; - color: grey; - vertical-align: middle; - text-decoration: none; - font-size: 14px; - line-height: 34px; - cursor: not-allowed; -} -.b-folders .b-content .e-item .e-link.selectable { - color: #000000; - cursor: pointer; -} -.b-folders .b-content .e-item .e-link.selectable:hover, -.b-folders .b-content .e-item .e-link.selectable.selected, -.b-folders .b-content .e-item .e-link.selectable.focused, -.b-folders .b-content .e-item .e-link.selectable.droppableHover { - background-color: #555555; - color: #ffffff; -} -.b-folders .b-content .e-item .e-link.selectable.focused { - color: #ffffff; -} -.b-folders .b-content .e-item .e-link.focused { - background-color: #888888; -} -.b-folders .b-content .e-item .e-link.system { - color: grey; - cursor: default; -} -.b-folders .b-content .e-item .e-link .count { - position: relative; - display: none; - margin-top: 5px; - line-height: 19px; -} -.b-folders .b-content .e-item .e-link.print-count { - font-weight: bold; -} -.b-folders .b-content .e-item .e-link.print-count .count { - display: inline; -} -.b-folders .b-content .e-item .e-link.unread-sub { - font-weight: bold; -} -.b-folders .b-content .e-item .e-link .e-collapsed-sign { - width: 22px; - height: 30px; - vertical-align: inherit; - text-align: center; - line-height: 30px; - cursor: pointer; -} -.b-folders .b-content .e-item .hidden.e-link { - display: none; -} -.b-folders .b-content .e-item .b-sub-folders.collapsed { - display: none; - max-height: 0; - height: 0; -} -.b-folders .b-folder-system-item { - font-weight: bold; -} -.b-folders .b-sub-folders .e-item .e-link { - padding-left: 25px; -} -.b-folders .b-sub-folders.unpaddig-folder .e-item .e-link { - padding-left: 10px; -} -.b-folders .b-sub-folders .b-sub-folders .e-item .e-link { - padding-left: 40px; -} -.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .e-item .e-link { - padding-left: 25px; -} -.b-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link { - padding-left: 55px; -} -.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .b-sub-folders .e-item .e-link { - padding-left: 40px; -} -.b-folders .b-sub-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link { - padding-left: 70px; -} -.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link { - padding-left: 55px; -} -html.rl-left-panel-disabled .btn.buttonContacts { - margin-top: 10px !important; - margin-left: 0 !important; -} -.popups .b-folder-clear-content .modal-header { - background-color: #ffffff; -} -.popups .b-folder-create-content .modal-header { - background-color: #ffffff; -} -.popups .b-folder-system-content .modal-header { - background-color: #ffffff; -} -.popups .b-filter-content { - width: 800px; -} -.popups .b-filter-content .modal-header { - background-color: #ffffff; -} -.popups .b-languages-content.modal { - width: 700px; -} -.popups .b-languages-content.exp { - width: 701px; -} -.popups .b-languages-content .modal-header { - background-color: #ffffff; -} -.popups .b-languages-content .lang-item { - display: inline-block; - margin: 2px 5px; - padding: 5px 15px; - width: 180px; - background-color: #ffffff; - text-align: left; -} -.popups .b-languages-content .lang-item.selected { - background-color: #f5f5f5; -} -.popups .b-languages-content .lang-item:hover { - background-color: #eeeeee; -} -.popups .b-account-add-content .modal-header { - background-color: #ffffff; -} -.popups .b-open-pgp-key-view-content .modal-header, -.popups .b-open-pgp-key-generate-content .modal-header, -.popups .b-open-pgp-key-add-content .modal-header, -.popups .b-compose-open-pgp-content .modal-header { - background-color: #ffffff; -} -.popups .b-open-pgp-key-view-content.modal, -.popups .b-open-pgp-key-generate-content.modal, -.popups .b-open-pgp-key-add-content.modal, -.popups .b-compose-open-pgp-content.modal { - width: 570px; -} -.popups .b-open-pgp-key-view-content .inputKey, -.popups .b-open-pgp-key-generate-content .inputKey, -.popups .b-open-pgp-key-add-content .inputKey, -.popups .b-compose-open-pgp-content .inputKey { - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} -.popups .b-open-pgp-key-view-content .key-viewer, -.popups .b-open-pgp-key-generate-content .key-viewer, -.popups .b-open-pgp-key-add-content .key-viewer, -.popups .b-compose-open-pgp-content .key-viewer { - overflow: auto; - max-height: 500px; -} -.popups .b-two-factor-test-content .modal-header { - background-color: #ffffff; -} -.popups .b-identity-content .modal-header { - background-color: #ffffff; -} -.popups .b-identity-content .textEmail { - margin-top: 5px; - font-weight: bold; -} -.popups .b-advanced-search-content.modal { - width: 750px; -} -.popups .b-advanced-search-content.modal .control-label { - width: 100px; -} -.popups .b-advanced-search-content.modal .controls { - margin-left: 110px; -} -.popups .b-advanced-search-content .modal-header { - background-color: #ffffff; -} -html.rl-no-preview-pane .messageList.message-selected { - display: none; -} -.messageList .toolbar { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 102; - padding: 10px 1px; - height: 30px; -} -.messageList .b-footer { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 101; - padding: 7px; - height: 30px; - border-bottom-right-radius: 5px; - border-bottom-left-radius: 5px; - background-color: #eeeeee; -} -.messageList .b-footer .e-quota { - display: inline-block; - margin-top: 5px; - margin-left: 5px; - font-size: 18px; - cursor: help; -} -.messageList .b-footer .e-quota:hover { - border-bottom: 1px dashed #333333; -} -.messageList .inputSearch { - width: 258px; -} -.messageList .btn.buttonMoreSearch { - padding-right: 8px; - padding-left: 8px; -} -.messageList .b-message-list-wrapper { - position: absolute; - top: 50px; - right: 0; - bottom: 5px; - left: 0; - z-index: 101; - border: 1px solid #aaaaaa; - border-radius: 5px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); -} -.messageList .second-toolbar { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 101; - padding: 10px 8px 10px 11px; - height: 29px; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - background-color: #eeeeee; -} -.messageList .second-toolbar .checkboxCkeckAll { - margin: 5px 0; -} -.messageList .line-loading { - position: absolute; - top: 50px; - right: 0; - left: 0; - z-index: 102; - height: 0; -} -.messageList .mainDelimiter { - position: absolute; - right: 0; - left: 0; - z-index: 101; - height: 1px; - background-color: #bbbbbb; -} -.messageList .toolbarDelimiter { - top: 49px; -} -.messageList .footerDelimiter { - bottom: 44px; -} -.messageList .b-content { - position: absolute; - top: 50px; - right: 0; - bottom: 45px; - left: 0; - z-index: 101; - overflow-x: hidden; - overflow-y: auto; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; - background-color: #ffffff; -} -.messageList .b-content .content { - -webkit-overflow-scrolling: touch; -} -.messageList .b-content .listClear { - padding: 10px; - color: #333333; - text-align: center; - font-size: 14px; - line-height: 13px; -} -.messageList .b-content .listEmptyList, -.messageList .b-content .listEmptyListLoading, -.messageList .b-content .listDragOver, -.messageList .b-content .listError, -.messageList .b-content .listEmptySearchList { - padding: 60px 10px; - color: #999999; - text-align: center; - font-size: 24px; - line-height: 30px; -} -.messageList .b-content .listEmptyList .e-icon, -.messageList .b-content .listEmptyListLoading .e-icon, -.messageList .b-content .listDragOver .e-icon, -.messageList .b-content .listError .e-icon, -.messageList .b-content .listEmptySearchList .e-icon { - font-size: 24px; - line-height: 30px; -} -.messageList .b-content .listDragOver { - overflow: hidden; - padding: 0 10px; - max-height: 0; -} -.messageList .b-content .listDragOver.viewAppendArea { - padding: 30px 10px; - max-height: 120px; -} -.messageList .b-content .listDragOver.dragOverEnter { - background-color: #e0fdda; - color: #333333; -} -.messageList .b-content .listError { - color: #da4f49; -} -.messageList .b-content .listSearchDesc { - padding: 20px; - border-bottom: 1px solid #eeeeee; - font-size: 20px; -} -.messageList .b-content .delimiter { - display: block; - height: 1px; - background-color: #e5e5e5; -} -.messageList .b-content .messageListItem:last-child { - border-bottom: 1px solid #e5e5e5; -} -.messageList .b-content .messageListItem:last-child.selected { - border-bottom: 1px solid #bfd5ef; -} -.messageList .b-content .fullThreadsParent { - padding: 3px 5px; - height: 25px; - background-color: #f4f4f4; - text-align: center; -} -.messageList .b-content .messageListItem { - position: relative; - z-index: 100; - overflow: hidden; - margin: 0; - max-height: 60px; - height: 52px; - border: 0 solid transparent; - background-color: #f9f9f9; - font-size: 12px; - line-height: 21px; - cursor: pointer; - /* &:nth-child(even) { - background-color: #f3f3f3; - }*/ -} -.messageList .b-content .messageListItem .delimiter { - position: relative; - display: block; - height: 1px; - background-color: #999999; - opacity: 0.2; - filter: alpha(opacity=20); -} -.messageList .b-content .messageListItem .wrapper { - padding: 5px 0; -} -.messageList .b-content .messageListItem .sidebarParent { - display: inline-block; - float: left; - width: 6px; - height: 100%; - background-color: #eeeeee; -} -.messageList .b-content .messageListItem.focused .sidebarParent { - background-color: #cccccc !important; -} -.messageList .b-content .messageListItem.e-single-line { - height: 35px; -} -.messageList .b-content .messageListItem.e-single-line .wrapper { - padding: 5px; - line-height: 25px; -} -.messageList .b-content .messageListItem.new { - max-height: 0; -} -.messageList .b-content .messageListItem.deleted { - max-height: 0; - border-color: transparent !important; -} -.messageList .b-content .messageListItem .checkedParent { - display: inline-block; - float: left; - margin-top: 11px; - padding: 0 8px 0 6px; - font-size: 14px; -} -.messageList .b-content .messageListItem.e-single-line .checkedParent { - margin-top: 1px; -} -.messageList .b-content .messageListItem .flagParent { - display: inline-block; - float: right; - padding: 0 8px 0 5px; -} -.messageList .b-content .messageListItem.e-single-line .flagParent { - float: left; - padding: 0 8px 0 2px; -} -.messageList .b-content .messageListItem .dateParent { - position: relative; - display: inline-block; - float: right; - margin: 0 5px; - color: #999999; - font-size: 11px; -} -.messageList .b-content .messageListItem .attachmentParent { - position: relative; - display: inline-block; - float: right; - margin: 2px 8px 0 5px; -} -.messageList .b-content .messageListItem.e-single-line .attachmentParent { - float: left; - margin: 0 5px 0 0; -} -.messageList .b-content .messageListItem .senderParent { - display: block; - overflow: hidden; - text-overflow: ellipsis; -} -.messageList .b-content .messageListItem .threadsCountParent { - display: inline; - overflow: hidden; - margin-right: 5px; - padding: 1px 5px; - border: 1px solid #cccccc; - border-radius: 5px; - background-color: #eeeeee; -} -.messageList .b-content .messageListItem .threadsCountParent.lastSelected { - border-color: #999999; - background-color: #999999; - color: #ffffff; -} -.messageList .b-content .messageListItem .threadsCountParent:hover { - border-color: #666666; -} -.messageList .b-content .messageListItem.e-single-line .senderParent { - display: inline-block; - float: left; - width: 200px; - text-overflow: none; - font-weight: normal; -} -.messageList .b-content .messageListItem .subjectParent { - display: block; - overflow: hidden; - color: #000000; - text-overflow: ellipsis; -} -.messageList .b-content .messageListItem .senderParent, -.messageList .b-content .messageListItem .subjectParent, -.messageList .b-content .messageListItem .dateParent { - white-space: nowrap; -} -.messageList .b-content .messageListItem .subjectParent .emptySubjectText { - display: none; - color: #999999; - font-style: italic; -} -.messageList .b-content .messageListItem.emptySubject .subjectParent .subject, -.messageList .b-content .messageListItem.emptySubject .subjectParent .subject-prefix, -.messageList .b-content .messageListItem.emptySubject .subjectParent .subject-suffix { - display: none; -} -.messageList .b-content .messageListItem.emptySubject .subjectParent .emptySubjectText { - display: inline; -} -.messageList .b-content .messageListItem .sender, -.messageList .b-content .messageListItem .subject, -.messageList .b-content .messageListItem .subject-suffix { - overflow: hidden; - text-overflow: ellipsis; -} -.messageList .b-content .messageListItem .subject-prefix { - color: #888888; - /*font-style: italic;*/ -} -.messageList .b-content .messageListItem .attachment { - display: none; -} -.messageList .b-content .messageListItem .flagOff, -.messageList .b-content .messageListItem .flagOn, -.messageList .b-content .messageListItem .flagOnHalf { - display: inline-block; - cursor: pointer; -} -.messageList .b-content .messageListItem .flagOff { - opacity: 0.5; -} -.messageList .b-content .messageListItem .flagOff:hover { - opacity: 1; -} -.messageList .b-content .messageListItem .flagOn, -.messageList .b-content .messageListItem .flagOnHalf { - display: none; - color: orange; -} -.messageList .b-content .messageListItem .replyFlag, -.messageList .b-content .messageListItem .forwardFlag { - display: none; -} -.messageList .b-content .messageListItem.answered .replyFlag { - display: inline-block; -} -.messageList .b-content .messageListItem.forwarded .forwardFlag { - display: inline-block; -} -.messageList .b-content .messageListItem.withAttachments .attachment { - display: inline-block; - color: #666666; - text-shadow: 0 1px 0 #eeeeee; -} -.messageList .b-content .messageListItem.unseen { - background-color: #ffffd9; -} -.messageList .b-content .messageListItem.unseen .sender, -.messageList .b-content .messageListItem.unseen .subject, -.messageList .b-content .messageListItem.unseen .subject-suffix { - font-weight: bold; -} -.messageList .b-content .messageListItem.unseen .sidebarParent { - background-color: orange; -} -.messageList .b-content .messageListItem.unseen.focused .sidebarParent { - background-color: #cc8400 !important; -} -.messageList .b-content .messageListItem.hasUnseenSubMessage { - background-color: #ffffd9; -} -.messageList .b-content .messageListItem.hasUnseenSubMessage .sidebarParent { - background-color: #ffdb99; -} -.messageList .b-content .messageListItem.hasUnseenSubMessage.focused .sidebarParent { - background-color: #cc8400 !important; -} -.messageList .b-content .messageListItem.hasParentMessage { - background-color: #ecf0f1; -} -.messageList .b-content .messageListItem.hasParentMessage .sidebarParent { - background-color: #bdc3c7; -} -.messageList .b-content .messageListItem.hasParentMessage.focused .sidebarParent { - background-color: #a1aab0 !important; -} -.messageList .b-content .messageListItem.hasParentMessage.unseen { - background-color: #dde4e6; -} -.messageList .b-content .messageListItem.hasParentMessage.unseen .sidebarParent { - background-color: #6c777f; -} -.messageList .b-content .messageListItem.hasParentMessage.unseen.focused .sidebarParent { - background-color: #545e64 !important; -} -.messageList .b-content .messageListItem.checked .sidebarParent { - background-color: #69a8f5 !important; -} -.messageList .b-content .messageListItem.checked.focused .sidebarParent { - background-color: #217ef0 !important; -} -.messageList .b-content .messageListItem.selected { - z-index: 101; - background-color: #dfefff; -} -.messageList .b-content .messageListItem.selected .sidebarParent { - background-color: #398cf2 !important; -} -.messageList .b-content .messageListItem.selected .delimiter { - background-color: #398cf2; - opacity: 0.2; - filter: alpha(opacity=20); -} -.messageList .b-content .messageListItem.selected + .messageListItem .delimiter { - background-color: #398cf2; - opacity: 0.3; -} -.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOff, -.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOn { - display: none; -} -.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOnHalf { - display: inline-block; -} -.messageList .b-content .messageListItem.flagged .flagOff, -.messageList .b-content .messageListItem.flagged .flagOnHalf { - display: none; -} -.messageList .b-content .messageListItem.flagged .flagOn { - display: inline-block; -} -.messageList.message-focused .b-message-list-wrapper { - background-color: #000000; -} -.messageList.message-focused .b-content { - opacity: 0.97; -} -.messageList.hideMessageListCheckbox .checkedParent, -.messageList.hideMessageListCheckbox .checkboxCkeckAll { - display: none !important; -} -.messageList.hideMessageListCheckbox .sidebarParent { - margin-right: 10px !important; -} -html.ssm-state-desktop-large .messageList .b-content .messageListItem { - font-size: 13px; -} -html.ssm-state-desktop-large .messageList .b-content .messageListItem .dateParent { - font-size: 13px; -} -html.cssanimations.rl-anim .messageList .line-loading { - height: 5px !important; -} -.draggablePlace { - z-index: 10002; - padding: 4px 10px; - min-width: 30px; - height: 20px; - background-color: #333333; - background-color: rgba(0, 0, 0, 0.5); - color: #ffffff; - cursor: pointer; - cursor: move; -} -html.rl-no-preview-pane .messageView { - display: none; -} -html.rl-no-preview-pane .messageView.message-selected { - display: block; -} -.messageView { - z-index: 100; -} -.messageView .toolbar { - position: absolute; - top: 0; - right: 0; - left: 0; - padding: 10px 0; - height: 30px; - color: #ffffff; -} -.messageView .b-content { - position: absolute; - top: 58px; - right: 8px; - bottom: 13px; - left: -1px; - overflow: hidden; - margin: 0; - border: 1px solid #aaaaaa; - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; - background-color: #ffffff; -} -.messageView .b-content .b-message-view-checked-helper { - padding-top: 140px; - color: #999999; - text-align: center; - font-size: 70px; - line-height: 70px; -} -.messageView .b-content .b-message-view-checked-helper .icon-mail { - padding-left: 10px; - font-size: 100px; - font-size: 50px; - line-height: 90px; -} -.messageView .b-content .b-message-view-desc { - padding-top: 120px; - color: #999999; - text-align: center; - font-size: 24px; - line-height: 30px; -} -.messageView .b-content .b-message-view-desc.error { - color: #da4f49; -} -.messageView .b-content .content { - -webkit-overflow-scrolling: touch; -} -.messageView .b-content .messageItem { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - overflow: auto; - -webkit-overflow-scrolling: touch; - border-radius: 3px; -} -.messageView .b-content .messageItem .emptySubjectText { - display: none; - color: #999999; - font-style: italic; -} -.messageView .b-content .messageItem.emptySubject .emptySubjectText { - display: inline; -} -.messageView .b-content .messageItem .buttonUp, -.messageView .b-content .messageItem .buttonUnFull, -.messageView .b-content .messageItem .buttonFull { - position: fixed; - top: 90px; - right: 30px; - z-index: 2; - display: inline-block; - width: 30px; - height: 30px; - border: 1px solid #333333; - border-radius: 5px; - background-color: transparent; - background-color: #ffffff; - color: #333333; - vertical-align: middle; - text-align: center; - line-height: 30px; - opacity: 0.3; - cursor: pointer; -} -.messageView .b-content .messageItem .buttonUp:hover, -.messageView .b-content .messageItem .buttonUnFull:hover, -.messageView .b-content .messageItem .buttonFull:hover { - border-color: #000000; - background-color: #888888; - color: #ffffff; - opacity: 0.8; - filter: alpha(opacity=80); -} -.messageView .b-content .messageItem .buttonUp { - right: 70px; - z-index: 0; -} -.messageView .b-content .messageItem .buttonUnFull { - display: none; -} -.messageView .b-content .messageItem .messageItemHeader { - position: relative; - z-index: 1; - padding: 10px; - border-top: 0; - border-bottom: 1px solid #dddddd; - background-color: #f8f8f8; -} -.messageView .b-content .messageItem .messageItemHeader .fromPic { - display: inline-block; - float: left; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 0 5px 0 0; - padding: 2px; - width: 50px; - height: 50px; - border: 1px solid #cccccc; - border-radius: 10px; - background: #ffffff; -} -.messageView .b-content .messageItem .messageItemHeader .subjectParent { - overflow: hidden; - margin-left: 3px; - text-overflow: ellipsis; - white-space: nowrap; - font-weight: bold; - font-size: 16px; -} -.messageView .b-content .messageItem .messageItemHeader .senderParent { - margin-top: 10px; -} -.messageView .b-content .messageItem .messageItemHeader .messageButtons { - margin-top: 5px; -} -.messageView .b-content .messageItem .messageItemHeader .informationShort { - margin-left: 15px; -} -.messageView .b-content .messageItem .messageItemHeader .informationShort a { - color: #336699; - text-decoration: underline; - cursor: pointer; -} -.messageView .b-content .messageItem .messageItemHeader .informationFull { - margin-top: 10px; - padding: 10px 15px; - border: 1px solid #dddddd; - border-radius: 5px; - background-color: #ffffff; -} -.messageView .b-content .messageItem .loading { - padding-top: 50px; - color: grey; - text-align: center; - font-size: 24px; -} -.messageView .b-content .messageItem .line-loading { - height: 0; -} -.messageView .b-content .messageItem .showImages, -.messageView .b-content .messageItem .readReceipt, -.messageView .b-content .messageItem .pgpSigned, -.messageView .b-content .messageItem .pgpEncrypted { - padding: 10px 15px; - border-bottom: 1px solid #dddddd; - background-color: #eeeeee; - cursor: pointer; -} -.messageView .b-content .messageItem .pgpInfo { - padding: 5px 15px; - border-bottom: 1px solid #dddddd; - background-color: #fcf8e3; -} -.messageView .b-content .messageItem .pgpInfo.success { - background-color: #e9f4ff; -} -.messageView .b-content .messageItem .readReceipt { - background-color: #ffffd9; -} -.messageView .b-content .messageItem .attachmentsPlace { - padding: 10px; -} -.messageView .b-content .messageItem .attachmentsPlace .attachmentList { - margin: 0; -} -.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem { - display: inline-block; - overflow: hidden; - margin: 5px; - padding: 5px; - min-width: 60px; - max-width: 170px; - border: 2px solid grey; - border-radius: 6px; - background-color: #ffffff; - box-shadow: 1px 1px 5px #cccccc; - box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.1); - list-style: none; - line-height: 24px; - cursor: pointer; -} -.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentIcon { - width: 23px; - height: 23px; - font-size: 23px; -} -.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentPreview { - margin: 0 5px; - color: #999999; -} -.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentPreview:hover { - color: #333333; -} -.messageView .b-content .messageItem .rlBlockquoteSwitcher { - display: inline-block; - margin: 10px 0; - width: 30px; - height: 14px; - border: 1px solid #999999; - background-color: #eeeeee; - text-align: center; - line-height: 14px; - opacity: 0.5; - cursor: pointer; -} -.messageView .b-content .messageItem .rlBlockquoteSwitcher:hover { - opacity: 1; -} -.messageView .b-content .messageItem .bodyText { - color: #000000; - font-family: Arial, Verdana, Geneva, sans-serif; -} -.messageView .b-content .messageItem .bodyText .b-text-part div[data-x-div-type=html] { - height: 100%; -} -.messageView .b-content .messageItem .bodyText .b-text-part div[data-x-div-type=html] div[data-x-div-type=html] { - height: 100%; -} -.messageView .b-content .messageItem .bodyText .b-text-part a { - color: blue; - text-decoration: underline; -} -.messageView .b-content .messageItem .bodyText .b-text-part a:visited { - color: #660099; -} -.messageView .b-content .messageItem .bodyText .b-text-part a:active { - color: red; -} -.messageView .b-content .messageItem .bodyText .b-text-part table { - border-collapse: separate; -} -.messageView .b-content .messageItem .bodyText .b-text-part blockquote { - margin: 0; - padding: 0 10px; - border-left: 2px solid #000000; -} -.messageView .b-content .messageItem .bodyText .b-text-part .rl-bq-switcher.hidden-bq { - display: none; -} -.messageView .b-content .messageItem .bodyText .b-text-part.html div[data-x-div-type=body] { - margin: 15px; -} -.messageView .b-content .messageItem .bodyText .b-text-part.html pre { - margin: 0; - padding: 0; - border: none; - background: #ffffff; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} -.messageView .b-content .messageItem .bodyText .b-text-part.plain { - padding: 15px; - white-space: pre-wrap; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} -.messageView .b-content .messageItem .bodyText .b-text-part.plain pre { - margin: 0; - padding: 0; - border: none; - background: #ffffff; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} -.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote { - border-left: 2px solid blue; - color: blue; -} -.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote blockquote { - border-left: 2px solid green; - color: green; -} -.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote blockquote blockquote { - border-left: 2px solid red; - color: red; -} -.messageView.message-focused .b-content { - z-index: 102; - border-color: #9d9d9d; - border-radius: 3px; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3); -} -html.rl-no-preview-pane .messageView .toolbar { - padding-left: 1px; -} -html.rl-no-preview-pane .messageView .b-content { - top: 50px; - right: 5px; - bottom: 5px; - border: 1px solid #aaaaaa; - border-radius: 5px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); -} -html.rl-no-preview-pane .messageView .b-content .buttonUp, -html.rl-no-preview-pane .messageView .b-content .buttonUnFull, -html.rl-no-preview-pane .messageView .b-content .buttonFull { - top: 70px; -} -html.cssanimations.rl-anim .messageItem .line-loading { - height: 5px !important; -} -html.rl-message-fullscreen #rl-left, -html.rl-message-fullscreen #rl-bottom { - display: none !important; -} -html.rl-message-fullscreen #rl-right .RL-MailMessageList, -html.rl-message-fullscreen #rl-right .RL-SettingsPane, -html.rl-message-fullscreen #rl-right .RL-SystemDropDown, -html.rl-message-fullscreen #rl-right .RL-MailMessageView .messageView .toolbar { - display: none !important; -} -html.rl-message-fullscreen .messageView .b-content { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 10000; - margin: 5px; - border: 1px solid #aaaaaa; - border-radius: 3px; -} -html.rl-message-fullscreen .messageView .b-content .buttonUp, -html.rl-message-fullscreen .messageView .b-content .buttonUnFull { - top: 36px; - display: inline-block; -} -html.rl-message-fullscreen .messageView .b-content .buttonFull { - display: none; -} -.b-contacts-content .control-group .control-label.fix-width { - width: 50px; -} -.b-contacts-content .control-group .controls.fix-width { - margin-left: 70px; -} -.b-contacts-content.modal { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - margin: auto; - min-height: 300px; - max-height: 700px; - width: 900px; -} -.b-contacts-content.modal .modal-body { - overflow: auto; - padding: 0; - height: 100%; - background-color: #f5f5f5; -} -.b-contacts-content.modal .b-header-toolbar { - height: 40px; - background-color: #aaaaaa; - background-color: #333333; - background-color: rgba(0, 0, 0, 0.8) !important; - color: #ffffff; -} -.b-contacts-content.modal .b-header-toolbar .close { - color: #ffffff; - opacity: 1; -} -.b-contacts-content.modal .b-header-toolbar .btn { - margin-top: 4px; -} -.b-contacts-content.modal .b-list-toolbar { - padding: 0; - width: 220px; - height: 45px; - box-shadow: inset 0 -1px 0 #cccccc; - text-align: right; -} -.b-contacts-content.modal .b-list-toolbar .e-search { - margin-top: 7px; - width: 200px; -} -.b-contacts-content.modal .b-list-footer-toolbar { - position: absolute; - bottom: 0; - left: 0; - width: 220px; - height: 105px; - background-color: #eeeeee; - box-shadow: inset 0 1px 0 #cccccc; -} -.b-contacts-content.modal .b-list-footer-toolbar .footer-pager { - padding: 8px 10px 0 0; -} -.b-contacts-content.modal .b-list-content { - position: absolute; - top: 45px; - bottom: 105px; - left: 0; - overflow: hidden; - overflow-y: auto; - width: 220px; -} -.b-contacts-content.modal .b-list-content .content { - -webkit-overflow-scrolling: touch; -} -.b-contacts-content.modal .b-list-content .listClear { - padding: 10px; - background-color: #ffffff; - box-shadow: inset 0 -1px 0 #cccccc; - color: #333333; - text-align: center; - font-size: 14px; - line-height: 13px; -} -.b-contacts-content.modal .b-list-content .listEmptyList, -.b-contacts-content.modal .b-list-content .listEmptyListLoading, -.b-contacts-content.modal .b-list-content .listEmptySearchList { - padding: 60px 10px; - color: #999999; - text-align: center; - font-size: 24px; - line-height: 30px; -} -.b-contacts-content.modal .b-list-content.hideContactListCheckbox .checkedParent, -.b-contacts-content.modal .b-list-content.hideContactListCheckbox .checkboxCkeckAll { - display: none !important; -} -.b-contacts-content.modal .b-list-content.hideContactListCheckbox .sidebarParent { - margin-right: 10px !important; -} -.b-contacts-content.modal .b-list-content .e-contact-foreach { - border-bottom: 1px solid #dddddd; -} -.b-contacts-content.modal .b-list-content .e-contact-item { - position: relative; - z-index: 100; - overflow: hidden; - margin: 0; - max-height: 45px; - height: 45px; - border: 0 solid transparent; - line-height: 45px; - cursor: pointer; -} -.b-contacts-content.modal .b-list-content .e-contact-item .delimiter { - position: relative; - display: block; - height: 1px; - background-color: #999999; - opacity: 0.2; -} -.b-contacts-content.modal .b-list-content .e-contact-item .wrapper { - padding: 0; -} -.b-contacts-content.modal .b-list-content .e-contact-item .sidebarParent { - display: inline-block; - float: left; - width: 6px; - height: 100%; - background-color: #eeeeee; -} -.b-contacts-content.modal .b-list-content .e-contact-item.focused .sidebarParent { - background-color: #bbbbbb; -} -.b-contacts-content.modal .b-list-content .e-contact-item.deleted { - max-height: 0; - border-color: transparent !important; -} -.b-contacts-content.modal .b-list-content .e-contact-item .checkedParent { - display: inline-block; - float: left; - padding: 0 8px 0 6px; -} -.b-contacts-content.modal .b-list-content .e-contact-item .shareParent { - position: relative; - display: none; - float: right; - margin: 2px 8px 0 5px; -} -.b-contacts-content.modal .b-list-content .e-contact-item .nameParent { - display: block; - overflow: hidden; - color: #333333; - text-overflow: ellipsis; - font-size: 16px; -} -.b-contacts-content.modal .b-list-content .e-contact-item .nameParent, -.b-contacts-content.modal .b-list-content .e-contact-item .emailParent { - white-space: nowrap; -} -.b-contacts-content.modal .b-list-content .e-contact-item .displayName, -.b-contacts-content.modal .b-list-content .e-contact-item .displayEmail { - overflow: hidden; - text-overflow: ellipsis; -} -.b-contacts-content.modal .b-list-content .e-contact-item .displayImg { - position: relative; - display: inline-block; - float: right; - margin: 0 5px; -} -.b-contacts-content.modal .b-list-content .e-contact-item.shared .shareParent { - display: inline-block; -} -.b-contacts-content.modal .b-list-content .e-contact-item.checked { - z-index: 101; -} -.b-contacts-content.modal .b-list-content .e-contact-item.checked .sidebarParent { - background-color: #69a8f5; -} -.b-contacts-content.modal .b-list-content .e-contact-item.checked.focused .sidebarParent { - background-color: #519af3 !important; -} -.b-contacts-content.modal .b-list-content .e-contact-item.selected { - z-index: 102; - background-color: #ffffff; -} -.b-contacts-content.modal .b-list-content .e-contact-item.selected .sidebarParent { - background-color: #398cf2; -} -.b-contacts-content.modal .b-list-content .e-contact-item.selected.focused .sidebarParent { - background-color: #217ef0 !important; -} -.b-contacts-content.modal .b-view-content-toolbar { - position: absolute; - top: 0; - right: 0; - left: 220px; - padding: 7px; - height: 31px; - background-color: #f5f5f5; - box-shadow: inset 0 -1px 0 #cccccc; - text-align: center; -} -.b-contacts-content.modal .b-view-content-toolbar .button-save-contact.no-disabled.dirty { - color: #51a351; - font-weight: bold; -} -.b-contacts-content.modal .b-view-content-toolbar.read-only .button-save-contact { - display: none; -} -.b-contacts-content.modal .b-view-content { - position: absolute; - top: 45px; - right: 0; - bottom: 60px; - left: 220px; - overflow: hidden; - overflow-y: auto; - border-left: 1px solid #dddddd; - background-color: #ffffff; -} -.b-contacts-content.modal .b-view-content .content { - -webkit-overflow-scrolling: touch; -} -.b-contacts-content.modal .b-view-content .tags-property-container { - width: 400px; - font-size: 18px; -} -.b-contacts-content.modal .b-view-content .tags-property-container .inputosaurus-container { - border-width: 1px; - border-color: transparent; - box-shadow: none; -} -.b-contacts-content.modal .b-view-content .tags-property-container .inputosaurus-container:hover { - border-color: #cccccc; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.b-contacts-content.modal .b-view-content .tags-property-container .inputosaurus-container.inputosaurus-focused { - border-color: #999999; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.b-contacts-content.modal .b-view-content .contactValueStatic, -.b-contacts-content.modal .b-view-content .contactValueLargeStatic, -.b-contacts-content.modal .b-view-content .contactValueTextAreaStatic { - display: inline-block; - display: none; - padding: 5px 7px; - height: 20px; - color: #555555; - font-size: 18px; - line-height: 20px; -} -.b-contacts-content.modal .b-view-content.read-only .contactValueStatic, -.b-contacts-content.modal .b-view-content.read-only .contactValueLargeStatic, -.b-contacts-content.modal .b-view-content.read-only .contactValueTextAreaStatic { - display: inline-block; -} -.b-contacts-content.modal .b-view-content.read-only .contactValueInput, -.b-contacts-content.modal .b-view-content.read-only .contactValueInputLarge, -.b-contacts-content.modal .b-view-content.read-only .contactValueTextArea { - display: none; -} -.b-contacts-content.modal .b-view-content .b-contact-view-desc { - padding-top: 120px; - color: #999999; - text-align: center; - font-size: 24px; - line-height: 30px; -} -.b-contacts-content.modal .b-view-content .top-part { - padding-top: 20px; -} -.b-contacts-content.modal .b-view-content .property-line { - margin-bottom: 5px; -} -.b-contacts-content.modal .b-view-content .top-row { - padding: 10px 0; - height: 30px; -} -.b-contacts-content.modal .b-view-content .add-link { - margin-left: 2px; - padding: 5px; - color: #aaaaaa; - font-size: 12px; -} -.b-contacts-content.modal .b-view-content .contactValueStatic, -.b-contacts-content.modal .b-view-content .contactValueLargeStatic, -.b-contacts-content.modal .b-view-content .contactValueTextAreaStatic { - display: none; - font-size: 18px; -} -.b-contacts-content.modal .b-view-content .contactValueInput, -.b-contacts-content.modal .b-view-content .contactValueInputLarge, -.b-contacts-content.modal .b-view-content .contactValueTextArea { - width: 300px; - border-color: #ffffff; - box-shadow: none; - font-size: 18px; -} -.b-contacts-content.modal .b-view-content .contactValueInput:hover, -.b-contacts-content.modal .b-view-content .contactValueInputLarge:hover, -.b-contacts-content.modal .b-view-content .contactValueTextArea:hover { - border-color: #cccccc; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.b-contacts-content.modal .b-view-content .contactValueInput:focus, -.b-contacts-content.modal .b-view-content .contactValueInputLarge:focus, -.b-contacts-content.modal .b-view-content .contactValueTextArea:focus { - border-color: #999999; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.b-contacts-content.modal .b-view-content .contactValueInput::-webkit-input-placeholder, -.b-contacts-content.modal .b-view-content .contactValueInputLarge::-webkit-input-placeholder, -.b-contacts-content.modal .b-view-content .contactValueTextArea::-webkit-input-placeholder { - color: #dddddd; -} -.b-contacts-content.modal .b-view-content .contactValueInput::-moz-placeholder, -.b-contacts-content.modal .b-view-content .contactValueInputLarge::-moz-placeholder, -.b-contacts-content.modal .b-view-content .contactValueTextArea::-moz-placeholder { - color: #dddddd; -} -.b-contacts-content.modal .b-view-content .contactValueInput:-moz-placeholder, -.b-contacts-content.modal .b-view-content .contactValueInputLarge:-moz-placeholder, -.b-contacts-content.modal .b-view-content .contactValueTextArea:-moz-placeholder { - color: #dddddd; -} -.b-contacts-content.modal .b-view-content .contactValueInput:-ms-input-placeholder, -.b-contacts-content.modal .b-view-content .contactValueInputLarge:-ms-input-placeholder, -.b-contacts-content.modal .b-view-content .contactValueTextArea:-ms-input-placeholder { - color: #dddddd; -} -.b-contacts-content.modal .b-view-content .contactValueTextArea { - width: 300px; -} -.b-contacts-content.modal .b-view-content .contactValueInputLarge { - width: 400px; -} -.b-contacts-content.modal .b-view-content .hasError .contactValueInput { - border-color: #ee5f5b; - color: #ee5f5b; -} -.b-contacts-content.modal .b-view-content .e-save-trigger { - position: absolute; - top: 25px; - left: 10px; -} -.b-contacts-content.modal .b-view-content .e-read-only-sign { - position: absolute; - top: 20px; - right: 40px; - display: none; -} -.b-contacts-content.modal .b-view-content .e-share-sign { - position: absolute; - top: 20px; - right: 20px; - cursor: pointer; -} -.b-contacts-content.modal .b-view-content.read-only .e-read-only-sign { - display: inline-block; -} -.b-contacts-content.modal .b-view-content.read-only .e-share-sign { - display: none; -} -.b-contacts-content .e-contact-item { - position: relative; - z-index: 100; - overflow: hidden; - margin: 0; - max-height: 60px; - height: 55px; - border: 0 solid transparent; - line-height: 22px; - cursor: pointer; -} -.b-compose.modal { - margin: 10px auto; - width: 850px; -} -.b-compose.modal .modal-body { - overflow: auto; - padding: 0; -} -.b-compose .textAreaParent { - overflow: hidden; -} -.b-compose .b-header-toolbar { - height: 40px; - background-color: #aaaaaa; - background-color: #333333; - background-color: rgba(0, 0, 0, 0.8) !important; - color: #ffffff; -} -.b-compose .b-header-toolbar .close { - color: #ffffff; - opacity: 1; -} -.b-compose .b-header-toolbar .btn.disabled.button-delete { - visibility: hidden; -} -.b-compose .b-header-toolbar .button-save, -.b-compose .b-header-toolbar .button-delete, -.b-compose .b-header-toolbar .saved-text { - margin-left: 8px; -} -.b-compose .b-header-toolbar .disabled.button-delete { - margin-left: 0; -} -.b-compose .b-header { - padding: 10px; - background-color: #eeeeee; - color: #333333; -} -.b-compose .b-header .e-identity { - color: #333333; - text-decoration: none; - font-weight: bold; -} -.b-compose .b-header .e-identity:hover { - color: #333333; - text-decoration: none; -} -.b-compose .b-header .e-identity.multiply { - border-bottom: 1px dashed #555555; - cursor: pointer; -} -.b-compose .b-header .e-row { - line-height: 30px; -} -.b-compose .b-header .e-label { - padding: 6px 10px; - min-width: 70px; - width: 1%; - text-align: right; -} -.b-compose .b-header .e-value { - padding: 2px 0; -} -.b-compose .b-header .e-value textarea, -.b-compose .b-header .e-value input[type="text"] { - width: 98%; -} -.b-compose .b-header .e-value textarea { - height: 40px; -} -.b-compose .b-header .error-desc { - color: red; -} -.b-compose .b-header .b-appachments .b-attacment { - padding-bottom: 10px; - line-height: 20px; -} -.b-compose .b-header .b-appachments .b-attacment-in-process { - padding-bottom: 10px; - line-height: 20px; -} -.b-compose .b-header .b-appachments .b-attacment-in-process .uploading { - display: none; - padding-right: 5px; -} -.b-compose .b-header .b-appachments .b-attacment-in-process.uploading .uploading { - display: inline; -} -.b-compose .b-header .b-appachments .b-attacment-in-process .upload-progress { - font-weight: bold; -} -.b-compose .b-header .b-appachments .b-attacment-in-process.error .namedStr { - color: #888888; -} -.b-compose .b-header .b-appachments .b-attacment-in-process .error { - color: red; -} -.b-compose .b-header .b-appachments .b-attacment-in-process .close { - float: left; - padding-right: 13px; -} -.b-compose .b-attachment-button { - display: inline-block; -} -.b-compose .b-attachment-place { - position: absolute; - right: 20px; - left: 20px; - z-index: 300; - height: 120px; - border: 2px #777777 dashed; - background-color: #ffffff; - text-align: center; - font-size: 24px; - line-height: 119px; -} -.b-compose .b-attachment-place.drag-and-drop-over { - background: #777777; - color: #ffffff; -} -.b-admin-left .b-toolbar { - position: absolute; - top: 0; - right: 0; - left: 0; - padding: 8px 0 0 8px; - height: 34px; -} -.b-admin-left .b-content { - position: absolute; - top: 68px; - right: 0; - bottom: 8px; - left: 0; - overflow: hidden; -} -.b-admin-left .b-content .content { - -webkit-overflow-scrolling: touch; -} -.b-admin-menu .e-item { - overflow: hidden; - outline: 0; - text-decoration: none; -} -.b-admin-menu .e-link { - position: relative; - z-index: 1; - display: block; - padding: 4px 10px; - height: 30px; - outline: 0; - background-color: transparent; - color: #888888; - text-decoration: none; - font-size: 18px; - line-height: 29px; - cursor: pointer; - cursor: default; -} -.b-admin-menu .e-item.selectable .e-link { - cursor: pointer; -} -.b-admin-menu .e-item.selectable:hover .e-link, -.b-admin-menu .e-item.selectable.selected .e-link { - background-color: #555555; - color: #ffffff; -} -.b-admin-right .b-toolbar { - position: absolute; - top: 0; - right: 0; - left: 0; - padding: 8px 8px; - height: 34px; - color: #ffffff; -} -.b-admin-right .b-content { - position: absolute; - top: 58px; - right: 8px; - bottom: 8px; - left: 0; - z-index: 2; - overflow-y: auto; - border: 1px solid #aaaaaa; - border-radius: 5px; - background-color: #ffffff; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); -} -.b-admin-right .b-content .content { - -webkit-overflow-scrolling: touch; -} -.b-admin-right .b-settings-content { - padding: 20px; - padding-left: 30px; -} -.b-admin-general .flag-selector { - padding-top: 5px; -} -.b-admin-general .flag-name { - border-bottom: 1px dashed #555555; -} -.b-admin-domains .process-place { - visibility: hidden; - padding: 14px 0; - width: 600px; - text-align: center; -} -.b-admin-domains-list-table { - width: 600px; -} -.b-admin-domains-list-table .e-item .e-action { - cursor: pointer; -} -.b-admin-domains-list-table .e-item .domain-name { - display: inline-block; - -moz-box-sizing: border-box; - box-sizing: border-box; - word-break: break-all; -} -.b-admin-domains-list-table .e-item.disabled .domain-name { - color: #bbbbbb; -} -.b-admin-domains-list-table .e-item .button-delete { - visibility: hidden; - margin-right: 15px; - opacity: 0; -} -.b-admin-domains-list-table .e-item .delete-access.button-delete { - visibility: visible; - margin-right: 0; - opacity: 1; -} -.b-admin-domains-list-table .e-item .delete-domain, -.b-admin-domains-list-table .e-item .disabled-domain { - opacity: 0.5; - cursor: pointer; -} -.b-admin-domains-list-table .e-item.disabled .disabled-domain { - opacity: 0.5; -} -.b-admin-domains-list-table .e-item .delete-domain:hover, -.b-admin-domains-list-table .e-item .disabled-domain:hover { - opacity: 1; -} -.b-domain-content.modal { - width: 810px; -} -.b-domain-content .modal-header { - background-color: #ffffff; -} -.b-domain-content .modal-body { - position: relative; - left: 0; - overflow: hidden; - width: 1600px; - height: 370px; -} -.b-domain-content.domain-edit .modal-body { - height: 320px; -} -.b-domain-content.domain-white-list-page .modal-body { - left: -800px; -} -.b-domain-content .error-desc { - margin-left: 10px; - color: red; -} -.b-domain-content .testing-done .imap-header, -.b-domain-content .testing-done .smtp-header { - color: green; - font-weight: bold; -} -.b-domain-content .testing-error .imap-header, -.b-domain-content .testing-error .smtp-header { - color: red; -} -.b-admin-packages .alert { - width: 650px; -} -.b-admin-packages .process-place { - visibility: hidden; -} -.b-admin-packages-list-table { - width: 700px; -} -.b-admin-packages-list-table .e-item .package-img { - margin-right: 2px; - font-size: 12px; -} -.b-admin-packages-list-table .e-item .package-name.core { - font-weight: bold; -} -.b-admin-packages-list-table .e-item .package-desc { - color: #999999; - font-size: 12px; -} -.b-admin-packages-list-table .e-item .e-action { - cursor: pointer; -} -.b-admin-packages-list-table .e-item .package-release-parent, -.b-admin-packages-list-table .e-item .package-actions-parent { - text-align: center; -} -.b-admin-packages-list-table .e-item .package-actions-parent { - vertical-align: middle; -} -.b-admin-plugins .process-place { - visibility: hidden; -} -.b-admin-plugins-list-table.disabled { - background-color: #eeeeee; - opacity: 0.5; -} -.b-admin-plugins-list-table .e-item .e-action { - cursor: pointer; -} -.b-admin-plugins-list-table .e-item .plugin-img { - margin-right: 2px; - font-size: 12px; -} -.b-admin-plugins-list-table .e-item.disabled .plugin-img, -.b-admin-plugins-list-table .e-item.disabled .plugin-name { - color: #bbbbbb; -} -.b-admin-plugins-list-table .e-item.disabled .disabled-plugin { - opacity: 0.5; -} -.b-admin-plugin-property .help-block { - margin-bottom: 5px; -} -.b-plugin-content.modal { - width: 660px; -} -.b-plugin-content.modal .modal-body { - overflow: auto; -} -.b-plugin-content .modal-header { - background-color: #ffffff; -} -.b-plugin-content .information { - display: inline-block; - padding-top: 5px; - width: 30px; - height: 25px; - border-radius: 10px; - background-color: #dddddd; - text-align: center; - cursor: pointer; -} -.b-plugin-content textarea { - width: 400px; - height: 70px; -} -.b-admin-about .rl-logo { - display: inline-block; - margin-top: -10px; - margin-bottom: -10px; - width: 250px; - height: 250px; - background-image: url("images/rainloop-logo.png"); -} -.b-admin-about .rl-desc { - margin-top: 20px; - margin-left: -20px; -} -.popups .b-activate-content { - width: 700px; -} -.popups .b-activate-content .modal-header { - background-color: #ffffff; -} -.popups .b-activate-content .help-inline { - padding-left: 0; -} -.b-settins-left .b-toolbar { - position: absolute; - top: 0; - right: 0; - left: 0; - padding: 8px 0 0 8px; - height: 34px; -} -.b-settins-left .b-content { - position: absolute; - top: 68px; - right: 0; - bottom: 8px; - left: 0; - overflow: hidden; -} -.b-settins-left .b-content .content { - -webkit-overflow-scrolling: touch; -} -.b-settings-menu .e-item { - overflow: hidden; - outline: 0; - text-decoration: none; -} -.b-settings-menu .e-link { - position: relative; - z-index: 1; - display: block; - padding: 4px 10px; - height: 30px; - outline: 0; - background-color: transparent; - color: #888888; - text-decoration: none; - font-size: 18px; - line-height: 29px; - cursor: default; -} -.b-settings-menu .e-item.selectable .e-link { - cursor: pointer; -} -.b-settings-menu .e-item.selectable:hover .e-link, -.b-settings-menu .e-item.selectable.selected .e-link { - background-color: #555555; - color: #ffffff; -} -.b-settins-right .b-toolbar { - position: absolute; - top: 0; - right: 0; - left: 0; - padding: 8px 5px; - height: 34px; - color: #ffffff; -} -.b-settins-right .b-content { - position: absolute; - top: 50px; - right: 8px; - bottom: 8px; - left: 0; - z-index: 2; - overflow-y: auto; - border: 1px solid #aaaaaa; - border-radius: 5px; - background-color: #ffffff; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); -} -.b-settins-right .b-content .content { - -webkit-overflow-scrolling: touch; -} -.b-settins-right .b-settings-content { - padding: 20px; - padding-left: 30px; -} -.b-settings-general .notification-desc-denied { - display: none; - color: #999999; -} -.b-settings-general .denied-by-browser .notification-desc-denied { - display: inline; -} -.b-settings-general .denied-by-browser .notification-desc { - color: #999999; -} -.b-settings-general .flag-selector { - padding-top: 5px; -} -.b-settings-general .flag-name { - border-bottom: 1px dashed #555555; -} -.b-settings-accounts .process-place { - padding: 14px 0; - width: 600px; - text-align: center; -} -.b-settings-accounts .list-table { - width: 600px; -} -.b-settings-accounts .list-table td { - padding: 4px 8px; - line-height: 30px; -} -.b-settings-accounts .list-table .account-img { - margin-right: 5px; - font-size: 12px; -} -.b-settings-accounts .list-table .account-name { - display: inline-block; - -moz-box-sizing: border-box; - box-sizing: border-box; - word-break: break-all; - line-height: 22px; - cursor: default; -} -.b-settings-accounts .account-item .button-delete { - visibility: hidden; - margin-top: 5px; - margin-right: 15px; - opacity: 0; -} -.b-settings-accounts .account-item .delete-access.button-delete { - visibility: visible; - margin-right: 0; - opacity: 1; -} -.b-settings-accounts .account-item .delete-account { - opacity: 0.5; - cursor: pointer; -} -.b-settings-identity .e-signature-place { - display: inline-block; - width: 680px; - height: 250px; -} -.b-settings-identities .process-place { - padding: 14px 0; - width: 600px; - text-align: center; -} -.b-settings-identities .e-signature-place { - display: inline-block; - width: 680px; - height: 250px; -} -.b-settings-identities .list-table { - width: 600px; -} -.b-settings-identities .list-table td { - padding: 4px 8px; - line-height: 30px; -} -.b-settings-identities .list-table .identity-img { - margin-right: 5px; - font-size: 12px; -} -.b-settings-identities .list-table .identity-name { - display: inline-block; - -moz-box-sizing: border-box; - box-sizing: border-box; - word-break: break-all; - line-height: 22px; - cursor: pointer; -} -.b-settings-identities .identity-item .e-action { - cursor: pointer; -} -.b-settings-identities .identity-item .button-delete { - visibility: hidden; - margin-top: 5px; - margin-right: 15px; - opacity: 0; -} -.b-settings-identities .identity-item .delete-access.button-delete { - visibility: visible; - margin-right: 0; - opacity: 1; -} -.b-settings-identities .identity-item .delete-identity { - opacity: 0.5; - cursor: pointer; -} -.b-settings-open-pgp .process-place { - padding: 14px 0; - width: 600px; - text-align: center; -} -.b-settings-open-pgp .list-table { - width: 750px; -} -.b-settings-open-pgp .list-table td { - padding: 4px 8px; - line-height: 30px; -} -.b-settings-open-pgp .list-table .open-pgp-key-img { - margin-right: 5px; - font-size: 12px; -} -.b-settings-open-pgp .list-table .open-pgp-key-id, -.b-settings-open-pgp .list-table .open-pgp-key-user { - display: inline-block; - -moz-box-sizing: border-box; - box-sizing: border-box; - word-break: break-all; - line-height: 22px; - cursor: default; -} -.b-settings-open-pgp .open-pgp-key-item .button-delete { - visibility: hidden; - margin-top: 5px; - margin-right: 15px; - opacity: 0; -} -.b-settings-open-pgp .open-pgp-key-item .delete-access.button-delete { - visibility: visible; - margin-right: 0; - opacity: 1; -} -.b-settings-open-pgp .open-pgp-key-item .delete-open-pgp-key, -.b-settings-open-pgp .open-pgp-key-item .view-open-pgp-key { - opacity: 0.5; - cursor: pointer; -} -.b-settings-folders.ignore-folder-subscribe .subscribe-folder, -.b-settings-folders.ignore-folder-subscribe .unsubscribe-folder { - display: none; -} -.b-settings-folders .process-place { - padding: 14px 0; - width: 600px; - text-align: center; -} -.b-settings-folders .folders-list-error { - margin: 10px 0; - width: 550px; -} -.b-settings-folders .list-table { - width: 600px; -} -.b-settings-folders .list-table .e-action { - cursor: pointer; -} -.b-settings-folders .list-table td { - padding: 4px 8px; - line-height: 30px; -} -.b-settings-folders .list-table .folder-padding { - display: inline-block; - width: 0; -} -.b-settings-folders .list-table .folder-name { - display: inline-block; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin-left: 7px; - white-space: pre-wrap; - word-break: break-all; - line-height: 22px; - cursor: default; -} -.b-settings-folders .list-table .folder-system-name { - display: inline-block; - color: #999999; - line-height: 22px; - cursor: default; -} -.b-settings-folders .list-table .folder-name.can-be-edited:hover { - border-bottom: 1px dashed #333333; - cursor: pointer; -} -.b-settings-folders .list-table .folder-name-input { - margin-bottom: 0; - margin-left: -4px; - border-width: 1px; -} -.b-settings-folders .folder-item.system .folder-name { - font-weight: bold; -} -.b-settings-folders .folder-item .button-delete { - visibility: hidden; - margin-top: 5px; - margin-right: 15px; - opacity: 0; -} -.b-settings-folders .folder-item .delete-access.button-delete { - visibility: visible; - margin-right: 0; - opacity: 1; -} -.b-settings-folders .folder-item .delete-folder, -.b-settings-folders .folder-item .subscribe-folder, -.b-settings-folders .folder-item .unsubscribe-folder { - opacity: 0.6; - cursor: pointer; -} -.b-settings-folders .folder-item .unsubscribe-folder { - opacity: 0.25; -} -.b-settings-folders .folder-padding.deep-1 { - width: 25px; -} -.b-settings-folders .folder-padding.deep-2 { - width: 40px; -} -.b-settings-folders .folder-padding.deep-3 { - width: 55px; -} -.b-settings-folders .folder-padding.deep-4 { - width: 70px; -} -.b-settings-folders .folder-padding.deep-5 { - width: 85px; -} -.b-themes-list .e-item { - display: inline-block; - margin: 5px; - padding: 16px; - border: 2px solid transparent; - background-color: #ffffff; - color: #000000; - cursor: pointer; -} -.b-themes-list .e-item:hover { - border: 2px solid grey; -} -.b-themes-list .e-item.selected { - border: 2px solid #000000; - background-color: #eeeeee; -} -.b-themes-list .e-item .e-image { - width: 100px; - height: 100px; - border: 1px solid #dddddd; -} -@-webkit-keyframes highlight-folder-row { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - 50% { - -webkit-transform: scale(1.1); - transform: scale(1.1); - } - 100% { - -webkit-transform: scale(1); - transform: scale(1); - } -} -@keyframes highlight-folder-row { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - 50% { - -webkit-transform: scale(1.1); - transform: scale(1.1); - } - 100% { - -webkit-transform: scale(1); - transform: scale(1); - } -} -@-webkit-keyframes textLoadingAnimationKeyFrame { - 0% { - opacity: 1; - } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@keyframes textLoadingAnimationKeyFrame { - 0% { - opacity: 1; - } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@-webkit-keyframes animate-stripes { - 0% { - background-position: 0 0; - } - 100% { - background-position: 60px 0; - } -} -@keyframes animate-stripes { - 0% { - background-position: 0 0; - } - 100% { - background-position: 60px 0; - } -} -html.rl-started-trigger.no-mobile .b-login-content .loginFormWrapper { - -webkit-transform: translateY(-30px); - -ms-transform: translateY(-30px); - transform: translateY(-30px); -} -html.rl-started-trigger.no-mobile #rl-content { - opacity: 0.7; -} -#rl-loading { - -webkit-transition: opacity 0.5s linear; - transition: opacity 0.5s linear; -} -.rl-anim.csstransitions.no-mobile #rl-left { - -webkit-transition: width 0.3s ease-out; - transition: width 0.3s ease-out; -} -.rl-anim.csstransitions.no-mobile #rl-right { - -webkit-transition: left 0.3s ease-out; - transition: left 0.3s ease-out; -} -.rl-anim.csstransitions.no-mobile #rl-sub-left, -.rl-anim.csstransitions.no-mobile #rl-sub-left .messageList .inputSearch { - -webkit-transition: width 0.3s ease-out; - transition: width 0.3s ease-out; -} -.rl-anim.csstransitions.no-mobile #rl-sub-right { - -webkit-transition: left 0.3s ease-out; - transition: left 0.3s ease-out; -} -.rl-anim.csstransitions.no-mobile #rl-content { - -webkit-transition: opacity 0.3s ease-out; - transition: opacity 0.3s ease-out; -} -.rl-anim.csstransitions.no-mobile .b-login-content .loginFormWrapper { - -webkit-transition: all 0.3s ease-out; - transition: all 0.3s ease-out; -} -.rl-anim.rgba.cssanimations.backgroundsize .e-strip-animation { - background-image: -webkit-linear-gradient(315deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent 50%, rgba(0, 0, 0, 0.1) 50%, rgba(0, 0, 0, 0.1) 75%, transparent 75%, transparent); - background-image: linear-gradient(135deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent 50%, rgba(0, 0, 0, 0.1) 50%, rgba(0, 0, 0, 0.1) 75%, transparent 75%, transparent); - background-size: 60px 60px; - -webkit-animation: animate-stripes 2s linear infinite; - animation: animate-stripes 2s linear infinite; -} -.rl-anim.csstransitions .button-delete-transitions { - -webkit-transition: all 0.2s linear; - transition: all 0.2s linear; -} -.rl-anim.cssanimations .b-folders .e-item .anim-action-class { - -webkit-animation: highlight-folder-row 0.5s linear; - animation: highlight-folder-row 0.5s linear; -} -.rl-anim.csstransitions .b-folders .btn.buttonContacts { - -webkit-transition: margin 0.3s linear; - transition: margin 0.3s linear; -} -.rl-anim.csstransitions .b-folders .b-content.opacity-on-panel-disabled { - -webkit-transition: opacity 0.3s linear; - transition: opacity 0.3s linear; -} -.rl-anim.csstransitions .messageList .messageListItem { - -webkit-transition: max-height 400ms ease; - transition: max-height 400ms ease; -} -.rl-anim.csstransitions .messageList .listDragOver { - -webkit-transition: all 400ms ease; - transition: all 400ms ease; -} -.rl-anim.csstransitions .b-list-content .e-contact-item { - -webkit-transition: max-height 400ms ease; - transition: max-height 400ms ease; -} -.rl-anim.csstransitions .modal.b-domain-content .modal-body { - -webkit-transition: left 500ms ease; - transition: left 500ms ease; -} -.rl-anim.csstransitions .modal.fade { - -webkit-transition: all 0.2s ease-out; - transition: all 0.2s ease-out; - -webkit-transform: translateY(-20px); - -ms-transform: translateY(-20px); - transform: translateY(-20px); -} -.rl-anim.csstransitions .modal.fade.in { - -webkit-transform: none; - -ms-transform: none; - transform: none; -} -.rl-anim.cssanimations .b-compose.loading .b-header-toolbar { - background-image: -webkit-linear-gradient(315deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); - background-image: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); - background-size: 60px 60px; - -webkit-animation: animate-stripes 2s linear infinite; - animation: animate-stripes 2s linear infinite; -} -.textLoadingAnimationD1, -.textLoadingAnimationD2, -.textLoadingAnimationD3 { - -webkit-animation: textLoadingAnimationKeyFrame 1s linear infinite 0s; - animation: textLoadingAnimationKeyFrame 1s linear infinite 0s; -} -.textLoadingAnimationD2 { - -webkit-animation-delay: 0.3s; - animation-delay: 0.3s; -} -.textLoadingAnimationD3 { - -webkit-animation-delay: 0.6s; - animation-delay: 0.6s; -} -.rl-view-model.RL-Login, -.rl-view-model.RL-LoginNew, -.rl-view-model.RL-AdminLogin, -.rl-view-model.RL-About { - position: relative; - z-index: 5; - height: 100%; -} \ No newline at end of file diff --git a/rainloop/v/0.0.0/static/css/app.min.css b/rainloop/v/0.0.0/static/css/app.min.css deleted file mode 100644 index d392b083b..000000000 --- a/rainloop/v/0.0.0/static/css/app.min.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute;overflow:hidden;clip:rect(0 0 0 0);margin:-1px;padding:0;width:1px;height:1px;border:0}.ui-helper-reset{margin:0;padding:0;outline:0;border:0;list-style:none;text-decoration:none;font-size:100%;line-height:1.3}.ui-helper-clearfix:after,.ui-helper-clearfix:before{display:table;border-collapse:collapse;content:""}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;overflow:hidden;background-repeat:no-repeat;text-indent:-99999px}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;display:block;font-size:.1px}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{top:-5px;left:0;width:100%;height:7px;cursor:n-resize}.ui-resizable-s{bottom:-5px;left:0;width:100%;height:7px;cursor:s-resize}.ui-resizable-e{top:0;right:-5px;width:7px;height:100%;cursor:e-resize}.ui-resizable-w{top:0;left:-5px;width:7px;height:100%;cursor:w-resize}.ui-resizable-se{right:1px;bottom:1px;width:12px;height:12px;cursor:se-resize}.ui-resizable-sw{bottom:-5px;left:-5px;width:9px;height:9px;cursor:sw-resize}.ui-resizable-nw{top:-5px;left:-5px;width:9px;height:9px;cursor:nw-resize}.ui-resizable-ne{top:-5px;right:-5px;width:9px;height:9px;cursor:ne-resize}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{display:block;margin:0;padding:2px;outline:0;list-style:none}.ui-menu .ui-menu{position:absolute;margin-top:-3px}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px;height:0;border-width:1px 0 0;font-size:0;line-height:0}.ui-menu .ui-menu-item a{display:block;padding:2px .4em;min-height:0;text-decoration:none;font-weight:400;line-height:1.5}.ui-menu .ui-menu-item a.ui-state-active,.ui-menu .ui-menu-item a.ui-state-focus{margin:-1px;font-weight:400}.ui-menu .ui-state-disabled{margin:.4em 0 .2em;font-weight:400;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-widget{font-size:1.1em;font-family:Verdana,Arial,sans-serif}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-size:1em;font-family:Verdana,Arial,sans-serif}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#eee;color:#555;font-weight:400}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid #ccc;background:#eee;color:#212121;font-weight:400}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff;color:#212121;font-weight:400}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec;color:#cd0a0a}.ui-state-error a,.ui-state-error-text,.ui-widget-content .ui-state-error a,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error a,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{font-weight:400;opacity:.7;filter:Alpha(Opacity=70)}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{background-image:none;opacity:.35;filter:Alpha(Opacity=35)}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:2px}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:2px}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:2px}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:2px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;border-radius:8px;background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:dotted thin}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-size:1em;font-family:monospace,serif}q{quotes:none}sub,sup{position:relative;vertical-align:baseline;font-size:75%;line-height:0}sup{top:-.5em}sub{bottom:-.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ol,nav ul{list-style:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure,form{margin:0}legend{white-space:normal}button,input,select,textarea{margin:0;vertical-align:baseline;font-size:100%}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=search]{-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}@font-face{font-weight:400;font-style:normal;font-family:rainloop;src:url(fonts/rainloop.eot);src:url(fonts/rainloop.eot?#iefix) format("embedded-opentype"),url(fonts/rainloop.woff) format("woff"),url(fonts/rainloop.ttf) format("truetype"),url(fonts/rainloop.svg#rainloop) format("svg")}[data-icon]:before{content:attr(data-icon);text-transform:none!important;font-weight:400!important;font-style:normal!important;font-variant:normal!important;font-family:rainloop!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none}[class*=" icon-"]:before,[class^=icon-]:before{text-transform:none!important;font-weight:400!important;font-style:normal!important;font-variant:normal!important;font-family:rainloop!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none}.icon-arrows-in:before{content:"\e000"}.icon-arrows-out:before{content:"\e001"}.icon-list:before{content:"\e002"}.icon-search:before{content:"\e003"}.icon-user:before{content:"\e004"}.icon-user-add:before{content:"\e005"}.icon-tags:before{content:"\e006"}.icon-paper-plane:before{content:"\e007"}.icon-reply:before{content:"\e008"}.icon-reply-all:before{content:"\e009"}.icon-forward:before{content:"\e00a"}.icon-info:before{content:"\e00b"}.icon-right-dir:before{content:"\e00c"}.icon-down-dir:before{content:"\e00d"}.icon-image:before{content:"\e00e"}.icon-print:before{content:"\e00f"}.icon-calendar:before{content:"\e010"}.icon-cog:before{content:"\e011"}.icon-wrench:before{content:"\e012"}.icon-rocket:before{content:"\e013"}.icon-fire:before{content:"\e014"}.icon-purchase:before{content:"\e015"}.icon-apple:before{content:"\e016"}.icon-dropbox:before{content:"\e017"}.icon-skype:before{content:"\e018"}.icon-creative-commons:before{content:"\e019"}.icon-ellipsis:before{content:"\e01a"}.icon-left:before{content:"\e01b"}.icon-right:before{content:"\e01c"}.icon-down:before{content:"\e01d"}.icon-right-mini:before{content:"\e01e"}.icon-down-mini:before{content:"\e01f"}.icon-up:before{content:"\e020"}.icon-star-empty:before{content:"\e021"}.icon-star:before{content:"\e022"}.icon-at:before{content:"\e023"}.icon-list-add:before{content:"\e024"}.icon-google:before{content:"\e025"}.icon-google-plus:before{content:"\e026"}.icon-twitter:before{content:"\e027"}.icon-youtube:before{content:"\e028"}.icon-warning:before{content:"\e029"}.icon-warning-alt:before{content:"\e02a"}.icon-power:before{content:"\e02b"}.icon-plus:before{content:"\e02c"}.icon-ok:before{content:"\e02d"}.icon-remove:before{content:"\e02e"}.icon-file:before{content:"\e02f"}.icon-file-code:before{content:"\e030"}.icon-file-chart-graph:before{content:"\e031"}.icon-file-zip:before{content:"\e032"}.icon-file-music:before{content:"\e033"}.icon-file-text:before{content:"\e034"}.icon-file-bookmark:before{content:"\e035"}.icon-file-image:before{content:"\e036"}.icon-file-analytics:before{content:"\e037"}.icon-file-certificate:before{content:"\e038"}.icon-attachment:before{content:"\e039"}.icon-file-excel:before{content:"\e03a"}.icon-file-movie:before{content:"\e03b"}.icon-folder-add:before{content:"\e03c"}.icon-folder:before{content:"\e03d"}.icon-floppy:before{content:"\e03e"}.icon-eye:before{content:"\e03f"}.icon-facebook-alt:before{content:"\e040"}.icon-facebook:before{content:"\e041"}.icon-bolt:before{content:"\e042"}.icon-download:before{content:"\e043"}.icon-upload:before{content:"\e044"}.icon-popup:before{content:"\e045"}.icon-github:before{content:"\e046"}.icon-telephone:before{content:"\e047"}.icon-mobile:before{content:"\e048"}.icon-pencil:before{content:"\e049"}.icon-trash:before{content:"\e04a"}.icon-left-middle:before{content:"\e04b"}.icon-right-middle:before{content:"\e04c"}.icon-repeat:before{content:"\e04d"}.icon-key:before{content:"\e04e"}.icon-lock:before{content:"\e04f"}.icon-home:before{content:"\e050"}.icon-address-book:before{content:"\e051"}.icon-share:before{content:"\e052"}.icon-suitcase:before{content:"\e053"}.icon-new-sign:before{content:"\e054"}.icon-users:before{content:"\e055"}.icon-earth:before{content:"\e056"}.icon-mail:before{content:"\e057"}.icon-checkbox-checked:before{content:"\e058"}.icon-checkbox-unchecked:before{content:"\e059"}.icon-checkbox-partial:before{content:"\e05a"}.icon-radio-checked:before{content:"\e05b"}.icon-radio-unchecked:before{content:"\e05c"}.icon-google-drive:before{content:"\e05d"}.icon-spinner:before{content:"\e05e"}.icon-archive:before{content:"\e05f"}.icon-buy-sign:before{content:"\e060"}.icon-filter:before{content:"\e061"}.icon-sync:before{content:"\e062"}.icon-ellipsis-alt:before{content:"\e063"}.icon-cloud-up:before{content:"\e064"}.icon-cloud-down:before{content:"\e065"}.icon-import:before{content:"\e066"}.icon-export:before{content:"\e067"}.icon-copy:before{content:"\e068"}.icon-angry-smiley:before{content:"\e069"}.icon-happy-smiley:before{content:"\e06a"}.icon-help:before{content:"\e06b"}.icon-resize-in:before{content:"\e06c"}.icon-resize-out:before{content:"\e06d"}.nano{overflow:hidden!important}.nano .content{position:absolute;top:0;right:0;bottom:0;left:0;overflow:scroll;-webkit-overflow-scrolling:touch}.nano .content .content-wrapper{height:100%}.nano .content::-webkit-scrollbar{visibility:hidden}.has-scrollbar .content::-webkit-scrollbar{visibility:hidden}.nano-visibility-hidden::-webkit-scrollbar{visibility:hidden}.nano>.pane{position:absolute;top:1px;right:0;bottom:1px;z-index:102;margin:2px;width:5px;border-radius:5px;background:0 0;opacity:.01;filter:alpha(opacity=1);-webkit-transition:.4s;transition:.4s}.nano>.pane2{position:absolute;right:1px;bottom:0;left:1px;z-index:10000;margin:2px;height:5px;border-radius:5px;background:0 0;opacity:.01;filter:alpha(opacity=1);-webkit-transition:.4s;transition:.4s}.nano>.pane>.slider{position:relative;margin:0;width:5px;border-radius:3px;background-color:#999;background-color:rgba(0,0,0,.3)}.nano>.pane2>.slider2{position:relative;margin:0;height:5px;border-radius:3px;background-color:#999;background-color:rgba(0,0,0,.3)}.nano:hover>.pane,.nano:hover>.pane2,.pane.active,.pane.activescroll,.pane.flashed,.pane2.active,.pane2.activescroll,.pane2.flashed{opacity:.99;filter:alpha(opacity=99)}.nano>.pane.active,.nano>.pane2.active,.nano>.pane2:hover,.nano>.pane:hover{background-color:rgba(0,0,0,.15)}.nano>.pane.active>.slider,.nano>.pane2.active>.slider2,.nano>.pane2:hover>.slider2,.nano>.pane:hover>.slider{background-color:rgba(0,0,0,.4)}.mfp-bg{position:fixed;top:0;left:0;z-index:1042;overflow:hidden;width:100%;height:100%;background:#0b0b0b;opacity:.8;filter:alpha(opacity=80)}.mfp-wrap{position:fixed;top:0;left:0;z-index:1043;width:100%;height:100%;outline:0!important;-webkit-backface-visibility:hidden}.mfp-container{position:absolute;top:0;left:0;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 8px;width:100%;height:100%;text-align:center}.mfp-container:before{display:inline-block;height:100%;content:"";vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;z-index:1045;display:inline-block;margin:0 auto;vertical-align:middle;text-align:left}.mfp-ajax-holder .mfp-content,.mfp-inline-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-arrow,.mfp-close,.mfp-counter,.mfp-preloader{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none!important}.mfp-preloader{position:absolute;top:50%;right:8px;left:8px;z-index:1044;margin-top:-.8em;width:auto;color:#ccc;text-align:center}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-error .mfp-content,.mfp-s-ready .mfp-preloader{display:none}button.mfp-arrow,button.mfp-close{z-index:1046;display:block;overflow:visible;padding:0;outline:0;border:0;background:0 0;box-shadow:none;cursor:pointer;-webkit-appearance:none}button::-moz-focus-inner{padding:0;border:0}.mfp-close{position:absolute;top:0;right:0;padding:0 0 18px 10px;width:44px;height:44px;color:#fff;text-align:center;text-decoration:none;font-style:normal;font-size:28px;font-family:Arial,Baskerville,monospace;line-height:44px;opacity:.65}.mfp-close:focus,.mfp-close:hover{opacity:1}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#333}.mfp-iframe-holder .mfp-close,.mfp-image-holder .mfp-close{right:-6px;padding-right:6px;width:100%;color:#fff;text-align:right}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px}.mfp-arrow{position:absolute;top:50%;margin:-55px 0 0;padding:0;width:90px;height:110px;opacity:.65;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:focus,.mfp-arrow:hover{opacity:1}.mfp-arrow .mfp-a,.mfp-arrow .mfp-b,.mfp-arrow:after,.mfp-arrow:before{position:absolute;top:0;left:0;display:block;margin-top:35px;margin-left:35px;width:0;height:0;border:inset transparent;content:""}.mfp-arrow .mfp-a,.mfp-arrow:after{top:8px;border-top-width:13px;border-bottom-width:13px}.mfp-arrow .mfp-b,.mfp-arrow:before{border-top-width:21px;border-bottom-width:21px}.mfp-arrow-left{left:0}.mfp-arrow-left .mfp-a,.mfp-arrow-left:after{margin-left:31px;border-right:17px solid #fff}.mfp-arrow-left .mfp-b,.mfp-arrow-left:before{margin-left:25px;border-right:27px solid #3f3f3f}.mfp-arrow-right{right:0}.mfp-arrow-right .mfp-a,.mfp-arrow-right:after{margin-left:39px;border-left:17px solid #fff}.mfp-arrow-right .mfp-b,.mfp-arrow-right:before{border-left:27px solid #3f3f3f}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{max-width:900px;width:100%;line-height:0}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{overflow:hidden;padding-top:56.25%;width:100%;height:0}.mfp-iframe-scaler iframe{position:absolute;top:0;left:0;display:block;width:100%;height:100%;background:#000;box-shadow:0 0 8px rgba(0,0,0,.6)}img.mfp-img{display:block;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 auto;padding:40px 0;max-width:100%;width:auto;height:auto;line-height:0}.mfp-figure{line-height:0}.mfp-figure:after{position:absolute;top:40px;right:0;bottom:40px;left:0;z-index:-1;display:block;width:auto;height:auto;background:#444;box-shadow:0 0 8px rgba(0,0,0,.6);content:""}.mfp-figure small{display:block;color:#bdbdbd;font-size:12px;line-height:14px}.mfp-bottom-bar{position:absolute;top:100%;left:0;margin-top:-36px;width:100%;cursor:auto}.mfp-title{padding-right:36px;color:#f3f3f3;text-align:left;word-wrap:break-word;line-height:18px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width:800px) and (orientation:landscape),screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-right:0;padding-left:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{position:fixed;top:auto;bottom:0;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:3px 5px;background:rgba(0,0,0,.6)}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{top:3px;right:5px}.mfp-img-mobile .mfp-close{position:fixed;top:0;right:0;padding:0;width:35px;height:35px;background:rgba(0,0,0,.6);text-align:center;line-height:35px}}@media all and (max-width:900px){.mfp-arrow{-webkit-transform:scale(0.75);-ms-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0;-ms-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;-ms-transform-origin:100%;transform-origin:100%}.mfp-container{padding-right:6px;padding-left:6px}}.mfp-ie7 .mfp-img{padding:0}.mfp-ie7 .mfp-bottom-bar{left:50%;margin-top:5px;margin-left:-300px;padding-bottom:5px;width:600px}.mfp-ie7 .mfp-container{padding:0}.mfp-ie7 .mfp-content{padding-top:44px}.mfp-ie7 .mfp-close{top:0;right:0;padding-top:0}.mfp-fade.mfp-bg{opacity:0;-webkit-transition:all .2s ease-out;transition:all .2s ease-out}.mfp-fade.mfp-bg.mfp-ready{opacity:.8}.mfp-fade.mfp-bg.mfp-removing{opacity:0}.mfp-fade.mfp-wrap .mfp-content{opacity:0;-webkit-transition:all .15s ease-out;transition:all .15s ease-out;-webkit-transform:translateX(-50px);-ms-transform:translateX(-50px);transform:translateX(-50px)}.mfp-fade.mfp-wrap.mfp-ready .mfp-content{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.mfp-fade.mfp-wrap.mfp-removing .mfp-content{opacity:0;-webkit-transform:translateX(50px);-ms-transform:translateX(50px);transform:translateX(50px)}.simple-pace{pointer-events:none;-webkit-pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.simple-pace-inactive{display:none}.simple-pace .simple-pace-progress{position:fixed;top:0;left:0;z-index:2000;overflow:hidden;height:3px;background-color:#939595;-webkit-transition:width .5s;transition:width .5s}.simple-pace .simple-pace-progress-inner{position:absolute;top:0;right:-32px;bottom:0;left:0;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.3)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.3)),color-stop(0.75,rgba(255,255,255,.3)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);background-size:32px 32px;-webkit-animation:simple-pace-stripe-animation 500ms linear infinite;-ms-animation:simple-pace-stripe-animation 500ms linear infinite;animation:simple-pace-stripe-animation 500ms linear infinite}@-webkit-keyframes simple-pace-stripe-animation{0%{-webkit-transform:none;transform:none}100%{-webkit-transform:translate(-32px,0);transform:translate(-32px,0)}}@-ms-keyframes simple-pace-stripe-animation{0%{-ms-transform:none;transform:none}100%{-ms-transform:translate(-32px,0);transform:translate(-32px,0)}}@keyframes simple-pace-stripe-animation{0%{-webkit-transform:none;transform:none}100%{-webkit-transform:translate(-32px,0);transform:translate(-32px,0)}}.inputosaurus-container{display:inline-block;margin:0 5px 0 0;background-color:#fff;font-size:14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;cursor:text}.inputosaurus-container li{display:block;float:left;overflow:hidden;border-radius:2px;box-shadow:0 1px 0 rgba(255,255,255,.75) inset;-ms-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;cursor:default;-o-text-overflow:ellipsis}.inputosaurus-container li a{padding:1px;outline:0;text-decoration:none}.inputosaurus-container .inputosaurus-input{border:none;background-color:#fff;box-shadow:none}.inputosaurus-container .inputosaurus-input input{margin:0;padding:0 0 1px 1px;width:25px;outline:0;box-shadow:none;color:#555;font-size:14px;line-height:20px}.inputosaurus-container .inputosaurus-input input:hover{box-shadow:none}.inputosaurus-input-hidden{display:none}.flag-wrapper{display:inline-block;width:24px;height:16px}.flag{display:inline-block;width:16px;height:11px;background:url(flags.png) no-repeat}.flag.flag-en,.flag.flag-en-us{background-position:-144px -154px}.flag.flag-en-gb,.flag.flag-en-uk{background-position:-176px -44px}.flag.flag-en-ca{background-position:-48px -22px}.flag.flag-nl,.flag.flag-nl-nl{background-position:-80px -110px}.flag.flag-pl,.flag.flag-pl-pl{background-position:-32px -121px}.flag.flag-ru,.flag.flag-ru-ru{background-position:-224px -121px}.flag.flag-ro,.flag.flag-ro-ro{background-position:-192px -121px}.flag.flag-de,.flag.flag-de-de{background-position:-80px -33px}.flag.flag-it,.flag.flag-it-it{background-position:-208px -66px}.flag.flag-is,.flag.flag-is-is{background-position:-192px -66px}.flag.flag-lv,.flag.flag-lv-lv{background-position:-112px -88px}.flag.flag-hu,.flag.flag-hu-hu{background-position:-32px -66px}.flag.flag-sk,.flag.flag-sk-sk{background-position:-144px -132px}.flag.flag-sl,.flag.flag-sl-si,.flag.flag-sl-sl{background-position:-160px -132px}.flag.flag-ua,.flag.flag-ua-ua,.flag.flag-uk-ua{background-position:-96px -154px}.flag.flag-nb,.flag.flag-nb-no,.flag.flag-no{background-position:-96px -110px}.flag.flag-fr,.flag.flag-fr-ca,.flag.flag-fr-fr{background-position:-144px -44px}.flag.flag-es,.flag.flag-es-es,.flag.flag-es-la{background-position:-16px -44px}.flag.flag-ja,.flag.flag-ja-jp,.flag.flag-jp{background-position:-16px -77px}.flag.flag-ko-kr{background-position:-144px -77px}.flag.flag-pt,.flag.flag-pt-pt{background-position:-112px -121px}.flag.flag-pt-br{background-position:-192px -11px}.flag.flag-tr,.flag.flag-tr-tr{background-position:-16px -154px}.flag.flag-cn,.flag.flag-zh-cn,.flag.flag-zh-hk,.flag.flag-zh-tw{background-position:-208px -22px}.clearfix:after,.clearfix:before{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{border:0;background-color:transparent;color:transparent;text-shadow:none;font:0/0 a}.input-block-level{display:block;-moz-box-sizing:border-box;box-sizing:border-box;min-height:30px;width:100%}body{color:#333;font-size:14px;line-height:20px}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{border-radius:6px}.img-polaroid{padding:4px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.1)}.img-circle{border-radius:500px}.row{margin-left:-20px}.row:after,.row:before{display:table;content:"";line-height:0}.row:after{clear:both}[class*=span]{float:left;margin-left:20px}.container,.navbar-fixed-bottom .container,.navbar-fixed-top .container,.navbar-static-top .container,.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%}.row-fluid:after,.row-fluid:before{display:table;content:"";line-height:0}.row-fluid:after{clear:both}.row-fluid [class*=span]{display:block;float:left;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:2.12765957%;min-height:30px;width:100%}.row-fluid [class*=span]:first-child{margin-left:0}.row-fluid .span12{width:100%}.row-fluid .span11{width:91.4893617%}.row-fluid .span10{width:82.9787234%}.row-fluid .span9{width:74.46808511%}.row-fluid .span8{width:65.95744681%}.row-fluid .span7{width:57.44680851%}.row-fluid .span6{width:48.93617021%}.row-fluid .span5{width:40.42553191%}.row-fluid .span4{width:31.91489362%}.row-fluid .span3{width:23.40425532%}.row-fluid .span2{width:14.89361702%}.row-fluid .span1{width:6.38297872%}.row-fluid .offset12{margin-left:104.25531915%}.row-fluid .offset12:first-child{margin-left:102.12765957%}.row-fluid .offset11{margin-left:95.74468085%}.row-fluid .offset11:first-child{margin-left:93.61702128%}.row-fluid .offset10{margin-left:87.23404255%}.row-fluid .offset10:first-child{margin-left:85.10638298%}.row-fluid .offset9{margin-left:78.72340426%}.row-fluid .offset9:first-child{margin-left:76.59574468%}.row-fluid .offset8{margin-left:70.21276596%}.row-fluid .offset8:first-child{margin-left:68.08510638%}.row-fluid .offset7{margin-left:61.70212766%}.row-fluid .offset7:first-child{margin-left:59.57446809%}.row-fluid .offset6{margin-left:53.19148936%}.row-fluid .offset6:first-child{margin-left:51.06382979%}.row-fluid .offset5{margin-left:44.68085106%}.row-fluid .offset5:first-child{margin-left:42.55319149%}.row-fluid .offset4{margin-left:36.17021277%}.row-fluid .offset4:first-child{margin-left:34.04255319%}.row-fluid .offset3{margin-left:27.65957447%}.row-fluid .offset3:first-child{margin-left:25.53191489%}.row-fluid .offset2{margin-left:19.14893617%}.row-fluid .offset2:first-child{margin-left:17.0212766%}.row-fluid .offset1{margin-left:10.63829787%}.row-fluid .offset1:first-child{margin-left:8.5106383%}.row-fluid [class*=span].hide,[class*=span].hide{display:none}.row-fluid [class*=span].pull-right,[class*=span].pull-right{float:right}.container{margin-right:auto;margin-left:auto}.container:after,.container:before{display:table;content:"";line-height:0}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px}.container-fluid:after,.container-fluid:before{display:table;content:"";line-height:0}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-weight:200;font-size:20px;line-height:30px}small{font-size:85%}strong{font-weight:700}em{font-style:italic}cite{font-style:normal}.muted{color:#999}h1,h2,h3,h4,h5,h6{margin:10px 0;color:inherit;font-weight:700;font-family:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#999;font-weight:400;line-height:1}h1{font-size:36px;line-height:40px}h2{font-size:30px;line-height:40px}h3{font-size:24px;line-height:40px}h4{font-size:18px;line-height:20px}h5{font-size:14px;line-height:20px}h6{font-size:12px;line-height:20px}h1 small{font-size:24px}h2 small{font-size:18px}h3 small,h4 small{font-size:14px}.page-header{margin:20px 0 30px;padding-bottom:9px;border-bottom:1px solid #eee}ol,ul{margin:0 0 10px 25px;padding:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}li{line-height:20px}ol.unstyled,ul.unstyled{margin-left:0;list-style:none}dl{margin-bottom:20px}dd,dt{line-height:20px}dt{font-weight:700}dd{margin-left:10px}.dl-horizontal dt{float:left;clear:left;overflow:hidden;width:120px;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:130px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title]{border-bottom:1px dotted #999;cursor:help}abbr.initialism{text-transform:uppercase;font-size:90%}blockquote{margin:0 0 20px;padding:0 0 0 15px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-weight:300;font-size:16px;line-height:25px}blockquote small{display:block;color:#999;line-height:20px}blockquote small:before{content:"\2014 \00A0"}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:""}blockquote.pull-right small:after{content:"\00A0 \2014"}blockquote:after,blockquote:before,q:after,q:before{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;border-radius:3px;color:#333;font-size:12px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;border:1px solid #e1e1e8;background-color:#f7f7f9;color:#d14}pre{display:block;margin:0 0 10px;padding:9.5px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;background-color:#f5f5f5;white-space:pre-wrap;word-wrap:break-word;word-break:break-all;font-size:13px;line-height:20px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;border:0;background-color:transparent;color:inherit}.pre-scrollable{overflow-y:scroll;max-height:340px}form{margin:0 0 20px}fieldset{margin:0;padding:0;border:0}legend{display:block;margin-bottom:20px;padding:0;width:100%;border:0;border-bottom:1px solid #e5e5e5;color:#333;font-size:21px;line-height:40px}legend small{color:#999;font-size:15px}button,input,label,select,textarea{font-weight:400;font-size:14px;line-height:20px}button,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}.uneditable-input,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{display:inline-block;margin-bottom:9px;padding:4px 6px;height:20px;border-radius:3px;color:#555;font-size:14px;line-height:20px}input,textarea{width:210px}textarea{height:auto}.uneditable-input,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],textarea{border:1px solid #ccc;background-color:#fff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}.uneditable-input:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,textarea:focus{outline:0;border-color:rgba(82,168,236,.8);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type=checkbox],input[type=radio]{margin:4px 0 0;line-height:normal;cursor:pointer}input[type=button],input[type=checkbox],input[type=file],input[type=image],input[type=radio],input[type=reset],input[type=submit]{width:auto}input[type=file],select{height:30px;line-height:30px}select{background-color:#fff}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus,select:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.uneditable-input,.uneditable-textarea{border-color:#ccc;background-color:#fcfcfc;box-shadow:inset 0 1px 2px rgba(0,0,0,.025);color:#999;cursor:not-allowed}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.checkbox,.radio{padding-left:18px;min-height:18px}.checkbox input[type=checkbox],.radio input[type=radio]{float:left;margin-left:-18px}.controls>.checkbox:first-child,.controls>.radio:first-child{padding-top:5px}.checkbox.inline,.radio.inline{display:inline-block;margin-bottom:0;padding-top:5px;vertical-align:middle}.checkbox.inline+.checkbox.inline,.radio.inline+.radio.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}.row-fluid .uneditable-input[class*=span],.row-fluid input[class*=span],.row-fluid select[class*=span],.row-fluid textarea[class*=span],.uneditable-input[class*=span],input[class*=span],select[class*=span],textarea[class*=span]{float:none;margin-left:0}.input-append .uneditable-input[class*=span],.input-append input[class*=span],.input-prepend .uneditable-input[class*=span],.input-prepend input[class*=span],.row-fluid .input-append [class*=span],.row-fluid .input-prepend [class*=span],.row-fluid .uneditable-input[class*=span],.row-fluid input[class*=span],.row-fluid select[class*=span],.row-fluid textarea[class*=span]{display:inline-block}.uneditable-input,input,textarea{margin-left:0}.controls-row [class*=span]+[class*=span]{margin-left:20px}.uneditable-input.span12,input.span12,textarea.span12{width:926px}.uneditable-input.span11,input.span11,textarea.span11{width:846px}.uneditable-input.span10,input.span10,textarea.span10{width:766px}.uneditable-input.span9,input.span9,textarea.span9{width:686px}.uneditable-input.span8,input.span8,textarea.span8{width:606px}.uneditable-input.span7,input.span7,textarea.span7{width:526px}.uneditable-input.span6,input.span6,textarea.span6{width:446px}.uneditable-input.span5,input.span5,textarea.span5{width:366px}.uneditable-input.span4,input.span4,textarea.span4{width:286px}.uneditable-input.span3,input.span3,textarea.span3{width:206px}.uneditable-input.span2,input.span2,textarea.span2{width:126px}.uneditable-input.span1,input.span1,textarea.span1{width:46px}.controls-row:after,.controls-row:before{display:table;content:"";line-height:0}.controls-row:after{clear:both}.controls-row [class*=span]{float:left}input[disabled],input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{background-color:#eee;cursor:not-allowed}input[type=checkbox][disabled],input[type=checkbox][readonly],input[type=radio][disabled],input[type=radio][readonly]{background-color:transparent}.control-group.warning .help-block,.control-group.warning .help-inline,.control-group.warning>label{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);color:#c09853}.control-group.warning .checkbox:focus,.control-group.warning .radio:focus,.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e}.control-group.warning .input-append .add-on,.control-group.warning .input-prepend .add-on{border-color:#c09853;background-color:#fcf8e3;color:#c09853}.control-group.error .help-block,.control-group.error .help-inline,.control-group.error>label{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);color:#b94a48}.control-group.error .checkbox:focus,.control-group.error .radio:focus,.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392}.control-group.error .input-append .add-on,.control-group.error .input-prepend .add-on{border-color:#b94a48;background-color:#f2dede;color:#b94a48}.control-group.success .help-block,.control-group.success .help-inline,.control-group.success>label{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);color:#468847}.control-group.success .checkbox:focus,.control-group.success .radio:focus,.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b}.control-group.success .input-append .add-on,.control-group.success .input-prepend .add-on{border-color:#468847;background-color:#dff0d8;color:#468847}input:focus:required:invalid,select:focus:required:invalid,textarea:focus:required:invalid{border-color:#ee5f5b;color:#b94a48}input:focus:required:invalid:focus,select:focus:required:invalid:focus,textarea:focus:required:invalid:focus{border-color:#e9322d;box-shadow:0 0 6px #f8b9b7}.form-actions{margin-top:20px;margin-bottom:20px;padding:19px 20px 20px;border-top:1px solid #e5e5e5;background-color:#f5f5f5}.form-actions:after,.form-actions:before{display:table;content:"";line-height:0}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;padding-left:5px;vertical-align:middle}.input-append,.input-prepend{margin-bottom:5px;white-space:nowrap;font-size:0}.input-append .uneditable-input,.input-append input,.input-append select,.input-prepend .uneditable-input,.input-prepend input,.input-prepend select{position:relative;margin-bottom:0;border-radius:0 3px 3px 0;vertical-align:top;font-size:14px}.input-append .uneditable-input:focus,.input-append input:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-prepend input:focus,.input-prepend select:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;padding:4px 5px;min-width:16px;width:auto;height:20px;border:1px solid #ccc;background-color:#eee;text-align:center;text-shadow:0 1px 0 #fff;font-weight:400;font-size:14px;line-height:20px}.input-append .add-on,.input-append .btn,.input-prepend .add-on,.input-prepend .btn{margin-left:-1px;border-radius:0;vertical-align:top}.input-append .active,.input-prepend .active{border-color:#46a546;background-color:#a9dba9}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-append .uneditable-input,.input-append input,.input-append select,.input-prepend .add-on:first-child,.input-prepend .btn:first-child{border-radius:3px 0 0 3px}.input-append .add-on:last-child,.input-append .btn:last-child{border-radius:0 3px 3px 0}.input-prepend.input-append .uneditable-input,.input-prepend.input-append input,.input-prepend.input-append select{border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;border-radius:0 3px 3px 0}input.search-query{margin-bottom:0;padding-right:14px;padding-left:14px;border-radius:15px}.form-search .input-append .search-query{border-radius:14px 0 0 14px}.form-search .input-append .btn,.form-search .input-prepend .search-query{border-radius:0 14px 14px 0}.form-search .input-prepend .btn{border-radius:14px 0 0 14px}.form-horizontal .help-inline,.form-horizontal .input-append,.form-horizontal .input-prepend,.form-horizontal .uneditable-input,.form-horizontal input,.form-horizontal select,.form-horizontal textarea,.form-inline .help-inline,.form-inline .input-append,.form-inline .input-prepend,.form-inline .uneditable-input,.form-inline input,.form-inline select,.form-inline textarea,.form-search .help-inline,.form-search .input-append,.form-search .input-prepend,.form-search .uneditable-input,.form-search input,.form-search select,.form-search textarea{display:inline-block;margin-bottom:0;vertical-align:middle}.form-horizontal .hide,.form-inline .hide,.form-search .hide{display:none}.form-inline .btn-group,.form-inline label,.form-search .btn-group,.form-search label{display:inline-block}.form-inline .input-append,.form-inline .input-prepend,.form-search .input-append,.form-search .input-prepend{margin-bottom:0}.form-inline .checkbox,.form-inline .radio,.form-search .checkbox,.form-search .radio{margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio],.form-search .checkbox input[type=checkbox],.form-search .radio input[type=radio]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px}.form-horizontal .control-group:after,.form-horizontal .control-group:before{display:table;content:"";line-height:0}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;padding-top:5px;width:140px;text-align:right}.form-horizontal .controls{margin-left:160px}.form-horizontal .help-block{margin-top:10px;margin-bottom:0}.form-horizontal .form-actions{padding-left:160px}table{max-width:100%;border-spacing:0;border-collapse:collapse;background-color:transparent}.table{margin-bottom:20px;width:100%}.table td,.table th{padding:8px;border-top:1px solid #ddd;vertical-align:top;text-align:left;line-height:20px}.table th{font-weight:700}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child td,.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child td,.table thead:first-child tr:first-child th{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table-condensed td,.table-condensed th{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;border-left:0;border-radius:4px}.table-bordered td,.table-bordered th{border-left:1px solid #ddd}.table-bordered caption+tbody tr:first-child td,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+thead tr:first-child th,.table-bordered tbody:first-child tr:first-child td,.table-bordered tbody:first-child tr:first-child th,.table-bordered thead:first-child tr:first-child th{border-top:0}.table-bordered tbody:first-child tr:first-child td:first-child,.table-bordered thead:first-child tr:first-child th:first-child{-moz-border-radius-topleft:4px;border-top-left-radius:4px}.table-bordered tbody:first-child tr:first-child td:last-child,.table-bordered thead:first-child tr:first-child th:last-child{-moz-border-radius-topright:4px;border-top-right-radius:4px}.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot:last-child tr:last-child td:first-child,.table-bordered thead:last-child tr:last-child th:first-child{border-radius:0 0 0 4px;-moz-border-radius-bottomleft:4px}.table-bordered tbody:last-child tr:last-child td:last-child,.table-bordered tfoot:last-child tr:last-child td:last-child,.table-bordered thead:last-child tr:last-child th:last-child{-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered caption+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child{-moz-border-radius-topleft:4px;border-top-left-radius:4px}.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered caption+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child{border-top-right-radius:4px;-moz-border-right-topleft:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:#f5f5f5}.row-fluid table [class*=span],table [class*=span]{display:table-cell;float:none;margin-left:0}table .span1{float:none;margin-left:0;width:44px}table .span2{float:none;margin-left:0;width:124px}table .span3{float:none;margin-left:0;width:204px}table .span4{float:none;margin-left:0;width:284px}table .span5{float:none;margin-left:0;width:364px}table .span6{float:none;margin-left:0;width:444px}table .span7{float:none;margin-left:0;width:524px}table .span8{float:none;margin-left:0;width:604px}table .span9{float:none;margin-left:0;width:684px}table .span10{float:none;margin-left:0;width:764px}table .span11{float:none;margin-left:0;width:844px}table .span12{float:none;margin-left:0;width:924px}table .span13{float:none;margin-left:0;width:1004px}table .span14{float:none;margin-left:0;width:1084px}table .span15{float:none;margin-left:0;width:1164px}table .span16{float:none;margin-left:0;width:1244px}table .span17{float:none;margin-left:0;width:1324px}table .span18{float:none;margin-left:0;width:1404px}table .span19{float:none;margin-left:0;width:1484px}table .span20{float:none;margin-left:0;width:1564px}table .span21{float:none;margin-left:0;width:1644px}table .span22{float:none;margin-left:0;width:1724px}table .span23{float:none;margin-left:0;width:1804px}table .span24{float:none;margin-left:0;width:1884px}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.info td{background-color:#d9edf7}.dropdown,.dropup{position:relative}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";vertical-align:top}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;margin:2px 0 0;padding:5px 0;min-width:160px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);background-color:#fff;background-clip:padding-box;list-style:none}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{overflow:hidden;margin:9px 1px;height:1px;border-bottom:1px solid #fff;background-color:#e5e5e5}.dropdown-menu a{display:block;clear:both;padding:3px 20px;color:#333;white-space:nowrap;font-weight:400;line-height:20px}.dropdown-menu li>a:focus,.dropdown-menu li>a:hover,.dropdown-submenu:hover>a{background-color:#0081c2;background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;color:#fff;text-decoration:none;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{outline:0;background-color:#0081c2;background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;color:#fff;text-decoration:none;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{background-color:transparent;text-decoration:none;cursor:default}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:"\2191"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:0 6px 6px}.dropdown-submenu:hover .dropdown-menu{display:block}.dropdown-submenu>a:after{display:block;float:right;margin-top:5px;margin-right:-10px;width:0;height:0;border-width:5px 0 5px 5px;border-style:solid;border-color:transparent;border-left-color:#ccc;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{margin-top:2px;border-radius:4px}.well{margin-bottom:20px;padding:19px;min-height:20px;border:1px solid #e3e3e3;border-radius:4px;background-color:#f5f5f5;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-large{padding:24px;border-radius:6px}.well-small{padding:9px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;overflow:hidden;height:0;-webkit-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;color:#000;text-shadow:0 1px 0 #fff;font-weight:700;font-size:20px;line-height:20px;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;opacity:.4;filter:alpha(opacity=40);cursor:pointer}button.close{padding:0;border:0;background:0 0;cursor:pointer;-webkit-appearance:none}.btn{display:inline-block;margin-bottom:0;padding:4px 14px;border:1px solid #bbb;border-radius:4px;background-color:#f5f5f5;background-repeat:repeat-x;box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);color:#333;vertical-align:middle;text-align:center;font-size:14px;line-height:20px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:pointer}.btn.active,.btn.disabled,.btn:active,.btn:hover,.btn[disabled]{background-color:#e6e6e6;color:#333}.btn:hover{background-color:#e6e6e6;background-position:0 -15px;color:#333;text-decoration:none;-webkit-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.active,.btn:active{outline:0;background-color:#e6e6e6;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{background-color:#e6e6e6;background-image:none;filter:alpha(opacity=65);cursor:default}.btn-large{padding:9px 14px;border-radius:5px;font-size:16px;line-height:normal}.btn-large [class^=icon-]{margin-top:2px}.btn-small{padding:3px 9px;font-size:12px;line-height:18px}.btn-small [class^=icon-]{margin-top:0}.btn-mini{padding:2px 6px;font-size:11px;line-height:16px}.btn-block{display:block;-moz-box-sizing:border-box;box-sizing:border-box;padding-right:0;padding-left:0;width:100%}.btn-block+.btn-block{margin-top:5px}.btn-primary{border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);background-color:#006dcc;background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary.active,.btn-primary.disabled,.btn-primary:active,.btn-primary:hover,.btn-primary[disabled]{background-color:#04c;color:#fff}.btn-warning{border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);background-color:#faa732;background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning.active,.btn-warning.disabled,.btn-warning:active,.btn-warning:hover,.btn-warning[disabled]{background-color:#f89406;color:#fff}.btn-danger{border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);background-color:#da4f49;background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger.active,.btn-danger.disabled,.btn-danger:active,.btn-danger:hover,.btn-danger[disabled]{background-color:#bd362f;color:#fff}.btn-success{border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);background-color:#5bb75b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success.active,.btn-success.disabled,.btn-success:active,.btn-success:hover,.btn-success[disabled]{background-color:#51a351;color:#fff}.btn-info{border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);background-color:#49afcd;background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info.active,.btn-info.disabled,.btn-info:active,.btn-info:hover,.btn-info[disabled]{background-color:#2f96b4;color:#fff}.btn-inverse{border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);background-color:#363636;background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse.active,.btn-inverse.disabled,.btn-inverse:active,.btn-inverse:hover,.btn-inverse[disabled]{background-color:#222;color:#fff}button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0}.btn-link,.btn-link:active{background-color:transparent;background-image:none;box-shadow:none}.btn-link{border-color:transparent;border-radius:0;color:#08c;cursor:pointer}.btn-link:hover{background-color:transparent;color:#005580;text-decoration:underline}.btn-group{position:relative;white-space:nowrap;font-size:0}.btn-toolbar{font-size:0}.btn-toolbar .btn-group{display:inline-block}.btn-toolbar .btn+.btn,.btn-toolbar .btn+.btn-group,.btn-toolbar .btn-group+.btn{margin-left:5px}.btn-group>.btn{position:relative;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu{font-size:14px}.btn-group>.btn-mini{font-size:11px}.btn-group>.btn-small{font-size:12px}.btn-group>.btn-large{font-size:16px}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn.large:first-child{margin-left:0}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px;box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn-group>.btn-mini+.dropdown-toggle{padding-right:5px;padding-left:5px}.btn-group>.btn-large+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret,.btn-mini .caret,.btn-small .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-top:0;border-bottom:5px solid #000}.btn-danger .caret,.btn-info .caret,.btn-inverse .caret,.btn-primary .caret,.btn-success .caret,.btn-warning .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block}.btn-group-vertical .btn{display:block;float:none;width:100%;border-radius:0}.btn-group-vertical .btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical .btn:first-child{border-radius:4px 4px 0 0}.btn-group-vertical .btn:last-child{border-radius:0 0 4px 4px}.btn-group-vertical .btn-large:first-child{border-radius:6px 6px 0 0}.btn-group-vertical .btn-large:last-child{border-radius:0 0 6px 6px}.alert{margin-bottom:20px;padding:8px 35px 8px 14px;border:1px solid #fbeed5;border-radius:4px;background-color:#fcf8e3;color:#c09853;text-shadow:0 1px 0 rgba(255,255,255,.5)}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{border-color:#d6e9c6;background-color:#dff0d8;color:#468847}.alert-danger,.alert-error{border-color:#eed3d7;background-color:#f2dede;color:#b94a48}.alert-info{border-color:#bce8f1;background-color:#d9edf7;color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{background-color:#eee;text-decoration:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;color:#999;text-transform:uppercase;text-shadow:0 1px 0 rgba(255,255,255,.5);font-weight:700;font-size:11px;line-height:20px}.nav li+.nav-header{margin-top:9px}.nav-list{margin-bottom:0;padding-right:15px;padding-left:15px}.nav-list .nav-header,.nav-list>li>a{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover{background-color:#08c;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.2)}.nav-list [class^=icon-]{margin-right:2px}.nav-list .divider{overflow:hidden;margin:9px 1px;height:1px;border-bottom:1px solid #fff;background-color:#e5e5e5}.nav-pills:after,.nav-pills:before,.nav-tabs:after,.nav-tabs:before{display:table;content:"";line-height:0}.nav-pills:after,.nav-tabs:after{clear:both}.nav-pills>li,.nav-tabs>li{float:left}.nav-pills>li>a,.nav-tabs>li>a{margin-right:2px;padding-right:12px;padding-left:12px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;border:1px solid transparent;border-radius:4px 4px 0 0;line-height:20px}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{border:1px solid #ddd;border-bottom-color:transparent;background-color:#fff;color:#555;cursor:default}.nav-pills>li>a{margin-top:2px;margin-bottom:2px;padding-top:8px;padding-bottom:8px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover{background-color:#08c;color:#fff}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{border-top-left-radius:4px;border-top-right-radius:4px}.nav-tabs.nav-stacked>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover{cursor:pointer}.nav-pills .open .dropdown-toggle,.nav-tabs .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{border-color:#999;background-color:#999;color:#fff}.nav li.dropdown.open .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open.active .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable:after,.tabbable:before{display:table;content:"";line-height:0}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-left>.nav-tabs,.tabs-right>.nav-tabs{border-bottom:0}.pill-content>.pill-pane,.tab-content>.tab-pane{display:none}.pill-content>.active,.tab-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{margin-right:0;margin-bottom:3px;min-width:74px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover{background-color:transparent;text-decoration:none;cursor:default}.navbar{overflow:visible;margin-bottom:20px;color:#555}.navbar-inner{padding-right:20px;padding-left:20px;min-height:40px;border:1px solid #d4d4d4;border-radius:4px;background-color:#fafafa;background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;box-shadow:0 1px 4px rgba(0,0,0,.065);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0)}.navbar .container{width:auto}.nav-collapse.collapse{height:auto}.navbar .brand{display:block;float:left;margin-left:-20px;padding:10px 20px;color:#555;text-shadow:0 1px 0 #fff;font-weight:200;font-size:20px}.navbar .brand:hover{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px}.navbar-link{color:#555}.navbar-link:hover{color:#333}.navbar .divider-vertical{margin:0 9px;height:40px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:6px}.navbar .btn-group .btn{margin:0}.navbar-form{margin-bottom:0}.navbar-form:after,.navbar-form:before{display:table;content:"";line-height:0}.navbar-form:after{clear:both}.navbar-form .checkbox,.navbar-form .radio,.navbar-form input,.navbar-form select{margin-top:5px}.navbar-form .btn,.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0}.navbar-form input[type=checkbox],.navbar-form input[type=image],.navbar-form input[type=radio]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;border-radius:15px;font-weight:400;font-size:13px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1}.navbar-static-top{position:static;margin-bottom:0;width:100%}.navbar-static-top .navbar-inner{border-radius:0}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-bottom .navbar-inner,.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border:0}.navbar-fixed-bottom .navbar-inner,.navbar-fixed-top .navbar-inner{padding-right:0;padding-left:0;border-radius:0}.navbar-fixed-bottom .container,.navbar-fixed-top .container,.navbar-static-top .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{box-shadow:inset 0 -1px 0 rgba(0,0,0,.1),0 1px 10px rgba(0,0,0,.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{box-shadow:inset 0 1px 0 rgba(0,0,0,.1),0 -1px 10px rgba(0,0,0,.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px;color:#555;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333;text-decoration:none}.navbar .nav>.active>a,.navbar .nav>.active>a:focus,.navbar .nav>.active>a:hover{background-color:#e5e5e5;box-shadow:inset 0 3px 8px rgba(0,0,0,.125);color:#555;text-decoration:none}.navbar .btn-navbar{display:none;float:right;margin-right:5px;margin-left:5px;padding:7px 10px;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);background-color:#ededed;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar:active,.navbar .btn-navbar:hover,.navbar .btn-navbar[disabled]{background-color:#e5e5e5;color:#fff}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;border-radius:1px;background-color:#f5f5f5;box-shadow:0 1px 0 rgba(0,0,0,.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);border-left:7px solid transparent;content:""}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:""}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);border-bottom:0}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle,.navbar .nav li.dropdown.open>.dropdown-toggle{background-color:#e5e5e5;color:#555}.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .nav>li>.dropdown-menu.pull-right,.navbar .pull-right>li>.dropdown-menu{right:0;left:auto}.navbar .nav>li>.dropdown-menu.pull-right:before,.navbar .pull-right>li>.dropdown-menu:before{right:12px;left:auto}.navbar .nav>li>.dropdown-menu.pull-right:after,.navbar .pull-right>li>.dropdown-menu:after{right:13px;left:auto}.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu,.navbar .pull-right>li>.dropdown-menu .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;border-radius:6px 0 6px 6px}.navbar-inverse{color:#999}.navbar-inverse .navbar-inner{border-color:#252525;background-color:#1b1b1b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#fff}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:focus,.navbar-inverse .nav .active>a:hover{background-color:#111;color:#fff}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open>.dropdown-toggle{background-color:#111;color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{border-color:#111;background-color:#515151;box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);color:#fff;-webkit-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query.focused,.navbar-inverse .navbar-search .search-query:focus{padding:5px 15px;outline:0;border:0;background-color:#fff;box-shadow:0 0 3px rgba(0,0,0,.15);color:#333;text-shadow:0 1px 0 #fff}.navbar-inverse .btn-navbar{border-color:#040404 #040404 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);background-color:#0e0e0e;background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar[disabled]{background-color:#040404;color:#fff}.breadcrumb{margin:0 0 20px;padding:8px 15px;border-radius:4px;background-color:#f5f5f5;list-style:none}.breadcrumb li{display:inline-block;text-shadow:0 1px 0 #fff}.breadcrumb .divider{padding:0 5px;color:#ccc}.breadcrumb .active{color:#999}.modal-open .dropdown-menu{z-index:2050}.modal-open .popover{z-index:2060}.modal-open .tooltip{z-index:2080}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;margin:-250px 0 0 -280px;width:560px;border:1px solid #999;border:1px solid rgba(0,0,0,.3);border-radius:6px;background-color:#fff;background-clip:padding-box;box-shadow:0 3px 7px rgba(0,0,0,.3)}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{overflow-y:auto;padding:15px;max-height:400px}.modal-form{margin-bottom:0}.modal-footer{margin-bottom:0;padding:14px 15px 15px;border-top:1px solid #ddd;border-radius:0 0 6px 6px;background-color:#f5f5f5;box-shadow:inset 0 1px 0 #fff;text-align:right}.modal-footer:after,.modal-footer:before{display:table;content:"";line-height:0}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.tooltip{position:absolute;display:block;visibility:visible;padding:5px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{padding:3px 8px;max-width:200px;border-radius:4px;background-color:#333;color:#eee;text-align:center;text-decoration:none}.tooltip-arrow{position:absolute;width:0;height:0;border-style:solid;border-color:transparent}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#333}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#333}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#333}.popover{position:absolute;top:0;left:0;display:none;padding:1px;width:236px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;background-color:#fff;background-clip:padding-box;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-bottom:10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-right:10px}.popover-title{margin:0;padding:8px 14px;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0;background-color:#f7f7f7;font-weight:400;font-size:14px;line-height:18px}.popover-content{padding:9px 14px}.popover-content ol,.popover-content p,.popover-content ul{margin-bottom:0}.popover .arrow,.popover .arrow:after{position:absolute;display:inline-block;width:0;height:0;border-style:solid;border-color:transparent}.popover .arrow:after{z-index:-1;content:""}.popover.top .arrow{bottom:-10px;left:50%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#fff}.popover.top .arrow:after{bottom:-1px;left:-11px;border-width:11px 11px 0;border-top-color:rgba(0,0,0,.25)}.popover.right .arrow{top:50%;left:-10px;margin-top:-10px;border-width:10px 10px 10px 0;border-right-color:#fff}.popover.right .arrow:after{bottom:-11px;left:-1px;border-width:11px 11px 11px 0;border-right-color:rgba(0,0,0,.25)}.popover.bottom .arrow{top:-10px;left:50%;margin-left:-10px;border-width:0 10px 10px;border-bottom-color:#fff}.popover.bottom .arrow:after{top:-1px;left:-11px;border-width:0 11px 11px;border-bottom-color:rgba(0,0,0,.25)}.popover.left .arrow{top:50%;right:-10px;margin-top:-10px;border-width:10px 0 10px 10px;border-left-color:#fff}.popover.left .arrow:after{right:-1px;bottom:-11px;border-width:11px 0 11px 11px;border-left-color:rgba(0,0,0,.25)}.badge,.label{background-color:#999;color:#fff;vertical-align:baseline;text-shadow:0 -1px 0 rgba(0,0,0,.25);white-space:nowrap;font-weight:700;font-size:11.84px;line-height:14px}.label{padding:1px 4px 2px;border-radius:3px}.badge{padding:1px 9px 2px;border-radius:9px}a.badge:hover,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.badge-important,.label-important{background-color:#b94a48}.badge-important[href],.label-important[href]{background-color:#953b39}.badge-warning,.label-warning{background-color:#f89406}.badge-warning[href],.label-warning[href]{background-color:#c67605}.badge-success,.label-success{background-color:#468847}.badge-success[href],.label-success[href]{background-color:#356635}.badge-info,.label-info{background-color:#3a87ad}.badge-info[href],.label-info[href]{background-color:#2d6987}.badge-inverse,.label-inverse{background-color:#333}.badge-inverse[href],.label-inverse[href]{background-color:#1a1a1a}.btn .badge,.btn .label{position:relative;top:-1px}.btn-mini .badge,.btn-mini .label{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;margin-bottom:20px;height:20px;border-radius:4px;background-color:#f7f7f7;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0)}.progress .bar{float:left;-moz-box-sizing:border-box;box-sizing:border-box;width:0;height:100%;background-color:#0e90d2;background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,.25);font-size:12px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress .bar-danger,.progress-danger .bar{background-color:#dd514c;background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress .bar-success,.progress-success .bar{background-color:#5eb95e;background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0)}.progress-striped .bar-success,.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress .bar-info,.progress-info .bar{background-color:#4bb1cf;background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress .bar-warning,.progress-warning .bar{background-color:#faa732;background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0)}.progress-striped .bar-warning,.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}[class*=" icon-"],[class^=icon-]{display:inline-block;width:16px;height:16px;vertical-align:text-top;font-size:16px;line-height:17px}.icon-folder,.icon-folder-add,.icon-list{margin-top:-1px;margin-left:-1px;width:17px;font-size:18px;line-height:18px}.iconsize24{font-size:24px;line-height:24px}.g-ui-menu .e-item:hover [class*=" icon-"],.g-ui-menu .e-item:hover [class^=icon-],.icon-white,.nav>.active>a>[class*=" icon-"],.nav>.active>a>[class^=icon-]{color:#fff}.icon-none{background-image:none!important}.icon-checkbox-checked,.icon-checkbox-partial,.icon-checkbox-unchecked,.icon-radio-checked,.icon-radio-unchecked{color:#555;font-size:1em;cursor:pointer}.icon-checkbox-checked:active,.icon-checkbox-checked:hover,.icon-checkbox-partial:active,.icon-checkbox-partial:hover,.icon-checkbox-unchecked:active,.icon-checkbox-unchecked:hover,.icon-radio-checked:active,.icon-radio-checked:hover,.icon-radio-unchecked:active,.icon-radio-unchecked:hover{color:#000}.icon-white.icon-checkbox-checked,.icon-white.icon-checkbox-partial,.icon-white.icon-checkbox-unchecked,.icon-white.icon-radio-checked,.icon-white.icon-radio-unchecked{color:#eee}.icon-white.icon-checkbox-checked:active,.icon-white.icon-checkbox-checked:hover,.icon-white.icon-checkbox-partial:active,.icon-white.icon-checkbox-partial:hover,.icon-white.icon-checkbox-unchecked:active,.icon-white.icon-checkbox-unchecked:hover,.icon-white.icon-radio-checked:active,.icon-white.icon-radio-checked:hover,.icon-white.icon-radio-unchecked:active,.icon-white.icon-radio-unchecked:hover{color:#fff}.denied-by-browser,.denied-by-browser .icon-checkbox-checked,.denied-by-browser icon-checkbox-unchecked{cursor:default}.down-mini,.right-mini{width:16px;line-height:20px}@-webkit-keyframes rotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.icon-spinner{width:16px;height:16px}.icon-spinner:before{display:inline-block;margin-top:1px;font-size:16px;line-height:100%;-webkit-transform-origin:8px 8px;-ms-transform-origin:8px 8px;transform-origin:8px 8px}html.no-cssanimations .icon-spinner{background-image:url(images/sync.png);background-repeat:no-repeat;font-family:Arial}html.no-cssanimations .icon-spinner:before{content:""}html.no-cssanimations .icon-spinner.animated{background-image:url(images/sync.gif)}html.cssanimations .icon-spinner.animated:before{-webkit-animation:rotation 1s infinite steps(40);animation:rotation 1s infinite steps(40)}label{cursor:pointer}label.inline{display:inline-block}.legend{display:block;margin-bottom:20px;padding:0;width:100%;border:0;border-bottom:1px solid #e5e5e5;color:#333;font-size:21px;line-height:40px}.legend small{color:#999;font-size:15px}.legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.input-append .uneditable-input,.input-append input,.input-append select{border-radius:3px}select{width:223px}.btn-small.btn-small-small{padding:3px 9px;font-size:11px;line-height:11px}.btn.btn-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn.btn-narrow{padding-right:12px;padding-left:12px}.btn-group.btn-group-custom-margin>.btn+.btn{margin-left:0}.btn-group+.btn-group{margin-left:3px}.btn{padding-right:13px;padding-left:13px;border-color:rgba(0,0,0,.25);background-image:none;text-shadow:0 1px 0 #fff;border-radiu:3px}.btn.disabled,.btn[disabled]{box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);opacity:.75}.btn.btn-dark-disabled-border.disabled,.btn.btn-dark-disabled-border[disabled]{border-color:#aaa}html.rgba.textshadow .btn.btn-danger,html.rgba.textshadow .btn.btn-primary,html.rgba.textshadow .btn.btn-success{text-shadow:0 1px 0 rgba(0,0,0,.3)}.btn-toolbar{margin-top:0;margin-bottom:0}.dropdown-menu{border-radius:0;box-shadow:0 1px 2px rgba(0,0,0,.2)}.tooltip{z-index:2000!important;overflow:hidden;text-overflow:ellipsis;font-size:14px}.tooltip.in{opacity:1}.tooltip .tooltip-inner{padding:5px 10px;max-width:380px;border-radius:2px;text-shadow:0 0 5px rgba(0,0,0,.2)}.tooltip .tooltip-big{padding:0 10px;white-space:nowrap;font-size:18px}.btn-group>.btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{border-top-right-radius:3px;border-bottom-right-radius:3px}.btn-group>.btn.large:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{border-top-right-radius:3px;border-bottom-right-radius:3px}.dropdown.colored-toggle.open .btn.dropdown-toggle{color:#bd362f}.dropdown.colored-toggle.open .btn.dropdown-toggle .caret{border-top-color:#bd362f}.dropdown.colored-toggle.open .btn.dropdown-toggle [class^=icon-]:before{color:#bd362f}input[type=email],input[type=password],input[type=search],input[type=text],textarea{border:1px solid #ccc}input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=text]:focus,textarea:focus{border:1px solid #999;background-color:#fff;box-shadow:none}input[type=email],input[type=password],input[type=search],input[type=text]{height:20px;line-height:20px}select{border:1px solid #ccc}.alert a{text-decoration:underline}.alert.alert-null-left-margin{margin-left:0}.alert.alert-error a{color:#b94a48}.nav-tabs>li>a{color:#555}.popover{z-index:2000}html.no-rgba .modal{border-width:0!important}.modal-backdrop,.modal-backdrop.fade.in{opacity:.1;filter:alpha(opacity=10)}.popups{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1100;overflow:auto}.popups .modal{position:static;z-index:1101;overflow:hidden;margin:5% auto;background-color:transparent;box-shadow:0 5px 80px rgba(0,0,0,.3)}.popups .modal .modal-body{max-height:none;background-color:#fff}.modal.fade{top:0;-webkit-transition:none;transition:none}.modal.fade.in{top:0}.modal.loginAdminContent .modal-body,.modal.loginContent .modal-body{background-color:transparent!important}.picker.modal-dialog-bg,.picker.picker-dialog-bg{z-index:2000!important}.picker.modal-dialog,.picker.picker-dialog{z-index:2001!important}.form-horizontal.long-label .control-group .control-label{width:160px}.form-horizontal.long-label .control-group .controls{margin-left:180px}.control-label.remove-padding-top{padding-top:0}.inputosaurus-container{padding:2px;width:99%;border:1px solid #ccc;border-radius:3px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);line-height:20px;-webkit-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}.inputosaurus-container.inputosaurus-focused{border:1px solid #999;background-color:#fff;box-shadow:none}.inputosaurus-container li{position:relative;z-index:100;margin:2px;padding:2px 15px 2px 5px;max-width:500px;border:1px solid #aaa;background-color:#eee;color:#555;line-height:18px}.inputosaurus-container li.ui-draggable.ui-draggable-dragging{z-index:101}.inputosaurus-container li a{position:absolute;top:1px;right:2px;color:#999;font-size:12px}.inputosaurus-container li a:hover{color:#666}.inputosaurus-container li span{padding-right:3px}.inputosaurus-container li.inputosaurus-required{padding-right:5px}.inputosaurus-container li.inputosaurus-selected{background-color:#ddd}.inputosaurus-container .inputosaurus-input{margin:1px 10px 1px 0;height:22px}.inputosaurus-container .inputosaurus-input input{padding-left:0;height:21px;border:0}.ui-autocomplete{z-index:2000}.inputosaurus-fake-span{position:absolute;top:0;left:-5000px}.cke_plain{z-index:1;overflow:auto;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:10px 0 10px 10px;outline:0;border:0;border-radius:0;background-color:#fff;box-shadow:none;color:#333;white-space:pre-wrap;font-size:13px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;line-height:16px;resize:none}.cke_plain:focus,.cke_source:focus{border:0}.b-compose .cke_chrome{border-right:0;border-bottom:0;border-left:0;box-shadow:none}.cke_wysiwyg_div{padding:10px!important;color:#333;font-size:13px;font-family:arial,sans-serif;line-height:16px}.cke_wysiwyg_div ul{padding-left:40px}.cke_wysiwyg_div ul li{list-style-type:disc!important}.cke_wysiwyg_div ol{padding-left:40px}.cke_wysiwyg_div ol li{list-style-type:decimal!important}.cke_wysiwyg_div pre{margin:0;padding:0;border:none;background:#fff;font-family:Monaco,Menlo,Consolas,"Courier New",monospace}.cke_wysiwyg_div blockquote{margin:5px 0 5px 5px;padding-left:5px;border:0;border-left:solid 2px #444}.cke_wysiwyg_div blockquote *{color:#333;font-size:13px;font-family:arial,sans-serif;line-height:16px}.cke_wysiwyg_div img{vertical-align:bottom}.cke_wysiwyg_div a{color:#00f;text-decoration:underline}.cke_wysiwyg_div a:visited{color:#609}.cke_wysiwyg_div a:active{color:red}.g-ui-user-select-none{standard-user-select:none;touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;webkit-touch-callout:none}.g-ui-user-select-allow{standard-user-select:inherit;touch-callout:inherit;-webkit-user-select:inherit;-moz-user-select:inherit;-ms-user-select:inherit;user-select:inherit;webkit-touch-callout:inherit}.g-ui-clearfix:after,.g-ui-clearfix:before{display:table;content:"";line-height:0}.g-ui-clearfix:after{clear:both}.g-ui-link{color:#369;text-decoration:underline;cursor:pointer}.g-ui-min-height-300{min-height:300px}.g-ui-absolute-reset{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;margin:0;padding:0;border:0}.g-ui-menu{overflow-x:hidden;overflow-y:auto;max-width:300px;max-height:400px}.g-ui-menu .e-link{text-decoration:none;cursor:pointer}.g-ui-menu .e-item.selected>.e-link{background-color:#eee!important}.g-ui-menu .e-item>.e-link:focus,.g-ui-menu .e-item>.e-link:hover{background-color:#555;background-image:none;color:#fff}.g-ui-menu .e-item.disabled>.e-link{background-color:#fff;background-image:none;color:grey;cursor:not-allowed}.g-ui-menu .e-item.disabled [class^=icon-]{color:grey}.g-ui-table{display:table;width:100%}.g-ui-table .e-row{display:table-row}.g-ui-table .e-cell{display:table-cell;vertical-align:top;text-align:left}.g-ui-height-100proc{height:100%}.g-ui-resizable-delimiter-highlight{border:none;border-right:6px solid #aaa}.e-pagenator .e-page{display:inline-block;padding:3px;color:#999;text-decoration:none;font-size:22px;cursor:pointer}.e-pagenator .e-page:hover .e-page-number{color:#555}.e-pagenator .e-page.current .e-page-number{border-bottom:2px solid #000;color:#333;font-size:25px}html.rgba .g-ui-resizable-delimiter-highlight{border-right-color:rgba(0,0,0,.2)}.settings-saved-trigger{display:inline-block;font-size:16px;line-height:17px}.settings-saved-trigger .animated{color:green}.settings-saved-trigger .success{color:green;opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.settings-saved-trigger .error{color:red;opacity:0;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.settings-saved-trigger .visible{opacity:1}.settings-saved-trigger-input.success{border-color:green!important;-webkit-transition:border-color .5s linear;transition:border-color .5s linear}.settings-saved-trigger-input.error{border-color:red!important;-webkit-transition:border-color .5s linear;transition:border-color .5s linear}e-spinner{display:none}html.cssanimations .e-spinner{display:block;margin:5px auto 0;width:100px;text-align:center}html.cssanimations .e-spinner .e-bounce{display:inline-block;margin:0 5px;width:15px;height:15px;border-radius:100%;background-color:#ddd;box-shadow:0 0 3px rgba(0,0,0,.3);-webkit-animation:bouncedelay 1.4s infinite ease-in-out;animation:bouncedelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}html.cssanimations .e-spinner .bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}html.cssanimations .e-spinner .bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}@-webkit-keyframes bouncedelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bouncedelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}html{overflow:hidden;margin:0;padding:0;height:100%;font-family:Arial,Verdana,Geneva,sans-serif}body{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0;padding:0;height:100%;background-color:#e3e3e3;font-family:Arial,Verdana,Geneva,sans-serif;-webkit-touch-callout:none}textarea{resize:none}option:disabled{color:#aaa;cursor:not-allowed}body:before{position:fixed;top:-10px;left:0;z-index:100;width:100%;height:8px;box-shadow:0 0 10px rgba(0,0,0,.6);content:""}*,select:focus{outline:0}html.mobile *{-webkit-tap-highlight-color:transparent}#rl-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}#rl-content{width:100%;height:100%}#rl-center{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;margin:0;padding:0;min-width:600px;min-height:400px;border:0}#rl-top{position:absolute;top:0;right:0;bottom:0;bottom:auto;left:0;z-index:0;z-index:2;margin:0;padding:0;border:0}#rl-bottom{position:absolute;top:0;top:auto;right:0;bottom:0;left:0;z-index:0;z-index:1;margin:0;padding:0;border:0}#rl-left{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;margin:0;padding:0;min-width:60px;width:200px;border:0}#rl-right{position:absolute;top:0;right:0;bottom:0;left:0;left:200px;z-index:0;z-index:1;margin:0;padding:0;border:0}#rl-sub-left{position:absolute;top:0;bottom:0;left:0;width:500px}#rl-sub-right{position:absolute;top:0;right:0;bottom:0;left:500px}html.ssm-state-desktop-large #rl-left{width:220px}html.ssm-state-desktop-large #rl-right{left:220px}html.ssm-state-desktop-large #rl-sub-left{width:500px}html.ssm-state-desktop-large #rl-sub-right{left:500px}html.ssm-state-desktop-large .b-compose.modal{width:1000px}html.ssm-state-desktop-large .b-contacts-content.modal{width:900px}html.ssm-state-desktop #rl-left{width:200px}html.ssm-state-desktop #rl-right{left:200px}html.ssm-state-desktop #rl-sub-left{width:400px}html.ssm-state-desktop #rl-sub-right{left:400px}html.ssm-state-desktop .b-compose.modal{width:1000px}html.ssm-state-desktop .b-contacts-content.modal{width:900px}html.ssm-state-mobile #rl-left,html.ssm-state-tablet #rl-left{width:155px}html.ssm-state-mobile #rl-right,html.ssm-state-tablet #rl-right{left:155px}html.ssm-state-mobile #rl-sub-left,html.ssm-state-tablet #rl-sub-left{width:310px}html.ssm-state-mobile #rl-sub-left .messageList .inputSearch,html.ssm-state-tablet #rl-sub-left .messageList .inputSearch{width:200px}html.ssm-state-mobile #rl-sub-right,html.ssm-state-tablet #rl-sub-right{left:310px}html.ssm-state-mobile .b-compose.modal,html.ssm-state-mobile .b-contacts-content.modal,html.ssm-state-tablet .b-compose.modal,html.ssm-state-tablet .b-contacts-content.modal{width:700px}html.ssm-state-mobile .b-contacts-content.modal .contactValueInput,html.ssm-state-tablet .b-contacts-content.modal .contactValueInput{width:200px}html.ssm-state-tablet .b-compose.modal{width:700px}html.ssm-state-tablet .b-contacts-content.modal{width:800px}html.ssm-state-tablet .b-contacts-content.modal .contactValueInput{width:250px}.show-on-panel-disabled{display:none}html.rl-left-panel-disabled #rl-left{width:60px!important}html.rl-left-panel-disabled #rl-left .show-on-panel-disabled{display:block}html.rl-left-panel-disabled #rl-left .opacity-on-panel-disabled{opacity:.3}html.rl-left-panel-disabled #rl-left .visibility-hidden-on-panel-disabled{visibility:hidden}html.rl-left-panel-disabled #rl-left .hide-on-panel-disabled{display:none}html.rl-left-panel-disabled #rl-left.ui-state-disabled{opacity:1}html.rl-left-panel-disabled #rl-right{left:60px!important}.ui-resizable-helper{border-right:5px solid #777;border-right-color:rgba(255,255,255,.7)}html.rl-no-preview-pane #rl-sub-left{right:5px!important;width:inherit}html.rl-no-preview-pane #rl-sub-left .messageList .inputSearch{width:300px!important}html.rl-no-preview-pane #rl-sub-right{left:0!important}html.rl-no-preview-pane #rl-right .ui-resizable-handle{display:none!important}.visible-on-ctrl,.visible-on-ctrl-btn{display:none}.hidden-on-ctrl-btn,html.rl-ctrl-key-pressed .btn-group.open .visible-on-ctrl-btn,html.rl-ctrl-key-pressed .visible-on-ctrl{display:inline-block}html.rl-ctrl-key-pressed .btn-group.open .hidden-on-ctrl-btn,html.rl-ctrl-key-pressed .hidden-on-ctrl{display:none}#rl-loading,#rl-loading-error{position:absolute;top:50%;margin:-60px 0 0;width:100%;height:65px;background-color:transparent;color:#000;text-align:center;font-size:30px}#rl-loading-error{display:none;background-image:none}.nano:after,.nano:before{position:absolute;left:0;z-index:102;display:none;width:100%;height:10px;box-shadow:0 0 20px rgba(0,0,0,.3);content:""}.nano:before{top:-10px}.nano:after{bottom:-10px}.nano.nano-scrolllimit-bottom:after,.nano.nano-scrolllimit-top:before{display:block}.b-system-drop-down .b-toolbar{position:absolute;top:0;right:0;z-index:103;padding:10px 8px;height:30px}.b-system-drop-down .e-facebook-name{display:inline-block;padding-top:4px}.b-system-drop-down .btn.system-dropdown{padding-right:10px;padding-left:10px}.b-system-drop-down .button-fb-logout{margin:5px}.b-system-drop-down .email-title{display:inline-block;overflow:hidden;max-width:200px;text-align:left;text-overflow:ellipsis}.b-login-content{height:100%;text-align:center}.b-login-content .loginFormWrapper{display:inline-block;vertical-align:middle;text-align:center}.b-login-content .loginFormWrapper .descWrapper{margin-bottom:10px}.b-login-content .loginFormWrapper .descWrapper .desc{padding:2px;font-size:18px}.b-login-content .loginFormWrapper .alertError{max-width:450px}.b-login-content .loginFormWrapper .loginForm{float:none;margin:0;background-color:#efefef;color:#333;text-align:left}.b-login-content .loginFormWrapper .control-label{font-size:16px;line-height:30px}.b-login-content .loginFormWrapper .control-group{margin-bottom:25px}.b-login-content .loginFormWrapper .wrapper{padding:40px 40px 10px}.b-login-content .loginFormWrapper #recaptcha_image img{border:1px solid #ccc;border-radius:3px}.b-login-content .loginFormWrapper .inputAdditionalCode,.b-login-content .loginFormWrapper .inputEmail,.b-login-content .loginFormWrapper .inputLogin,.b-login-content .loginFormWrapper .inputLoginForm,.b-login-content .loginFormWrapper .inputPassword{height:30px;font-size:18px;line-height:29px}.b-login-content .loginFormWrapper .signMeLabel{margin-top:5px}.b-login-content .loginFormWrapper .input-append .add-on{position:relative;z-index:1000;margin-left:-35px;height:30px;border:0;background:0 0}.b-login-content .loginFormWrapper .input-append .add-on i{color:#999;font-size:17px;line-height:29px}.b-login-content .loginFormWrapper .control-group.error .add-on i{color:#b94a48}.b-login-content .buttonLogin{margin:0}.b-login-content .alert{margin:0 0 20px;text-align:left}.b-login-content .loginAfter{display:inline-block;width:0;height:90%;vertical-align:middle}.b-login-content .flag-selector{margin-bottom:0}.popups .b-ask-content .modal-header{background-color:#fff}.popups .b-ask-content .modal-body{text-align:center}.popups .b-ask-content .desc-place{font-size:18px}.popups .b-shortcuts-content.modal{width:700px}.popups .b-shortcuts-content .modal-header{background-color:#fff}.b-folders .b-toolbar{position:absolute;top:0;right:0;left:0;z-index:101;padding:10px 10px 0 8px;height:30px;color:#fff}.b-folders .b-footer{position:absolute;right:0;bottom:20px;left:0;z-index:101;padding:0 10px 0 5px;height:20px}.b-folders .b-content{position:absolute;top:58px;right:0;bottom:45px;left:0;overflow:hidden;overflow-y:auto;min-width:100px}.b-folders .b-content .content{-webkit-overflow-scrolling:touch}.b-folders .b-list-delimiter{margin:10px;border-top:0 solid #000;border-bottom:1px solid #999}.b-folders .b-content .e-item{overflow:hidden;white-space:nowrap}.b-folders .b-content .e-item .e-link{position:relative;z-index:1;display:block;padding:0 10px;height:34px;outline:0;background-color:transparent;color:grey;vertical-align:middle;text-decoration:none;font-size:14px;line-height:34px;cursor:not-allowed}.b-folders .b-content .e-item .e-link.selectable{color:#000;cursor:pointer}.b-folders .b-content .e-item .e-link.selectable.droppableHover,.b-folders .b-content .e-item .e-link.selectable.focused,.b-folders .b-content .e-item .e-link.selectable.selected,.b-folders .b-content .e-item .e-link.selectable:hover{background-color:#555;color:#fff}.b-folders .b-content .e-item .e-link.selectable.focused{color:#fff}.b-folders .b-content .e-item .e-link.focused{background-color:#888}.b-folders .b-content .e-item .e-link.system{color:grey;cursor:default}.b-folders .b-content .e-item .e-link .count{position:relative;display:none;margin-top:5px;line-height:19px}.b-folders .b-content .e-item .e-link.print-count{font-weight:700}.b-folders .b-content .e-item .e-link.print-count .count{display:inline}.b-folders .b-content .e-item .e-link.unread-sub{font-weight:700}.b-folders .b-content .e-item .e-link .e-collapsed-sign{width:22px;height:30px;vertical-align:inherit;text-align:center;line-height:30px;cursor:pointer}.b-folders .b-content .e-item .hidden.e-link{display:none}.b-folders .b-content .e-item .b-sub-folders.collapsed{display:none;max-height:0;height:0}.b-folders .b-folder-system-item{font-weight:700}.b-folders .b-sub-folders .e-item .e-link{padding-left:25px}.b-folders .b-sub-folders.unpaddig-folder .e-item .e-link{padding-left:10px}.b-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:40px}.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .e-item .e-link{padding-left:25px}.b-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:55px}.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:40px}.b-folders .b-sub-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:70px}.b-folders .b-sub-folders.unpaddig-folder .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:55px}html.rl-left-panel-disabled .btn.buttonContacts{margin-top:10px!important;margin-left:0!important}.popups .b-folder-clear-content .modal-header,.popups .b-folder-create-content .modal-header,.popups .b-folder-system-content .modal-header{background-color:#fff}.popups .b-filter-content{width:800px}.popups .b-filter-content .modal-header{background-color:#fff}.popups .b-languages-content.modal{width:700px}.popups .b-languages-content.exp{width:701px}.popups .b-languages-content .modal-header{background-color:#fff}.popups .b-languages-content .lang-item{display:inline-block;margin:2px 5px;padding:5px 15px;width:180px;background-color:#fff;text-align:left}.popups .b-languages-content .lang-item.selected{background-color:#f5f5f5}.popups .b-languages-content .lang-item:hover{background-color:#eee}.popups .b-account-add-content .modal-header,.popups .b-compose-open-pgp-content .modal-header,.popups .b-open-pgp-key-add-content .modal-header,.popups .b-open-pgp-key-generate-content .modal-header,.popups .b-open-pgp-key-view-content .modal-header{background-color:#fff}.popups .b-compose-open-pgp-content.modal,.popups .b-open-pgp-key-add-content.modal,.popups .b-open-pgp-key-generate-content.modal,.popups .b-open-pgp-key-view-content.modal{width:570px}.popups .b-compose-open-pgp-content .inputKey,.popups .b-open-pgp-key-add-content .inputKey,.popups .b-open-pgp-key-generate-content .inputKey,.popups .b-open-pgp-key-view-content .inputKey{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}.popups .b-compose-open-pgp-content .key-viewer,.popups .b-open-pgp-key-add-content .key-viewer,.popups .b-open-pgp-key-generate-content .key-viewer,.popups .b-open-pgp-key-view-content .key-viewer{overflow:auto;max-height:500px}.popups .b-identity-content .modal-header,.popups .b-two-factor-test-content .modal-header{background-color:#fff}.popups .b-identity-content .textEmail{margin-top:5px;font-weight:700}.popups .b-advanced-search-content.modal{width:750px}.popups .b-advanced-search-content.modal .control-label{width:100px}.popups .b-advanced-search-content.modal .controls{margin-left:110px}.popups .b-advanced-search-content .modal-header{background-color:#fff}html.rl-no-preview-pane .messageList.message-selected{display:none}.messageList .toolbar{position:absolute;top:0;right:0;left:0;z-index:102;padding:10px 1px;height:30px}.messageList .b-footer{position:absolute;right:0;bottom:0;left:0;z-index:101;padding:7px;height:30px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;background-color:#eee}.messageList .b-footer .e-quota{display:inline-block;margin-top:5px;margin-left:5px;font-size:18px;cursor:help}.messageList .b-footer .e-quota:hover{border-bottom:1px dashed #333}.messageList .inputSearch{width:258px}.messageList .btn.buttonMoreSearch{padding-right:8px;padding-left:8px}.messageList .b-message-list-wrapper{position:absolute;top:50px;right:0;bottom:5px;left:0;z-index:101;border:1px solid #aaa;border-radius:5px;box-shadow:0 2px 8px rgba(0,0,0,.3)}.messageList .second-toolbar{position:absolute;top:0;right:0;left:0;z-index:101;padding:10px 8px 10px 11px;height:29px;border-top-left-radius:5px;border-top-right-radius:5px;background-color:#eee}.messageList .second-toolbar .checkboxCkeckAll{margin:5px 0}.messageList .line-loading{position:absolute;top:50px;right:0;left:0;z-index:102;height:0}.messageList .mainDelimiter{position:absolute;right:0;left:0;z-index:101;height:1px;background-color:#bbb}.messageList .toolbarDelimiter{top:49px}.messageList .footerDelimiter{bottom:44px}.messageList .b-content{position:absolute;top:50px;right:0;bottom:45px;left:0;z-index:101;overflow-x:hidden;overflow-y:auto;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;background-color:#fff}.messageList .b-content .content{-webkit-overflow-scrolling:touch}.messageList .b-content .listClear{padding:10px;color:#333;text-align:center;font-size:14px;line-height:13px}.messageList .b-content .listDragOver,.messageList .b-content .listEmptyList,.messageList .b-content .listEmptyListLoading,.messageList .b-content .listEmptySearchList,.messageList .b-content .listError{padding:60px 10px;color:#999;text-align:center;font-size:24px;line-height:30px}.messageList .b-content .listDragOver .e-icon,.messageList .b-content .listEmptyList .e-icon,.messageList .b-content .listEmptyListLoading .e-icon,.messageList .b-content .listEmptySearchList .e-icon,.messageList .b-content .listError .e-icon{font-size:24px;line-height:30px}.messageList .b-content .listDragOver{overflow:hidden;padding:0 10px;max-height:0}.messageList .b-content .listDragOver.viewAppendArea{padding:30px 10px;max-height:120px}.messageList .b-content .listDragOver.dragOverEnter{background-color:#e0fdda;color:#333}.messageList .b-content .listError{color:#da4f49}.messageList .b-content .listSearchDesc{padding:20px;border-bottom:1px solid #eee;font-size:20px}.messageList .b-content .delimiter{display:block;height:1px;background-color:#e5e5e5}.messageList .b-content .messageListItem:last-child{border-bottom:1px solid #e5e5e5}.messageList .b-content .messageListItem:last-child.selected{border-bottom:1px solid #bfd5ef}.messageList .b-content .fullThreadsParent{padding:3px 5px;height:25px;background-color:#f4f4f4;text-align:center}.messageList .b-content .messageListItem{position:relative;z-index:100;overflow:hidden;margin:0;max-height:60px;height:52px;border:0 solid transparent;background-color:#f9f9f9;font-size:12px;line-height:21px;cursor:pointer}.messageList .b-content .messageListItem .delimiter{position:relative;display:block;height:1px;background-color:#999;opacity:.2;filter:alpha(opacity=20)}.messageList .b-content .messageListItem .wrapper{padding:5px 0}.messageList .b-content .messageListItem .sidebarParent{display:inline-block;float:left;width:6px;height:100%;background-color:#eee}.messageList .b-content .messageListItem.focused .sidebarParent{background-color:#ccc!important}.messageList .b-content .messageListItem.e-single-line{height:35px}.messageList .b-content .messageListItem.e-single-line .wrapper{padding:5px;line-height:25px}.messageList .b-content .messageListItem.new{max-height:0}.messageList .b-content .messageListItem.deleted{max-height:0;border-color:transparent!important}.messageList .b-content .messageListItem .checkedParent{display:inline-block;float:left;margin-top:11px;padding:0 8px 0 6px;font-size:14px}.messageList .b-content .messageListItem.e-single-line .checkedParent{margin-top:1px}.messageList .b-content .messageListItem .flagParent{display:inline-block;float:right;padding:0 8px 0 5px}.messageList .b-content .messageListItem.e-single-line .flagParent{float:left;padding:0 8px 0 2px}.messageList .b-content .messageListItem .dateParent{position:relative;display:inline-block;float:right;margin:0 5px;color:#999;font-size:11px}.messageList .b-content .messageListItem .attachmentParent{position:relative;display:inline-block;float:right;margin:2px 8px 0 5px}.messageList .b-content .messageListItem.e-single-line .attachmentParent{float:left;margin:0 5px 0 0}.messageList .b-content .messageListItem .senderParent{display:block;overflow:hidden;text-overflow:ellipsis}.messageList .b-content .messageListItem .threadsCountParent{display:inline;overflow:hidden;margin-right:5px;padding:1px 5px;border:1px solid #ccc;border-radius:5px;background-color:#eee}.messageList .b-content .messageListItem .threadsCountParent.lastSelected{border-color:#999;background-color:#999;color:#fff}.messageList .b-content .messageListItem .threadsCountParent:hover{border-color:#666}.messageList .b-content .messageListItem.e-single-line .senderParent{display:inline-block;float:left;width:200px;text-overflow:none;font-weight:400}.messageList .b-content .messageListItem .subjectParent{display:block;overflow:hidden;color:#000;text-overflow:ellipsis}.messageList .b-content .messageListItem .dateParent,.messageList .b-content .messageListItem .senderParent,.messageList .b-content .messageListItem .subjectParent{white-space:nowrap}.messageList .b-content .messageListItem .subjectParent .emptySubjectText{display:none;color:#999;font-style:italic}.messageList .b-content .messageListItem.emptySubject .subjectParent .subject,.messageList .b-content .messageListItem.emptySubject .subjectParent .subject-prefix,.messageList .b-content .messageListItem.emptySubject .subjectParent .subject-suffix{display:none}.messageList .b-content .messageListItem.emptySubject .subjectParent .emptySubjectText{display:inline}.messageList .b-content .messageListItem .sender,.messageList .b-content .messageListItem .subject,.messageList .b-content .messageListItem .subject-suffix{overflow:hidden;text-overflow:ellipsis}.messageList .b-content .messageListItem .subject-prefix{color:#888}.messageList .b-content .messageListItem .attachment{display:none}.messageList .b-content .messageListItem .flagOff,.messageList .b-content .messageListItem .flagOn,.messageList .b-content .messageListItem .flagOnHalf{display:inline-block;cursor:pointer}.messageList .b-content .messageListItem .flagOff{opacity:.5}.messageList .b-content .messageListItem .flagOff:hover{opacity:1}.messageList .b-content .messageListItem .flagOn,.messageList .b-content .messageListItem .flagOnHalf{display:none;color:orange}.messageList .b-content .messageListItem .forwardFlag,.messageList .b-content .messageListItem .replyFlag{display:none}.messageList .b-content .messageListItem.answered .replyFlag,.messageList .b-content .messageListItem.forwarded .forwardFlag{display:inline-block}.messageList .b-content .messageListItem.withAttachments .attachment{display:inline-block;color:#666;text-shadow:0 1px 0 #eee}.messageList .b-content .messageListItem.unseen{background-color:#ffffd9}.messageList .b-content .messageListItem.unseen .sender,.messageList .b-content .messageListItem.unseen .subject,.messageList .b-content .messageListItem.unseen .subject-suffix{font-weight:700}.messageList .b-content .messageListItem.unseen .sidebarParent{background-color:orange}.messageList .b-content .messageListItem.unseen.focused .sidebarParent{background-color:#cc8400!important}.messageList .b-content .messageListItem.hasUnseenSubMessage{background-color:#ffffd9}.messageList .b-content .messageListItem.hasUnseenSubMessage .sidebarParent{background-color:#ffdb99}.messageList .b-content .messageListItem.hasUnseenSubMessage.focused .sidebarParent{background-color:#cc8400!important}.messageList .b-content .messageListItem.hasParentMessage{background-color:#ecf0f1}.messageList .b-content .messageListItem.hasParentMessage .sidebarParent{background-color:#bdc3c7}.messageList .b-content .messageListItem.hasParentMessage.focused .sidebarParent{background-color:#a1aab0!important}.messageList .b-content .messageListItem.hasParentMessage.unseen{background-color:#dde4e6}.messageList .b-content .messageListItem.hasParentMessage.unseen .sidebarParent{background-color:#6c777f}.messageList .b-content .messageListItem.hasParentMessage.unseen.focused .sidebarParent{background-color:#545e64!important}.messageList .b-content .messageListItem.checked .sidebarParent{background-color:#69a8f5!important}.messageList .b-content .messageListItem.checked.focused .sidebarParent{background-color:#217ef0!important}.messageList .b-content .messageListItem.selected{z-index:101;background-color:#dfefff}.messageList .b-content .messageListItem.selected .sidebarParent{background-color:#398cf2!important}.messageList .b-content .messageListItem.selected .delimiter{background-color:#398cf2;opacity:.2;filter:alpha(opacity=20)}.messageList .b-content .messageListItem.selected+.messageListItem .delimiter{background-color:#398cf2;opacity:.3}.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOff,.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOn{display:none}.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOnHalf{display:inline-block}.messageList .b-content .messageListItem.flagged .flagOff,.messageList .b-content .messageListItem.flagged .flagOnHalf{display:none}.messageList .b-content .messageListItem.flagged .flagOn{display:inline-block}.messageList.message-focused .b-message-list-wrapper{background-color:#000}.messageList.message-focused .b-content{opacity:.97}.messageList.hideMessageListCheckbox .checkboxCkeckAll,.messageList.hideMessageListCheckbox .checkedParent{display:none!important}.messageList.hideMessageListCheckbox .sidebarParent{margin-right:10px!important}html.ssm-state-desktop-large .messageList .b-content .messageListItem,html.ssm-state-desktop-large .messageList .b-content .messageListItem .dateParent{font-size:13px}html.cssanimations.rl-anim .messageList .line-loading{height:5px!important}.draggablePlace{z-index:10002;padding:4px 10px;min-width:30px;height:20px;background-color:#333;background-color:rgba(0,0,0,.5);color:#fff;cursor:pointer;cursor:move}html.rl-no-preview-pane .messageView{display:none}html.rl-no-preview-pane .messageView.message-selected{display:block}.messageView{z-index:100}.messageView .toolbar{position:absolute;top:0;right:0;left:0;padding:10px 0;height:30px;color:#fff}.messageView .b-content{position:absolute;top:58px;right:8px;bottom:13px;left:-1px;overflow:hidden;margin:0;border:1px solid #aaa;border-top-right-radius:3px;border-bottom-right-radius:3px;background-color:#fff}.messageView .b-content .b-message-view-checked-helper{padding-top:140px;color:#999;text-align:center;font-size:70px;line-height:70px}.messageView .b-content .b-message-view-checked-helper .icon-mail{padding-left:10px;font-size:100px;font-size:50px;line-height:90px}.messageView .b-content .b-message-view-desc{padding-top:120px;color:#999;text-align:center;font-size:24px;line-height:30px}.messageView .b-content .b-message-view-desc.error{color:#da4f49}.messageView .b-content .content{-webkit-overflow-scrolling:touch}.messageView .b-content .messageItem{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch;border-radius:3px}.messageView .b-content .messageItem .emptySubjectText{display:none;color:#999;font-style:italic}.messageView .b-content .messageItem.emptySubject .emptySubjectText{display:inline}.messageView .b-content .messageItem .buttonFull,.messageView .b-content .messageItem .buttonUnFull,.messageView .b-content .messageItem .buttonUp{position:fixed;top:90px;right:30px;z-index:2;display:inline-block;width:30px;height:30px;border:1px solid #333;border-radius:5px;background-color:#fff;color:#333;vertical-align:middle;text-align:center;line-height:30px;opacity:.3;cursor:pointer}.messageView .b-content .messageItem .buttonFull:hover,.messageView .b-content .messageItem .buttonUnFull:hover,.messageView .b-content .messageItem .buttonUp:hover{border-color:#000;background-color:#888;color:#fff;opacity:.8;filter:alpha(opacity=80)}.messageView .b-content .messageItem .buttonUp{right:70px;z-index:0}.messageView .b-content .messageItem .buttonUnFull{display:none}.messageView .b-content .messageItem .messageItemHeader{position:relative;z-index:1;padding:10px;border-top:0;border-bottom:1px solid #ddd;background-color:#f8f8f8}.messageView .b-content .messageItem .messageItemHeader .fromPic{display:inline-block;float:left;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 5px 0 0;padding:2px;width:50px;height:50px;border:1px solid #ccc;border-radius:10px;background:#fff}.messageView .b-content .messageItem .messageItemHeader .subjectParent{overflow:hidden;margin-left:3px;text-overflow:ellipsis;white-space:nowrap;font-weight:700;font-size:16px}.messageView .b-content .messageItem .messageItemHeader .senderParent{margin-top:10px}.messageView .b-content .messageItem .messageItemHeader .messageButtons{margin-top:5px}.messageView .b-content .messageItem .messageItemHeader .informationShort{margin-left:15px}.messageView .b-content .messageItem .messageItemHeader .informationShort a{color:#369;text-decoration:underline;cursor:pointer}.messageView .b-content .messageItem .messageItemHeader .informationFull{margin-top:10px;padding:10px 15px;border:1px solid #ddd;border-radius:5px;background-color:#fff}.messageView .b-content .messageItem .loading{padding-top:50px;color:grey;text-align:center;font-size:24px}.messageView .b-content .messageItem .line-loading{height:0}.messageView .b-content .messageItem .pgpEncrypted,.messageView .b-content .messageItem .pgpSigned,.messageView .b-content .messageItem .readReceipt,.messageView .b-content .messageItem .showImages{padding:10px 15px;border-bottom:1px solid #ddd;background-color:#eee;cursor:pointer}.messageView .b-content .messageItem .pgpInfo{padding:5px 15px;border-bottom:1px solid #ddd;background-color:#fcf8e3}.messageView .b-content .messageItem .pgpInfo.success{background-color:#e9f4ff}.messageView .b-content .messageItem .readReceipt{background-color:#ffffd9}.messageView .b-content .messageItem .attachmentsPlace{padding:10px}.messageView .b-content .messageItem .attachmentsPlace .attachmentList{margin:0}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem{display:inline-block;overflow:hidden;margin:5px;padding:5px;min-width:60px;max-width:170px;border:2px solid grey;border-radius:6px;background-color:#fff;box-shadow:1px 1px 5px #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1);list-style:none;line-height:24px;cursor:pointer}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentIcon{width:23px;height:23px;font-size:23px}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentPreview{margin:0 5px;color:#999}.messageView .b-content .messageItem .attachmentsPlace .attachmentList .attachmentItem .attachmentPreview:hover{color:#333}.messageView .b-content .messageItem .rlBlockquoteSwitcher{display:inline-block;margin:10px 0;width:30px;height:14px;border:1px solid #999;background-color:#eee;text-align:center;line-height:14px;opacity:.5;cursor:pointer}.messageView .b-content .messageItem .rlBlockquoteSwitcher:hover{opacity:1}.messageView .b-content .messageItem .bodyText{color:#000;font-family:Arial,Verdana,Geneva,sans-serif}.messageView .b-content .messageItem .bodyText .b-text-part div[data-x-div-type=html],.messageView .b-content .messageItem .bodyText .b-text-part div[data-x-div-type=html] div[data-x-div-type=html]{height:100%}.messageView .b-content .messageItem .bodyText .b-text-part a{color:#00f;text-decoration:underline}.messageView .b-content .messageItem .bodyText .b-text-part a:visited{color:#609}.messageView .b-content .messageItem .bodyText .b-text-part a:active{color:red}.messageView .b-content .messageItem .bodyText .b-text-part table{border-collapse:separate}.messageView .b-content .messageItem .bodyText .b-text-part blockquote{margin:0;padding:0 10px;border-left:2px solid #000}.messageView .b-content .messageItem .bodyText .b-text-part .rl-bq-switcher.hidden-bq{display:none}.messageView .b-content .messageItem .bodyText .b-text-part.html div[data-x-div-type=body]{margin:15px}.messageView .b-content .messageItem .bodyText .b-text-part.html pre{margin:0;padding:0;border:none;background:#fff;font-family:Monaco,Menlo,Consolas,"Courier New",monospace}.messageView .b-content .messageItem .bodyText .b-text-part.plain{padding:15px;white-space:pre-wrap;font-family:Monaco,Menlo,Consolas,"Courier New",monospace}.messageView .b-content .messageItem .bodyText .b-text-part.plain pre{margin:0;padding:0;border:none;background:#fff;font-family:Monaco,Menlo,Consolas,"Courier New",monospace}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote{border-left:2px solid #00f;color:#00f}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote blockquote{border-left:2px solid green;color:green}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote blockquote blockquote{border-left:2px solid red;color:red}.messageView.message-focused .b-content{z-index:102;border-color:#9d9d9d;border-radius:3px;box-shadow:0 2px 10px rgba(0,0,0,.3)}html.rl-no-preview-pane .messageView .toolbar{padding-left:1px}html.rl-no-preview-pane .messageView .b-content{top:50px;right:5px;bottom:5px;border:1px solid #aaa;border-radius:5px;box-shadow:0 2px 8px rgba(0,0,0,.3)}html.rl-no-preview-pane .messageView .b-content .buttonFull,html.rl-no-preview-pane .messageView .b-content .buttonUnFull,html.rl-no-preview-pane .messageView .b-content .buttonUp{top:70px}html.cssanimations.rl-anim .messageItem .line-loading{height:5px!important}html.rl-message-fullscreen #rl-bottom,html.rl-message-fullscreen #rl-left,html.rl-message-fullscreen #rl-right .RL-MailMessageList,html.rl-message-fullscreen #rl-right .RL-MailMessageView .messageView .toolbar,html.rl-message-fullscreen #rl-right .RL-SettingsPane,html.rl-message-fullscreen #rl-right .RL-SystemDropDown{display:none!important}html.rl-message-fullscreen .messageView .b-content{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10000;margin:5px;border:1px solid #aaa;border-radius:3px}html.rl-message-fullscreen .messageView .b-content .buttonUnFull,html.rl-message-fullscreen .messageView .b-content .buttonUp{top:36px;display:inline-block}html.rl-message-fullscreen .messageView .b-content .buttonFull{display:none}.b-contacts-content .control-group .control-label.fix-width{width:50px}.b-contacts-content .control-group .controls.fix-width{margin-left:70px}.b-contacts-content.modal{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;min-height:300px;max-height:700px;width:900px}.b-contacts-content.modal .modal-body{overflow:auto;padding:0;height:100%;background-color:#f5f5f5}.b-contacts-content.modal .b-header-toolbar{height:40px;background-color:#333;background-color:rgba(0,0,0,.8)!important;color:#fff}.b-contacts-content.modal .b-header-toolbar .close{color:#fff;opacity:1}.b-contacts-content.modal .b-header-toolbar .btn{margin-top:4px}.b-contacts-content.modal .b-list-toolbar{padding:0;width:220px;height:45px;box-shadow:inset 0 -1px 0 #ccc;text-align:right}.b-contacts-content.modal .b-list-toolbar .e-search{margin-top:7px;width:200px}.b-contacts-content.modal .b-list-footer-toolbar{position:absolute;bottom:0;left:0;width:220px;height:105px;background-color:#eee;box-shadow:inset 0 1px 0 #ccc}.b-contacts-content.modal .b-list-footer-toolbar .footer-pager{padding:8px 10px 0 0}.b-contacts-content.modal .b-list-content{position:absolute;top:45px;bottom:105px;left:0;overflow:hidden;overflow-y:auto;width:220px}.b-contacts-content.modal .b-list-content .content{-webkit-overflow-scrolling:touch}.b-contacts-content.modal .b-list-content .listClear{padding:10px;background-color:#fff;box-shadow:inset 0 -1px 0 #ccc;color:#333;text-align:center;font-size:14px;line-height:13px}.b-contacts-content.modal .b-list-content .listEmptyList,.b-contacts-content.modal .b-list-content .listEmptyListLoading,.b-contacts-content.modal .b-list-content .listEmptySearchList{padding:60px 10px;color:#999;text-align:center;font-size:24px;line-height:30px}.b-contacts-content.modal .b-list-content.hideContactListCheckbox .checkboxCkeckAll,.b-contacts-content.modal .b-list-content.hideContactListCheckbox .checkedParent{display:none!important}.b-contacts-content.modal .b-list-content.hideContactListCheckbox .sidebarParent{margin-right:10px!important}.b-contacts-content.modal .b-list-content .e-contact-foreach{border-bottom:1px solid #ddd}.b-contacts-content.modal .b-list-content .e-contact-item{position:relative;z-index:100;overflow:hidden;margin:0;max-height:45px;height:45px;border:0 solid transparent;line-height:45px;cursor:pointer}.b-contacts-content.modal .b-list-content .e-contact-item .delimiter{position:relative;display:block;height:1px;background-color:#999;opacity:.2}.b-contacts-content.modal .b-list-content .e-contact-item .wrapper{padding:0}.b-contacts-content.modal .b-list-content .e-contact-item .sidebarParent{display:inline-block;float:left;width:6px;height:100%;background-color:#eee}.b-contacts-content.modal .b-list-content .e-contact-item.focused .sidebarParent{background-color:#bbb}.b-contacts-content.modal .b-list-content .e-contact-item.deleted{max-height:0;border-color:transparent!important}.b-contacts-content.modal .b-list-content .e-contact-item .checkedParent{display:inline-block;float:left;padding:0 8px 0 6px}.b-contacts-content.modal .b-list-content .e-contact-item .shareParent{position:relative;display:none;float:right;margin:2px 8px 0 5px}.b-contacts-content.modal .b-list-content .e-contact-item .nameParent{display:block;overflow:hidden;color:#333;text-overflow:ellipsis;font-size:16px}.b-contacts-content.modal .b-list-content .e-contact-item .emailParent,.b-contacts-content.modal .b-list-content .e-contact-item .nameParent{white-space:nowrap}.b-contacts-content.modal .b-list-content .e-contact-item .displayEmail,.b-contacts-content.modal .b-list-content .e-contact-item .displayName{overflow:hidden;text-overflow:ellipsis}.b-contacts-content.modal .b-list-content .e-contact-item .displayImg{position:relative;display:inline-block;float:right;margin:0 5px}.b-contacts-content.modal .b-list-content .e-contact-item.shared .shareParent{display:inline-block}.b-contacts-content.modal .b-list-content .e-contact-item.checked{z-index:101}.b-contacts-content.modal .b-list-content .e-contact-item.checked .sidebarParent{background-color:#69a8f5}.b-contacts-content.modal .b-list-content .e-contact-item.checked.focused .sidebarParent{background-color:#519af3!important}.b-contacts-content.modal .b-list-content .e-contact-item.selected{z-index:102;background-color:#fff}.b-contacts-content.modal .b-list-content .e-contact-item.selected .sidebarParent{background-color:#398cf2}.b-contacts-content.modal .b-list-content .e-contact-item.selected.focused .sidebarParent{background-color:#217ef0!important}.b-contacts-content.modal .b-view-content-toolbar{position:absolute;top:0;right:0;left:220px;padding:7px;height:31px;background-color:#f5f5f5;box-shadow:inset 0 -1px 0 #ccc;text-align:center}.b-contacts-content.modal .b-view-content-toolbar .button-save-contact.no-disabled.dirty{color:#51a351;font-weight:700}.b-contacts-content.modal .b-view-content-toolbar.read-only .button-save-contact{display:none}.b-contacts-content.modal .b-view-content{position:absolute;top:45px;right:0;bottom:60px;left:220px;overflow:hidden;overflow-y:auto;border-left:1px solid #ddd;background-color:#fff}.b-contacts-content.modal .b-view-content .content{-webkit-overflow-scrolling:touch}.b-contacts-content.modal .b-view-content .tags-property-container{width:400px;font-size:18px}.b-contacts-content.modal .b-view-content .tags-property-container .inputosaurus-container{border-width:1px;border-color:transparent;box-shadow:none}.b-contacts-content.modal .b-view-content .tags-property-container .inputosaurus-container:hover{border-color:#ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.b-contacts-content.modal .b-view-content .tags-property-container .inputosaurus-container.inputosaurus-focused{border-color:#999;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.b-contacts-content.modal .b-view-content .contactValueLargeStatic,.b-contacts-content.modal .b-view-content .contactValueStatic,.b-contacts-content.modal .b-view-content .contactValueTextAreaStatic{padding:5px 7px;height:20px;color:#555;line-height:20px}.b-contacts-content.modal .b-view-content.read-only .contactValueLargeStatic,.b-contacts-content.modal .b-view-content.read-only .contactValueStatic,.b-contacts-content.modal .b-view-content.read-only .contactValueTextAreaStatic{display:inline-block}.b-contacts-content.modal .b-view-content.read-only .contactValueInput,.b-contacts-content.modal .b-view-content.read-only .contactValueInputLarge,.b-contacts-content.modal .b-view-content.read-only .contactValueTextArea{display:none}.b-contacts-content.modal .b-view-content .b-contact-view-desc{padding-top:120px;color:#999;text-align:center;font-size:24px;line-height:30px}.b-contacts-content.modal .b-view-content .top-part{padding-top:20px}.b-contacts-content.modal .b-view-content .property-line{margin-bottom:5px}.b-contacts-content.modal .b-view-content .top-row{padding:10px 0;height:30px}.b-contacts-content.modal .b-view-content .add-link{margin-left:2px;padding:5px;color:#aaa;font-size:12px}.b-contacts-content.modal .b-view-content .contactValueLargeStatic,.b-contacts-content.modal .b-view-content .contactValueStatic,.b-contacts-content.modal .b-view-content .contactValueTextAreaStatic{display:none;font-size:18px}.b-contacts-content.modal .b-view-content .contactValueInput,.b-contacts-content.modal .b-view-content .contactValueInputLarge,.b-contacts-content.modal .b-view-content .contactValueTextArea{width:300px;border-color:#fff;box-shadow:none;font-size:18px}.b-contacts-content.modal .b-view-content .contactValueInput:hover,.b-contacts-content.modal .b-view-content .contactValueInputLarge:hover,.b-contacts-content.modal .b-view-content .contactValueTextArea:hover{border-color:#ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.b-contacts-content.modal .b-view-content .contactValueInput:focus,.b-contacts-content.modal .b-view-content .contactValueInputLarge:focus,.b-contacts-content.modal .b-view-content .contactValueTextArea:focus{border-color:#999;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.b-contacts-content.modal .b-view-content .contactValueInput::-webkit-input-placeholder,.b-contacts-content.modal .b-view-content .contactValueInputLarge::-webkit-input-placeholder,.b-contacts-content.modal .b-view-content .contactValueTextArea::-webkit-input-placeholder{color:#ddd}.b-contacts-content.modal .b-view-content .contactValueInput::-moz-placeholder,.b-contacts-content.modal .b-view-content .contactValueInputLarge::-moz-placeholder,.b-contacts-content.modal .b-view-content .contactValueTextArea::-moz-placeholder{color:#ddd}.b-contacts-content.modal .b-view-content .contactValueInput:-moz-placeholder,.b-contacts-content.modal .b-view-content .contactValueInputLarge:-moz-placeholder,.b-contacts-content.modal .b-view-content .contactValueTextArea:-moz-placeholder{color:#ddd}.b-contacts-content.modal .b-view-content .contactValueInput:-ms-input-placeholder,.b-contacts-content.modal .b-view-content .contactValueInputLarge:-ms-input-placeholder,.b-contacts-content.modal .b-view-content .contactValueTextArea:-ms-input-placeholder{color:#ddd}.b-contacts-content.modal .b-view-content .contactValueTextArea{width:300px}.b-contacts-content.modal .b-view-content .contactValueInputLarge{width:400px}.b-contacts-content.modal .b-view-content .hasError .contactValueInput{border-color:#ee5f5b;color:#ee5f5b}.b-contacts-content.modal .b-view-content .e-save-trigger{position:absolute;top:25px;left:10px}.b-contacts-content.modal .b-view-content .e-read-only-sign{position:absolute;top:20px;right:40px;display:none}.b-contacts-content.modal .b-view-content .e-share-sign{position:absolute;top:20px;right:20px;cursor:pointer}.b-contacts-content.modal .b-view-content.read-only .e-read-only-sign{display:inline-block}.b-contacts-content.modal .b-view-content.read-only .e-share-sign{display:none}.b-contacts-content .e-contact-item{position:relative;z-index:100;overflow:hidden;margin:0;max-height:60px;height:55px;border:0 solid transparent;line-height:22px;cursor:pointer}.b-compose.modal{margin:10px auto;width:850px}.b-compose.modal .modal-body{overflow:auto;padding:0}.b-compose .textAreaParent{overflow:hidden}.b-compose .b-header-toolbar{height:40px;background-color:#333;background-color:rgba(0,0,0,.8)!important;color:#fff}.b-compose .b-header-toolbar .close{color:#fff;opacity:1}.b-compose .b-header-toolbar .btn.disabled.button-delete{visibility:hidden}.b-compose .b-header-toolbar .button-delete,.b-compose .b-header-toolbar .button-save,.b-compose .b-header-toolbar .saved-text{margin-left:8px}.b-compose .b-header-toolbar .disabled.button-delete{margin-left:0}.b-compose .b-header{padding:10px;background-color:#eee;color:#333}.b-compose .b-header .e-identity{color:#333;text-decoration:none;font-weight:700}.b-compose .b-header .e-identity:hover{color:#333;text-decoration:none}.b-compose .b-header .e-identity.multiply{border-bottom:1px dashed #555;cursor:pointer}.b-compose .b-header .e-row{line-height:30px}.b-compose .b-header .e-label{padding:6px 10px;min-width:70px;width:1%;text-align:right}.b-compose .b-header .e-value{padding:2px 0}.b-compose .b-header .e-value input[type=text],.b-compose .b-header .e-value textarea{width:98%}.b-compose .b-header .e-value textarea{height:40px}.b-compose .b-header .error-desc{color:red}.b-compose .b-header .b-appachments .b-attacment,.b-compose .b-header .b-appachments .b-attacment-in-process{padding-bottom:10px;line-height:20px}.b-compose .b-header .b-appachments .b-attacment-in-process .uploading{display:none;padding-right:5px}.b-compose .b-header .b-appachments .b-attacment-in-process.uploading .uploading{display:inline}.b-compose .b-header .b-appachments .b-attacment-in-process .upload-progress{font-weight:700}.b-compose .b-header .b-appachments .b-attacment-in-process.error .namedStr{color:#888}.b-compose .b-header .b-appachments .b-attacment-in-process .error{color:red}.b-compose .b-header .b-appachments .b-attacment-in-process .close{float:left;padding-right:13px}.b-compose .b-attachment-button{display:inline-block}.b-compose .b-attachment-place{position:absolute;right:20px;left:20px;z-index:300;height:120px;border:2px dashed #777;background-color:#fff;text-align:center;font-size:24px;line-height:119px}.b-compose .b-attachment-place.drag-and-drop-over{background:#777;color:#fff}.b-admin-left .b-toolbar{position:absolute;top:0;right:0;left:0;padding:8px 0 0 8px;height:34px}.b-admin-left .b-content{position:absolute;top:68px;right:0;bottom:8px;left:0;overflow:hidden}.b-admin-left .b-content .content{-webkit-overflow-scrolling:touch}.b-admin-menu .e-item{overflow:hidden;outline:0;text-decoration:none}.b-admin-menu .e-link{position:relative;z-index:1;display:block;padding:4px 10px;height:30px;outline:0;background-color:transparent;color:#888;text-decoration:none;font-size:18px;line-height:29px;cursor:pointer;cursor:default}.b-admin-menu .e-item.selectable .e-link{cursor:pointer}.b-admin-menu .e-item.selectable.selected .e-link,.b-admin-menu .e-item.selectable:hover .e-link{background-color:#555;color:#fff}.b-admin-right .b-toolbar{position:absolute;top:0;right:0;left:0;padding:8px;height:34px;color:#fff}.b-admin-right .b-content{position:absolute;top:58px;right:8px;bottom:8px;left:0;z-index:2;overflow-y:auto;border:1px solid #aaa;border-radius:5px;background-color:#fff;box-shadow:0 2px 8px rgba(0,0,0,.3)}.b-admin-right .b-content .content{-webkit-overflow-scrolling:touch}.b-admin-right .b-settings-content{padding:20px 20px 20px 30px}.b-admin-general .flag-selector{padding-top:5px}.b-admin-general .flag-name{border-bottom:1px dashed #555}.b-admin-domains .process-place{visibility:hidden;padding:14px 0;width:600px;text-align:center}.b-admin-domains-list-table{width:600px}.b-admin-domains-list-table .e-item .e-action{cursor:pointer}.b-admin-domains-list-table .e-item .domain-name{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;word-break:break-all}.b-admin-domains-list-table .e-item.disabled .domain-name{color:#bbb}.b-admin-domains-list-table .e-item .button-delete{visibility:hidden;margin-right:15px;opacity:0}.b-admin-domains-list-table .e-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-admin-domains-list-table .e-item .delete-domain,.b-admin-domains-list-table .e-item .disabled-domain{opacity:.5;cursor:pointer}.b-admin-domains-list-table .e-item.disabled .disabled-domain{opacity:.5}.b-admin-domains-list-table .e-item .delete-domain:hover,.b-admin-domains-list-table .e-item .disabled-domain:hover{opacity:1}.b-domain-content.modal{width:810px}.b-domain-content .modal-header{background-color:#fff}.b-domain-content .modal-body{position:relative;left:0;overflow:hidden;width:1600px;height:370px}.b-domain-content.domain-edit .modal-body{height:320px}.b-domain-content.domain-white-list-page .modal-body{left:-800px}.b-domain-content .error-desc{margin-left:10px;color:red}.b-domain-content .testing-done .imap-header,.b-domain-content .testing-done .smtp-header{color:green;font-weight:700}.b-domain-content .testing-error .imap-header,.b-domain-content .testing-error .smtp-header{color:red}.b-admin-packages .alert{width:650px}.b-admin-packages .process-place{visibility:hidden}.b-admin-packages-list-table{width:700px}.b-admin-packages-list-table .e-item .package-img{margin-right:2px;font-size:12px}.b-admin-packages-list-table .e-item .package-name.core{font-weight:700}.b-admin-packages-list-table .e-item .package-desc{color:#999;font-size:12px}.b-admin-packages-list-table .e-item .e-action{cursor:pointer}.b-admin-packages-list-table .e-item .package-actions-parent,.b-admin-packages-list-table .e-item .package-release-parent{text-align:center}.b-admin-packages-list-table .e-item .package-actions-parent{vertical-align:middle}.b-admin-plugins .process-place{visibility:hidden}.b-admin-plugins-list-table.disabled{background-color:#eee;opacity:.5}.b-admin-plugins-list-table .e-item .e-action{cursor:pointer}.b-admin-plugins-list-table .e-item .plugin-img{margin-right:2px;font-size:12px}.b-admin-plugins-list-table .e-item.disabled .plugin-img,.b-admin-plugins-list-table .e-item.disabled .plugin-name{color:#bbb}.b-admin-plugins-list-table .e-item.disabled .disabled-plugin{opacity:.5}.b-admin-plugin-property .help-block{margin-bottom:5px}.b-plugin-content.modal{width:660px}.b-plugin-content.modal .modal-body{overflow:auto}.b-plugin-content .modal-header{background-color:#fff}.b-plugin-content .information{display:inline-block;padding-top:5px;width:30px;height:25px;border-radius:10px;background-color:#ddd;text-align:center;cursor:pointer}.b-plugin-content textarea{width:400px;height:70px}.b-admin-about .rl-logo{display:inline-block;margin-top:-10px;margin-bottom:-10px;width:250px;height:250px;background-image:url(images/rainloop-logo.png)}.b-admin-about .rl-desc{margin-top:20px;margin-left:-20px}.popups .b-activate-content{width:700px}.popups .b-activate-content .modal-header{background-color:#fff}.popups .b-activate-content .help-inline{padding-left:0}.b-settins-left .b-toolbar{position:absolute;top:0;right:0;left:0;padding:8px 0 0 8px;height:34px}.b-settins-left .b-content{position:absolute;top:68px;right:0;bottom:8px;left:0;overflow:hidden}.b-settins-left .b-content .content{-webkit-overflow-scrolling:touch}.b-settings-menu .e-item{overflow:hidden;outline:0;text-decoration:none}.b-settings-menu .e-link{position:relative;z-index:1;display:block;padding:4px 10px;height:30px;outline:0;background-color:transparent;color:#888;text-decoration:none;font-size:18px;line-height:29px;cursor:default}.b-settings-menu .e-item.selectable .e-link{cursor:pointer}.b-settings-menu .e-item.selectable.selected .e-link,.b-settings-menu .e-item.selectable:hover .e-link{background-color:#555;color:#fff}.b-settins-right .b-toolbar{position:absolute;top:0;right:0;left:0;padding:8px 5px;height:34px;color:#fff}.b-settins-right .b-content{position:absolute;top:50px;right:8px;bottom:8px;left:0;z-index:2;overflow-y:auto;border:1px solid #aaa;border-radius:5px;background-color:#fff;box-shadow:0 2px 8px rgba(0,0,0,.3)}.b-settins-right .b-content .content{-webkit-overflow-scrolling:touch}.b-settins-right .b-settings-content{padding:20px 20px 20px 30px}.b-settings-general .notification-desc-denied{display:none;color:#999}.b-settings-general .denied-by-browser .notification-desc-denied{display:inline}.b-settings-general .denied-by-browser .notification-desc{color:#999}.b-settings-general .flag-selector{padding-top:5px}.b-settings-general .flag-name{border-bottom:1px dashed #555}.b-settings-accounts .process-place{padding:14px 0;width:600px;text-align:center}.b-settings-accounts .list-table{width:600px}.b-settings-accounts .list-table td{padding:4px 8px;line-height:30px}.b-settings-accounts .list-table .account-img{margin-right:5px;font-size:12px}.b-settings-accounts .list-table .account-name{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;word-break:break-all;line-height:22px;cursor:default}.b-settings-accounts .account-item .button-delete{visibility:hidden;margin-top:5px;margin-right:15px;opacity:0}.b-settings-accounts .account-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-settings-accounts .account-item .delete-account{opacity:.5;cursor:pointer}.b-settings-identity .e-signature-place{display:inline-block;width:680px;height:250px}.b-settings-identities .process-place{padding:14px 0;width:600px;text-align:center}.b-settings-identities .e-signature-place{display:inline-block;width:680px;height:250px}.b-settings-identities .list-table{width:600px}.b-settings-identities .list-table td{padding:4px 8px;line-height:30px}.b-settings-identities .list-table .identity-img{margin-right:5px;font-size:12px}.b-settings-identities .list-table .identity-name{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;word-break:break-all;line-height:22px;cursor:pointer}.b-settings-identities .identity-item .e-action{cursor:pointer}.b-settings-identities .identity-item .button-delete{visibility:hidden;margin-top:5px;margin-right:15px;opacity:0}.b-settings-identities .identity-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-settings-identities .identity-item .delete-identity{opacity:.5;cursor:pointer}.b-settings-open-pgp .process-place{padding:14px 0;width:600px;text-align:center}.b-settings-open-pgp .list-table{width:750px}.b-settings-open-pgp .list-table td{padding:4px 8px;line-height:30px}.b-settings-open-pgp .list-table .open-pgp-key-img{margin-right:5px;font-size:12px}.b-settings-open-pgp .list-table .open-pgp-key-id,.b-settings-open-pgp .list-table .open-pgp-key-user{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;word-break:break-all;line-height:22px;cursor:default}.b-settings-open-pgp .open-pgp-key-item .button-delete{visibility:hidden;margin-top:5px;margin-right:15px;opacity:0}.b-settings-open-pgp .open-pgp-key-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-settings-open-pgp .open-pgp-key-item .delete-open-pgp-key,.b-settings-open-pgp .open-pgp-key-item .view-open-pgp-key{opacity:.5;cursor:pointer}.b-settings-folders.ignore-folder-subscribe .subscribe-folder,.b-settings-folders.ignore-folder-subscribe .unsubscribe-folder{display:none}.b-settings-folders .process-place{padding:14px 0;width:600px;text-align:center}.b-settings-folders .folders-list-error{margin:10px 0;width:550px}.b-settings-folders .list-table{width:600px}.b-settings-folders .list-table .e-action{cursor:pointer}.b-settings-folders .list-table td{padding:4px 8px;line-height:30px}.b-settings-folders .list-table .folder-padding{display:inline-block;width:0}.b-settings-folders .list-table .folder-name{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:7px;white-space:pre-wrap;word-break:break-all;line-height:22px;cursor:default}.b-settings-folders .list-table .folder-system-name{display:inline-block;color:#999;line-height:22px;cursor:default}.b-settings-folders .list-table .folder-name.can-be-edited:hover{border-bottom:1px dashed #333;cursor:pointer}.b-settings-folders .list-table .folder-name-input{margin-bottom:0;margin-left:-4px;border-width:1px}.b-settings-folders .folder-item.system .folder-name{font-weight:700}.b-settings-folders .folder-item .button-delete{visibility:hidden;margin-top:5px;margin-right:15px;opacity:0}.b-settings-folders .folder-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-settings-folders .folder-item .delete-folder,.b-settings-folders .folder-item .subscribe-folder,.b-settings-folders .folder-item .unsubscribe-folder{opacity:.6;cursor:pointer}.b-settings-folders .folder-item .unsubscribe-folder{opacity:.25}.b-settings-folders .folder-padding.deep-1{width:25px}.b-settings-folders .folder-padding.deep-2{width:40px}.b-settings-folders .folder-padding.deep-3{width:55px}.b-settings-folders .folder-padding.deep-4{width:70px}.b-settings-folders .folder-padding.deep-5{width:85px}.b-themes-list .e-item{display:inline-block;margin:5px;padding:16px;border:2px solid transparent;background-color:#fff;color:#000;cursor:pointer}.b-themes-list .e-item:hover{border:2px solid grey}.b-themes-list .e-item.selected{border:2px solid #000;background-color:#eee}.b-themes-list .e-item .e-image{width:100px;height:100px;border:1px solid #ddd}@-webkit-keyframes highlight-folder-row{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);transform:scale(1.1)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes highlight-folder-row{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);transform:scale(1.1)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes textLoadingAnimationKeyFrame{0%{opacity:1}33%{opacity:0}100%{opacity:1}}@keyframes textLoadingAnimationKeyFrame{0%{opacity:1}33%{opacity:0}100%{opacity:1}}@-webkit-keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}html.rl-started-trigger.no-mobile .b-login-content .loginFormWrapper{-webkit-transform:translateY(-30px);-ms-transform:translateY(-30px);transform:translateY(-30px)}html.rl-started-trigger.no-mobile #rl-content{opacity:.7}#rl-loading{-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.rl-anim.csstransitions.no-mobile #rl-left{-webkit-transition:width .3s ease-out;transition:width .3s ease-out}.rl-anim.csstransitions.no-mobile #rl-right{-webkit-transition:left .3s ease-out;transition:left .3s ease-out}.rl-anim.csstransitions.no-mobile #rl-sub-left,.rl-anim.csstransitions.no-mobile #rl-sub-left .messageList .inputSearch{-webkit-transition:width .3s ease-out;transition:width .3s ease-out}.rl-anim.csstransitions.no-mobile #rl-sub-right{-webkit-transition:left .3s ease-out;transition:left .3s ease-out}.rl-anim.csstransitions.no-mobile #rl-content{-webkit-transition:opacity .3s ease-out;transition:opacity .3s ease-out}.rl-anim.csstransitions.no-mobile .b-login-content .loginFormWrapper{-webkit-transition:all .3s ease-out;transition:all .3s ease-out}.rl-anim.rgba.cssanimations.backgroundsize .e-strip-animation{background-image:-webkit-linear-gradient(315deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-size:60px 60px;-webkit-animation:animate-stripes 2s linear infinite;animation:animate-stripes 2s linear infinite}.rl-anim.csstransitions .button-delete-transitions{-webkit-transition:all .2s linear;transition:all .2s linear}.rl-anim.cssanimations .b-folders .e-item .anim-action-class{-webkit-animation:highlight-folder-row .5s linear;animation:highlight-folder-row .5s linear}.rl-anim.csstransitions .b-folders .btn.buttonContacts{-webkit-transition:margin .3s linear;transition:margin .3s linear}.rl-anim.csstransitions .b-folders .b-content.opacity-on-panel-disabled{-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.rl-anim.csstransitions .messageList .messageListItem{-webkit-transition:max-height 400ms ease;transition:max-height 400ms ease}.rl-anim.csstransitions .messageList .listDragOver{-webkit-transition:all 400ms ease;transition:all 400ms ease}.rl-anim.csstransitions .b-list-content .e-contact-item{-webkit-transition:max-height 400ms ease;transition:max-height 400ms ease}.rl-anim.csstransitions .modal.b-domain-content .modal-body{-webkit-transition:left 500ms ease;transition:left 500ms ease}.rl-anim.csstransitions .modal.fade{-webkit-transition:all .2s ease-out;transition:all .2s ease-out;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}.rl-anim.csstransitions .modal.fade.in{-webkit-transform:none;-ms-transform:none;transform:none}.rl-anim.cssanimations .b-compose.loading .b-header-toolbar{background-image:-webkit-linear-gradient(315deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-size:60px 60px;-webkit-animation:animate-stripes 2s linear infinite;animation:animate-stripes 2s linear infinite}.textLoadingAnimationD1,.textLoadingAnimationD2,.textLoadingAnimationD3{-webkit-animation:textLoadingAnimationKeyFrame 1s linear infinite 0s;animation:textLoadingAnimationKeyFrame 1s linear infinite 0s}.textLoadingAnimationD2{-webkit-animation-delay:.3s;animation-delay:.3s}.textLoadingAnimationD3{-webkit-animation-delay:.6s;animation-delay:.6s}.rl-view-model.RL-About,.rl-view-model.RL-AdminLogin,.rl-view-model.RL-Login,.rl-view-model.RL-LoginNew{position:relative;z-index:5;height:100%} \ No newline at end of file diff --git a/rainloop/v/0.0.0/static/js/701a517c70faed82fff3.chunk.js b/rainloop/v/0.0.0/static/js/701a517c70faed82fff3.chunk.js deleted file mode 100644 index ac61aeac3..000000000 --- a/rainloop/v/0.0.0/static/js/701a517c70faed82fff3.chunk.js +++ /dev/null @@ -1,10194 +0,0 @@ -/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ -webpackJsonp([0],Array(21).concat([ -/* 21 */ -/*!*********************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsComposeViewModel.js ***! - \*********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - moment = __webpack_require__(/*! moment */ 25), - JSON = __webpack_require__(/*! JSON */ 33), - Jua = __webpack_require__(/*! Jua */ 47), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Consts = __webpack_require__(/*! Common/Consts */ 17), - Utils = __webpack_require__(/*! Common/Utils */ 1), - Globals = __webpack_require__(/*! Common/Globals */ 7), - Events = __webpack_require__(/*! Common/Events */ 22), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 28), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Cache = __webpack_require__(/*! Storage:RainLoop:Cache */ 20), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - - ComposeAttachmentModel = __webpack_require__(/*! Model:ComposeAttachment */ 53), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsComposeViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsCompose'); - - this.oEditor = null; - this.aDraftInfo = null; - this.sInReplyTo = ''; - this.bFromDraft = false; - this.bSkipNext = false; - this.sReferences = ''; - - this.bCapaAdditionalIdentities = Settings.capa(Enums.Capa.AdditionalIdentities); - - var - self = this, - fCcAndBccCheckHelper = function (aValue) { - if (false === self.showCcAndBcc() && 0 < aValue.length) - { - self.showCcAndBcc(true); - } - } - ; - - this.capaOpenPGP = Data.capaOpenPGP; - - this.resizer = ko.observable(false).extend({'throttle': 50}); - - this.identitiesDropdownTrigger = ko.observable(false); - - this.to = ko.observable(''); - this.to.focusTrigger = ko.observable(false); - this.cc = ko.observable(''); - this.bcc = ko.observable(''); - - this.replyTo = ko.observable(''); - this.subject = ko.observable(''); - this.isHtml = ko.observable(false); - - this.requestReadReceipt = ko.observable(false); - - this.sendError = ko.observable(false); - this.sendSuccessButSaveError = ko.observable(false); - this.savedError = ko.observable(false); - - this.savedTime = ko.observable(0); - this.savedOrSendingText = ko.observable(''); - - this.emptyToError = ko.observable(false); - this.attachmentsInProcessError = ko.observable(false); - this.showCcAndBcc = ko.observable(false); - - this.cc.subscribe(fCcAndBccCheckHelper, this); - this.bcc.subscribe(fCcAndBccCheckHelper, this); - - this.draftFolder = ko.observable(''); - this.draftUid = ko.observable(''); - this.sending = ko.observable(false); - this.saving = ko.observable(false); - this.attachments = ko.observableArray([]); - - this.attachmentsInProcess = this.attachments.filter(function (oItem) { - return oItem && '' === oItem.tempName(); - }); - - this.attachmentsInReady = this.attachments.filter(function (oItem) { - return oItem && '' !== oItem.tempName(); - }); - - this.attachments.subscribe(function () { - this.triggerForResize(); - }, this); - - this.isDraftFolderMessage = ko.computed(function () { - return '' !== this.draftFolder() && '' !== this.draftUid(); - }, this); - - this.composeUploaderButton = ko.observable(null); - this.composeUploaderDropPlace = ko.observable(null); - this.dragAndDropEnabled = ko.observable(false); - this.dragAndDropOver = ko.observable(false).extend({'throttle': 1}); - this.dragAndDropVisible = ko.observable(false).extend({'throttle': 1}); - this.attacheMultipleAllowed = ko.observable(false); - this.addAttachmentEnabled = ko.observable(false); - - this.composeEditorArea = ko.observable(null); - - this.identities = Data.identities; - this.defaultIdentityID = Data.defaultIdentityID; - this.currentIdentityID = ko.observable(''); - - this.currentIdentityString = ko.observable(''); - this.currentIdentityResultEmail = ko.observable(''); - - this.identitiesOptions = ko.computed(function () { - - var aList = [{ - 'optValue': Data.accountEmail(), - 'optText': this.formattedFrom(false) - }]; - - _.each(Data.identities(), function (oItem) { - aList.push({ - 'optValue': oItem.id, - 'optText': oItem.formattedNameForCompose() - }); - }); - - return aList; - - }, this); - - ko.computed(function () { - - var - sResult = '', - sResultEmail = '', - oItem = null, - aList = this.identities(), - sID = this.currentIdentityID() - ; - - if (this.bCapaAdditionalIdentities && sID && sID !== Data.accountEmail()) - { - oItem = _.find(aList, function (oItem) { - return oItem && sID === oItem['id']; - }); - - sResult = oItem ? oItem.formattedNameForCompose() : ''; - sResultEmail = oItem ? oItem.formattedNameForEmail() : ''; - - if ('' === sResult && aList[0]) - { - this.currentIdentityID(aList[0]['id']); - return ''; - } - } - - if ('' === sResult) - { - sResult = this.formattedFrom(false); - sResultEmail = this.formattedFrom(true); - } - - this.currentIdentityString(sResult); - this.currentIdentityResultEmail(sResultEmail); - - return sResult; - - }, this); - - this.to.subscribe(function (sValue) { - if (this.emptyToError() && 0 < sValue.length) - { - this.emptyToError(false); - } - }, this); - - this.attachmentsInProcess.subscribe(function (aValue) { - if (this.attachmentsInProcessError() && Utils.isArray(aValue) && 0 === aValue.length) - { - this.attachmentsInProcessError(false); - } - }, this); - - this.editorResizeThrottle = _.throttle(_.bind(this.editorResize, this), 100); - - this.resizer.subscribe(function () { - this.editorResizeThrottle(); - }, this); - - this.canBeSendedOrSaved = ko.computed(function () { - return !this.sending() && !this.saving(); - }, this); - - this.deleteCommand = Utils.createCommand(this, function () { - - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolderWithoutCheck(this.draftFolder(), [this.draftUid()]); - kn.hideScreenPopup(PopupsComposeViewModel); - - }, function () { - return this.isDraftFolderMessage(); - }); - - this.sendMessageResponse = _.bind(this.sendMessageResponse, this); - this.saveMessageResponse = _.bind(this.saveMessageResponse, this); - - this.sendCommand = Utils.createCommand(this, function () { - var - sTo = Utils.trim(this.to()), - sSentFolder = Data.sentFolder(), - aFlagsCache = [] - ; - - if (0 < this.attachmentsInProcess().length) - { - this.attachmentsInProcessError(true); - } - else if (0 === sTo.length) - { - this.emptyToError(true); - } - else - { - if (Data.replySameFolder()) - { - if (Utils.isArray(this.aDraftInfo) && 3 === this.aDraftInfo.length && Utils.isNormal(this.aDraftInfo[2]) && 0 < this.aDraftInfo[2].length) - { - sSentFolder = this.aDraftInfo[2]; - } - } - - if ('' === sSentFolder) - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:FolderSystem */ 27), [Enums.SetSystemFoldersNotification.Sent]); - } - else - { - this.sendError(false); - this.sending(true); - - if (Utils.isArray(this.aDraftInfo) && 3 === this.aDraftInfo.length) - { - aFlagsCache = Cache.getMessageFlagsFromCache(this.aDraftInfo[2], this.aDraftInfo[1]); - if (aFlagsCache) - { - if ('forward' === this.aDraftInfo[0]) - { - aFlagsCache[3] = true; - } - else - { - aFlagsCache[2] = true; - } - - Cache.setMessageFlagsToCache(this.aDraftInfo[2], this.aDraftInfo[1], aFlagsCache); - __webpack_require__(/*! App:RainLoop */ 4).reloadFlagsCurrentMessageListAndMessageFromCache(); - Cache.setFolderHash(this.aDraftInfo[2], ''); - } - } - - sSentFolder = Consts.Values.UnuseOptionValue === sSentFolder ? '' : sSentFolder; - - Cache.setFolderHash(this.draftFolder(), ''); - Cache.setFolderHash(sSentFolder, ''); - - Remote.sendMessage( - this.sendMessageResponse, - this.draftFolder(), - this.draftUid(), - sSentFolder, - this.currentIdentityResultEmail(), - sTo, - this.cc(), - this.bcc(), - this.subject(), - this.oEditor ? this.oEditor.isHtml() : false, - this.oEditor ? this.oEditor.getData(true) : '', - this.prepearAttachmentsForSendOrSave(), - this.aDraftInfo, - this.sInReplyTo, - this.sReferences, - this.requestReadReceipt() - ); - } - } - }, this.canBeSendedOrSaved); - - this.saveCommand = Utils.createCommand(this, function () { - - if (Data.draftFolderNotEnabled()) - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:FolderSystem */ 27), [Enums.SetSystemFoldersNotification.Draft]); - } - else - { - this.savedError(false); - this.saving(true); - - this.bSkipNext = true; - - Cache.setFolderHash(Data.draftFolder(), ''); - - Remote.saveMessage( - this.saveMessageResponse, - this.draftFolder(), - this.draftUid(), - Data.draftFolder(), - this.currentIdentityResultEmail(), - this.to(), - this.cc(), - this.bcc(), - this.subject(), - this.oEditor ? this.oEditor.isHtml() : false, - this.oEditor ? this.oEditor.getData(true) : '', - this.prepearAttachmentsForSendOrSave(), - this.aDraftInfo, - this.sInReplyTo, - this.sReferences - ); - } - - }, this.canBeSendedOrSaved); - - Events.sub('interval.1m', function () { - if (this.modalVisibility() && !Data.draftFolderNotEnabled() && !this.isEmptyForm(false) && - !this.bSkipNext && !this.saving() && !this.sending() && !this.savedError()) - { - this.bSkipNext = false; - this.saveCommand(); - } - }, this); - - this.showCcAndBcc.subscribe(function () { - this.triggerForResize(); - }, this); - - this.dropboxEnabled = ko.observable(!!Settings.settingsGet('DropboxApiKey')); - - this.dropboxCommand = Utils.createCommand(this, function () { - - if (window.Dropbox) - { - window.Dropbox.choose({ - //'iframe': true, - 'success': function(aFiles) { - - if (aFiles && aFiles[0] && aFiles[0]['link']) - { - self.addDropboxAttachment(aFiles[0]); - } - }, - 'linkType': "direct", - 'multiselect': false - }); - } - - return true; - - }, function () { - return this.dropboxEnabled(); - }); - - this.driveEnabled = ko.observable(Globals.bXMLHttpRequestSupported && - !!Settings.settingsGet('GoogleClientID') && !!Settings.settingsGet('GoogleApiKey')); - - this.driveVisible = ko.observable(false); - - this.driveCommand = Utils.createCommand(this, function () { - - this.driveOpenPopup(); - return true; - - }, function () { - return this.driveEnabled(); - }); - - this.driveCallback = _.bind(this.driveCallback, this); - - this.bDisabeCloseOnEsc = true; - this.sDefaultKeyScope = Enums.KeyState.Compose; - - this.tryToClosePopup = _.debounce(_.bind(this.tryToClosePopup, this), 200); - - this.emailsSource = _.bind(this.emailsSource, this); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:Compose', 'PopupsComposeViewModel'], PopupsComposeViewModel); - _.extend(PopupsComposeViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsComposeViewModel.prototype.emailsSource = function (oData, fResponse) - { - __webpack_require__(/*! App:RainLoop */ 4).getAutocomplete(oData.term, function (aData) { - fResponse(_.map(aData, function (oEmailItem) { - return oEmailItem.toLine(false); - })); - }); - }; - - PopupsComposeViewModel.prototype.openOpenPgpPopup = function () - { - if (this.capaOpenPGP() && this.oEditor && !this.oEditor.isHtml()) - { - var self = this; - kn.showScreenPopup(__webpack_require__(/*! View:Popup:ComposeOpenPgp */ 104), [ - function (sResult) { - self.editor(function (oEditor) { - oEditor.setPlain(sResult); - }); - }, - this.oEditor.getData(), - this.currentIdentityResultEmail(), - this.to(), - this.cc(), - this.bcc() - ]); - } - }; - - PopupsComposeViewModel.prototype.reloadDraftFolder = function () - { - var - sDraftFolder = Data.draftFolder() - ; - - if ('' !== sDraftFolder) - { - Cache.setFolderHash(sDraftFolder, ''); - if (Data.currentFolderFullNameRaw() === sDraftFolder) - { - __webpack_require__(/*! App:RainLoop */ 4).reloadMessageList(true); - } - else - { - __webpack_require__(/*! App:RainLoop */ 4).folderInformation(sDraftFolder); - } - } - }; - - PopupsComposeViewModel.prototype.findIdentityIdByMessage = function (sComposeType, oMessage) - { - var - oIDs = {}, - sResult = '', - fFindHelper = function (oItem) { - if (oItem && oItem.email && oIDs[oItem.email]) - { - sResult = oIDs[oItem.email]; - return true; - } - - return false; - } - ; - - if (this.bCapaAdditionalIdentities) - { - _.each(this.identities(), function (oItem) { - oIDs[oItem.email()] = oItem['id']; - }); - } - - oIDs[Data.accountEmail()] = Data.accountEmail(); - - if (oMessage) - { - switch (sComposeType) - { - case Enums.ComposeType.Empty: - break; - case Enums.ComposeType.Reply: - case Enums.ComposeType.ReplyAll: - case Enums.ComposeType.Forward: - case Enums.ComposeType.ForwardAsAttachment: - _.find(_.union(oMessage.to, oMessage.cc, oMessage.bcc, oMessage.deliveredTo), fFindHelper); - break; - case Enums.ComposeType.Draft: - _.find(_.union(oMessage.from, oMessage.replyTo), fFindHelper); - break; - } - } - - if ('' === sResult) - { - sResult = this.defaultIdentityID(); - } - - if ('' === sResult) - { - sResult = Data.accountEmail(); - } - - return sResult; - }; - - PopupsComposeViewModel.prototype.selectIdentity = function (oIdentity) - { - if (oIdentity) - { - this.currentIdentityID(oIdentity.optValue); - } - }; - - /** - * - * @param {boolean=} bHeaderResult = false - * @returns {string} - */ - PopupsComposeViewModel.prototype.formattedFrom = function (bHeaderResult) - { - var - sDisplayName = Data.displayName(), - sEmail = Data.accountEmail() - ; - - return '' === sDisplayName ? sEmail : - ((Utils.isUnd(bHeaderResult) ? false : !!bHeaderResult) ? - '"' + Utils.quoteName(sDisplayName) + '" <' + sEmail + '>' : - sDisplayName + ' (' + sEmail + ')') - ; - }; - - PopupsComposeViewModel.prototype.sendMessageResponse = function (sResult, oData) - { - var - bResult = false, - sMessage = '' - ; - - this.sending(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - bResult = true; - if (this.modalVisibility()) - { - Utils.delegateRun(this, 'closeCommand'); - } - } - - if (this.modalVisibility() && !bResult) - { - if (oData && Enums.Notification.CantSaveMessage === oData.ErrorCode) - { - this.sendSuccessButSaveError(true); - window.alert(Utils.trim(Utils.i18n('COMPOSE/SAVED_ERROR_ON_SEND'))); - } - else - { - sMessage = Utils.getNotification(oData && oData.ErrorCode ? oData.ErrorCode : Enums.Notification.CantSendMessage, - oData && oData.ErrorMessage ? oData.ErrorMessage : ''); - - this.sendError(true); - window.alert(sMessage || Utils.getNotification(Enums.Notification.CantSendMessage)); - } - } - - this.reloadDraftFolder(); - }; - - PopupsComposeViewModel.prototype.saveMessageResponse = function (sResult, oData) - { - var - bResult = false, - oMessage = null - ; - - this.saving(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - if (oData.Result.NewFolder && oData.Result.NewUid) - { - if (this.bFromDraft) - { - oMessage = Data.message(); - if (oMessage && this.draftFolder() === oMessage.folderFullNameRaw && this.draftUid() === oMessage.uid) - { - Data.message(null); - } - } - - this.draftFolder(oData.Result.NewFolder); - this.draftUid(oData.Result.NewUid); - - if (this.modalVisibility()) - { - this.savedTime(window.Math.round((new window.Date()).getTime() / 1000)); - - this.savedOrSendingText( - 0 < this.savedTime() ? Utils.i18n('COMPOSE/SAVED_TIME', { - 'TIME': moment.unix(this.savedTime() - 1).format('LT') - }) : '' - ); - - bResult = true; - - if (this.bFromDraft) - { - Cache.setFolderHash(this.draftFolder(), ''); - } - } - } - } - - if (!this.modalVisibility() && !bResult) - { - this.savedError(true); - this.savedOrSendingText(Utils.getNotification(Enums.Notification.CantSaveMessage)); - } - - this.reloadDraftFolder(); - }; - - PopupsComposeViewModel.prototype.onHide = function () - { - this.reset(); - kn.routeOn(); - }; - - /** - * @param {string} sSignature - * @param {string=} sFrom - * @param {string=} sData - * @param {string=} sComposeType - * @return {string} - */ - PopupsComposeViewModel.prototype.convertSignature = function (sSignature, sFrom, sData, sComposeType) - { - var bHtml = false, bData = false; - if ('' !== sSignature) - { - if (':HTML:' === sSignature.substr(0, 6)) - { - bHtml = true; - sSignature = sSignature.substr(6); - } - - sSignature = sSignature.replace(/[\r]/g, ''); - - sFrom = Utils.pString(sFrom); - if ('' !== sFrom) - { - sSignature = sSignature.replace(/{{FROM}}/g, sFrom); - } - - sSignature = sSignature.replace(/[\s]{1,2}{{FROM}}/g, '{{FROM}}'); - - sSignature = sSignature.replace(/{{FROM}}/g, ''); - sSignature = sSignature.replace(/{{DATE}}/g, moment().format('llll')); - - if (sData && Enums.ComposeType.Empty === sComposeType && - -1 < sSignature.indexOf('{{DATA}}')) - { - bData = true; - sSignature = sSignature.replace('{{DATA}}', sData); - } - - sSignature = sSignature.replace(/{{DATA}}/g, ''); - - if (!bHtml) - { - sSignature = Utils.convertPlainTextToHtml(sSignature); - } - } - - if (sData && !bData) - { - switch (sComposeType) - { - case Enums.ComposeType.Empty: - sSignature = sData + '
' + sSignature; - break; - default: - sSignature = sSignature + '
' + sData; - break; - } - } - - return sSignature; - }; - - PopupsComposeViewModel.prototype.editor = function (fOnInit) - { - if (fOnInit) - { - var self = this; - if (!this.oEditor && this.composeEditorArea()) - { - _.delay(function () { - self.oEditor = new HtmlEditor(self.composeEditorArea(), null, function () { - fOnInit(self.oEditor); - }, function (bHtml) { - self.isHtml(!!bHtml); - }); - }, 300); - } - else if (this.oEditor) - { - fOnInit(this.oEditor); - } - } - }; - - /** - * @param {string=} sType = Enums.ComposeType.Empty - * @param {?MessageModel|Array=} oMessageOrArray = null - * @param {Array=} aToEmails = null - * @param {string=} sCustomSubject = null - * @param {string=} sCustomPlainText = null - */ - PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToEmails, sCustomSubject, sCustomPlainText) - { - kn.routeOff(); - - var - self = this, - sFrom = '', - sTo = '', - sCc = '', - sDate = '', - sSubject = '', - oText = null, - sText = '', - sReplyTitle = '', - aResplyAllParts = [], - oExcludeEmail = {}, - mEmail = Data.accountEmail(), - sSignature = Data.signature(), - bSignatureToAll = Data.signatureToAll(), - aDownloads = [], - aDraftInfo = null, - oMessage = null, - sComposeType = sType || Enums.ComposeType.Empty, - fEmailArrayToStringLineHelper = function (aList, bFriendly) { - - var - iIndex = 0, - iLen = aList.length, - aResult = [] - ; - - for (; iIndex < iLen; iIndex++) - { - aResult.push(aList[iIndex].toLine(!!bFriendly)); - } - - return aResult.join(', '); - } - ; - - oMessageOrArray = oMessageOrArray || null; - if (oMessageOrArray && Utils.isNormal(oMessageOrArray)) - { - oMessage = Utils.isArray(oMessageOrArray) && 1 === oMessageOrArray.length ? oMessageOrArray[0] : - (!Utils.isArray(oMessageOrArray) ? oMessageOrArray : null); - } - - if (null !== mEmail) - { - oExcludeEmail[mEmail] = true; - } - - this.currentIdentityID(this.findIdentityIdByMessage(sComposeType, oMessage)); - this.reset(); - - if (Utils.isNonEmptyArray(aToEmails)) - { - this.to(fEmailArrayToStringLineHelper(aToEmails)); - } - - if ('' !== sComposeType && oMessage) - { - sDate = oMessage.fullFormatDateValue(); - sSubject = oMessage.subject(); - aDraftInfo = oMessage.aDraftInfo; - - oText = $(oMessage.body).clone(); - if (oText) - { - oText.find('blockquote.rl-bq-switcher').each(function () { - $(this).removeClass('rl-bq-switcher hidden-bq'); - }); - oText.find('.rlBlockquoteSwitcher').each(function () { - $(this).remove(); - }); - } - - oText.find('[data-html-editor-font-wrapper]').removeAttr('data-html-editor-font-wrapper'); - sText = oText.html(); - - switch (sComposeType) - { - case Enums.ComposeType.Empty: - break; - - case Enums.ComposeType.Reply: - this.to(fEmailArrayToStringLineHelper(oMessage.replyEmails(oExcludeEmail))); - this.subject(Utils.replySubjectAdd('Re', sSubject)); - this.prepearMessageAttachments(oMessage, sComposeType); - this.aDraftInfo = ['reply', oMessage.uid, oMessage.folderFullNameRaw]; - this.sInReplyTo = oMessage.sMessageId; - this.sReferences = Utils.trim(this.sInReplyTo + ' ' + oMessage.sReferences); - break; - - case Enums.ComposeType.ReplyAll: - aResplyAllParts = oMessage.replyAllEmails(oExcludeEmail); - this.to(fEmailArrayToStringLineHelper(aResplyAllParts[0])); - this.cc(fEmailArrayToStringLineHelper(aResplyAllParts[1])); - this.subject(Utils.replySubjectAdd('Re', sSubject)); - this.prepearMessageAttachments(oMessage, sComposeType); - this.aDraftInfo = ['reply', oMessage.uid, oMessage.folderFullNameRaw]; - this.sInReplyTo = oMessage.sMessageId; - this.sReferences = Utils.trim(this.sInReplyTo + ' ' + oMessage.references()); - break; - - case Enums.ComposeType.Forward: - this.subject(Utils.replySubjectAdd('Fwd', sSubject)); - this.prepearMessageAttachments(oMessage, sComposeType); - this.aDraftInfo = ['forward', oMessage.uid, oMessage.folderFullNameRaw]; - this.sInReplyTo = oMessage.sMessageId; - this.sReferences = Utils.trim(this.sInReplyTo + ' ' + oMessage.sReferences); - break; - - case Enums.ComposeType.ForwardAsAttachment: - this.subject(Utils.replySubjectAdd('Fwd', sSubject)); - this.prepearMessageAttachments(oMessage, sComposeType); - this.aDraftInfo = ['forward', oMessage.uid, oMessage.folderFullNameRaw]; - this.sInReplyTo = oMessage.sMessageId; - this.sReferences = Utils.trim(this.sInReplyTo + ' ' + oMessage.sReferences); - break; - - case Enums.ComposeType.Draft: - this.to(fEmailArrayToStringLineHelper(oMessage.to)); - this.cc(fEmailArrayToStringLineHelper(oMessage.cc)); - this.bcc(fEmailArrayToStringLineHelper(oMessage.bcc)); - - this.bFromDraft = true; - - this.draftFolder(oMessage.folderFullNameRaw); - this.draftUid(oMessage.uid); - - this.subject(sSubject); - this.prepearMessageAttachments(oMessage, sComposeType); - - this.aDraftInfo = Utils.isNonEmptyArray(aDraftInfo) && 3 === aDraftInfo.length ? aDraftInfo : null; - this.sInReplyTo = oMessage.sInReplyTo; - this.sReferences = oMessage.sReferences; - break; - - case Enums.ComposeType.EditAsNew: - this.to(fEmailArrayToStringLineHelper(oMessage.to)); - this.cc(fEmailArrayToStringLineHelper(oMessage.cc)); - this.bcc(fEmailArrayToStringLineHelper(oMessage.bcc)); - - this.subject(sSubject); - this.prepearMessageAttachments(oMessage, sComposeType); - - this.aDraftInfo = Utils.isNonEmptyArray(aDraftInfo) && 3 === aDraftInfo.length ? aDraftInfo : null; - this.sInReplyTo = oMessage.sInReplyTo; - this.sReferences = oMessage.sReferences; - break; - } - - switch (sComposeType) - { - case Enums.ComposeType.Reply: - case Enums.ComposeType.ReplyAll: - sFrom = oMessage.fromToLine(false, true); - sReplyTitle = Utils.i18n('COMPOSE/REPLY_MESSAGE_TITLE', { - 'DATETIME': sDate, - 'EMAIL': sFrom - }); - - sText = '

' + sReplyTitle + ':' + - '

' + sText + '

'; - - break; - - case Enums.ComposeType.Forward: - sFrom = oMessage.fromToLine(false, true); - sTo = oMessage.toToLine(false, true); - sCc = oMessage.ccToLine(false, true); - sText = '


' + Utils.i18n('COMPOSE/FORWARD_MESSAGE_TOP_TITLE') + - '
' + Utils.i18n('COMPOSE/FORWARD_MESSAGE_TOP_FROM') + ': ' + sFrom + - '
' + Utils.i18n('COMPOSE/FORWARD_MESSAGE_TOP_TO') + ': ' + sTo + - (0 < sCc.length ? '
' + Utils.i18n('COMPOSE/FORWARD_MESSAGE_TOP_CC') + ': ' + sCc : '') + - '
' + Utils.i18n('COMPOSE/FORWARD_MESSAGE_TOP_SENT') + ': ' + Utils.encodeHtml(sDate) + - '
' + Utils.i18n('COMPOSE/FORWARD_MESSAGE_TOP_SUBJECT') + ': ' + Utils.encodeHtml(sSubject) + - '

' + sText; - break; - case Enums.ComposeType.ForwardAsAttachment: - sText = ''; - break; - } - - if (bSignatureToAll && '' !== sSignature && - Enums.ComposeType.EditAsNew !== sComposeType && Enums.ComposeType.Draft !== sComposeType) - { - sText = this.convertSignature(sSignature, fEmailArrayToStringLineHelper(oMessage.from, true), sText, sComposeType); - } - - this.editor(function (oEditor) { - oEditor.setHtml(sText, false); - if (!oMessage.isHtml()) - { - oEditor.modeToggle(false); - } - }); - } - else if (Enums.ComposeType.Empty === sComposeType) - { - this.subject(Utils.isNormal(sCustomSubject) ? '' + sCustomSubject : ''); - - sText = Utils.isNormal(sCustomPlainText) ? '' + sCustomPlainText : ''; - if (bSignatureToAll && '' !== sSignature) - { - sText = this.convertSignature(sSignature, '', - Utils.convertPlainTextToHtml(sText), sComposeType); - } - - this.editor(function (oEditor) { - oEditor.setHtml(sText, false); - if (Enums.EditorDefaultType.Html !== Data.editorDefaultType()) - { - oEditor.modeToggle(false); - } - }); - } - else if (Utils.isNonEmptyArray(oMessageOrArray)) - { - _.each(oMessageOrArray, function (oMessage) { - self.addMessageAsAttachment(oMessage); - }); - } - - aDownloads = this.getAttachmentsDownloadsForUpload(); - if (Utils.isNonEmptyArray(aDownloads)) - { - Remote.messageUploadAttachments(function (sResult, oData) { - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - var - oAttachment = null, - sTempName = '' - ; - - if (!self.viewModelVisibility()) - { - for (sTempName in oData.Result) - { - if (oData.Result.hasOwnProperty(sTempName)) - { - oAttachment = self.getAttachmentById(oData.Result[sTempName]); - if (oAttachment) - { - oAttachment.tempName(sTempName); - } - } - } - } - } - else - { - self.setMessageAttachmentFailedDowbloadText(); - } - - }, aDownloads); - } - - this.triggerForResize(); - }; - - PopupsComposeViewModel.prototype.onFocus = function () - { - if ('' === this.to()) - { - this.to.focusTrigger(!this.to.focusTrigger()); - } - else if (this.oEditor) - { - this.oEditor.focus(); - } - - this.triggerForResize(); - }; - - PopupsComposeViewModel.prototype.editorResize = function () - { - if (this.oEditor) - { - this.oEditor.resize(); - } - }; - - PopupsComposeViewModel.prototype.tryToClosePopup = function () - { - var - self = this, - PopupsAskViewModel = __webpack_require__(/*! View:Popup:Ask */ 31) - ; - - if (!kn.isPopupVisible(PopupsAskViewModel)) - { - kn.showScreenPopup(PopupsAskViewModel, [Utils.i18n('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () { - if (self.modalVisibility()) - { - Utils.delegateRun(self, 'closeCommand'); - } - }]); - } - }; - - PopupsComposeViewModel.prototype.onBuild = function () - { - this.initUploader(); - - var - self = this, - oScript = null - ; - - key('ctrl+q, command+q', Enums.KeyState.Compose, function () { - self.identitiesDropdownTrigger(true); - return false; - }); - - key('ctrl+s, command+s', Enums.KeyState.Compose, function () { - self.saveCommand(); - return false; - }); - - key('ctrl+enter, command+enter', Enums.KeyState.Compose, function () { - self.sendCommand(); - return false; - }); - - key('esc', Enums.KeyState.Compose, function () { - if (self.modalVisibility()) - { - self.tryToClosePopup(); - } - return false; - }); - - Globals.$win.on('resize', function () { - self.triggerForResize(); - }); - - if (this.dropboxEnabled()) - { - oScript = window.document.createElement('script'); - oScript.type = 'text/javascript'; - oScript.src = 'https://www.dropbox.com/static/api/1/dropins.js'; - $(oScript).attr('id', 'dropboxjs').attr('data-app-key', Settings.settingsGet('DropboxApiKey')); - - window.document.body.appendChild(oScript); - } - - if (this.driveEnabled()) - { - $.getScript('https://apis.google.com/js/api.js', function () { - if (window.gapi) - { - self.driveVisible(true); - } - }); - } - }; - - PopupsComposeViewModel.prototype.driveCallback = function (sAccessToken, oData) - { - if (oData && window.XMLHttpRequest && window.google && - oData[window.google.picker.Response.ACTION] === window.google.picker.Action.PICKED && - oData[window.google.picker.Response.DOCUMENTS] && oData[window.google.picker.Response.DOCUMENTS][0] && - oData[window.google.picker.Response.DOCUMENTS][0]['id']) - { - var - self = this, - oRequest = new window.XMLHttpRequest() - ; - - oRequest.open('GET', 'https://www.googleapis.com/drive/v2/files/' + oData[window.google.picker.Response.DOCUMENTS][0]['id']); - oRequest.setRequestHeader('Authorization', 'Bearer ' + sAccessToken); - oRequest.addEventListener('load', function() { - if (oRequest && oRequest.responseText) - { - var oItem = JSON.parse(oRequest.responseText), fExport = function (oItem, sMimeType, sExt) { - if (oItem && oItem['exportLinks']) - { - if (oItem['exportLinks'][sMimeType]) - { - oItem['downloadUrl'] = oItem['exportLinks'][sMimeType]; - oItem['title'] = oItem['title'] + '.' + sExt; - oItem['mimeType'] = sMimeType; - } - else if (oItem['exportLinks']['application/pdf']) - { - oItem['downloadUrl'] = oItem['exportLinks']['application/pdf']; - oItem['title'] = oItem['title'] + '.pdf'; - oItem['mimeType'] = 'application/pdf'; - } - } - }; - - if (oItem && !oItem['downloadUrl'] && oItem['mimeType'] && oItem['exportLinks']) - { - switch (oItem['mimeType'].toString().toLowerCase()) - { - case 'application/vnd.google-apps.document': - fExport(oItem, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'docx'); - break; - case 'application/vnd.google-apps.spreadsheet': - fExport(oItem, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xlsx'); - break; - case 'application/vnd.google-apps.drawing': - fExport(oItem, 'image/png', 'png'); - break; - case 'application/vnd.google-apps.presentation': - fExport(oItem, 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'pptx'); - break; - default: - fExport(oItem, 'application/pdf', 'pdf'); - break; - } - } - - if (oItem && oItem['downloadUrl']) - { - self.addDriveAttachment(oItem, sAccessToken); - } - } - }); - - oRequest.send(); - } - }; - - PopupsComposeViewModel.prototype.driveCreatePiker = function (oOauthToken) - { - if (window.gapi && oOauthToken && oOauthToken.access_token) - { - var self = this; - - window.gapi.load('picker', {'callback': function () { - - if (window.google && window.google.picker) - { - var drivePicker = new window.google.picker.PickerBuilder() - .addView( - new window.google.picker.DocsView() - .setIncludeFolders(true) - ) - .setAppId(Settings.settingsGet('GoogleClientID')) - .setOAuthToken(oOauthToken.access_token) - .setCallback(_.bind(self.driveCallback, self, oOauthToken.access_token)) - .enableFeature(window.google.picker.Feature.NAV_HIDDEN) - .build() - ; - - drivePicker.setVisible(true); - } - }}); - } - }; - - PopupsComposeViewModel.prototype.driveOpenPopup = function () - { - if (window.gapi) - { - var self = this; - - window.gapi.load('auth', {'callback': function () { - - var oAuthToken = window.gapi.auth.getToken(); - if (!oAuthToken) - { - window.gapi.auth.authorize({ - 'client_id': Settings.settingsGet('GoogleClientID'), - 'scope': 'https://www.googleapis.com/auth/drive.readonly', - 'immediate': true - }, function (oAuthResult) { - if (oAuthResult && !oAuthResult.error) - { - var oAuthToken = window.gapi.auth.getToken(); - if (oAuthToken) - { - self.driveCreatePiker(oAuthToken); - } - } - else - { - window.gapi.auth.authorize({ - 'client_id': Settings.settingsGet('GoogleClientID'), - 'scope': 'https://www.googleapis.com/auth/drive.readonly', - 'immediate': false - }, function (oAuthResult) { - if (oAuthResult && !oAuthResult.error) - { - var oAuthToken = window.gapi.auth.getToken(); - if (oAuthToken) - { - self.driveCreatePiker(oAuthToken); - } - } - }); - } - }); - } - else - { - self.driveCreatePiker(oAuthToken); - } - }}); - } - }; - - /** - * @param {string} sId - * @return {?Object} - */ - PopupsComposeViewModel.prototype.getAttachmentById = function (sId) - { - var - aAttachments = this.attachments(), - iIndex = 0, - iLen = aAttachments.length - ; - - for (; iIndex < iLen; iIndex++) - { - if (aAttachments[iIndex] && sId === aAttachments[iIndex].id) - { - return aAttachments[iIndex]; - } - } - - return null; - }; - - PopupsComposeViewModel.prototype.initUploader = function () - { - if (this.composeUploaderButton()) - { - var - oUploadCache = {}, - iAttachmentSizeLimit = Utils.pInt(Settings.settingsGet('AttachmentLimit')), - oJua = new Jua({ - 'action': LinkBuilder.upload(), - 'name': 'uploader', - 'queueSize': 2, - 'multipleSizeLimit': 50, - 'disableFolderDragAndDrop': false, - 'clickElement': this.composeUploaderButton(), - 'dragAndDropElement': this.composeUploaderDropPlace() - }) - ; - - if (oJua) - { - oJua - // .on('onLimitReached', function (iLimit) { - // alert(iLimit); - // }) - .on('onDragEnter', _.bind(function () { - this.dragAndDropOver(true); - }, this)) - .on('onDragLeave', _.bind(function () { - this.dragAndDropOver(false); - }, this)) - .on('onBodyDragEnter', _.bind(function () { - this.dragAndDropVisible(true); - }, this)) - .on('onBodyDragLeave', _.bind(function () { - this.dragAndDropVisible(false); - }, this)) - .on('onProgress', _.bind(function (sId, iLoaded, iTotal) { - var oItem = null; - if (Utils.isUnd(oUploadCache[sId])) - { - oItem = this.getAttachmentById(sId); - if (oItem) - { - oUploadCache[sId] = oItem; - } - } - else - { - oItem = oUploadCache[sId]; - } - - if (oItem) - { - oItem.progress(' - ' + window.Math.floor(iLoaded / iTotal * 100) + '%'); - } - - }, this)) - .on('onSelect', _.bind(function (sId, oData) { - - this.dragAndDropOver(false); - - var - that = this, - sFileName = Utils.isUnd(oData.FileName) ? '' : oData.FileName.toString(), - mSize = Utils.isNormal(oData.Size) ? Utils.pInt(oData.Size) : null, - oAttachment = new ComposeAttachmentModel(sId, sFileName, mSize) - ; - - oAttachment.cancel = (function (sId) { - - return function () { - that.attachments.remove(function (oItem) { - return oItem && oItem.id === sId; - }); - - if (oJua) - { - oJua.cancel(sId); - } - }; - - }(sId)); - - this.attachments.push(oAttachment); - - if (0 < mSize && 0 < iAttachmentSizeLimit && iAttachmentSizeLimit < mSize) - { - oAttachment.error(Utils.i18n('UPLOAD/ERROR_FILE_IS_TOO_BIG')); - return false; - } - - return true; - - }, this)) - .on('onStart', _.bind(function (sId) { - - var - oItem = null - ; - - if (Utils.isUnd(oUploadCache[sId])) - { - oItem = this.getAttachmentById(sId); - if (oItem) - { - oUploadCache[sId] = oItem; - } - } - else - { - oItem = oUploadCache[sId]; - } - - if (oItem) - { - oItem.waiting(false); - oItem.uploading(true); - } - - }, this)) - .on('onComplete', _.bind(function (sId, bResult, oData) { - - var - sError = '', - mErrorCode = null, - oAttachmentJson = null, - oAttachment = this.getAttachmentById(sId) - ; - - oAttachmentJson = bResult && oData && oData.Result && oData.Result.Attachment ? oData.Result.Attachment : null; - mErrorCode = oData && oData.Result && oData.Result.ErrorCode ? oData.Result.ErrorCode : null; - - if (null !== mErrorCode) - { - sError = Utils.getUploadErrorDescByCode(mErrorCode); - } - else if (!oAttachmentJson) - { - sError = Utils.i18n('UPLOAD/ERROR_UNKNOWN'); - } - - if (oAttachment) - { - if ('' !== sError && 0 < sError.length) - { - oAttachment - .waiting(false) - .uploading(false) - .error(sError) - ; - } - else if (oAttachmentJson) - { - oAttachment - .waiting(false) - .uploading(false) - ; - - oAttachment.initByUploadJson(oAttachmentJson); - } - - if (Utils.isUnd(oUploadCache[sId])) - { - delete (oUploadCache[sId]); - } - } - - }, this)) - ; - - this - .addAttachmentEnabled(true) - .dragAndDropEnabled(oJua.isDragAndDropSupported()) - ; - } - else - { - this - .addAttachmentEnabled(false) - .dragAndDropEnabled(false) - ; - } - } - }; - - /** - * @return {Object} - */ - PopupsComposeViewModel.prototype.prepearAttachmentsForSendOrSave = function () - { - var oResult = {}; - _.each(this.attachmentsInReady(), function (oItem) { - if (oItem && '' !== oItem.tempName() && oItem.enabled()) - { - oResult[oItem.tempName()] = [ - oItem.fileName(), - oItem.isInline ? '1' : '0', - oItem.CID, - oItem.contentLocation - ]; - } - }); - - return oResult; - }; - - /** - * @param {MessageModel} oMessage - */ - PopupsComposeViewModel.prototype.addMessageAsAttachment = function (oMessage) - { - if (oMessage) - { - var - self = this, - oAttachment = null, - sTemp = oMessage.subject(), - fCancelFunc = function (sId) { - return function () { - self.attachments.remove(function (oItem) { - return oItem && oItem.id === sId; - }); - }; - } - ; - - sTemp = '.eml' === sTemp.substr(-4).toLowerCase() ? sTemp : sTemp + '.eml'; - oAttachment = new ComposeAttachmentModel( - oMessage.requestHash, sTemp, oMessage.size() - ); - - oAttachment.fromMessage = true; - oAttachment.cancel = fCancelFunc(oMessage.requestHash); - oAttachment.waiting(false).uploading(true); - - this.attachments.push(oAttachment); - } - }; - - /** - * @param {Object} oDropboxFile - * @return {boolean} - */ - PopupsComposeViewModel.prototype.addDropboxAttachment = function (oDropboxFile) - { - var - self = this, - oAttachment = null, - fCancelFunc = function (sId) { - return function () { - self.attachments.remove(function (oItem) { - return oItem && oItem.id === sId; - }); - }; - }, - iAttachmentSizeLimit = Utils.pInt(Settings.settingsGet('AttachmentLimit')), - mSize = oDropboxFile['bytes'] - ; - - oAttachment = new ComposeAttachmentModel( - oDropboxFile['link'], oDropboxFile['name'], mSize - ); - - oAttachment.fromMessage = false; - oAttachment.cancel = fCancelFunc(oDropboxFile['link']); - oAttachment.waiting(false).uploading(true); - - this.attachments.push(oAttachment); - - if (0 < mSize && 0 < iAttachmentSizeLimit && iAttachmentSizeLimit < mSize) - { - oAttachment.uploading(false); - oAttachment.error(Utils.i18n('UPLOAD/ERROR_FILE_IS_TOO_BIG')); - return false; - } - - Remote.composeUploadExternals(function (sResult, oData) { - - var bResult = false; - oAttachment.uploading(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - if (oData.Result[oAttachment.id]) - { - bResult = true; - oAttachment.tempName(oData.Result[oAttachment.id]); - } - } - - if (!bResult) - { - oAttachment.error(Utils.getUploadErrorDescByCode(Enums.UploadErrorCode.FileNoUploaded)); - } - - }, [oDropboxFile['link']]); - - return true; - }; - - /** - * @param {Object} oDriveFile - * @param {string} sAccessToken - * @return {boolean} - */ - PopupsComposeViewModel.prototype.addDriveAttachment = function (oDriveFile, sAccessToken) - { - var - self = this, - fCancelFunc = function (sId) { - return function () { - self.attachments.remove(function (oItem) { - return oItem && oItem.id === sId; - }); - }; - }, - iAttachmentSizeLimit = Utils.pInt(Settings.settingsGet('AttachmentLimit')), - oAttachment = null, - mSize = oDriveFile['fileSize'] ? Utils.pInt(oDriveFile['fileSize']) : 0 - ; - - oAttachment = new ComposeAttachmentModel( - oDriveFile['downloadUrl'], oDriveFile['title'], mSize - ); - - oAttachment.fromMessage = false; - oAttachment.cancel = fCancelFunc(oDriveFile['downloadUrl']); - oAttachment.waiting(false).uploading(true); - - this.attachments.push(oAttachment); - - if (0 < mSize && 0 < iAttachmentSizeLimit && iAttachmentSizeLimit < mSize) - { - oAttachment.uploading(false); - oAttachment.error(Utils.i18n('UPLOAD/ERROR_FILE_IS_TOO_BIG')); - return false; - } - - Remote.composeUploadDrive(function (sResult, oData) { - - var bResult = false; - oAttachment.uploading(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - if (oData.Result[oAttachment.id]) - { - bResult = true; - oAttachment.tempName(oData.Result[oAttachment.id][0]); - oAttachment.size(Utils.pInt(oData.Result[oAttachment.id][1])); - } - } - - if (!bResult) - { - oAttachment.error(Utils.getUploadErrorDescByCode(Enums.UploadErrorCode.FileNoUploaded)); - } - - }, oDriveFile['downloadUrl'], sAccessToken); - - return true; - }; - - /** - * @param {MessageModel} oMessage - * @param {string} sType - */ - PopupsComposeViewModel.prototype.prepearMessageAttachments = function (oMessage, sType) - { - if (oMessage) - { - var - self = this, - aAttachments = Utils.isNonEmptyArray(oMessage.attachments()) ? oMessage.attachments() : [], - iIndex = 0, - iLen = aAttachments.length, - oAttachment = null, - oItem = null, - bAdd = false, - fCancelFunc = function (sId) { - return function () { - self.attachments.remove(function (oItem) { - return oItem && oItem.id === sId; - }); - }; - } - ; - - if (Enums.ComposeType.ForwardAsAttachment === sType) - { - this.addMessageAsAttachment(oMessage); - } - else - { - for (; iIndex < iLen; iIndex++) - { - oItem = aAttachments[iIndex]; - - bAdd = false; - switch (sType) { - case Enums.ComposeType.Reply: - case Enums.ComposeType.ReplyAll: - bAdd = oItem.isLinked; - break; - - case Enums.ComposeType.Forward: - case Enums.ComposeType.Draft: - case Enums.ComposeType.EditAsNew: - bAdd = true; - break; - } - - if (bAdd) - { - oAttachment = new ComposeAttachmentModel( - oItem.download, oItem.fileName, oItem.estimatedSize, - oItem.isInline, oItem.isLinked, oItem.cid, oItem.contentLocation - ); - - oAttachment.fromMessage = true; - oAttachment.cancel = fCancelFunc(oItem.download); - oAttachment.waiting(false).uploading(true); - - this.attachments.push(oAttachment); - } - } - } - } - }; - - PopupsComposeViewModel.prototype.removeLinkedAttachments = function () - { - this.attachments.remove(function (oItem) { - return oItem && oItem.isLinked; - }); - }; - - PopupsComposeViewModel.prototype.setMessageAttachmentFailedDowbloadText = function () - { - _.each(this.attachments(), function(oAttachment) { - if (oAttachment && oAttachment.fromMessage) - { - oAttachment - .waiting(false) - .uploading(false) - .error(Utils.getUploadErrorDescByCode(Enums.UploadErrorCode.FileNoUploaded)) - ; - } - }, this); - }; - - /** - * @param {boolean=} bIncludeAttachmentInProgress = true - * @return {boolean} - */ - PopupsComposeViewModel.prototype.isEmptyForm = function (bIncludeAttachmentInProgress) - { - bIncludeAttachmentInProgress = Utils.isUnd(bIncludeAttachmentInProgress) ? true : !!bIncludeAttachmentInProgress; - var bAttach = bIncludeAttachmentInProgress ? - 0 === this.attachments().length : 0 === this.attachmentsInReady().length; - - return 0 === this.to().length && - 0 === this.cc().length && - 0 === this.bcc().length && - 0 === this.subject().length && - bAttach && - (!this.oEditor || '' === this.oEditor.getData()) - ; - }; - - PopupsComposeViewModel.prototype.reset = function () - { - this.to(''); - this.cc(''); - this.bcc(''); - this.replyTo(''); - this.subject(''); - - this.requestReadReceipt(false); - - this.aDraftInfo = null; - this.sInReplyTo = ''; - this.bFromDraft = false; - this.sReferences = ''; - - this.sendError(false); - this.sendSuccessButSaveError(false); - this.savedError(false); - this.savedTime(0); - this.savedOrSendingText(''); - this.emptyToError(false); - this.attachmentsInProcessError(false); - this.showCcAndBcc(false); - - this.attachments([]); - this.dragAndDropOver(false); - this.dragAndDropVisible(false); - - this.draftFolder(''); - this.draftUid(''); - - this.sending(false); - this.saving(false); - - if (this.oEditor) - { - this.oEditor.clear(false); - } - }; - - /** - * @return {Array} - */ - PopupsComposeViewModel.prototype.getAttachmentsDownloadsForUpload = function () - { - return _.map(_.filter(this.attachments(), function (oItem) { - return oItem && '' === oItem.tempName(); - }), function (oItem) { - return oItem.id; - }); - }; - - PopupsComposeViewModel.prototype.triggerForResize = function () - { - this.resizer(!this.resizer()); - this.editorResizeThrottle(); - }; - - module.exports = PopupsComposeViewModel; - - }()); - -/***/ }, -/* 22 */, -/* 23 */, -/* 24 */, -/* 25 */, -/* 26 */, -/* 27 */, -/* 28 */ -/*!**********************************!*\ - !*** ./dev/Common/HtmlEditor.js ***! - \**********************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - - Globals = __webpack_require__(/*! Common/Globals */ 7), - Settings = __webpack_require__(/*! Storage:Settings */ 10) - ; - - /** - * @constructor - * @param {Object} oElement - * @param {Function=} fOnBlur - * @param {Function=} fOnReady - * @param {Function=} fOnModeChange - */ - function HtmlEditor(oElement, fOnBlur, fOnReady, fOnModeChange) - { - this.editor = null; - this.iBlurTimer = 0; - this.fOnBlur = fOnBlur || null; - this.fOnReady = fOnReady || null; - this.fOnModeChange = fOnModeChange || null; - - this.$element = $(oElement); - - this.resize = _.throttle(_.bind(this.resize, this), 100); - - this.init(); - } - - HtmlEditor.prototype.blurTrigger = function () - { - if (this.fOnBlur) - { - var self = this; - window.clearTimeout(this.iBlurTimer); - this.iBlurTimer = window.setTimeout(function () { - self.fOnBlur(); - }, 200); - } - }; - - HtmlEditor.prototype.focusTrigger = function () - { - if (this.fOnBlur) - { - window.clearTimeout(this.iBlurTimer); - } - }; - - /** - * @return {boolean} - */ - HtmlEditor.prototype.isHtml = function () - { - return this.editor ? 'wysiwyg' === this.editor.mode : false; - }; - - /** - * @return {boolean} - */ - HtmlEditor.prototype.checkDirty = function () - { - return this.editor ? this.editor.checkDirty() : false; - }; - - HtmlEditor.prototype.resetDirty = function () - { - if (this.editor) - { - this.editor.resetDirty(); - } - }; - - /** - * @return {string} - */ - HtmlEditor.prototype.getData = function (bWrapIsHtml) - { - if (this.editor) - { - if ('plain' === this.editor.mode && this.editor.plugins.plain && this.editor.__plain) - { - return this.editor.__plain.getRawData(); - } - - return bWrapIsHtml ? - '
' + - this.editor.getData() + '
' : this.editor.getData(); - } - - return ''; - }; - - HtmlEditor.prototype.modeToggle = function (bPlain) - { - if (this.editor) - { - if (bPlain) - { - if ('plain' === this.editor.mode) - { - this.editor.setMode('wysiwyg'); - } - } - else - { - if ('wysiwyg' === this.editor.mode) - { - this.editor.setMode('plain'); - } - } - - this.resize(); - } - }; - - HtmlEditor.prototype.setHtml = function (sHtml, bFocus) - { - if (this.editor) - { - this.modeToggle(true); - this.editor.setData(sHtml); - - if (bFocus) - { - this.focus(); - } - } - }; - - HtmlEditor.prototype.setPlain = function (sPlain, bFocus) - { - if (this.editor) - { - this.modeToggle(false); - if ('plain' === this.editor.mode && this.editor.plugins.plain && this.editor.__plain) - { - return this.editor.__plain.setRawData(sPlain); - } - else - { - this.editor.setData(sPlain); - } - - if (bFocus) - { - this.focus(); - } - } - }; - - HtmlEditor.prototype.init = function () - { - if (this.$element && this.$element[0]) - { - var - self = this, - fInit = function () { - - var - oConfig = Globals.oHtmlEditorDefaultConfig, - sLanguage = Settings.settingsGet('Language'), - bSource = !!Settings.settingsGet('AllowHtmlEditorSourceButton') - ; - - if (bSource && oConfig.toolbarGroups && !oConfig.toolbarGroups.__SourceInited) - { - oConfig.toolbarGroups.__SourceInited = true; - oConfig.toolbarGroups.push({name: 'document', groups: ['mode', 'document', 'doctools']}); - } - - oConfig.enterMode = window.CKEDITOR.ENTER_BR; - oConfig.shiftEnterMode = window.CKEDITOR.ENTER_BR; - - oConfig.language = Globals.oHtmlEditorLangsMap[sLanguage] || 'en'; - if (window.CKEDITOR.env) - { - window.CKEDITOR.env.isCompatible = true; - } - - self.editor = window.CKEDITOR.appendTo(self.$element[0], oConfig); - - self.editor.on('key', function(oEvent) { - if (oEvent && oEvent.data && 9 /* Tab */ === oEvent.data.keyCode) - { - return false; - } - }); - - self.editor.on('blur', function() { - self.blurTrigger(); - }); - - self.editor.on('mode', function() { - - self.blurTrigger(); - - if (self.fOnModeChange) - { - self.fOnModeChange('plain' !== self.editor.mode); - } - }); - - self.editor.on('focus', function() { - self.focusTrigger(); - }); - - if (self.fOnReady) - { - self.editor.on('instanceReady', function () { - - self.editor.setKeystroke(window.CKEDITOR.CTRL + 65 /* A */, 'selectAll'); - - self.fOnReady(); - self.__resizable = true; - self.resize(); - }); - } - } - ; - - if (window.CKEDITOR) - { - fInit(); - } - else - { - window.__initEditor = fInit; - } - } - }; - - HtmlEditor.prototype.focus = function () - { - if (this.editor) - { - this.editor.focus(); - } - }; - - HtmlEditor.prototype.blur = function () - { - if (this.editor) - { - this.editor.focusManager.blur(true); - } - }; - - HtmlEditor.prototype.resize = function () - { - if (this.editor && this.__resizable) - { - try - { - this.editor.resize(this.$element.width(), this.$element.innerHeight()); - } - catch (e) {} - } - }; - - HtmlEditor.prototype.clear = function (bFocus) - { - this.setHtml('', bFocus); - }; - - - module.exports = HtmlEditor; - - }()); - -/***/ }, -/* 29 */ -/*!***********************************************!*\ - !*** ./dev/Screens/AbstractSettingsScreen.js ***! - \***********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractScreen = __webpack_require__(/*! Knoin:AbstractScreen */ 24) - ; - - /** - * @constructor - * @param {Array} aViewModels - * @extends KnoinAbstractScreen - */ - function AbstractSettingsScreen(aViewModels) - { - KnoinAbstractScreen.call(this, 'settings', aViewModels); - - this.menu = ko.observableArray([]); - - this.oCurrentSubScreen = null; - this.oViewModelPlace = null; - - this.setupSettings(); - } - - _.extend(AbstractSettingsScreen.prototype, KnoinAbstractScreen.prototype); - - /** - * @param {Function=} fCallback - */ - AbstractSettingsScreen.prototype.setupSettings = function (fCallback) - { - if (fCallback) - { - fCallback(); - } - }; - - AbstractSettingsScreen.prototype.onRoute = function (sSubName) - { - var - self = this, - oSettingsScreen = null, - RoutedSettingsViewModel = null, - oViewModelPlace = null, - oViewModelDom = null - ; - - RoutedSettingsViewModel = _.find(Globals.aViewModels['settings'], function (SettingsViewModel) { - return SettingsViewModel && SettingsViewModel.__rlSettingsData && - sSubName === SettingsViewModel.__rlSettingsData.Route; - }); - - if (RoutedSettingsViewModel) - { - if (_.find(Globals.aViewModels['settings-removed'], function (DisabledSettingsViewModel) { - return DisabledSettingsViewModel && DisabledSettingsViewModel === RoutedSettingsViewModel; - })) - { - RoutedSettingsViewModel = null; - } - - if (RoutedSettingsViewModel && _.find(Globals.aViewModels['settings-disabled'], function (DisabledSettingsViewModel) { - return DisabledSettingsViewModel && DisabledSettingsViewModel === RoutedSettingsViewModel; - })) - { - RoutedSettingsViewModel = null; - } - } - - if (RoutedSettingsViewModel) - { - if (RoutedSettingsViewModel.__builded && RoutedSettingsViewModel.__vm) - { - oSettingsScreen = RoutedSettingsViewModel.__vm; - } - else - { - oViewModelPlace = this.oViewModelPlace; - if (oViewModelPlace && 1 === oViewModelPlace.length) - { - oSettingsScreen = new RoutedSettingsViewModel(); - - oViewModelDom = $('
').addClass('rl-settings-view-model').hide(); - oViewModelDom.appendTo(oViewModelPlace); - - oSettingsScreen.viewModelDom = oViewModelDom; - - oSettingsScreen.__rlSettingsData = RoutedSettingsViewModel.__rlSettingsData; - - RoutedSettingsViewModel.__dom = oViewModelDom; - RoutedSettingsViewModel.__builded = true; - RoutedSettingsViewModel.__vm = oSettingsScreen; - - ko.applyBindingAccessorsToNode(oViewModelDom[0], { - 'i18nInit': true, - 'template': function () { return {'name': RoutedSettingsViewModel.__rlSettingsData.Template}; } - }, oSettingsScreen); - - Utils.delegateRun(oSettingsScreen, 'onBuild', [oViewModelDom]); - } - else - { - Utils.log('Cannot find sub settings view model position: SettingsSubScreen'); - } - } - - if (oSettingsScreen) - { - _.defer(function () { - // hide - if (self.oCurrentSubScreen) - { - Utils.delegateRun(self.oCurrentSubScreen, 'onHide'); - self.oCurrentSubScreen.viewModelDom.hide(); - } - // -- - - self.oCurrentSubScreen = oSettingsScreen; - - // show - if (self.oCurrentSubScreen) - { - self.oCurrentSubScreen.viewModelDom.show(); - Utils.delegateRun(self.oCurrentSubScreen, 'onShow'); - Utils.delegateRun(self.oCurrentSubScreen, 'onFocus', [], 200); - - _.each(self.menu(), function (oItem) { - oItem.selected(oSettingsScreen && oSettingsScreen.__rlSettingsData && oItem.route === oSettingsScreen.__rlSettingsData.Route); - }); - - $('#rl-content .b-settings .b-content .content').scrollTop(0); - } - // -- - - Utils.windowResize(); - }); - } - } - else - { - kn.setHash(LinkBuilder.settings(), false, true); - } - }; - - AbstractSettingsScreen.prototype.onHide = function () - { - if (this.oCurrentSubScreen && this.oCurrentSubScreen.viewModelDom) - { - Utils.delegateRun(this.oCurrentSubScreen, 'onHide'); - this.oCurrentSubScreen.viewModelDom.hide(); - } - }; - - AbstractSettingsScreen.prototype.onBuild = function () - { - _.each(Globals.aViewModels['settings'], function (SettingsViewModel) { - if (SettingsViewModel && SettingsViewModel.__rlSettingsData && - !_.find(Globals.aViewModels['settings-removed'], function (RemoveSettingsViewModel) { - return RemoveSettingsViewModel && RemoveSettingsViewModel === SettingsViewModel; - })) - { - this.menu.push({ - 'route': SettingsViewModel.__rlSettingsData.Route, - 'label': SettingsViewModel.__rlSettingsData.Label, - 'selected': ko.observable(false), - 'disabled': !!_.find(Globals.aViewModels['settings-disabled'], function (DisabledSettingsViewModel) { - return DisabledSettingsViewModel && DisabledSettingsViewModel === SettingsViewModel; - }) - }); - } - }, this); - - this.oViewModelPlace = $('#rl-content #rl-settings-subscreen'); - }; - - AbstractSettingsScreen.prototype.routes = function () - { - var - DefaultViewModel = _.find(Globals.aViewModels['settings'], function (SettingsViewModel) { - return SettingsViewModel && SettingsViewModel.__rlSettingsData && SettingsViewModel.__rlSettingsData['IsDefault']; - }), - sDefaultRoute = DefaultViewModel ? DefaultViewModel.__rlSettingsData['Route'] : 'general', - oRules = { - 'subname': /^(.*)$/, - 'normalize_': function (oRequest, oVals) { - oVals.subname = Utils.isUnd(oVals.subname) ? sDefaultRoute : Utils.pString(oVals.subname); - return [oVals.subname]; - } - } - ; - - return [ - ['{subname}/', oRules], - ['{subname}', oRules], - ['', oRules] - ]; - }; - - module.exports = AbstractSettingsScreen; - - }()); - -/***/ }, -/* 30 */, -/* 31 */, -/* 32 */, -/* 33 */, -/* 34 */, -/* 35 */, -/* 36 */ -/*!********************************!*\ - !*** ./dev/Common/Selector.js ***! - \********************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - key = __webpack_require__(/*! key */ 19), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @constructor - * @param {koProperty} oKoList - * @param {koProperty} oKoSelectedItem - * @param {string} sItemSelector - * @param {string} sItemSelectedSelector - * @param {string} sItemCheckedSelector - * @param {string} sItemFocusedSelector - */ - function Selector(oKoList, oKoSelectedItem, - sItemSelector, sItemSelectedSelector, sItemCheckedSelector, sItemFocusedSelector) - { - this.list = oKoList; - - this.listChecked = ko.computed(function () { - return _.filter(this.list(), function (oItem) { - return oItem.checked(); - }); - }, this).extend({'rateLimit': 0}); - - this.isListChecked = ko.computed(function () { - return 0 < this.listChecked().length; - }, this); - - this.focusedItem = ko.observable(null); - this.selectedItem = oKoSelectedItem; - this.selectedItemUseCallback = true; - - this.itemSelectedThrottle = _.debounce(_.bind(this.itemSelected, this), 300); - - this.listChecked.subscribe(function (aItems) { - if (0 < aItems.length) - { - if (null === this.selectedItem()) - { - this.selectedItem.valueHasMutated(); - } - else - { - this.selectedItem(null); - } - } - else if (this.bAutoSelect && this.focusedItem()) - { - this.selectedItem(this.focusedItem()); - } - }, this); - - this.selectedItem.subscribe(function (oItem) { - - if (oItem) - { - if (this.isListChecked()) - { - _.each(this.listChecked(), function (oSubItem) { - oSubItem.checked(false); - }); - } - - if (this.selectedItemUseCallback) - { - this.itemSelectedThrottle(oItem); - } - } - else if (this.selectedItemUseCallback) - { - this.itemSelected(null); - } - - }, this); - - this.selectedItem.extend({'toggleSubscribe': [null, - function (oPrev) { - if (oPrev) - { - oPrev.selected(false); - } - }, function (oNext) { - if (oNext) - { - oNext.selected(true); - } - } - ]}); - - this.focusedItem.extend({'toggleSubscribe': [null, - function (oPrev) { - if (oPrev) - { - oPrev.focused(false); - } - }, function (oNext) { - if (oNext) - { - oNext.focused(true); - } - } - ]}); - - this.oContentVisible = null; - this.oContentScrollable = null; - - this.sItemSelector = sItemSelector; - this.sItemSelectedSelector = sItemSelectedSelector; - this.sItemCheckedSelector = sItemCheckedSelector; - this.sItemFocusedSelector = sItemFocusedSelector; - - this.sLastUid = ''; - this.bAutoSelect = true; - this.oCallbacks = {}; - - this.emptyFunction = function () {}; - - this.focusedItem.subscribe(function (oItem) { - if (oItem) - { - this.sLastUid = this.getItemUid(oItem); - } - }, this); - - var - aCache = [], - aCheckedCache = [], - mFocused = null, - mSelected = null - ; - - this.list.subscribe(function (aItems) { - - var self = this; - if (Utils.isArray(aItems)) - { - _.each(aItems, function (oItem) { - if (oItem) - { - var sUid = self.getItemUid(oItem); - - aCache.push(sUid); - if (oItem.checked()) - { - aCheckedCache.push(sUid); - } - if (null === mFocused && oItem.focused()) - { - mFocused = sUid; - } - if (null === mSelected && oItem.selected()) - { - mSelected = sUid; - } - } - }); - } - }, this, 'beforeChange'); - - this.list.subscribe(function (aItems) { - - var - self = this, - oTemp = null, - bGetNext = false, - aUids = [], - mNextFocused = mFocused, - bChecked = false, - bSelected = false, - iLen = 0 - ; - - this.selectedItemUseCallback = false; - - this.focusedItem(null); - this.selectedItem(null); - - if (Utils.isArray(aItems)) - { - iLen = aCheckedCache.length; - - _.each(aItems, function (oItem) { - - var sUid = self.getItemUid(oItem); - aUids.push(sUid); - - if (null !== mFocused && mFocused === sUid) - { - self.focusedItem(oItem); - mFocused = null; - } - - if (0 < iLen && -1 < Utils.inArray(sUid, aCheckedCache)) - { - bChecked = true; - oItem.checked(true); - iLen--; - } - - if (!bChecked && null !== mSelected && mSelected === sUid) - { - bSelected = true; - self.selectedItem(oItem); - mSelected = null; - } - }); - - this.selectedItemUseCallback = true; - - if (!bChecked && !bSelected && this.bAutoSelect) - { - if (self.focusedItem()) - { - self.selectedItem(self.focusedItem()); - } - else if (0 < aItems.length) - { - if (null !== mNextFocused) - { - bGetNext = false; - mNextFocused = _.find(aCache, function (sUid) { - if (bGetNext && -1 < Utils.inArray(sUid, aUids)) - { - return sUid; - } - else if (mNextFocused === sUid) - { - bGetNext = true; - } - return false; - }); - - if (mNextFocused) - { - oTemp = _.find(aItems, function (oItem) { - return mNextFocused === self.getItemUid(oItem); - }); - } - } - - self.selectedItem(oTemp || null); - self.focusedItem(self.selectedItem()); - } - } - } - - aCache = []; - aCheckedCache = []; - mFocused = null; - mSelected = null; - - }, this); - } - - Selector.prototype.itemSelected = function (oItem) - { - if (this.isListChecked()) - { - if (!oItem) - { - (this.oCallbacks['onItemSelect'] || this.emptyFunction)(oItem || null); - } - } - else - { - if (oItem) - { - (this.oCallbacks['onItemSelect'] || this.emptyFunction)(oItem); - } - } - }; - - Selector.prototype.goDown = function (bForceSelect) - { - this.newSelectPosition(Enums.EventKeyCode.Down, false, bForceSelect); - }; - - Selector.prototype.goUp = function (bForceSelect) - { - this.newSelectPosition(Enums.EventKeyCode.Up, false, bForceSelect); - }; - - Selector.prototype.init = function (oContentVisible, oContentScrollable, sKeyScope) - { - this.oContentVisible = oContentVisible; - this.oContentScrollable = oContentScrollable; - - sKeyScope = sKeyScope || 'all'; - - if (this.oContentVisible && this.oContentScrollable) - { - var - self = this - ; - - $(this.oContentVisible) - .on('selectstart', function (oEvent) { - if (oEvent && oEvent.preventDefault) - { - oEvent.preventDefault(); - } - }) - .on('click', this.sItemSelector, function (oEvent) { - self.actionClick(ko.dataFor(this), oEvent); - }) - .on('click', this.sItemCheckedSelector, function (oEvent) { - var oItem = ko.dataFor(this); - if (oItem) - { - if (oEvent && oEvent.shiftKey) - { - self.actionClick(oItem, oEvent); - } - else - { - self.focusedItem(oItem); - oItem.checked(!oItem.checked()); - } - } - }) - ; - - key('enter', sKeyScope, function () { - if (self.focusedItem() && !self.focusedItem().selected()) - { - self.actionClick(self.focusedItem()); - return false; - } - - return true; - }); - - key('ctrl+up, command+up, ctrl+down, command+down', sKeyScope, function () { - return false; - }); - - key('up, shift+up, down, shift+down, home, end, pageup, pagedown, insert, space', sKeyScope, function (event, handler) { - if (event && handler && handler.shortcut) - { - // TODO - var iKey = 0; - switch (handler.shortcut) - { - case 'up': - case 'shift+up': - iKey = Enums.EventKeyCode.Up; - break; - case 'down': - case 'shift+down': - iKey = Enums.EventKeyCode.Down; - break; - case 'insert': - iKey = Enums.EventKeyCode.Insert; - break; - case 'space': - iKey = Enums.EventKeyCode.Space; - break; - case 'home': - iKey = Enums.EventKeyCode.Home; - break; - case 'end': - iKey = Enums.EventKeyCode.End; - break; - case 'pageup': - iKey = Enums.EventKeyCode.PageUp; - break; - case 'pagedown': - iKey = Enums.EventKeyCode.PageDown; - break; - } - - if (0 < iKey) - { - self.newSelectPosition(iKey, key.shift); - return false; - } - } - }); - } - }; - - Selector.prototype.autoSelect = function (bValue) - { - this.bAutoSelect = !!bValue; - }; - - /** - * @param {Object} oItem - * @returns {string} - */ - Selector.prototype.getItemUid = function (oItem) - { - var - sUid = '', - fGetItemUidCallback = this.oCallbacks['onItemGetUid'] || null - ; - - if (fGetItemUidCallback && oItem) - { - sUid = fGetItemUidCallback(oItem); - } - - return sUid.toString(); - }; - - /** - * @param {number} iEventKeyCode - * @param {boolean} bShiftKey - * @param {boolean=} bForceSelect = false - */ - Selector.prototype.newSelectPosition = function (iEventKeyCode, bShiftKey, bForceSelect) - { - var - iIndex = 0, - iPageStep = 10, - bNext = false, - bStop = false, - oResult = null, - aList = this.list(), - iListLen = aList ? aList.length : 0, - oFocused = this.focusedItem() - ; - - if (0 < iListLen) - { - if (!oFocused) - { - if (Enums.EventKeyCode.Down === iEventKeyCode || Enums.EventKeyCode.Insert === iEventKeyCode || Enums.EventKeyCode.Space === iEventKeyCode || Enums.EventKeyCode.Home === iEventKeyCode || Enums.EventKeyCode.PageUp === iEventKeyCode) - { - oResult = aList[0]; - } - else if (Enums.EventKeyCode.Up === iEventKeyCode || Enums.EventKeyCode.End === iEventKeyCode || Enums.EventKeyCode.PageDown === iEventKeyCode) - { - oResult = aList[aList.length - 1]; - } - } - else if (oFocused) - { - if (Enums.EventKeyCode.Down === iEventKeyCode || Enums.EventKeyCode.Up === iEventKeyCode || Enums.EventKeyCode.Insert === iEventKeyCode || Enums.EventKeyCode.Space === iEventKeyCode) - { - _.each(aList, function (oItem) { - if (!bStop) - { - switch (iEventKeyCode) { - case Enums.EventKeyCode.Up: - if (oFocused === oItem) - { - bStop = true; - } - else - { - oResult = oItem; - } - break; - case Enums.EventKeyCode.Down: - case Enums.EventKeyCode.Insert: - if (bNext) - { - oResult = oItem; - bStop = true; - } - else if (oFocused === oItem) - { - bNext = true; - } - break; - } - } - }); - } - else if (Enums.EventKeyCode.Home === iEventKeyCode || Enums.EventKeyCode.End === iEventKeyCode) - { - if (Enums.EventKeyCode.Home === iEventKeyCode) - { - oResult = aList[0]; - } - else if (Enums.EventKeyCode.End === iEventKeyCode) - { - oResult = aList[aList.length - 1]; - } - } - else if (Enums.EventKeyCode.PageDown === iEventKeyCode) - { - for (; iIndex < iListLen; iIndex++) - { - if (oFocused === aList[iIndex]) - { - iIndex += iPageStep; - iIndex = iListLen - 1 < iIndex ? iListLen - 1 : iIndex; - oResult = aList[iIndex]; - break; - } - } - } - else if (Enums.EventKeyCode.PageUp === iEventKeyCode) - { - for (iIndex = iListLen; iIndex >= 0; iIndex--) - { - if (oFocused === aList[iIndex]) - { - iIndex -= iPageStep; - iIndex = 0 > iIndex ? 0 : iIndex; - oResult = aList[iIndex]; - break; - } - } - } - } - } - - if (oResult) - { - this.focusedItem(oResult); - - if (oFocused) - { - if (bShiftKey) - { - if (Enums.EventKeyCode.Up === iEventKeyCode || Enums.EventKeyCode.Down === iEventKeyCode) - { - oFocused.checked(!oFocused.checked()); - } - } - else if (Enums.EventKeyCode.Insert === iEventKeyCode || Enums.EventKeyCode.Space === iEventKeyCode) - { - oFocused.checked(!oFocused.checked()); - } - } - - if ((this.bAutoSelect || !!bForceSelect) && - !this.isListChecked() && Enums.EventKeyCode.Space !== iEventKeyCode) - { - this.selectedItem(oResult); - } - - this.scrollToFocused(); - } - else if (oFocused) - { - if (bShiftKey && (Enums.EventKeyCode.Up === iEventKeyCode || Enums.EventKeyCode.Down === iEventKeyCode)) - { - oFocused.checked(!oFocused.checked()); - } - else if (Enums.EventKeyCode.Insert === iEventKeyCode || Enums.EventKeyCode.Space === iEventKeyCode) - { - oFocused.checked(!oFocused.checked()); - } - - this.focusedItem(oFocused); - } - }; - - /** - * @return {boolean} - */ - Selector.prototype.scrollToFocused = function () - { - if (!this.oContentVisible || !this.oContentScrollable) - { - return false; - } - - var - iOffset = 20, - oFocused = $(this.sItemFocusedSelector, this.oContentScrollable), - oPos = oFocused.position(), - iVisibleHeight = this.oContentVisible.height(), - iFocusedHeight = oFocused.outerHeight() - ; - - if (oPos && (oPos.top < 0 || oPos.top + iFocusedHeight > iVisibleHeight)) - { - if (oPos.top < 0) - { - this.oContentScrollable.scrollTop(this.oContentScrollable.scrollTop() + oPos.top - iOffset); - } - else - { - this.oContentScrollable.scrollTop(this.oContentScrollable.scrollTop() + oPos.top - iVisibleHeight + iFocusedHeight + iOffset); - } - - return true; - } - - return false; - }; - - /** - * @param {boolean=} bFast = false - * @return {boolean} - */ - Selector.prototype.scrollToTop = function (bFast) - { - if (!this.oContentVisible || !this.oContentScrollable) - { - return false; - } - - if (bFast) - { - this.oContentScrollable.scrollTop(0); - } - else - { - this.oContentScrollable.stop().animate({'scrollTop': 0}, 200); - } - - return true; - }; - - Selector.prototype.eventClickFunction = function (oItem, oEvent) - { - var - sUid = this.getItemUid(oItem), - iIndex = 0, - iLength = 0, - oListItem = null, - sLineUid = '', - bChangeRange = false, - bIsInRange = false, - aList = [], - bChecked = false - ; - - if (oEvent && oEvent.shiftKey) - { - if ('' !== sUid && '' !== this.sLastUid && sUid !== this.sLastUid) - { - aList = this.list(); - bChecked = oItem.checked(); - - for (iIndex = 0, iLength = aList.length; iIndex < iLength; iIndex++) - { - oListItem = aList[iIndex]; - sLineUid = this.getItemUid(oListItem); - - bChangeRange = false; - if (sLineUid === this.sLastUid || sLineUid === sUid) - { - bChangeRange = true; - } - - if (bChangeRange) - { - bIsInRange = !bIsInRange; - } - - if (bIsInRange || bChangeRange) - { - oListItem.checked(bChecked); - } - } - } - } - - this.sLastUid = '' === sUid ? '' : sUid; - }; - - /** - * @param {Object} oItem - * @param {Object=} oEvent - */ - Selector.prototype.actionClick = function (oItem, oEvent) - { - if (oItem) - { - var - bClick = true, - sUid = this.getItemUid(oItem) - ; - - if (oEvent) - { - if (oEvent.shiftKey && !oEvent.ctrlKey && !oEvent.altKey) - { - bClick = false; - if ('' === this.sLastUid) - { - this.sLastUid = sUid; - } - - oItem.checked(!oItem.checked()); - this.eventClickFunction(oItem, oEvent); - - this.focusedItem(oItem); - } - else if (oEvent.ctrlKey && !oEvent.shiftKey && !oEvent.altKey) - { - bClick = false; - this.focusedItem(oItem); - - if (this.selectedItem() && oItem !== this.selectedItem()) - { - this.selectedItem().checked(true); - } - - oItem.checked(!oItem.checked()); - } - } - - if (bClick) - { - this.focusedItem(oItem); - this.selectedItem(oItem); - - this.scrollToFocused(); - } - } - }; - - Selector.prototype.on = function (sEventName, fCallback) - { - this.oCallbacks[sEventName] = fCallback; - }; - - module.exports = Selector; - - }()); - -/***/ }, -/* 37 */, -/* 38 */, -/* 39 */, -/* 40 */, -/* 41 */ -/*!***********************************************************!*\ - !*** ./dev/ViewModels/AbstractSystemDropDownViewModel.js ***! - \***********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - key = __webpack_require__(/*! key */ 19), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function AbstractSystemDropDownViewModel() - { - KnoinAbstractViewModel.call(this, 'Right', 'SystemDropDown'); - - this.accounts = Data.accounts; - this.accountEmail = Data.accountEmail; - this.accountsLoading = Data.accountsLoading; - - this.accountMenuDropdownTrigger = ko.observable(false); - - this.capaAdditionalAccounts = Settings.capa(Enums.Capa.AdditionalAccounts); - - this.loading = ko.computed(function () { - return this.accountsLoading(); - }, this); - - this.accountClick = _.bind(this.accountClick, this); - } - - _.extend(AbstractSystemDropDownViewModel.prototype, KnoinAbstractViewModel.prototype); - - AbstractSystemDropDownViewModel.prototype.accountClick = function (oAccount, oEvent) - { - if (oAccount && oEvent && !Utils.isUnd(oEvent.which) && 1 === oEvent.which) - { - var self = this; - this.accountsLoading(true); - _.delay(function () { - self.accountsLoading(false); - }, 1000); - } - - return true; - }; - - AbstractSystemDropDownViewModel.prototype.emailTitle = function () - { - return Data.accountEmail(); - }; - - AbstractSystemDropDownViewModel.prototype.settingsClick = function () - { - __webpack_require__(/*! App:Knoin */ 5).setHash(LinkBuilder.settings()); - }; - - AbstractSystemDropDownViewModel.prototype.settingsHelp = function () - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:KeyboardShortcutsHelp */ 46)); - }; - - AbstractSystemDropDownViewModel.prototype.addAccountClick = function () - { - if (this.capaAdditionalAccounts) - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:AddAccount */ 42)); - } - }; - - AbstractSystemDropDownViewModel.prototype.logoutClick = function () - { - Remote.logout(function () { - if (window.__rlah_clear) - { - window.__rlah_clear(); - } - - __webpack_require__(/*! App:RainLoop */ 4).loginAndLogoutReload(true, - Settings.settingsGet('ParentEmail') && 0 < Settings.settingsGet('ParentEmail').length); - }); - }; - - AbstractSystemDropDownViewModel.prototype.onBuild = function () - { - var self = this; - key('`', [Enums.KeyState.MessageList, Enums.KeyState.MessageView, Enums.KeyState.Settings], function () { - if (self.viewModelVisibility()) - { - self.accountMenuDropdownTrigger(true); - } - }); - - // shortcuts help - key('shift+/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView, Enums.KeyState.Settings], function () { - if (self.viewModelVisibility()) - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:KeyboardShortcutsHelp */ 46)); - return false; - } - }); - }; - - module.exports = AbstractSystemDropDownViewModel; - - }()); - -/***/ }, -/* 42 */ -/*!************************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsAddAccountViewModel.js ***! - \************************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsAddAccountViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsAddAccount'); - - this.email = ko.observable(''); - this.password = ko.observable(''); - - this.emailError = ko.observable(false); - this.passwordError = ko.observable(false); - - this.email.subscribe(function () { - this.emailError(false); - }, this); - - this.password.subscribe(function () { - this.passwordError(false); - }, this); - - this.submitRequest = ko.observable(false); - this.submitError = ko.observable(''); - - this.emailFocus = ko.observable(false); - - this.addAccountCommand = Utils.createCommand(this, function () { - - this.emailError('' === Utils.trim(this.email())); - this.passwordError('' === Utils.trim(this.password())); - - if (this.emailError() || this.passwordError()) - { - return false; - } - - this.submitRequest(true); - - Remote.accountAdd(_.bind(function (sResult, oData) { - - this.submitRequest(false); - if (Enums.StorageResultType.Success === sResult && oData && 'AccountAdd' === oData.Action) - { - if (oData.Result) - { - __webpack_require__(/*! App:RainLoop */ 4).accountsAndIdentities(); - this.cancelCommand(); - } - else if (oData.ErrorCode) - { - this.submitError(Utils.getNotification(oData.ErrorCode)); - } - } - else - { - this.submitError(Utils.getNotification(Enums.Notification.UnknownError)); - } - - }, this), this.email(), '', this.password()); - - return true; - - }, function () { - return !this.submitRequest(); - }); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:AddAccount', 'PopupsAddAccountViewModel'], PopupsAddAccountViewModel); - _.extend(PopupsAddAccountViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsAddAccountViewModel.prototype.clearPopup = function () - { - this.email(''); - this.password(''); - - this.emailError(false); - this.passwordError(false); - - this.submitRequest(false); - this.submitError(''); - }; - - PopupsAddAccountViewModel.prototype.onShow = function () - { - this.clearPopup(); - }; - - PopupsAddAccountViewModel.prototype.onFocus = function () - { - this.emailFocus(true); - }; - - module.exports = PopupsAddAccountViewModel; - - }()); - -/***/ }, -/* 43 */ -/*!**********************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsContactsViewModel.js ***! - \**********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - key = __webpack_require__(/*! key */ 19), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Consts = __webpack_require__(/*! Common/Consts */ 17), - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1), - Selector = __webpack_require__(/*! Common/Selector */ 36), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - - EmailModel = __webpack_require__(/*! Model:Email */ 23), - ContactModel = __webpack_require__(/*! Model:Contact */ 54), - ContactTagModel = __webpack_require__(/*! Model:ContactTag */ 37), - ContactPropertyModel = __webpack_require__(/*! Model:ContactProperty */ 55), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsContactsViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsContacts'); - - var - self = this, - fFastClearEmptyListHelper = function (aList) { - if (aList && 0 < aList.length) { - self.viewProperties.removeAll(aList); - } - } - ; - - this.allowContactsSync = Data.allowContactsSync; - this.enableContactsSync = Data.enableContactsSync; - this.allowExport = !Globals.bMobileDevice; - - this.search = ko.observable(''); - this.contactsCount = ko.observable(0); - this.contacts = Data.contacts; - this.contactTags = Data.contactTags; - - this.currentContact = ko.observable(null); - - this.importUploaderButton = ko.observable(null); - - this.contactsPage = ko.observable(1); - this.contactsPageCount = ko.computed(function () { - var iPage = window.Math.ceil(this.contactsCount() / Consts.Defaults.ContactsPerPage); - return 0 >= iPage ? 1 : iPage; - }, this); - - this.contactsPagenator = ko.computed(Utils.computedPagenatorHelper(this.contactsPage, this.contactsPageCount)); - - this.emptySelection = ko.observable(true); - this.viewClearSearch = ko.observable(false); - - this.viewID = ko.observable(''); - this.viewReadOnly = ko.observable(false); - this.viewProperties = ko.observableArray([]); - - this.viewTags = ko.observable(''); - this.viewTags.visibility = ko.observable(false); - this.viewTags.focusTrigger = ko.observable(false); - - this.viewTags.focusTrigger.subscribe(function (bValue) { - if (!bValue && '' === this.viewTags()) - { - this.viewTags.visibility(false); - } - else if (bValue) - { - this.viewTags.visibility(true); - } - }, this); - - this.viewSaveTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - - this.viewPropertiesNames = this.viewProperties.filter(function(oProperty) { - return -1 < Utils.inArray(oProperty.type(), [ - Enums.ContactPropertyType.FirstName, Enums.ContactPropertyType.LastName - ]); - }); - - this.viewPropertiesOther = this.viewProperties.filter(function(oProperty) { - return -1 < Utils.inArray(oProperty.type(), [ - Enums.ContactPropertyType.Note - ]); - }); - - this.viewPropertiesOther = ko.computed(function () { - - var aList = _.filter(this.viewProperties(), function (oProperty) { - return -1 < Utils.inArray(oProperty.type(), [ - Enums.ContactPropertyType.Nick - ]); - }); - - return _.sortBy(aList, function (oProperty) { - return oProperty.type(); - }); - - }, this); - - this.viewPropertiesEmails = this.viewProperties.filter(function(oProperty) { - return Enums.ContactPropertyType.Email === oProperty.type(); - }); - - this.viewPropertiesWeb = this.viewProperties.filter(function(oProperty) { - return Enums.ContactPropertyType.Web === oProperty.type(); - }); - - this.viewHasNonEmptyRequaredProperties = ko.computed(function() { - - var - aNames = this.viewPropertiesNames(), - aEmail = this.viewPropertiesEmails(), - fHelper = function (oProperty) { - return '' !== Utils.trim(oProperty.value()); - } - ; - - return !!(_.find(aNames, fHelper) || _.find(aEmail, fHelper)); - }, this); - - this.viewPropertiesPhones = this.viewProperties.filter(function(oProperty) { - return Enums.ContactPropertyType.Phone === oProperty.type(); - }); - - this.viewPropertiesEmailsNonEmpty = this.viewPropertiesNames.filter(function(oProperty) { - return '' !== Utils.trim(oProperty.value()); - }); - - this.viewPropertiesEmailsEmptyAndOnFocused = this.viewPropertiesEmails.filter(function(oProperty) { - var bF = oProperty.focused(); - return '' === Utils.trim(oProperty.value()) && !bF; - }); - - this.viewPropertiesPhonesEmptyAndOnFocused = this.viewPropertiesPhones.filter(function(oProperty) { - var bF = oProperty.focused(); - return '' === Utils.trim(oProperty.value()) && !bF; - }); - - this.viewPropertiesWebEmptyAndOnFocused = this.viewPropertiesWeb.filter(function(oProperty) { - var bF = oProperty.focused(); - return '' === Utils.trim(oProperty.value()) && !bF; - }); - - this.viewPropertiesOtherEmptyAndOnFocused = ko.computed(function () { - return _.filter(this.viewPropertiesOther(), function (oProperty) { - var bF = oProperty.focused(); - return '' === Utils.trim(oProperty.value()) && !bF; - }); - }, this); - - this.viewPropertiesEmailsEmptyAndOnFocused.subscribe(function(aList) { - fFastClearEmptyListHelper(aList); - }); - - this.viewPropertiesPhonesEmptyAndOnFocused.subscribe(function(aList) { - fFastClearEmptyListHelper(aList); - }); - - this.viewPropertiesWebEmptyAndOnFocused.subscribe(function(aList) { - fFastClearEmptyListHelper(aList); - }); - - this.viewPropertiesOtherEmptyAndOnFocused.subscribe(function(aList) { - fFastClearEmptyListHelper(aList); - }); - - this.viewSaving = ko.observable(false); - - this.useCheckboxesInList = Data.useCheckboxesInList; - - this.search.subscribe(function () { - this.reloadContactList(); - }, this); - - this.contacts.subscribe(function () { - Utils.windowResize(); - }, this); - - this.viewProperties.subscribe(function () { - Utils.windowResize(); - }, this); - - this.contactsChecked = ko.computed(function () { - return _.filter(this.contacts(), function (oItem) { - return oItem.checked(); - }); - }, this); - - this.contactsCheckedOrSelected = ko.computed(function () { - - var - aChecked = this.contactsChecked(), - oSelected = this.currentContact() - ; - - return _.union(aChecked, oSelected ? [oSelected] : []); - - }, this); - - this.contactsCheckedOrSelectedUids = ko.computed(function () { - return _.map(this.contactsCheckedOrSelected(), function (oContact) { - return oContact.idContact; - }); - }, this); - - this.selector = new Selector(this.contacts, this.currentContact, - '.e-contact-item .actionHandle', '.e-contact-item.selected', '.e-contact-item .checkboxItem', - '.e-contact-item.focused'); - - this.selector.on('onItemSelect', _.bind(function (oContact) { - this.populateViewContact(oContact ? oContact : null); - if (!oContact) - { - this.emptySelection(true); - } - }, this)); - - this.selector.on('onItemGetUid', function (oContact) { - return oContact ? oContact.generateUid() : ''; - }); - - this.newCommand = Utils.createCommand(this, function () { - this.populateViewContact(null); - this.currentContact(null); - }); - - this.deleteCommand = Utils.createCommand(this, function () { - this.deleteSelectedContacts(); - this.emptySelection(true); - }, function () { - return 0 < this.contactsCheckedOrSelected().length; - }); - - this.newMessageCommand = Utils.createCommand(this, function () { - var aC = this.contactsCheckedOrSelected(), aE = []; - if (Utils.isNonEmptyArray(aC)) - { - aE = _.map(aC, function (oItem) { - if (oItem) - { - var - aData = oItem.getNameAndEmailHelper(), - oEmail = aData ? new EmailModel(aData[0], aData[1]) : null - ; - - if (oEmail && oEmail.validate()) - { - return oEmail; - } - } - - return null; - }); - - aE = _.compact(aE); - } - - if (Utils.isNonEmptyArray(aE)) - { - kn.hideScreenPopup(__webpack_require__(/*! View:Popup:Contacts */ 43)); - kn.showScreenPopup(__webpack_require__(/*! View:Popup:Compose */ 21), [Enums.ComposeType.Empty, null, aE]); - } - - }, function () { - return 0 < this.contactsCheckedOrSelected().length; - }); - - this.clearCommand = Utils.createCommand(this, function () { - this.search(''); - }); - - this.saveCommand = Utils.createCommand(this, function () { - - this.viewSaving(true); - this.viewSaveTrigger(Enums.SaveSettingsStep.Animate); - - var - sRequestUid = Utils.fakeMd5(), - aProperties = [] - ; - - _.each(this.viewProperties(), function (oItem) { - if (oItem.type() && '' !== Utils.trim(oItem.value())) - { - aProperties.push([oItem.type(), oItem.value(), oItem.typeStr()]); - } - }); - - Remote.contactSave(function (sResult, oData) { - - var bRes = false; - self.viewSaving(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result && - oData.Result.RequestUid === sRequestUid && 0 < Utils.pInt(oData.Result.ResultID)) - { - if ('' === self.viewID()) - { - self.viewID(Utils.pInt(oData.Result.ResultID)); - } - - self.reloadContactList(); - bRes = true; - } - - _.delay(function () { - self.viewSaveTrigger(bRes ? Enums.SaveSettingsStep.TrueResult : Enums.SaveSettingsStep.FalseResult); - }, 300); - - if (bRes) - { - self.watchDirty(false); - - _.delay(function () { - self.viewSaveTrigger(Enums.SaveSettingsStep.Idle); - }, 1000); - } - - }, sRequestUid, this.viewID(), this.viewTags(), aProperties); - - }, function () { - var - bV = this.viewHasNonEmptyRequaredProperties(), - bReadOnly = this.viewReadOnly() - ; - return !this.viewSaving() && bV && !bReadOnly; - }); - - this.syncCommand = Utils.createCommand(this, function () { - - var self = this; - __webpack_require__(/*! App:RainLoop */ 4).contactsSync(function (sResult, oData) { - if (Enums.StorageResultType.Success !== sResult || !oData || !oData.Result) - { - window.alert(Utils.getNotification( - oData && oData.ErrorCode ? oData.ErrorCode : Enums.Notification.ContactsSyncError)); - } - - self.reloadContactList(true); - }); - - }, function () { - return !this.contacts.syncing() && !this.contacts.importing(); - }); - - this.bDropPageAfterDelete = false; - - this.watchDirty = ko.observable(false); - this.watchHash = ko.observable(false); - - this.viewHash = ko.computed(function () { - return '' + self.viewTags() + '|' + _.map(self.viewProperties(), function (oItem) { - return oItem.value(); - }).join(''); - }); - - // this.saveCommandDebounce = _.debounce(_.bind(this.saveCommand, this), 1000); - - this.viewHash.subscribe(function () { - if (this.watchHash() && !this.viewReadOnly() && !this.watchDirty()) - { - this.watchDirty(true); - } - }, this); - - this.sDefaultKeyScope = Enums.KeyState.ContactList; - - this.contactTagsSource = _.bind(this.contactTagsSource, this); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:Contacts', 'PopupsContactsViewModel'], PopupsContactsViewModel); - _.extend(PopupsContactsViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsContactsViewModel.prototype.contactTagsSource = function (oData, fResponse) - { - __webpack_require__(/*! App:RainLoop */ 4).getContactTagsAutocomplete(oData.term, function (aData) { - fResponse(_.map(aData, function (oTagItem) { - return oTagItem.toLine(false); - })); - }); - }; - - PopupsContactsViewModel.prototype.getPropertyPlceholder = function (sType) - { - var sResult = ''; - switch (sType) - { - case Enums.ContactPropertyType.LastName: - sResult = 'CONTACTS/PLACEHOLDER_ENTER_LAST_NAME'; - break; - case Enums.ContactPropertyType.FirstName: - sResult = 'CONTACTS/PLACEHOLDER_ENTER_FIRST_NAME'; - break; - case Enums.ContactPropertyType.Nick: - sResult = 'CONTACTS/PLACEHOLDER_ENTER_NICK_NAME'; - break; - } - - return sResult; - }; - - PopupsContactsViewModel.prototype.addNewProperty = function (sType, sTypeStr) - { - this.viewProperties.push(new ContactPropertyModel(sType, sTypeStr || '', '', true, this.getPropertyPlceholder(sType))); - }; - - PopupsContactsViewModel.prototype.addNewOrFocusProperty = function (sType, sTypeStr) - { - var oItem = _.find(this.viewProperties(), function (oItem) { - return sType === oItem.type(); - }); - - if (oItem) - { - oItem.focused(true); - } - else - { - this.addNewProperty(sType, sTypeStr); - } - }; - - PopupsContactsViewModel.prototype.addNewTag = function () - { - this.viewTags.visibility(true); - this.viewTags.focusTrigger(true); - }; - - PopupsContactsViewModel.prototype.addNewEmail = function () - { - this.addNewProperty(Enums.ContactPropertyType.Email, 'Home'); - }; - - PopupsContactsViewModel.prototype.addNewPhone = function () - { - this.addNewProperty(Enums.ContactPropertyType.Phone, 'Mobile'); - }; - - PopupsContactsViewModel.prototype.addNewWeb = function () - { - this.addNewProperty(Enums.ContactPropertyType.Web); - }; - - PopupsContactsViewModel.prototype.addNewNickname = function () - { - this.addNewOrFocusProperty(Enums.ContactPropertyType.Nick); - }; - - PopupsContactsViewModel.prototype.addNewNotes = function () - { - this.addNewOrFocusProperty(Enums.ContactPropertyType.Note); - }; - - PopupsContactsViewModel.prototype.addNewBirthday = function () - { - this.addNewOrFocusProperty(Enums.ContactPropertyType.Birthday); - }; - - PopupsContactsViewModel.prototype.exportVcf = function () - { - __webpack_require__(/*! App:RainLoop */ 4).download(LinkBuilder.exportContactsVcf()); - }; - - PopupsContactsViewModel.prototype.exportCsv = function () - { - __webpack_require__(/*! App:RainLoop */ 4).download(LinkBuilder.exportContactsCsv()); - }; - - PopupsContactsViewModel.prototype.initUploader = function () - { - if (this.importUploaderButton()) - { - var - oJua = new Jua({ - 'action': LinkBuilder.uploadContacts(), - 'name': 'uploader', - 'queueSize': 1, - 'multipleSizeLimit': 1, - 'disableFolderDragAndDrop': true, - 'disableDragAndDrop': true, - 'disableMultiple': true, - 'disableDocumentDropPrevent': true, - 'clickElement': this.importUploaderButton() - }) - ; - - if (oJua) - { - oJua - .on('onStart', _.bind(function () { - this.contacts.importing(true); - }, this)) - .on('onComplete', _.bind(function (sId, bResult, oData) { - - this.contacts.importing(false); - this.reloadContactList(); - - if (!sId || !bResult || !oData || !oData.Result) - { - window.alert(Utils.i18n('CONTACTS/ERROR_IMPORT_FILE')); - } - - }, this)) - ; - } - } - }; - - PopupsContactsViewModel.prototype.removeCheckedOrSelectedContactsFromList = function () - { - var - self = this, - oKoContacts = this.contacts, - oCurrentContact = this.currentContact(), - iCount = this.contacts().length, - aContacts = this.contactsCheckedOrSelected() - ; - - if (0 < aContacts.length) - { - _.each(aContacts, function (oContact) { - - if (oCurrentContact && oCurrentContact.idContact === oContact.idContact) - { - oCurrentContact = null; - self.currentContact(null); - } - - oContact.deleted(true); - iCount--; - }); - - if (iCount <= 0) - { - this.bDropPageAfterDelete = true; - } - - _.delay(function () { - - _.each(aContacts, function (oContact) { - oKoContacts.remove(oContact); - }); - - }, 500); - } - }; - - PopupsContactsViewModel.prototype.deleteSelectedContacts = function () - { - if (0 < this.contactsCheckedOrSelected().length) - { - Remote.contactsDelete( - _.bind(this.deleteResponse, this), - this.contactsCheckedOrSelectedUids() - ); - - this.removeCheckedOrSelectedContactsFromList(); - } - }; - - /** - * @param {string} sResult - * @param {AjaxJsonDefaultResponse} oData - */ - PopupsContactsViewModel.prototype.deleteResponse = function (sResult, oData) - { - if (500 < (Enums.StorageResultType.Success === sResult && oData && oData.Time ? Utils.pInt(oData.Time) : 0)) - { - this.reloadContactList(this.bDropPageAfterDelete); - } - else - { - _.delay((function (self) { - return function () { - self.reloadContactList(self.bDropPageAfterDelete); - }; - }(this)), 500); - } - }; - - PopupsContactsViewModel.prototype.removeProperty = function (oProp) - { - this.viewProperties.remove(oProp); - }; - - /** - * @param {?ContactModel} oContact - */ - PopupsContactsViewModel.prototype.populateViewContact = function (oContact) - { - var - sId = '', - sLastName = '', - sFirstName = '', - aList = [] - ; - - this.watchHash(false); - - this.emptySelection(false); - this.viewReadOnly(false); - this.viewTags(''); - - if (oContact) - { - sId = oContact.idContact; - if (Utils.isNonEmptyArray(oContact.properties)) - { - _.each(oContact.properties, function (aProperty) { - if (aProperty && aProperty[0]) - { - if (Enums.ContactPropertyType.LastName === aProperty[0]) - { - sLastName = aProperty[1]; - } - else if (Enums.ContactPropertyType.FirstName === aProperty[0]) - { - sFirstName = aProperty[1]; - } - else - { - aList.push(new ContactPropertyModel(aProperty[0], aProperty[2] || '', aProperty[1])); - } - } - }); - } - - this.viewTags(oContact.tags); - - this.viewReadOnly(!!oContact.readOnly); - } - - this.viewTags.focusTrigger.valueHasMutated(); - this.viewTags.visibility('' !== this.viewTags()); - - aList.unshift(new ContactPropertyModel(Enums.ContactPropertyType.LastName, '', sLastName, false, - this.getPropertyPlceholder(Enums.ContactPropertyType.LastName))); - - aList.unshift(new ContactPropertyModel(Enums.ContactPropertyType.FirstName, '', sFirstName, !oContact, - this.getPropertyPlceholder(Enums.ContactPropertyType.FirstName))); - - this.viewID(sId); - this.viewProperties([]); - this.viewProperties(aList); - - this.watchDirty(false); - this.watchHash(true); - }; - - /** - * @param {boolean=} bDropPagePosition = false - */ - PopupsContactsViewModel.prototype.reloadContactList = function (bDropPagePosition) - { - var - self = this, - iOffset = (this.contactsPage() - 1) * Consts.Defaults.ContactsPerPage - ; - - this.bDropPageAfterDelete = false; - - if (Utils.isUnd(bDropPagePosition) ? false : !!bDropPagePosition) - { - this.contactsPage(1); - iOffset = 0; - } - - this.contacts.loading(true); - Remote.contacts(function (sResult, oData) { - var - iCount = 0, - aList = [], - aTagsList = [] - ; - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result && oData.Result.List) - { - if (Utils.isNonEmptyArray(oData.Result.List)) - { - aList = _.map(oData.Result.List, function (oItem) { - var oContact = new ContactModel(); - return oContact.parse(oItem) ? oContact : null; - }); - - aList = _.compact(aList); - - iCount = Utils.pInt(oData.Result.Count); - iCount = 0 < iCount ? iCount : 0; - } - - if (Utils.isNonEmptyArray(oData.Result.Tags)) - { - aTagsList = _.map(oData.Result.Tags, function (oItem) { - var oContactTag = new ContactTagModel(); - return oContactTag.parse(oItem) ? oContactTag : null; - }); - - aTagsList = _.compact(aTagsList); - } - } - - self.contactsCount(iCount); - - self.contacts(aList); - self.contacts.loading(false); - self.contactTags(aTagsList); - - self.viewClearSearch('' !== self.search()); - - }, iOffset, Consts.Defaults.ContactsPerPage, this.search()); - }; - - PopupsContactsViewModel.prototype.onBuild = function (oDom) - { - this.oContentVisible = $('.b-list-content', oDom); - this.oContentScrollable = $('.content', this.oContentVisible); - - this.selector.init(this.oContentVisible, this.oContentScrollable, Enums.KeyState.ContactList); - - var self = this; - - key('delete', Enums.KeyState.ContactList, function () { - self.deleteCommand(); - return false; - }); - - oDom - .on('click', '.e-pagenator .e-page', function () { - var oPage = ko.dataFor(this); - if (oPage) - { - self.contactsPage(Utils.pInt(oPage.value)); - self.reloadContactList(); - } - }) - ; - - this.initUploader(); - }; - - PopupsContactsViewModel.prototype.onShow = function () - { - kn.routeOff(); - this.reloadContactList(true); - }; - - PopupsContactsViewModel.prototype.onHide = function () - { - kn.routeOn(); - this.currentContact(null); - this.emptySelection(true); - this.search(''); - this.contactsCount(0); - this.contacts([]); - }; - - module.exports = PopupsContactsViewModel; - - }()); - -/***/ }, -/* 44 */ -/*!**************************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsFolderCreateViewModel.js ***! - \**************************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Consts = __webpack_require__(/*! Common/Consts */ 17), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsFolderCreateViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsFolderCreate'); - - Utils.initOnStartOrLangChange(function () { - this.sNoParentText = Utils.i18n('POPUPS_CREATE_FOLDER/SELECT_NO_PARENT'); - }, this); - - this.folderName = ko.observable(''); - this.folderName.focused = ko.observable(false); - - this.selectedParentValue = ko.observable(Consts.Values.UnuseOptionValue); - - this.parentFolderSelectList = ko.computed(function () { - - var - aTop = [], - fDisableCallback = null, - fVisibleCallback = null, - aList = Data.folderList(), - fRenameCallback = function (oItem) { - return oItem ? (oItem.isSystemFolder() ? oItem.name() + ' ' + oItem.manageFolderSystemName() : oItem.name()) : ''; - } - ; - - aTop.push(['', this.sNoParentText]); - - if ('' !== Data.namespace) - { - fDisableCallback = function (oItem) - { - return Data.namespace !== oItem.fullNameRaw.substr(0, Data.namespace.length); - }; - } - - return Utils.folderListOptionsBuilder([], aList, [], aTop, null, fDisableCallback, fVisibleCallback, fRenameCallback); - - }, this); - - // commands - this.createFolder = Utils.createCommand(this, function () { - - var - sParentFolderName = this.selectedParentValue() - ; - - if ('' === sParentFolderName && 1 < Data.namespace.length) - { - sParentFolderName = Data.namespace.substr(0, Data.namespace.length - 1); - } - - Data.foldersCreating(true); - Remote.folderCreate(function (sResult, oData) { - - Data.foldersCreating(false); - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - __webpack_require__(/*! App:RainLoop */ 4).folders(); - } - else - { - Data.foldersListError( - oData && oData.ErrorCode ? Utils.getNotification(oData.ErrorCode) : Utils.i18n('NOTIFICATIONS/CANT_CREATE_FOLDER')); - } - - }, this.folderName(), sParentFolderName); - - this.cancelCommand(); - - }, function () { - return this.simpleFolderNameValidation(this.folderName()); - }); - - this.defautOptionsAfterRender = Utils.defautOptionsAfterRender; - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:FolderCreate', 'PopupsFolderCreateViewModel'], PopupsFolderCreateViewModel); - _.extend(PopupsFolderCreateViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsFolderCreateViewModel.prototype.sNoParentText = ''; - - PopupsFolderCreateViewModel.prototype.simpleFolderNameValidation = function (sName) - { - return (/^[^\\\/]+$/g).test(Utils.trim(sName)); - }; - - PopupsFolderCreateViewModel.prototype.clearPopup = function () - { - this.folderName(''); - this.selectedParentValue(''); - this.folderName.focused(false); - }; - - PopupsFolderCreateViewModel.prototype.onShow = function () - { - this.clearPopup(); - }; - - PopupsFolderCreateViewModel.prototype.onFocus = function () - { - this.folderName.focused(true); - }; - - module.exports = PopupsFolderCreateViewModel; - - }()); - -/***/ }, -/* 45 */ -/*!**********************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsIdentityViewModel.js ***! - \**********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsIdentityViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsIdentity'); - - this.id = ''; - this.edit = ko.observable(false); - this.owner = ko.observable(false); - - this.email = ko.observable('').validateEmail(); - this.email.focused = ko.observable(false); - this.name = ko.observable(''); - this.name.focused = ko.observable(false); - this.replyTo = ko.observable('').validateSimpleEmail(); - this.replyTo.focused = ko.observable(false); - this.bcc = ko.observable('').validateSimpleEmail(); - this.bcc.focused = ko.observable(false); - - // this.email.subscribe(function () { - // this.email.hasError(false); - // }, this); - - this.submitRequest = ko.observable(false); - this.submitError = ko.observable(''); - - this.addOrEditIdentityCommand = Utils.createCommand(this, function () { - - if (!this.email.hasError()) - { - this.email.hasError('' === Utils.trim(this.email())); - } - - if (this.email.hasError()) - { - if (!this.owner()) - { - this.email.focused(true); - } - - return false; - } - - if (this.replyTo.hasError()) - { - this.replyTo.focused(true); - return false; - } - - if (this.bcc.hasError()) - { - this.bcc.focused(true); - return false; - } - - this.submitRequest(true); - - Remote.identityUpdate(_.bind(function (sResult, oData) { - - this.submitRequest(false); - if (Enums.StorageResultType.Success === sResult && oData) - { - if (oData.Result) - { - __webpack_require__(/*! App:RainLoop */ 4).accountsAndIdentities(); - this.cancelCommand(); - } - else if (oData.ErrorCode) - { - this.submitError(Utils.getNotification(oData.ErrorCode)); - } - } - else - { - this.submitError(Utils.getNotification(Enums.Notification.UnknownError)); - } - - }, this), this.id, this.email(), this.name(), this.replyTo(), this.bcc()); - - return true; - - }, function () { - return !this.submitRequest(); - }); - - this.label = ko.computed(function () { - return Utils.i18n('POPUPS_IDENTITIES/' + (this.edit() ? 'TITLE_UPDATE_IDENTITY': 'TITLE_ADD_IDENTITY')); - }, this); - - this.button = ko.computed(function () { - return Utils.i18n('POPUPS_IDENTITIES/' + (this.edit() ? 'BUTTON_UPDATE_IDENTITY': 'BUTTON_ADD_IDENTITY')); - }, this); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:Identity', 'PopupsIdentityViewModel'], PopupsIdentityViewModel); - _.extend(PopupsIdentityViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsIdentityViewModel.prototype.clearPopup = function () - { - this.id = ''; - this.edit(false); - this.owner(false); - - this.name(''); - this.email(''); - this.replyTo(''); - this.bcc(''); - - this.email.hasError(false); - this.replyTo.hasError(false); - this.bcc.hasError(false); - - this.submitRequest(false); - this.submitError(''); - }; - - /** - * @param {?IdentityModel} oIdentity - */ - PopupsIdentityViewModel.prototype.onShow = function (oIdentity) - { - this.clearPopup(); - - if (oIdentity) - { - this.edit(true); - - this.id = oIdentity.id; - this.name(oIdentity.name()); - this.email(oIdentity.email()); - this.replyTo(oIdentity.replyTo()); - this.bcc(oIdentity.bcc()); - - this.owner(this.id === Data.accountEmail()); - } - }; - - PopupsIdentityViewModel.prototype.onFocus = function () - { - if (!this.owner()) - { - this.email.focused(true); - } - }; - - module.exports = PopupsIdentityViewModel; - - }()); - -/***/ }, -/* 46 */ -/*!***********************************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsKeyboardShortcutsHelpViewModel.js ***! - \***********************************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - key = __webpack_require__(/*! key */ 19), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsKeyboardShortcutsHelpViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsKeyboardShortcutsHelp'); - - this.sDefaultKeyScope = Enums.KeyState.PopupKeyboardShortcutsHelp; - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:KeyboardShortcutsHelp', 'PopupsKeyboardShortcutsHelpViewModel'], PopupsKeyboardShortcutsHelpViewModel); - _.extend(PopupsKeyboardShortcutsHelpViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsKeyboardShortcutsHelpViewModel.prototype.onBuild = function (oDom) - { - key('tab, shift+tab, left, right', Enums.KeyState.PopupKeyboardShortcutsHelp, _.bind(function (event, handler) { - if (event && handler) - { - var - $tabs = oDom.find('.nav.nav-tabs > li'), - bNext = handler && ('tab' === handler.shortcut || 'right' === handler.shortcut), - iIndex = $tabs.index($tabs.filter('.active')) - ; - - if (!bNext && iIndex > 0) - { - iIndex--; - } - else if (bNext && iIndex < $tabs.length - 1) - { - iIndex++; - } - else - { - iIndex = bNext ? 0 : $tabs.length - 1; - } - - $tabs.eq(iIndex).find('a[data-toggle="tab"]').tab('show'); - return false; - } - }, this)); - }; - - module.exports = PopupsKeyboardShortcutsHelpViewModel; - - }()); - -/***/ }, -/* 47 */ -/*!**********************!*\ - !*** external "Jua" ***! - \**********************/ -/***/ function(module, exports, __webpack_require__) { - - module.exports = Jua; - -/***/ }, -/* 48 */, -/* 49 */, -/* 50 */, -/* 51 */, -/* 52 */, -/* 53 */ -/*!**********************************************!*\ - !*** ./dev/Models/ComposeAttachmentModel.js ***! - \**********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @constructor - * @param {string} sId - * @param {string} sFileName - * @param {?number=} nSize - * @param {boolean=} bInline - * @param {boolean=} bLinked - * @param {string=} sCID - * @param {string=} sContentLocation - */ - function ComposeAttachmentModel(sId, sFileName, nSize, bInline, bLinked, sCID, sContentLocation) - { - this.id = sId; - this.isInline = Utils.isUnd(bInline) ? false : !!bInline; - this.isLinked = Utils.isUnd(bLinked) ? false : !!bLinked; - this.CID = Utils.isUnd(sCID) ? '' : sCID; - this.contentLocation = Utils.isUnd(sContentLocation) ? '' : sContentLocation; - this.fromMessage = false; - - this.fileName = ko.observable(sFileName); - this.size = ko.observable(Utils.isUnd(nSize) ? null : nSize); - this.tempName = ko.observable(''); - - this.progress = ko.observable(''); - this.error = ko.observable(''); - this.waiting = ko.observable(true); - this.uploading = ko.observable(false); - this.enabled = ko.observable(true); - - this.friendlySize = ko.computed(function () { - var mSize = this.size(); - return null === mSize ? '' : Utils.friendlySize(this.size()); - }, this); - } - - ComposeAttachmentModel.prototype.id = ''; - ComposeAttachmentModel.prototype.isInline = false; - ComposeAttachmentModel.prototype.isLinked = false; - ComposeAttachmentModel.prototype.CID = ''; - ComposeAttachmentModel.prototype.contentLocation = ''; - ComposeAttachmentModel.prototype.fromMessage = false; - ComposeAttachmentModel.prototype.cancel = Utils.emptyFunction; - - /** - * @param {AjaxJsonComposeAttachment} oJsonAttachment - */ - ComposeAttachmentModel.prototype.initByUploadJson = function (oJsonAttachment) - { - var bResult = false; - if (oJsonAttachment) - { - this.fileName(oJsonAttachment.Name); - this.size(Utils.isUnd(oJsonAttachment.Size) ? 0 : Utils.pInt(oJsonAttachment.Size)); - this.tempName(Utils.isUnd(oJsonAttachment.TempName) ? '' : oJsonAttachment.TempName); - this.isInline = false; - - bResult = true; - } - - return bResult; - }; - - module.exports = ComposeAttachmentModel; - - }()); - -/***/ }, -/* 54 */ -/*!************************************!*\ - !*** ./dev/Models/ContactModel.js ***! - \************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11) - ; - - /** - * @constructor - */ - function ContactModel() - { - this.idContact = 0; - this.display = ''; - this.properties = []; - this.tags = ''; - this.readOnly = false; - - this.focused = ko.observable(false); - this.selected = ko.observable(false); - this.checked = ko.observable(false); - this.deleted = ko.observable(false); - } - - /** - * @return {Array|null} - */ - ContactModel.prototype.getNameAndEmailHelper = function () - { - var - sName = '', - sEmail = '' - ; - - if (Utils.isNonEmptyArray(this.properties)) - { - _.each(this.properties, function (aProperty) { - if (aProperty) - { - if (Enums.ContactPropertyType.FirstName === aProperty[0]) - { - sName = Utils.trim(aProperty[1] + ' ' + sName); - } - else if (Enums.ContactPropertyType.LastName === aProperty[0]) - { - sName = Utils.trim(sName + ' ' + aProperty[1]); - } - else if ('' === sEmail && Enums.ContactPropertyType.Email === aProperty[0]) - { - sEmail = aProperty[1]; - } - } - }, this); - } - - return '' === sEmail ? null : [sEmail, sName]; - }; - - ContactModel.prototype.parse = function (oItem) - { - var bResult = false; - if (oItem && 'Object/Contact' === oItem['@Object']) - { - this.idContact = Utils.pInt(oItem['IdContact']); - this.display = Utils.pString(oItem['Display']); - this.readOnly = !!oItem['ReadOnly']; - this.tags = ''; - - if (Utils.isNonEmptyArray(oItem['Properties'])) - { - _.each(oItem['Properties'], function (oProperty) { - if (oProperty && oProperty['Type'] && Utils.isNormal(oProperty['Value']) && Utils.isNormal(oProperty['TypeStr'])) - { - this.properties.push([Utils.pInt(oProperty['Type']), Utils.pString(oProperty['Value']), Utils.pString(oProperty['TypeStr'])]); - } - }, this); - } - - if (Utils.isNonEmptyArray(oItem['Tags'])) - { - this.tags = oItem['Tags'].join(','); - } - - bResult = true; - } - - return bResult; - }; - - /** - * @return {string} - */ - ContactModel.prototype.srcAttr = function () - { - return LinkBuilder.emptyContactPic(); - }; - - /** - * @return {string} - */ - ContactModel.prototype.generateUid = function () - { - return '' + this.idContact; - }; - - /** - * @return string - */ - ContactModel.prototype.lineAsCcc = function () - { - var aResult = []; - if (this.deleted()) - { - aResult.push('deleted'); - } - if (this.selected()) - { - aResult.push('selected'); - } - if (this.checked()) - { - aResult.push('checked'); - } - if (this.focused()) - { - aResult.push('focused'); - } - - return aResult.join(' '); - }; - - module.exports = ContactModel; - - }()); - -/***/ }, -/* 55 */ -/*!********************************************!*\ - !*** ./dev/Models/ContactPropertyModel.js ***! - \********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @constructor - * @param {number=} iType = Enums.ContactPropertyType.Unknown - * @param {string=} sTypeStr = '' - * @param {string=} sValue = '' - * @param {boolean=} bFocused = false - * @param {string=} sPlaceholder = '' - */ - function ContactPropertyModel(iType, sTypeStr, sValue, bFocused, sPlaceholder) - { - this.type = ko.observable(Utils.isUnd(iType) ? Enums.ContactPropertyType.Unknown : iType); - this.typeStr = ko.observable(Utils.isUnd(sTypeStr) ? '' : sTypeStr); - this.focused = ko.observable(Utils.isUnd(bFocused) ? false : !!bFocused); - this.value = ko.observable(Utils.pString(sValue)); - - this.placeholder = ko.observable(sPlaceholder || ''); - - this.placeholderValue = ko.computed(function () { - var sPlaceholder = this.placeholder(); - return sPlaceholder ? Utils.i18n(sPlaceholder) : ''; - }, this); - - this.largeValue = ko.computed(function () { - return Enums.ContactPropertyType.Note === this.type(); - }, this); - } - - module.exports = ContactPropertyModel; - - }()); - -/***/ }, -/* 56 */ -/*!********************************************!*\ - !*** ./dev/Models/FilterConditionModel.js ***! - \********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6) - ; - - /** - * @param {*} oKoList - * @constructor - */ - function FilterConditionModel(oKoList) - { - this.parentList = oKoList; - - this.field = ko.observable(Enums.FilterConditionField.From); - - this.fieldOptions = [ // TODO i18n - {'id': Enums.FilterConditionField.From, 'name': 'From'}, - {'id': Enums.FilterConditionField.Recipient, 'name': 'Recipient (To or CC)'}, - {'id': Enums.FilterConditionField.To, 'name': 'To'}, - {'id': Enums.FilterConditionField.Subject, 'name': 'Subject'} - ]; - - this.type = ko.observable(Enums.FilterConditionType.EqualTo); - - this.typeOptions = [ // TODO i18n - {'id': Enums.FilterConditionType.EqualTo, 'name': 'Equal To'}, - {'id': Enums.FilterConditionType.NotEqualTo, 'name': 'Not Equal To'}, - {'id': Enums.FilterConditionType.Contains, 'name': 'Contains'}, - {'id': Enums.FilterConditionType.NotContains, 'name': 'Not Contains'} - ]; - - this.value = ko.observable(''); - - this.template = ko.computed(function () { - - var sTemplate = ''; - switch (this.type()) - { - default: - sTemplate = 'SettingsFiltersConditionDefault'; - break; - } - - return sTemplate; - - }, this); - } - - FilterConditionModel.prototype.removeSelf = function () - { - this.parentList.remove(this); - }; - - module.exports = FilterConditionModel; - - }()); - -/***/ }, -/* 57 */ -/*!***********************************!*\ - !*** ./dev/Models/FilterModel.js ***! - \***********************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - FilterConditionModel = __webpack_require__(/*! Model:FilterCondition */ 56) - ; - - /** - * @constructor - */ - function FilterModel() - { - this.isNew = ko.observable(true); - this.enabled = ko.observable(true); - - this.name = ko.observable(''); - - this.conditionsType = ko.observable(Enums.FilterRulesType.And); - - this.conditions = ko.observableArray([]); - - this.conditions.subscribe(function () { - Utils.windowResize(); - }); - - // Actions - this.actionMarkAsRead = ko.observable(false); - this.actionSkipOtherFilters = ko.observable(true); - this.actionValue = ko.observable(''); - - this.actionType = ko.observable(Enums.FiltersAction.Move); - this.actionTypeOptions = [ // TODO i18n - {'id': Enums.FiltersAction.None, 'name': 'Action - None'}, - {'id': Enums.FiltersAction.Move, 'name': 'Action - Move to'}, - // {'id': Enums.FiltersAction.Forward, 'name': 'Action - Forward to'}, - {'id': Enums.FiltersAction.Discard, 'name': 'Action - Discard'} - ]; - - this.actionMarkAsReadVisiblity = ko.computed(function () { - return -1 < Utils.inArray(this.actionType(), [ - Enums.FiltersAction.None, Enums.FiltersAction.Forward, Enums.FiltersAction.Move - ]); - }, this); - - this.actionTemplate = ko.computed(function () { - - var sTemplate = ''; - switch (this.actionType()) - { - default: - case Enums.FiltersAction.Move: - sTemplate = 'SettingsFiltersActionValueAsFolders'; - break; - case Enums.FiltersAction.Forward: - sTemplate = 'SettingsFiltersActionWithValue'; - break; - case Enums.FiltersAction.None: - case Enums.FiltersAction.Discard: - sTemplate = 'SettingsFiltersActionNoValue'; - break; - } - - return sTemplate; - - }, this); - } - - FilterModel.prototype.addCondition = function () - { - this.conditions.push(new FilterConditionModel(this.conditions)); - }; - - FilterModel.prototype.parse = function (oItem) - { - var bResult = false; - if (oItem && 'Object/Filter' === oItem['@Object']) - { - this.name(Utils.pString(oItem['Name'])); - - bResult = true; - } - - return bResult; - }; - - module.exports = FilterModel; - - }()); - -/***/ }, -/* 58 */, -/* 59 */, -/* 60 */, -/* 61 */ -/*!************************************!*\ - !*** ./dev/Screens/AboutScreen.js ***! - \************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - KnoinAbstractScreen = __webpack_require__(/*! Knoin:AbstractScreen */ 24) - ; - - /** - * @constructor - * @extends KnoinAbstractScreen - */ - function AboutScreen() - { - KnoinAbstractScreen.call(this, 'about', [ - __webpack_require__(/*! View:RainLoop:About */ 92) - ]); - } - - _.extend(AboutScreen.prototype, KnoinAbstractScreen.prototype); - - AboutScreen.prototype.onShow = function () - { - __webpack_require__(/*! App:RainLoop */ 4).setTitle('RainLoop'); - }; - - module.exports = AboutScreen; - - }()); - -/***/ }, -/* 62 */, -/* 63 */, -/* 64 */, -/* 65 */ -/*!**************************************!*\ - !*** ./dev/Screens/MailBoxScreen.js ***! - \**************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1), - Events = __webpack_require__(/*! Common/Events */ 22), - - KnoinAbstractScreen = __webpack_require__(/*! Knoin:AbstractScreen */ 24), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Cache = __webpack_require__(/*! Storage:RainLoop:Cache */ 20), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13) - ; - - /** - * @constructor - * @extends KnoinAbstractScreen - */ - function MailBoxScreen() - { - KnoinAbstractScreen.call(this, 'mailbox', [ - __webpack_require__(/*! View:RainLoop:MailBoxSystemDropDown */ 100), - __webpack_require__(/*! View:RainLoop:MailBoxFolderList */ 97), - __webpack_require__(/*! View:RainLoop:MailBoxMessageList */ 98), - __webpack_require__(/*! View:RainLoop:MailBoxMessageView */ 99) - ]); - - this.oLastRoute = {}; - } - - _.extend(MailBoxScreen.prototype, KnoinAbstractScreen.prototype); - - /** - * @type {Object} - */ - MailBoxScreen.prototype.oLastRoute = {}; - - MailBoxScreen.prototype.setNewTitle = function () - { - var - sEmail = Data.accountEmail(), - nFoldersInboxUnreadCount = Data.foldersInboxUnreadCount() - ; - - __webpack_require__(/*! App:RainLoop */ 4).setTitle(('' === sEmail ? '' : - (0 < nFoldersInboxUnreadCount ? '(' + nFoldersInboxUnreadCount + ') ' : ' ') + sEmail + ' - ') + Utils.i18n('TITLES/MAILBOX')); - }; - - MailBoxScreen.prototype.onShow = function () - { - this.setNewTitle(); - Globals.keyScope(Enums.KeyState.MessageList); - }; - - /** - * @param {string} sFolderHash - * @param {number} iPage - * @param {string} sSearch - * @param {boolean=} bPreview = false - */ - MailBoxScreen.prototype.onRoute = function (sFolderHash, iPage, sSearch, bPreview) - { - if (Utils.isUnd(bPreview) ? false : !!bPreview) - { - if (Enums.Layout.NoPreview === Data.layout() && !Data.message()) - { - __webpack_require__(/*! App:RainLoop */ 4).historyBack(); - } - } - else - { - var - sFolderFullNameRaw = Cache.getFolderFullNameRaw(sFolderHash), - oFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw) - ; - - if (oFolder) - { - Data - .currentFolder(oFolder) - .messageListPage(iPage) - .messageListSearch(sSearch) - ; - - if (Enums.Layout.NoPreview === Data.layout() && Data.message()) - { - Data.message(null); - } - - __webpack_require__(/*! App:RainLoop */ 4).reloadMessageList(); - } - } - }; - - MailBoxScreen.prototype.onStart = function () - { - var - fResizeFunction = function () { - Utils.windowResize(); - } - ; - - if (Settings.capa(Enums.Capa.AdditionalAccounts) || Settings.capa(Enums.Capa.AdditionalIdentities)) - { - __webpack_require__(/*! App:RainLoop */ 4).accountsAndIdentities(); - } - - _.delay(function () { - if ('INBOX' !== Data.currentFolderFullNameRaw()) - { - __webpack_require__(/*! App:RainLoop */ 4).folderInformation('INBOX'); - } - }, 1000); - - _.delay(function () { - __webpack_require__(/*! App:RainLoop */ 4).quota(); - }, 5000); - - _.delay(function () { - Remote.appDelayStart(Utils.emptyFunction); - }, 35000); - - Globals.$html.toggleClass('rl-no-preview-pane', Enums.Layout.NoPreview === Data.layout()); - - Data.folderList.subscribe(fResizeFunction); - Data.messageList.subscribe(fResizeFunction); - Data.message.subscribe(fResizeFunction); - - Data.layout.subscribe(function (nValue) { - Globals.$html.toggleClass('rl-no-preview-pane', Enums.Layout.NoPreview === nValue); - }); - - Events.sub('mailbox.inbox-unread-count', function (nCount) { - Data.foldersInboxUnreadCount(nCount); - }); - - Data.foldersInboxUnreadCount.subscribe(function () { - this.setNewTitle(); - }, this); - }; - - /** - * @return {Array} - */ - MailBoxScreen.prototype.routes = function () - { - var - fNormP = function () { - return ['Inbox', 1, '', true]; - }, - fNormS = function (oRequest, oVals) { - oVals[0] = Utils.pString(oVals[0]); - oVals[1] = Utils.pInt(oVals[1]); - oVals[1] = 0 >= oVals[1] ? 1 : oVals[1]; - oVals[2] = Utils.pString(oVals[2]); - - if ('' === oRequest) - { - oVals[0] = 'Inbox'; - oVals[1] = 1; - } - - return [decodeURI(oVals[0]), oVals[1], decodeURI(oVals[2]), false]; - }, - fNormD = function (oRequest, oVals) { - oVals[0] = Utils.pString(oVals[0]); - oVals[1] = Utils.pString(oVals[1]); - - if ('' === oRequest) - { - oVals[0] = 'Inbox'; - } - - return [decodeURI(oVals[0]), 1, decodeURI(oVals[1]), false]; - } - ; - - return [ - [/^([a-zA-Z0-9]+)\/p([1-9][0-9]*)\/(.+)\/?$/, {'normalize_': fNormS}], - [/^([a-zA-Z0-9]+)\/p([1-9][0-9]*)$/, {'normalize_': fNormS}], - [/^([a-zA-Z0-9]+)\/(.+)\/?$/, {'normalize_': fNormD}], - [/^message-preview$/, {'normalize_': fNormP}], - [/^([^\/]*)$/, {'normalize_': fNormS}] - ]; - }; - - module.exports = MailBoxScreen; - - }()); - -/***/ }, -/* 66 */ -/*!***************************************!*\ - !*** ./dev/Screens/SettingsScreen.js ***! - \***************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - Globals = __webpack_require__(/*! Common/Globals */ 7), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - - kn = __webpack_require__(/*! App:Knoin */ 5), - - AbstractSettingsScreen = __webpack_require__(/*! Screen:AbstractSettings */ 29) - ; - - /** - * @constructor - * @extends AbstractSettingsScreen - */ - function SettingsScreen() - { - AbstractSettingsScreen.call(this, [ - __webpack_require__(/*! View:RainLoop:SettingsSystemDropDown */ 114), - __webpack_require__(/*! View:RainLoop:SettingsMenu */ 112), - __webpack_require__(/*! View:RainLoop:SettingsPane */ 113) - ]); - - Utils.initOnStartOrLangChange(function () { - this.sSettingsTitle = Utils.i18n('TITLES/SETTINGS'); - }, this, function () { - this.setSettingsTitle(); - }); - } - - _.extend(SettingsScreen.prototype, AbstractSettingsScreen.prototype); - - /** - * @param {Function=} fCallback - */ - SettingsScreen.prototype.setupSettings = function (fCallback) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:General */ 83), - 'SettingsGeneral', 'SETTINGS_LABELS/LABEL_GENERAL_NAME', 'general', true); - - if (Settings.settingsGet('ContactsIsAllowed')) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:Contacts */ 80), - 'SettingsContacts', 'SETTINGS_LABELS/LABEL_CONTACTS_NAME', 'contacts'); - } - - if (Settings.capa(Enums.Capa.AdditionalAccounts)) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:Accounts */ 78), - 'SettingsAccounts', 'SETTINGS_LABELS/LABEL_ACCOUNTS_NAME', 'accounts'); - } - - if (Settings.capa(Enums.Capa.AdditionalIdentities)) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:Identities */ 84), - 'SettingsIdentities', 'SETTINGS_LABELS/LABEL_IDENTITIES_NAME', 'identities'); - } - else - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:Identity */ 85), - 'SettingsIdentity', 'SETTINGS_LABELS/LABEL_IDENTITY_NAME', 'identity'); - } - - if (Settings.capa(Enums.Capa.Filters)) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:Filters */ 81), - 'SettingsFilters', 'SETTINGS_LABELS/LABEL_FILTERS_NAME', 'filters'); - } - - if (Settings.capa(Enums.Capa.TwoFactor)) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:Security */ 87), - 'SettingsSecurity', 'SETTINGS_LABELS/LABEL_SECURITY_NAME', 'security'); - } - - if (Settings.settingsGet('AllowGoogleSocial') || - Settings.settingsGet('AllowFacebookSocial') || - Settings.settingsGet('AllowTwitterSocial')) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:Social */ 88), - 'SettingsSocial', 'SETTINGS_LABELS/LABEL_SOCIAL_NAME', 'social'); - } - - if (Settings.settingsGet('ChangePasswordIsAllowed')) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:ChangePassword */ 79), - 'SettingsChangePassword', 'SETTINGS_LABELS/LABEL_CHANGE_PASSWORD_NAME', 'change-password'); - } - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:Folders */ 82), - 'SettingsFolders', 'SETTINGS_LABELS/LABEL_FOLDERS_NAME', 'folders'); - - if (Settings.capa(Enums.Capa.Themes)) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:Themes */ 89), - 'SettingsThemes', 'SETTINGS_LABELS/LABEL_THEMES_NAME', 'themes'); - } - - if (Settings.capa(Enums.Capa.OpenPGP)) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:RainLoop:OpenPGP */ 86), - 'SettingsOpenPGP', 'SETTINGS_LABELS/LABEL_OPEN_PGP_NAME', 'openpgp'); - } - - if (fCallback) - { - fCallback(); - } - }; - - SettingsScreen.prototype.onShow = function () - { - this.setSettingsTitle(); - Globals.keyScope(Enums.KeyState.Settings); - }; - - SettingsScreen.prototype.setSettingsTitle = function () - { - __webpack_require__(/*! App:RainLoop */ 4).setTitle(this.sSettingsTitle); - }; - - module.exports = SettingsScreen; - - }()); - -/***/ }, -/* 67 */, -/* 68 */, -/* 69 */, -/* 70 */, -/* 71 */, -/* 72 */, -/* 73 */, -/* 74 */, -/* 75 */, -/* 76 */, -/* 77 */, -/* 78 */ -/*!**********************************************!*\ - !*** ./dev/Settings/App/SettingsAccounts.js ***! - \**********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13) - ; - - /** - * @constructor - */ - function SettingsAccounts() - { - this.accounts = Data.accounts; - - this.processText = ko.computed(function () { - return Data.accountsLoading() ? Utils.i18n('SETTINGS_ACCOUNTS/LOADING_PROCESS') : ''; - }, this); - - this.visibility = ko.computed(function () { - return '' === this.processText() ? 'hidden' : 'visible'; - }, this); - - this.accountForDeletion = ko.observable(null).extend({'falseTimeout': 3000}).extend({'toggleSubscribe': [this, - function (oPrev) { - if (oPrev) - { - oPrev.deleteAccess(false); - } - }, function (oNext) { - if (oNext) - { - oNext.deleteAccess(true); - } - } - ]}); - } - - SettingsAccounts.prototype.addNewAccount = function () - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:AddAccount */ 42)); - }; - - /** - * @param {AccountModel} oAccountToRemove - */ - SettingsAccounts.prototype.deleteAccount = function (oAccountToRemove) - { - if (oAccountToRemove && oAccountToRemove.deleteAccess()) - { - this.accountForDeletion(null); - - var - kn = __webpack_require__(/*! App:Knoin */ 5), - fRemoveAccount = function (oAccount) { - return oAccountToRemove === oAccount; - } - ; - - if (oAccountToRemove) - { - this.accounts.remove(fRemoveAccount); - - Remote.accountDelete(function (sResult, oData) { - - if (Enums.StorageResultType.Success === sResult && oData && - oData.Result && oData.Reload) - { - kn.routeOff(); - kn.setHash(LinkBuilder.root(), true); - kn.routeOff(); - - _.defer(function () { - window.location.reload(); - }); - } - else - { - __webpack_require__(/*! App:RainLoop */ 4).accountsAndIdentities(); - } - - }, oAccountToRemove.email); - } - } - }; - - module.exports = SettingsAccounts; - - }()); - -/***/ }, -/* 79 */ -/*!****************************************************!*\ - !*** ./dev/Settings/App/SettingsChangePassword.js ***! - \****************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13) - ; - - /** - * @constructor - */ - function SettingsChangePassword() - { - this.changeProcess = ko.observable(false); - - this.errorDescription = ko.observable(''); - this.passwordMismatch = ko.observable(false); - this.passwordUpdateError = ko.observable(false); - this.passwordUpdateSuccess = ko.observable(false); - - this.currentPassword = ko.observable(''); - this.currentPassword.error = ko.observable(false); - this.newPassword = ko.observable(''); - this.newPassword2 = ko.observable(''); - - this.currentPassword.subscribe(function () { - this.passwordUpdateError(false); - this.passwordUpdateSuccess(false); - this.currentPassword.error(false); - }, this); - - this.newPassword.subscribe(function () { - this.passwordUpdateError(false); - this.passwordUpdateSuccess(false); - this.passwordMismatch(false); - }, this); - - this.newPassword2.subscribe(function () { - this.passwordUpdateError(false); - this.passwordUpdateSuccess(false); - this.passwordMismatch(false); - }, this); - - this.saveNewPasswordCommand = Utils.createCommand(this, function () { - - if (this.newPassword() !== this.newPassword2()) - { - this.passwordMismatch(true); - this.errorDescription(Utils.i18n('SETTINGS_CHANGE_PASSWORD/ERROR_PASSWORD_MISMATCH')); - } - else - { - this.changeProcess(true); - - this.passwordUpdateError(false); - this.passwordUpdateSuccess(false); - this.currentPassword.error(false); - this.passwordMismatch(false); - this.errorDescription(''); - - Remote.changePassword(this.onChangePasswordResponse, this.currentPassword(), this.newPassword()); - } - - }, function () { - return !this.changeProcess() && '' !== this.currentPassword() && - '' !== this.newPassword() && '' !== this.newPassword2(); - }); - - this.onChangePasswordResponse = _.bind(this.onChangePasswordResponse, this); - } - - SettingsChangePassword.prototype.onHide = function () - { - this.changeProcess(false); - this.currentPassword(''); - this.newPassword(''); - this.newPassword2(''); - this.errorDescription(''); - this.passwordMismatch(false); - this.currentPassword.error(false); - }; - - SettingsChangePassword.prototype.onChangePasswordResponse = function (sResult, oData) - { - this.changeProcess(false); - this.passwordMismatch(false); - this.errorDescription(''); - this.currentPassword.error(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - this.currentPassword(''); - this.newPassword(''); - this.newPassword2(''); - - this.passwordUpdateSuccess(true); - this.currentPassword.error(false); - } - else - { - if (oData && Enums.Notification.CurrentPasswordIncorrect === oData.ErrorCode) - { - this.currentPassword.error(true); - } - - this.passwordUpdateError(true); - this.errorDescription(oData && oData.ErrorCode ? Utils.getNotification(oData.ErrorCode) : - Utils.getNotification(Enums.Notification.CouldNotSaveNewPassword)); - } - }; - - module.exports = SettingsChangePassword; - - }()); - -/***/ }, -/* 80 */ -/*!**********************************************!*\ - !*** ./dev/Settings/App/SettingsContacts.js ***! - \**********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8) - ; - - /** - * @constructor - */ - function SettingsContacts() - { - this.contactsAutosave = Data.contactsAutosave; - - this.allowContactsSync = Data.allowContactsSync; - this.enableContactsSync = Data.enableContactsSync; - this.contactsSyncUrl = Data.contactsSyncUrl; - this.contactsSyncUser = Data.contactsSyncUser; - this.contactsSyncPass = Data.contactsSyncPass; - - this.saveTrigger = ko.computed(function () { - return [ - this.enableContactsSync() ? '1' : '0', - this.contactsSyncUrl(), - this.contactsSyncUser(), - this.contactsSyncPass() - ].join('|'); - }, this).extend({'throttle': 500}); - - this.saveTrigger.subscribe(function () { - Remote.saveContactsSyncData(null, - this.enableContactsSync(), - this.contactsSyncUrl(), - this.contactsSyncUser(), - this.contactsSyncPass() - ); - }, this); - } - - SettingsContacts.prototype.onBuild = function () - { - Data.contactsAutosave.subscribe(function (bValue) { - Remote.saveSettings(Utils.emptyFunction, { - 'ContactsAutosave': bValue ? '1' : '0' - }); - }); - }; - - module.exports = SettingsContacts; - - }()); - -/***/ }, -/* 81 */ -/*!*********************************************!*\ - !*** ./dev/Settings/App/SettingsFilters.js ***! - \*********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @constructor - */ - function SettingsFilters() - { - this.filters = ko.observableArray([]); - this.filters.loading = ko.observable(false); - - this.filters.subscribe(function () { - Utils.windowResize(); - }); - } - - SettingsFilters.prototype.deleteFilter = function (oFilter) - { - this.filters.remove(oFilter); - }; - - SettingsFilters.prototype.addFilter = function () - { - var - FilterModel = __webpack_require__(/*! Model:Filter */ 57) - ; - - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup( - __webpack_require__(/*! View:Popup:Filter */ 106), [new FilterModel()]); - }; - - module.exports = SettingsFilters; - - }()); - -/***/ }, -/* 82 */ -/*!*********************************************!*\ - !*** ./dev/Settings/App/SettingsFolders.js ***! - \*********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Cache = __webpack_require__(/*! Storage:RainLoop:Cache */ 20), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - LocalStorage = __webpack_require__(/*! Storage:LocalStorage */ 30) - ; - - /** - * @constructor - */ - function SettingsFolders() - { - this.foldersListError = Data.foldersListError; - this.folderList = Data.folderList; - - this.processText = ko.computed(function () { - - var - bLoading = Data.foldersLoading(), - bCreating = Data.foldersCreating(), - bDeleting = Data.foldersDeleting(), - bRenaming = Data.foldersRenaming() - ; - - if (bCreating) - { - return Utils.i18n('SETTINGS_FOLDERS/CREATING_PROCESS'); - } - else if (bDeleting) - { - return Utils.i18n('SETTINGS_FOLDERS/DELETING_PROCESS'); - } - else if (bRenaming) - { - return Utils.i18n('SETTINGS_FOLDERS/RENAMING_PROCESS'); - } - else if (bLoading) - { - return Utils.i18n('SETTINGS_FOLDERS/LOADING_PROCESS'); - } - - return ''; - - }, this); - - this.visibility = ko.computed(function () { - return '' === this.processText() ? 'hidden' : 'visible'; - }, this); - - this.folderForDeletion = ko.observable(null).extend({'falseTimeout': 3000}).extend({'toggleSubscribe': [this, - function (oPrev) { - if (oPrev) - { - oPrev.deleteAccess(false); - } - }, function (oNext) { - if (oNext) - { - oNext.deleteAccess(true); - } - } - ]}); - - this.folderForEdit = ko.observable(null).extend({'toggleSubscribe': [this, - function (oPrev) { - if (oPrev) - { - oPrev.edited(false); - } - }, function (oNext) { - if (oNext && oNext.canBeEdited()) - { - oNext.edited(true); - } - } - ]}); - - this.useImapSubscribe = !!Settings.settingsGet('UseImapSubscribe'); - } - - SettingsFolders.prototype.folderEditOnEnter = function (oFolder) - { - var - sEditName = oFolder ? Utils.trim(oFolder.nameForEdit()) : '' - ; - - if ('' !== sEditName && oFolder.name() !== sEditName) - { - LocalStorage.set(Enums.ClientSideKeyName.FoldersLashHash, ''); - - Data.foldersRenaming(true); - Remote.folderRename(function (sResult, oData) { - - Data.foldersRenaming(false); - if (Enums.StorageResultType.Success !== sResult || !oData || !oData.Result) - { - Data.foldersListError( - oData && oData.ErrorCode ? Utils.getNotification(oData.ErrorCode) : Utils.i18n('NOTIFICATIONS/CANT_RENAME_FOLDER')); - } - - __webpack_require__(/*! App:RainLoop */ 4).folders(); - - }, oFolder.fullNameRaw, sEditName); - - Cache.removeFolderFromCacheList(oFolder.fullNameRaw); - - oFolder.name(sEditName); - } - - oFolder.edited(false); - }; - - SettingsFolders.prototype.folderEditOnEsc = function (oFolder) - { - if (oFolder) - { - oFolder.edited(false); - } - }; - - SettingsFolders.prototype.onShow = function () - { - Data.foldersListError(''); - }; - - SettingsFolders.prototype.createFolder = function () - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:FolderCreate */ 44)); - }; - - SettingsFolders.prototype.systemFolder = function () - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:FolderSystem */ 27)); - }; - - SettingsFolders.prototype.deleteFolder = function (oFolderToRemove) - { - if (oFolderToRemove && oFolderToRemove.canBeDeleted() && oFolderToRemove.deleteAccess() && - 0 === oFolderToRemove.privateMessageCountAll()) - { - this.folderForDeletion(null); - - var - fRemoveFolder = function (oFolder) { - - if (oFolderToRemove === oFolder) - { - return true; - } - - oFolder.subFolders.remove(fRemoveFolder); - return false; - } - ; - - if (oFolderToRemove) - { - LocalStorage.set(Enums.ClientSideKeyName.FoldersLashHash, ''); - - Data.folderList.remove(fRemoveFolder); - - Data.foldersDeleting(true); - Remote.folderDelete(function (sResult, oData) { - - Data.foldersDeleting(false); - if (Enums.StorageResultType.Success !== sResult || !oData || !oData.Result) - { - Data.foldersListError( - oData && oData.ErrorCode ? Utils.getNotification(oData.ErrorCode) : Utils.i18n('NOTIFICATIONS/CANT_DELETE_FOLDER')); - } - - __webpack_require__(/*! App:RainLoop */ 4).folders(); - - }, oFolderToRemove.fullNameRaw); - - Cache.removeFolderFromCacheList(oFolderToRemove.fullNameRaw); - } - } - else if (0 < oFolderToRemove.privateMessageCountAll()) - { - Data.foldersListError(Utils.getNotification(Enums.Notification.CantDeleteNonEmptyFolder)); - } - }; - - SettingsFolders.prototype.subscribeFolder = function (oFolder) - { - LocalStorage.set(Enums.ClientSideKeyName.FoldersLashHash, ''); - Remote.folderSetSubscribe(Utils.emptyFunction, oFolder.fullNameRaw, true); - - oFolder.subScribed(true); - }; - - SettingsFolders.prototype.unSubscribeFolder = function (oFolder) - { - LocalStorage.set(Enums.ClientSideKeyName.FoldersLashHash, ''); - Remote.folderSetSubscribe(Utils.emptyFunction, oFolder.fullNameRaw, false); - - oFolder.subScribed(false); - }; - - module.exports = SettingsFolders; - - }()); - -/***/ }, -/* 83 */ -/*!*********************************************!*\ - !*** ./dev/Settings/App/SettingsGeneral.js ***! - \*********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Consts = __webpack_require__(/*! Common/Consts */ 17), - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13) - ; - - /** - * @constructor - */ - function SettingsGeneral() - { - this.mainLanguage = Data.mainLanguage; - this.mainMessagesPerPage = Data.mainMessagesPerPage; - this.mainMessagesPerPageArray = Consts.Defaults.MessagesPerPageArray; - this.editorDefaultType = Data.editorDefaultType; - this.showImages = Data.showImages; - this.interfaceAnimation = Data.interfaceAnimation; - this.useDesktopNotifications = Data.useDesktopNotifications; - this.threading = Data.threading; - this.useThreads = Data.useThreads; - this.replySameFolder = Data.replySameFolder; - this.layout = Data.layout; - this.usePreviewPane = Data.usePreviewPane; - this.useCheckboxesInList = Data.useCheckboxesInList; - this.allowLanguagesOnSettings = Data.allowLanguagesOnSettings; - - this.isDesktopNotificationsSupported = ko.computed(function () { - return Enums.DesktopNotifications.NotSupported !== Data.desktopNotificationsPermisions(); - }); - - this.isDesktopNotificationsDenied = ko.computed(function () { - return Enums.DesktopNotifications.NotSupported === Data.desktopNotificationsPermisions() || - Enums.DesktopNotifications.Denied === Data.desktopNotificationsPermisions(); - }); - - this.mainLanguageFullName = ko.computed(function () { - return Utils.convertLangName(this.mainLanguage()); - }, this); - - this.languageTrigger = ko.observable(Enums.SaveSettingsStep.Idle).extend({'throttle': 100}); - this.mppTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - - this.isAnimationSupported = Globals.bAnimationSupported; - } - - SettingsGeneral.prototype.toggleLayout = function () - { - this.layout(Enums.Layout.NoPreview === this.layout() ? Enums.Layout.SidePreview : Enums.Layout.NoPreview); - }; - - SettingsGeneral.prototype.onBuild = function () - { - var self = this; - - _.delay(function () { - - var - f1 = Utils.settingsSaveHelperSimpleFunction(self.mppTrigger, self) - ; - - Data.language.subscribe(function (sValue) { - - self.languageTrigger(Enums.SaveSettingsStep.Animate); - - $.ajax({ - 'url': LinkBuilder.langLink(sValue), - 'dataType': 'script', - 'cache': true - }).done(function() { - Utils.i18nReload(); - self.languageTrigger(Enums.SaveSettingsStep.TrueResult); - }).fail(function() { - self.languageTrigger(Enums.SaveSettingsStep.FalseResult); - }).always(function() { - _.delay(function () { - self.languageTrigger(Enums.SaveSettingsStep.Idle); - }, 1000); - }); - - Remote.saveSettings(Utils.emptyFunction, { - 'Language': sValue - }); - }); - - Data.editorDefaultType.subscribe(function (sValue) { - Remote.saveSettings(Utils.emptyFunction, { - 'EditorDefaultType': sValue - }); - }); - - Data.messagesPerPage.subscribe(function (iValue) { - Remote.saveSettings(f1, { - 'MPP': iValue - }); - }); - - Data.showImages.subscribe(function (bValue) { - Remote.saveSettings(Utils.emptyFunction, { - 'ShowImages': bValue ? '1' : '0' - }); - }); - - Data.interfaceAnimation.subscribe(function (sValue) { - Remote.saveSettings(Utils.emptyFunction, { - 'InterfaceAnimation': sValue - }); - }); - - Data.useDesktopNotifications.subscribe(function (bValue) { - Utils.timeOutAction('SaveDesktopNotifications', function () { - Remote.saveSettings(Utils.emptyFunction, { - 'DesktopNotifications': bValue ? '1' : '0' - }); - }, 3000); - }); - - Data.replySameFolder.subscribe(function (bValue) { - Utils.timeOutAction('SaveReplySameFolder', function () { - Remote.saveSettings(Utils.emptyFunction, { - 'ReplySameFolder': bValue ? '1' : '0' - }); - }, 3000); - }); - - Data.useThreads.subscribe(function (bValue) { - - Data.messageList([]); - - Remote.saveSettings(Utils.emptyFunction, { - 'UseThreads': bValue ? '1' : '0' - }); - }); - - Data.layout.subscribe(function (nValue) { - - Data.messageList([]); - - Remote.saveSettings(Utils.emptyFunction, { - 'Layout': nValue - }); - }); - - Data.useCheckboxesInList.subscribe(function (bValue) { - Remote.saveSettings(Utils.emptyFunction, { - 'UseCheckboxesInList': bValue ? '1' : '0' - }); - }); - - }, 50); - }; - - SettingsGeneral.prototype.onShow = function () - { - Data.desktopNotifications.valueHasMutated(); - }; - - SettingsGeneral.prototype.selectLanguage = function () - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:Languages */ 32)); - }; - - module.exports = SettingsGeneral; - - }()); - -/***/ }, -/* 84 */ -/*!************************************************!*\ - !*** ./dev/Settings/App/SettingsIdentities.js ***! - \************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 28), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13) - ; - - /** - * @constructor - */ - function SettingsIdentities() - { - this.editor = null; - this.defautOptionsAfterRender = Utils.defautOptionsAfterRender; - - this.accountEmail = Data.accountEmail; - this.displayName = Data.displayName; - this.signature = Data.signature; - this.signatureToAll = Data.signatureToAll; - this.replyTo = Data.replyTo; - - this.signatureDom = ko.observable(null); - - this.defaultIdentityIDTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - this.displayNameTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - this.replyTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - this.signatureTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - - this.identities = Data.identities; - this.defaultIdentityID = Data.defaultIdentityID; - - this.identitiesOptions = ko.computed(function () { - - var - aList = this.identities(), - aResult = [] - ; - - if (0 < aList.length) - { - aResult.push({ - 'id': this.accountEmail.peek(), - 'name': this.formattedAccountIdentity(), - 'seporator': false - }); - - aResult.push({ - 'id': '---', - 'name': '---', - 'seporator': true, - 'disabled': true - }); - - _.each(aList, function (oItem) { - aResult.push({ - 'id': oItem.id, - 'name': oItem.formattedNameForEmail(), - 'seporator': false - }); - }); - } - - return aResult; - }, this); - - this.processText = ko.computed(function () { - return Data.identitiesLoading() ? Utils.i18n('SETTINGS_IDENTITIES/LOADING_PROCESS') : ''; - }, this); - - this.visibility = ko.computed(function () { - return '' === this.processText() ? 'hidden' : 'visible'; - }, this); - - this.identityForDeletion = ko.observable(null).extend({'falseTimeout': 3000}).extend({'toggleSubscribe': [this, - function (oPrev) { - if (oPrev) - { - oPrev.deleteAccess(false); - } - }, function (oNext) { - if (oNext) - { - oNext.deleteAccess(true); - } - } - ]}); - } - - /** - * - * @return {string} - */ - SettingsIdentities.prototype.formattedAccountIdentity = function () - { - var - sDisplayName = this.displayName.peek(), - sEmail = this.accountEmail.peek() - ; - - return '' === sDisplayName ? sEmail : '"' + Utils.quoteName(sDisplayName) + '" <' + sEmail + '>'; - }; - - SettingsIdentities.prototype.addNewIdentity = function () - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:Identity */ 45)); - }; - - SettingsIdentities.prototype.editIdentity = function (oIdentity) - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:Identity */ 45), [oIdentity]); - }; - - /** - * @param {IdentityModel} oIdentityToRemove - */ - SettingsIdentities.prototype.deleteIdentity = function (oIdentityToRemove) - { - if (oIdentityToRemove && oIdentityToRemove.deleteAccess()) - { - this.identityForDeletion(null); - - var - fRemoveFolder = function (oIdentity) { - return oIdentityToRemove === oIdentity; - } - ; - - if (oIdentityToRemove) - { - this.identities.remove(fRemoveFolder); - - Remote.identityDelete(function () { - __webpack_require__(/*! App:RainLoop */ 4).accountsAndIdentities(); - }, oIdentityToRemove.id); - } - } - }; - - SettingsIdentities.prototype.onFocus = function () - { - if (!this.editor && this.signatureDom()) - { - var - self = this, - sSignature = Data.signature() - ; - - this.editor = new HtmlEditor(self.signatureDom(), function () { - Data.signature( - (self.editor.isHtml() ? ':HTML:' : '') + self.editor.getData() - ); - }, function () { - if (':HTML:' === sSignature.substr(0, 6)) - { - self.editor.setHtml(sSignature.substr(6), false); - } - else - { - self.editor.setPlain(sSignature, false); - } - }); - } - }; - - SettingsIdentities.prototype.onBuild = function (oDom) - { - var self = this; - - oDom - .on('click', '.identity-item .e-action', function () { - var oIdentityItem = ko.dataFor(this); - if (oIdentityItem) - { - self.editIdentity(oIdentityItem); - } - }) - ; - - _.delay(function () { - - var - f1 = Utils.settingsSaveHelperSimpleFunction(self.displayNameTrigger, self), - f2 = Utils.settingsSaveHelperSimpleFunction(self.replyTrigger, self), - f3 = Utils.settingsSaveHelperSimpleFunction(self.signatureTrigger, self), - f4 = Utils.settingsSaveHelperSimpleFunction(self.defaultIdentityIDTrigger, self) - ; - - Data.defaultIdentityID.subscribe(function (sValue) { - Remote.saveSettings(f4, { - 'DefaultIdentityID': sValue - }); - }); - - Data.displayName.subscribe(function (sValue) { - Remote.saveSettings(f1, { - 'DisplayName': sValue - }); - }); - - Data.replyTo.subscribe(function (sValue) { - Remote.saveSettings(f2, { - 'ReplyTo': sValue - }); - }); - - Data.signature.subscribe(function (sValue) { - Remote.saveSettings(f3, { - 'Signature': sValue - }); - }); - - Data.signatureToAll.subscribe(function (bValue) { - Remote.saveSettings(null, { - 'SignatureToAll': bValue ? '1' : '0' - }); - }); - - }, 50); - }; - - module.exports = SettingsIdentities; - - }()); - -/***/ }, -/* 85 */ -/*!**********************************************!*\ - !*** ./dev/Settings/App/SettingsIdentity.js ***! - \**********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 28), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13) - ; - - /** - * @constructor - */ - function SettingsIdentity() - { - this.editor = null; - - this.displayName = Data.displayName; - this.signature = Data.signature; - this.signatureToAll = Data.signatureToAll; - this.replyTo = Data.replyTo; - - this.signatureDom = ko.observable(null); - - this.displayNameTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - this.replyTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - this.signatureTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - } - - SettingsIdentity.prototype.onFocus = function () - { - if (!this.editor && this.signatureDom()) - { - var - self = this, - sSignature = Data.signature() - ; - - this.editor = new HtmlEditor(self.signatureDom(), function () { - Data.signature( - (self.editor.isHtml() ? ':HTML:' : '') + self.editor.getData() - ); - }, function () { - if (':HTML:' === sSignature.substr(0, 6)) - { - self.editor.setHtml(sSignature.substr(6), false); - } - else - { - self.editor.setPlain(sSignature, false); - } - }); - } - }; - - SettingsIdentity.prototype.onBuild = function () - { - var self = this; - _.delay(function () { - - var - f1 = Utils.settingsSaveHelperSimpleFunction(self.displayNameTrigger, self), - f2 = Utils.settingsSaveHelperSimpleFunction(self.replyTrigger, self), - f3 = Utils.settingsSaveHelperSimpleFunction(self.signatureTrigger, self) - ; - - Data.displayName.subscribe(function (sValue) { - Remote.saveSettings(f1, { - 'DisplayName': sValue - }); - }); - - Data.replyTo.subscribe(function (sValue) { - Remote.saveSettings(f2, { - 'ReplyTo': sValue - }); - }); - - Data.signature.subscribe(function (sValue) { - Remote.saveSettings(f3, { - 'Signature': sValue - }); - }); - - Data.signatureToAll.subscribe(function (bValue) { - Remote.saveSettings(null, { - 'SignatureToAll': bValue ? '1' : '0' - }); - }); - - }, 50); - }; - - module.exports = SettingsIdentity; - - }()); - -/***/ }, -/* 86 */ -/*!*********************************************!*\ - !*** ./dev/Settings/App/SettingsOpenPGP.js ***! - \*********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - - kn = __webpack_require__(/*! App:Knoin */ 5), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8) - ; - - /** - * @constructor - */ - function SettingsOpenPGP() - { - this.openpgpkeys = Data.openpgpkeys; - this.openpgpkeysPublic = Data.openpgpkeysPublic; - this.openpgpkeysPrivate = Data.openpgpkeysPrivate; - - this.openPgpKeyForDeletion = ko.observable(null).extend({'falseTimeout': 3000}).extend({'toggleSubscribe': [this, - function (oPrev) { - if (oPrev) - { - oPrev.deleteAccess(false); - } - }, function (oNext) { - if (oNext) - { - oNext.deleteAccess(true); - } - } - ]}); - } - - SettingsOpenPGP.prototype.addOpenPgpKey = function () - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:AddOpenPgpKey */ 102)); - }; - - SettingsOpenPGP.prototype.generateOpenPgpKey = function () - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:NewOpenPgpKey */ 108)); - }; - - SettingsOpenPGP.prototype.viewOpenPgpKey = function (oOpenPgpKey) - { - if (oOpenPgpKey) - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:ViewOpenPgpKey */ 111), [oOpenPgpKey]); - } - }; - - /** - * @param {OpenPgpKeyModel} oOpenPgpKeyToRemove - */ - SettingsOpenPGP.prototype.deleteOpenPgpKey = function (oOpenPgpKeyToRemove) - { - if (oOpenPgpKeyToRemove && oOpenPgpKeyToRemove.deleteAccess()) - { - this.openPgpKeyForDeletion(null); - - if (oOpenPgpKeyToRemove && Data.openpgpKeyring) - { - this.openpgpkeys.remove(function (oOpenPgpKey) { - return oOpenPgpKeyToRemove === oOpenPgpKey; - }); - - Data.openpgpKeyring[oOpenPgpKeyToRemove.isPrivate ? 'privateKeys' : 'publicKeys'] - .removeForId(oOpenPgpKeyToRemove.guid); - - Data.openpgpKeyring.store(); - - __webpack_require__(/*! App:RainLoop */ 4).reloadOpenPgpKeys(); - } - } - }; - - module.exports = SettingsOpenPGP; - - }()); - -/***/ }, -/* 87 */ -/*!**********************************************!*\ - !*** ./dev/Settings/App/SettingsSecurity.js ***! - \**********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13) - ; - - /** - * @constructor - */ - function SettingsSecurity() - { - this.processing = ko.observable(false); - this.clearing = ko.observable(false); - this.secreting = ko.observable(false); - - this.viewUser = ko.observable(''); - this.viewEnable = ko.observable(false); - this.viewEnable.subs = true; - this.twoFactorStatus = ko.observable(false); - - this.viewSecret = ko.observable(''); - this.viewBackupCodes = ko.observable(''); - this.viewUrl = ko.observable(''); - - this.bFirst = true; - - this.viewTwoFactorStatus = ko.computed(function () { - Globals.langChangeTrigger(); - return Utils.i18n( - this.twoFactorStatus() ? - 'SETTINGS_SECURITY/TWO_FACTOR_SECRET_CONFIGURED_DESC' : - 'SETTINGS_SECURITY/TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC' - ); - }, this); - - this.onResult = _.bind(this.onResult, this); - this.onSecretResult = _.bind(this.onSecretResult, this); - } - - SettingsSecurity.prototype.showSecret = function () - { - this.secreting(true); - Remote.showTwoFactorSecret(this.onSecretResult); - }; - - SettingsSecurity.prototype.hideSecret = function () - { - this.viewSecret(''); - this.viewBackupCodes(''); - this.viewUrl(''); - }; - - SettingsSecurity.prototype.createTwoFactor = function () - { - this.processing(true); - Remote.createTwoFactor(this.onResult); - }; - - SettingsSecurity.prototype.enableTwoFactor = function () - { - this.processing(true); - Remote.enableTwoFactor(this.onResult, this.viewEnable()); - }; - - SettingsSecurity.prototype.testTwoFactor = function () - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:TwoFactorTest */ 110)); - }; - - SettingsSecurity.prototype.clearTwoFactor = function () - { - this.viewSecret(''); - this.viewBackupCodes(''); - this.viewUrl(''); - - this.clearing(true); - Remote.clearTwoFactor(this.onResult); - }; - - SettingsSecurity.prototype.onShow = function () - { - this.viewSecret(''); - this.viewBackupCodes(''); - this.viewUrl(''); - }; - - SettingsSecurity.prototype.onResult = function (sResult, oData) - { - this.processing(false); - this.clearing(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - this.viewUser(Utils.pString(oData.Result.User)); - this.viewEnable(!!oData.Result.Enable); - this.twoFactorStatus(!!oData.Result.IsSet); - - this.viewSecret(Utils.pString(oData.Result.Secret)); - this.viewBackupCodes(Utils.pString(oData.Result.BackupCodes).replace(/[\s]+/g, ' ')); - this.viewUrl(Utils.pString(oData.Result.Url)); - } - else - { - this.viewUser(''); - this.viewEnable(false); - this.twoFactorStatus(false); - - this.viewSecret(''); - this.viewBackupCodes(''); - this.viewUrl(''); - } - - if (this.bFirst) - { - this.bFirst = false; - var self = this; - this.viewEnable.subscribe(function (bValue) { - if (this.viewEnable.subs) - { - Remote.enableTwoFactor(function (sResult, oData) { - if (Enums.StorageResultType.Success !== sResult || !oData || !oData.Result) - { - self.viewEnable.subs = false; - self.viewEnable(false); - self.viewEnable.subs = true; - } - }, bValue); - } - }, this); - } - }; - - SettingsSecurity.prototype.onSecretResult = function (sResult, oData) - { - this.secreting(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - this.viewSecret(Utils.pString(oData.Result.Secret)); - this.viewUrl(Utils.pString(oData.Result.Url)); - } - else - { - this.viewSecret(''); - this.viewUrl(''); - } - }; - - SettingsSecurity.prototype.onBuild = function () - { - this.processing(true); - Remote.getTwoFactor(this.onResult); - }; - - module.exports = SettingsSecurity; - - }()); - -/***/ }, -/* 88 */ -/*!********************************************!*\ - !*** ./dev/Settings/App/SettingsSocial.js ***! - \********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - /** - * @constructor - */ - function SettingsSocial() - { - var - Utils = __webpack_require__(/*! Common/Utils */ 1), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8) - ; - - this.googleEnable = Data.googleEnable; - - this.googleActions = Data.googleActions; - this.googleLoggined = Data.googleLoggined; - this.googleUserName = Data.googleUserName; - - this.facebookEnable = Data.facebookEnable; - - this.facebookActions = Data.facebookActions; - this.facebookLoggined = Data.facebookLoggined; - this.facebookUserName = Data.facebookUserName; - - this.twitterEnable = Data.twitterEnable; - - this.twitterActions = Data.twitterActions; - this.twitterLoggined = Data.twitterLoggined; - this.twitterUserName = Data.twitterUserName; - - this.connectGoogle = Utils.createCommand(this, function () { - if (!this.googleLoggined()) - { - __webpack_require__(/*! App:RainLoop */ 4).googleConnect(); - } - }, function () { - return !this.googleLoggined() && !this.googleActions(); - }); - - this.disconnectGoogle = Utils.createCommand(this, function () { - __webpack_require__(/*! App:RainLoop */ 4).googleDisconnect(); - }); - - this.connectFacebook = Utils.createCommand(this, function () { - if (!this.facebookLoggined()) - { - __webpack_require__(/*! App:RainLoop */ 4).facebookConnect(); - } - }, function () { - return !this.facebookLoggined() && !this.facebookActions(); - }); - - this.disconnectFacebook = Utils.createCommand(this, function () { - __webpack_require__(/*! App:RainLoop */ 4).facebookDisconnect(); - }); - - this.connectTwitter = Utils.createCommand(this, function () { - if (!this.twitterLoggined()) - { - __webpack_require__(/*! App:RainLoop */ 4).twitterConnect(); - } - }, function () { - return !this.twitterLoggined() && !this.twitterActions(); - }); - - this.disconnectTwitter = Utils.createCommand(this, function () { - __webpack_require__(/*! App:RainLoop */ 4).twitterDisconnect(); - }); - } - - module.exports = SettingsSocial; - - }()); - -/***/ }, -/* 89 */ -/*!********************************************!*\ - !*** ./dev/Settings/App/SettingsThemes.js ***! - \********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13) - ; - - /** - * @constructor - */ - function SettingsThemes() - { - var self = this; - - this.mainTheme = Data.mainTheme; - this.themesObjects = ko.observableArray([]); - - this.themeTrigger = ko.observable(Enums.SaveSettingsStep.Idle).extend({'throttle': 100}); - - this.oLastAjax = null; - this.iTimer = 0; - - Data.theme.subscribe(function (sValue) { - - _.each(this.themesObjects(), function (oTheme) { - oTheme.selected(sValue === oTheme.name); - }); - - var - oThemeLink = $('#rlThemeLink'), - oThemeStyle = $('#rlThemeStyle'), - sUrl = oThemeLink.attr('href') - ; - - if (!sUrl) - { - sUrl = oThemeStyle.attr('data-href'); - } - - if (sUrl) - { - sUrl = sUrl.toString().replace(/\/-\/[^\/]+\/\-\//, '/-/' + sValue + '/-/'); - sUrl = sUrl.toString().replace(/\/Css\/[^\/]+\/User\//, '/Css/0/User/'); - - if ('Json/' !== sUrl.substring(sUrl.length - 5, sUrl.length)) - { - sUrl += 'Json/'; - } - - window.clearTimeout(self.iTimer); - self.themeTrigger(Enums.SaveSettingsStep.Animate); - - if (this.oLastAjax && this.oLastAjax.abort) - { - this.oLastAjax.abort(); - } - - this.oLastAjax = $.ajax({ - 'url': sUrl, - 'dataType': 'json' - }).done(function(aData) { - - if (aData && Utils.isArray(aData) && 2 === aData.length) - { - if (oThemeLink && oThemeLink[0] && (!oThemeStyle || !oThemeStyle[0])) - { - oThemeStyle = $(''); - oThemeLink.after(oThemeStyle); - oThemeLink.remove(); - } - - if (oThemeStyle && oThemeStyle[0]) - { - oThemeStyle.attr('data-href', sUrl).attr('data-theme', aData[0]); - if (oThemeStyle && oThemeStyle[0] && oThemeStyle[0].styleSheet && !Utils.isUnd(oThemeStyle[0].styleSheet.cssText)) - { - oThemeStyle[0].styleSheet.cssText = aData[1]; - } - else - { - oThemeStyle.text(aData[1]); - } - } - - self.themeTrigger(Enums.SaveSettingsStep.TrueResult); - } - - }).always(function() { - - self.iTimer = window.setTimeout(function () { - self.themeTrigger(Enums.SaveSettingsStep.Idle); - }, 1000); - - self.oLastAjax = null; - }); - } - - Remote.saveSettings(null, { - 'Theme': sValue - }); - - }, this); - } - - SettingsThemes.prototype.onBuild = function () - { - var sCurrentTheme = Data.theme(); - this.themesObjects(_.map(Data.themes(), function (sTheme) { - return { - 'name': sTheme, - 'nameDisplay': Utils.convertThemeName(sTheme), - 'selected': ko.observable(sTheme === sCurrentTheme), - 'themePreviewSrc': LinkBuilder.themePreviewLink(sTheme) - }; - })); - }; - - module.exports = SettingsThemes; - - }()); - -/***/ }, -/* 90 */, -/* 91 */, -/* 92 */ -/*!******************************************!*\ - !*** ./dev/ViewModels/AboutViewModel.js ***! - \******************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - kn = __webpack_require__(/*! App:Knoin */ 5), - Settings = __webpack_require__(/*! Storage:Settings */ 10), - - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function AboutViewModel() - { - KnoinAbstractViewModel.call(this, 'Center', 'About'); - - this.version = ko.observable(Settings.settingsGet('Version')); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:RainLoop:About', 'AboutViewModel'], AboutViewModel); - _.extend(AboutViewModel.prototype, KnoinAbstractViewModel.prototype); - - module.exports = AboutViewModel; - - }()); - -/***/ }, -/* 93 */, -/* 94 */, -/* 95 */, -/* 96 */, -/* 97 */ -/*!******************************************************!*\ - !*** ./dev/ViewModels/MailBoxFolderListViewModel.js ***! - \******************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - key = __webpack_require__(/*! key */ 19), - - Utils = __webpack_require__(/*! Common/Utils */ 1), - Enums = __webpack_require__(/*! Common/Enums */ 6), - Globals = __webpack_require__(/*! Common/Globals */ 7), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Cache = __webpack_require__(/*! Storage:RainLoop:Cache */ 20), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function MailBoxFolderListViewModel() - { - KnoinAbstractViewModel.call(this, 'Left', 'MailFolderList'); - - this.oContentVisible = null; - this.oContentScrollable = null; - - this.messageList = Data.messageList; - this.folderList = Data.folderList; - this.folderListSystem = Data.folderListSystem; - this.foldersChanging = Data.foldersChanging; - - this.leftPanelDisabled = Globals.leftPanelDisabled; - - this.iDropOverTimer = 0; - - this.allowContacts = !!Settings.settingsGet('ContactsIsAllowed'); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:RainLoop:MailBoxFolderList', 'MailBoxFolderListViewModel'], MailBoxFolderListViewModel); - _.extend(MailBoxFolderListViewModel.prototype, KnoinAbstractViewModel.prototype); - - MailBoxFolderListViewModel.prototype.onBuild = function (oDom) - { - this.oContentVisible = $('.b-content', oDom); - this.oContentScrollable = $('.content', this.oContentVisible); - - var self = this; - - oDom - .on('click', '.b-folders .e-item .e-link .e-collapsed-sign', function (oEvent) { - - var - oFolder = ko.dataFor(this), - bCollapsed = false - ; - - if (oFolder && oEvent) - { - bCollapsed = oFolder.collapsed(); - __webpack_require__(/*! App:RainLoop */ 4).setExpandedFolder(oFolder.fullNameHash, bCollapsed); - - oFolder.collapsed(!bCollapsed); - oEvent.preventDefault(); - oEvent.stopPropagation(); - } - }) - .on('click', '.b-folders .e-item .e-link.selectable', function (oEvent) { - - oEvent.preventDefault(); - - var - oFolder = ko.dataFor(this) - ; - - if (oFolder) - { - if (Enums.Layout.NoPreview === Data.layout()) - { - Data.message(null); - } - - if (oFolder.fullNameRaw === Data.currentFolderFullNameRaw()) - { - Cache.setFolderHash(oFolder.fullNameRaw, ''); - } - - kn.setHash(LinkBuilder.mailBox(oFolder.fullNameHash)); - } - }) - ; - - key('up, down', Enums.KeyState.FolderList, function (event, handler) { - - var - iIndex = -1, - iKeyCode = handler && 'up' === handler.shortcut ? 38 : 40, - $items = $('.b-folders .e-item .e-link:not(.hidden):visible', oDom) - ; - - if (event && $items.length) - { - iIndex = $items.index($items.filter('.focused')); - if (-1 < iIndex) - { - $items.eq(iIndex).removeClass('focused'); - } - - if (iKeyCode === 38 && iIndex > 0) - { - iIndex--; - } - else if (iKeyCode === 40 && iIndex < $items.length - 1) - { - iIndex++; - } - - $items.eq(iIndex).addClass('focused'); - self.scrollToFocused(); - } - - return false; - }); - - key('enter', Enums.KeyState.FolderList, function () { - var $items = $('.b-folders .e-item .e-link:not(.hidden).focused', oDom); - if ($items.length && $items[0]) - { - self.folderList.focused(false); - $items.click(); - } - - return false; - }); - - key('space', Enums.KeyState.FolderList, function () { - var bCollapsed = true, oFolder = null, $items = $('.b-folders .e-item .e-link:not(.hidden).focused', oDom); - if ($items.length && $items[0]) - { - oFolder = ko.dataFor($items[0]); - if (oFolder) - { - bCollapsed = oFolder.collapsed(); - __webpack_require__(/*! App:RainLoop */ 4).setExpandedFolder(oFolder.fullNameHash, bCollapsed); - oFolder.collapsed(!bCollapsed); - } - } - - return false; - }); - - key('esc, tab, shift+tab, right', Enums.KeyState.FolderList, function () { - self.folderList.focused(false); - return false; - }); - - self.folderList.focused.subscribe(function (bValue) { - $('.b-folders .e-item .e-link.focused', oDom).removeClass('focused'); - if (bValue) - { - $('.b-folders .e-item .e-link.selected', oDom).addClass('focused'); - } - }); - }; - - MailBoxFolderListViewModel.prototype.messagesDropOver = function (oFolder) - { - window.clearTimeout(this.iDropOverTimer); - if (oFolder && oFolder.collapsed()) - { - this.iDropOverTimer = window.setTimeout(function () { - oFolder.collapsed(false); - __webpack_require__(/*! App:RainLoop */ 4).setExpandedFolder(oFolder.fullNameHash, true); - Utils.windowResize(); - }, 500); - } - }; - - MailBoxFolderListViewModel.prototype.messagesDropOut = function () - { - window.clearTimeout(this.iDropOverTimer); - }; - - MailBoxFolderListViewModel.prototype.scrollToFocused = function () - { - if (!this.oContentVisible || !this.oContentScrollable) - { - return false; - } - - var - iOffset = 20, - oFocused = $('.e-item .e-link.focused', this.oContentScrollable), - oPos = oFocused.position(), - iVisibleHeight = this.oContentVisible.height(), - iFocusedHeight = oFocused.outerHeight() - ; - - if (oPos && (oPos.top < 0 || oPos.top + iFocusedHeight > iVisibleHeight)) - { - if (oPos.top < 0) - { - this.oContentScrollable.scrollTop(this.oContentScrollable.scrollTop() + oPos.top - iOffset); - } - else - { - this.oContentScrollable.scrollTop(this.oContentScrollable.scrollTop() + oPos.top - iVisibleHeight + iFocusedHeight + iOffset); - } - - return true; - } - - return false; - }; - - /** - * - * @param {FolderModel} oToFolder - * @param {{helper:jQuery}} oUi - */ - MailBoxFolderListViewModel.prototype.messagesDrop = function (oToFolder, oUi) - { - if (oToFolder && oUi && oUi.helper) - { - var - sFromFolderFullNameRaw = oUi.helper.data('rl-folder'), - bCopy = Globals.$html.hasClass('rl-ctrl-key-pressed'), - aUids = oUi.helper.data('rl-uids') - ; - - if (Utils.isNormal(sFromFolderFullNameRaw) && '' !== sFromFolderFullNameRaw && Utils.isArray(aUids)) - { - __webpack_require__(/*! App:RainLoop */ 4).moveMessagesToFolder(sFromFolderFullNameRaw, aUids, oToFolder.fullNameRaw, bCopy); - } - } - }; - - MailBoxFolderListViewModel.prototype.composeClick = function () - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:Compose */ 21)); - }; - - MailBoxFolderListViewModel.prototype.createFolder = function () - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:FolderCreate */ 44)); - }; - - MailBoxFolderListViewModel.prototype.configureFolders = function () - { - kn.setHash(LinkBuilder.settings('folders')); - }; - - MailBoxFolderListViewModel.prototype.contactsClick = function () - { - if (this.allowContacts) - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:Contacts */ 43)); - } - }; - - module.exports = MailBoxFolderListViewModel; - - }()); - - -/***/ }, -/* 98 */ -/*!*******************************************************!*\ - !*** ./dev/ViewModels/MailBoxMessageListViewModel.js ***! - \*******************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - key = __webpack_require__(/*! key */ 19), - Jua = __webpack_require__(/*! Jua */ 47), - ifvisible = __webpack_require__(/*! ifvisible */ 116), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Consts = __webpack_require__(/*! Common/Consts */ 17), - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - Events = __webpack_require__(/*! Common/Events */ 22), - Selector = __webpack_require__(/*! Common/Selector */ 36), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Cache = __webpack_require__(/*! Storage:RainLoop:Cache */ 20), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function MailBoxMessageListViewModel() - { - KnoinAbstractViewModel.call(this, 'Right', 'MailMessageList'); - - this.sLastUid = null; - this.bPrefetch = false; - this.emptySubjectValue = ''; - - this.hideDangerousActions = !!Settings.settingsGet('HideDangerousActions'); - - this.popupVisibility = Globals.popupVisibility; - - this.message = Data.message; - this.messageList = Data.messageList; - this.folderList = Data.folderList; - this.currentMessage = Data.currentMessage; - this.isMessageSelected = Data.isMessageSelected; - this.messageListSearch = Data.messageListSearch; - this.messageListError = Data.messageListError; - this.folderMenuForMove = Data.folderMenuForMove; - - this.useCheckboxesInList = Data.useCheckboxesInList; - - this.mainMessageListSearch = Data.mainMessageListSearch; - this.messageListEndFolder = Data.messageListEndFolder; - - this.messageListChecked = Data.messageListChecked; - this.messageListCheckedOrSelected = Data.messageListCheckedOrSelected; - this.messageListCheckedOrSelectedUidsWithSubMails = Data.messageListCheckedOrSelectedUidsWithSubMails; - this.messageListCompleteLoadingThrottle = Data.messageListCompleteLoadingThrottle; - - Utils.initOnStartOrLangChange(function () { - this.emptySubjectValue = Utils.i18n('MESSAGE_LIST/EMPTY_SUBJECT_TEXT'); - }, this); - - this.userQuota = Data.userQuota; - this.userUsageSize = Data.userUsageSize; - this.userUsageProc = Data.userUsageProc; - - this.moveDropdownTrigger = ko.observable(false); - this.moreDropdownTrigger = ko.observable(false); - - // append drag and drop - this.dragOver = ko.observable(false).extend({'throttle': 1}); - this.dragOverEnter = ko.observable(false).extend({'throttle': 1}); - this.dragOverArea = ko.observable(null); - this.dragOverBodyArea = ko.observable(null); - - this.messageListItemTemplate = ko.computed(function () { - return Enums.Layout.NoPreview !== Data.layout() ? - 'MailMessageListItem' : 'MailMessageListItemNoPreviewPane'; - }); - - this.messageListSearchDesc = ko.computed(function () { - var sValue = Data.messageListEndSearch(); - return '' === sValue ? '' : Utils.i18n('MESSAGE_LIST/SEARCH_RESULT_FOR', {'SEARCH': sValue}); - }); - - this.messageListPagenator = ko.computed(Utils.computedPagenatorHelper(Data.messageListPage, Data.messageListPageCount)); - - this.checkAll = ko.computed({ - 'read': function () { - return 0 < Data.messageListChecked().length; - }, - - 'write': function (bValue) { - bValue = !!bValue; - _.each(Data.messageList(), function (oMessage) { - oMessage.checked(bValue); - }); - } - }); - - this.inputMessageListSearchFocus = ko.observable(false); - - this.sLastSearchValue = ''; - this.inputProxyMessageListSearch = ko.computed({ - 'read': this.mainMessageListSearch, - 'write': function (sValue) { - this.sLastSearchValue = sValue; - }, - 'owner': this - }); - - this.isIncompleteChecked = ko.computed(function () { - var - iM = Data.messageList().length, - iC = Data.messageListChecked().length - ; - return 0 < iM && 0 < iC && iM > iC; - }, this); - - this.hasMessages = ko.computed(function () { - return 0 < this.messageList().length; - }, this); - - this.hasCheckedOrSelectedLines = ko.computed(function () { - return 0 < this.messageListCheckedOrSelected().length; - }, this); - - this.isSpamFolder = ko.computed(function () { - return Data.spamFolder() === this.messageListEndFolder() && - '' !== Data.spamFolder(); - }, this); - - this.isSpamDisabled = ko.computed(function () { - return Consts.Values.UnuseOptionValue === Data.spamFolder(); - }, this); - - this.isTrashFolder = ko.computed(function () { - return Data.trashFolder() === this.messageListEndFolder() && - '' !== Data.trashFolder(); - }, this); - - this.isDraftFolder = ko.computed(function () { - return Data.draftFolder() === this.messageListEndFolder() && - '' !== Data.draftFolder(); - }, this); - - this.isSentFolder = ko.computed(function () { - return Data.sentFolder() === this.messageListEndFolder() && - '' !== Data.sentFolder(); - }, this); - - this.isArchiveFolder = ko.computed(function () { - return Data.archiveFolder() === this.messageListEndFolder() && - '' !== Data.archiveFolder(); - }, this); - - this.isArchiveDisabled = ko.computed(function () { - return Consts.Values.UnuseOptionValue === Data.archiveFolder(); - }, this); - - this.canBeMoved = this.hasCheckedOrSelectedLines; - - this.clearCommand = Utils.createCommand(this, function () { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:FolderClear */ 107), [Data.currentFolder()]); - }); - - this.multyForwardCommand = Utils.createCommand(this, function () { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:Compose */ 21), [ - Enums.ComposeType.ForwardAsAttachment, Data.messageListCheckedOrSelected()]); - }, this.canBeMoved); - - this.deleteWithoutMoveCommand = Utils.createCommand(this, function () { - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolder(Enums.FolderType.Trash, - Data.currentFolderFullNameRaw(), - Data.messageListCheckedOrSelectedUidsWithSubMails(), false); - }, this.canBeMoved); - - this.deleteCommand = Utils.createCommand(this, function () { - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolder(Enums.FolderType.Trash, - Data.currentFolderFullNameRaw(), - Data.messageListCheckedOrSelectedUidsWithSubMails(), true); - }, this.canBeMoved); - - this.archiveCommand = Utils.createCommand(this, function () { - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolder(Enums.FolderType.Archive, - Data.currentFolderFullNameRaw(), - Data.messageListCheckedOrSelectedUidsWithSubMails(), true); - }, this.canBeMoved); - - this.spamCommand = Utils.createCommand(this, function () { - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolder(Enums.FolderType.Spam, - Data.currentFolderFullNameRaw(), - Data.messageListCheckedOrSelectedUidsWithSubMails(), true); - }, this.canBeMoved); - - this.notSpamCommand = Utils.createCommand(this, function () { - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolder(Enums.FolderType.NotSpam, - Data.currentFolderFullNameRaw(), - Data.messageListCheckedOrSelectedUidsWithSubMails(), true); - }, this.canBeMoved); - - this.moveCommand = Utils.createCommand(this, Utils.emptyFunction, this.canBeMoved); - - this.reloadCommand = Utils.createCommand(this, function () { - if (!Data.messageListCompleteLoadingThrottle()) - { - __webpack_require__(/*! App:RainLoop */ 4).reloadMessageList(false, true); - } - }); - - this.quotaTooltip = _.bind(this.quotaTooltip, this); - - this.selector = new Selector(this.messageList, this.currentMessage, - '.messageListItem .actionHandle', '.messageListItem.selected', '.messageListItem .checkboxMessage', - '.messageListItem.focused'); - - this.selector.on('onItemSelect', _.bind(function (oMessage) { - if (oMessage) - { - Data.message(Data.staticMessageList.populateByMessageListItem(oMessage)); - this.populateMessageBody(Data.message()); - - if (Enums.Layout.NoPreview === Data.layout()) - { - kn.setHash(LinkBuilder.messagePreview(), true); - Data.message.focused(true); - } - } - else - { - Data.message(null); - } - }, this)); - - this.selector.on('onItemGetUid', function (oMessage) { - return oMessage ? oMessage.generateUid() : ''; - }); - - Data.messageListEndHash.subscribe(function () { - this.selector.scrollToTop(); - }, this); - - Data.layout.subscribe(function (mValue) { - this.selector.autoSelect(Enums.Layout.NoPreview !== mValue); - }, this); - - Data.layout.valueHasMutated(); - - Events - .sub('mailbox.message-list.selector.go-down', function () { - this.selector.goDown(true); - }, this) - .sub('mailbox.message-list.selector.go-up', function () { - this.selector.goUp(true); - }, this) - ; - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:RainLoop:MailBoxMessageList', 'MailBoxMessageListViewModel'], MailBoxMessageListViewModel); - _.extend(MailBoxMessageListViewModel.prototype, KnoinAbstractViewModel.prototype); - - /** - * @type {string} - */ - MailBoxMessageListViewModel.prototype.emptySubjectValue = ''; - - MailBoxMessageListViewModel.prototype.searchEnterAction = function () - { - this.mainMessageListSearch(this.sLastSearchValue); - this.inputMessageListSearchFocus(false); - }; - - /** - * @returns {string} - */ - MailBoxMessageListViewModel.prototype.printableMessageCountForDeletion = function () - { - var iCnt = this.messageListCheckedOrSelectedUidsWithSubMails().length; - return 1 < iCnt ? ' (' + (100 > iCnt ? iCnt : '99+') + ')' : ''; - }; - - MailBoxMessageListViewModel.prototype.cancelSearch = function () - { - this.mainMessageListSearch(''); - this.inputMessageListSearchFocus(false); - }; - - /** - * @param {string} sToFolderFullNameRaw - * @param {boolean} bCopy - * @return {boolean} - */ - MailBoxMessageListViewModel.prototype.moveSelectedMessagesToFolder = function (sToFolderFullNameRaw, bCopy) - { - if (this.canBeMoved()) - { - __webpack_require__(/*! App:RainLoop */ 4).moveMessagesToFolder( - Data.currentFolderFullNameRaw(), - Data.messageListCheckedOrSelectedUidsWithSubMails(), sToFolderFullNameRaw, bCopy); - } - - return false; - }; - - MailBoxMessageListViewModel.prototype.dragAndDronHelper = function (oMessageListItem) - { - if (oMessageListItem) - { - oMessageListItem.checked(true); - } - - var - oEl = Utils.draggeblePlace(), - aUids = Data.messageListCheckedOrSelectedUidsWithSubMails() - ; - - oEl.data('rl-folder', Data.currentFolderFullNameRaw()); - oEl.data('rl-uids', aUids); - oEl.find('.text').text('' + aUids.length); - - _.defer(function () { - var aUids = Data.messageListCheckedOrSelectedUidsWithSubMails(); - - oEl.data('rl-uids', aUids); - oEl.find('.text').text('' + aUids.length); - }); - - return oEl; - }; - - /** - * @param {string} sResult - * @param {AjaxJsonDefaultResponse} oData - * @param {boolean} bCached - */ - MailBoxMessageListViewModel.prototype.onMessageResponse = function (sResult, oData, bCached) - { - Data.hideMessageBodies(); - Data.messageLoading(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - Data.setMessage(oData, bCached); - } - else if (Enums.StorageResultType.Unload === sResult) - { - Data.message(null); - Data.messageError(''); - } - else if (Enums.StorageResultType.Abort !== sResult) - { - Data.message(null); - Data.messageError((oData && oData.ErrorCode ? - Utils.getNotification(oData.ErrorCode) : - Utils.getNotification(Enums.Notification.UnknownError))); - } - }; - - MailBoxMessageListViewModel.prototype.populateMessageBody = function (oMessage) - { - if (oMessage) - { - if (Remote.message(this.onMessageResponse, oMessage.folderFullNameRaw, oMessage.uid)) - { - Data.messageLoading(true); - } - else - { - Utils.log('Error: Unknown message request: ' + oMessage.folderFullNameRaw + ' ~ ' + oMessage.uid + ' [e-101]'); - } - } - }; - - /** - * @param {string} sFolderFullNameRaw - * @param {number} iSetAction - * @param {Array=} aMessages = null - */ - MailBoxMessageListViewModel.prototype.setAction = function (sFolderFullNameRaw, iSetAction, aMessages) - { - var - aUids = [], - oFolder = null, - iAlreadyUnread = 0 - ; - - if (Utils.isUnd(aMessages)) - { - aMessages = Data.messageListChecked(); - } - - aUids = _.map(aMessages, function (oMessage) { - return oMessage.uid; - }); - - if ('' !== sFolderFullNameRaw && 0 < aUids.length) - { - switch (iSetAction) { - case Enums.MessageSetAction.SetSeen: - _.each(aMessages, function (oMessage) { - if (oMessage.unseen()) - { - iAlreadyUnread++; - } - - oMessage.unseen(false); - Cache.storeMessageFlagsToCache(oMessage); - }); - - oFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw); - if (oFolder) - { - oFolder.messageCountUnread(oFolder.messageCountUnread() - iAlreadyUnread); - } - - Remote.messageSetSeen(Utils.emptyFunction, sFolderFullNameRaw, aUids, true); - break; - case Enums.MessageSetAction.UnsetSeen: - _.each(aMessages, function (oMessage) { - if (oMessage.unseen()) - { - iAlreadyUnread++; - } - - oMessage.unseen(true); - Cache.storeMessageFlagsToCache(oMessage); - }); - - oFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw); - if (oFolder) - { - oFolder.messageCountUnread(oFolder.messageCountUnread() - iAlreadyUnread + aUids.length); - } - Remote.messageSetSeen(Utils.emptyFunction, sFolderFullNameRaw, aUids, false); - break; - case Enums.MessageSetAction.SetFlag: - _.each(aMessages, function (oMessage) { - oMessage.flagged(true); - Cache.storeMessageFlagsToCache(oMessage); - }); - Remote.messageSetFlagged(Utils.emptyFunction, sFolderFullNameRaw, aUids, true); - break; - case Enums.MessageSetAction.UnsetFlag: - _.each(aMessages, function (oMessage) { - oMessage.flagged(false); - Cache.storeMessageFlagsToCache(oMessage); - }); - Remote.messageSetFlagged(Utils.emptyFunction, sFolderFullNameRaw, aUids, false); - break; - } - - __webpack_require__(/*! App:RainLoop */ 4).reloadFlagsCurrentMessageListAndMessageFromCache(); - } - }; - - /** - * @param {string} sFolderFullNameRaw - * @param {number} iSetAction - */ - MailBoxMessageListViewModel.prototype.setActionForAll = function (sFolderFullNameRaw, iSetAction) - { - var - oFolder = null, - aMessages = Data.messageList() - ; - - if ('' !== sFolderFullNameRaw) - { - oFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw); - - if (oFolder) - { - switch (iSetAction) { - case Enums.MessageSetAction.SetSeen: - oFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw); - if (oFolder) - { - _.each(aMessages, function (oMessage) { - oMessage.unseen(false); - }); - - oFolder.messageCountUnread(0); - Cache.clearMessageFlagsFromCacheByFolder(sFolderFullNameRaw); - } - - Remote.messageSetSeenToAll(Utils.emptyFunction, sFolderFullNameRaw, true); - break; - case Enums.MessageSetAction.UnsetSeen: - oFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw); - if (oFolder) - { - _.each(aMessages, function (oMessage) { - oMessage.unseen(true); - }); - - oFolder.messageCountUnread(oFolder.messageCountAll()); - Cache.clearMessageFlagsFromCacheByFolder(sFolderFullNameRaw); - } - Remote.messageSetSeenToAll(Utils.emptyFunction, sFolderFullNameRaw, false); - break; - } - - __webpack_require__(/*! App:RainLoop */ 4).reloadFlagsCurrentMessageListAndMessageFromCache(); - } - } - }; - - MailBoxMessageListViewModel.prototype.listSetSeen = function () - { - this.setAction(Data.currentFolderFullNameRaw(), Enums.MessageSetAction.SetSeen, Data.messageListCheckedOrSelected()); - }; - - MailBoxMessageListViewModel.prototype.listSetAllSeen = function () - { - this.setActionForAll(Data.currentFolderFullNameRaw(), Enums.MessageSetAction.SetSeen); - }; - - MailBoxMessageListViewModel.prototype.listUnsetSeen = function () - { - this.setAction(Data.currentFolderFullNameRaw(), Enums.MessageSetAction.UnsetSeen, Data.messageListCheckedOrSelected()); - }; - - MailBoxMessageListViewModel.prototype.listSetFlags = function () - { - this.setAction(Data.currentFolderFullNameRaw(), Enums.MessageSetAction.SetFlag, Data.messageListCheckedOrSelected()); - }; - - MailBoxMessageListViewModel.prototype.listUnsetFlags = function () - { - this.setAction(Data.currentFolderFullNameRaw(), Enums.MessageSetAction.UnsetFlag, Data.messageListCheckedOrSelected()); - }; - - MailBoxMessageListViewModel.prototype.flagMessages = function (oCurrentMessage) - { - var - aChecked = this.messageListCheckedOrSelected(), - aCheckedUids = [] - ; - - if (oCurrentMessage) - { - if (0 < aChecked.length) - { - aCheckedUids = _.map(aChecked, function (oMessage) { - return oMessage.uid; - }); - } - - if (0 < aCheckedUids.length && -1 < Utils.inArray(oCurrentMessage.uid, aCheckedUids)) - { - this.setAction(oCurrentMessage.folderFullNameRaw, oCurrentMessage.flagged() ? - Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked); - } - else - { - this.setAction(oCurrentMessage.folderFullNameRaw, oCurrentMessage.flagged() ? - Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, [oCurrentMessage]); - } - } - }; - - MailBoxMessageListViewModel.prototype.flagMessagesFast = function (bFlag) - { - var - aChecked = this.messageListCheckedOrSelected(), - aFlagged = [] - ; - - if (0 < aChecked.length) - { - aFlagged = _.filter(aChecked, function (oMessage) { - return oMessage.flagged(); - }); - - if (Utils.isUnd(bFlag)) - { - this.setAction(aChecked[0].folderFullNameRaw, - aChecked.length === aFlagged.length ? Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked); - } - else - { - this.setAction(aChecked[0].folderFullNameRaw, - !bFlag ? Enums.MessageSetAction.UnsetFlag : Enums.MessageSetAction.SetFlag, aChecked); - } - } - }; - - MailBoxMessageListViewModel.prototype.seenMessagesFast = function (bSeen) - { - var - aChecked = this.messageListCheckedOrSelected(), - aUnseen = [] - ; - - if (0 < aChecked.length) - { - aUnseen = _.filter(aChecked, function (oMessage) { - return oMessage.unseen(); - }); - - if (Utils.isUnd(bSeen)) - { - this.setAction(aChecked[0].folderFullNameRaw, - 0 < aUnseen.length ? Enums.MessageSetAction.SetSeen : Enums.MessageSetAction.UnsetSeen, aChecked); - } - else - { - this.setAction(aChecked[0].folderFullNameRaw, - bSeen ? Enums.MessageSetAction.SetSeen : Enums.MessageSetAction.UnsetSeen, aChecked); - } - } - }; - - MailBoxMessageListViewModel.prototype.onBuild = function (oDom) - { - var self = this; - - this.oContentVisible = $('.b-content', oDom); - this.oContentScrollable = $('.content', this.oContentVisible); - - this.oContentVisible.on('click', '.fullThreadHandle', function () { - var - aList = [], - oMessage = ko.dataFor(this) - ; - - if (oMessage && !oMessage.lastInCollapsedThreadLoading()) - { - Data.messageListThreadFolder(oMessage.folderFullNameRaw); - - aList = Data.messageListThreadUids(); - - if (oMessage.lastInCollapsedThread()) - { - aList.push(0 < oMessage.parentUid() ? oMessage.parentUid() : oMessage.uid); - } - else - { - aList = _.without(aList, 0 < oMessage.parentUid() ? oMessage.parentUid() : oMessage.uid); - } - - Data.messageListThreadUids(_.uniq(aList)); - - oMessage.lastInCollapsedThreadLoading(true); - oMessage.lastInCollapsedThread(!oMessage.lastInCollapsedThread()); - - __webpack_require__(/*! App:RainLoop */ 4).reloadMessageList(); - } - - return false; - }); - - this.selector.init(this.oContentVisible, this.oContentScrollable, Enums.KeyState.MessageList); - - oDom - .on('click', '.messageList .b-message-list-wrapper', function () { - if (self.message.focused()) - { - self.message.focused(false); - } - }) - .on('click', '.e-pagenator .e-page', function () { - var oPage = ko.dataFor(this); - if (oPage) - { - kn.setHash(LinkBuilder.mailBox( - Data.currentFolderFullNameHash(), - oPage.value, - Data.messageListSearch() - )); - } - }) - .on('click', '.messageList .checkboxCkeckAll', function () { - self.checkAll(!self.checkAll()); - }) - .on('click', '.messageList .messageListItem .flagParent', function () { - self.flagMessages(ko.dataFor(this)); - }) - ; - - this.initUploaderForAppend(); - this.initShortcuts(); - - if (!Globals.bMobileDevice && Settings.capa(Enums.Capa.Prefetch) && ifvisible) - { - ifvisible.setIdleDuration(10); - - ifvisible.idle(function () { - self.prefetchNextTick(); - }); - } - }; - - MailBoxMessageListViewModel.prototype.initShortcuts = function () - { - var self = this; - - // disable print - key('ctrl+p, command+p', Enums.KeyState.MessageList, function () { - return false; - }); - - // archive (zip) - key('z', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - self.archiveCommand(); - return false; - }); - - // delete - key('delete, shift+delete, shift+3', Enums.KeyState.MessageList, function (event, handler) { - if (event) - { - if (0 < Data.messageListCheckedOrSelected().length) - { - if (handler && 'shift+delete' === handler.shortcut) - { - self.deleteWithoutMoveCommand(); - } - else - { - self.deleteCommand(); - } - } - - return false; - } - }); - - // check mail - key('ctrl+r, command+r', [Enums.KeyState.FolderList, Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - self.reloadCommand(); - return false; - }); - - // check all - key('ctrl+a, command+a', Enums.KeyState.MessageList, function () { - self.checkAll(!(self.checkAll() && !self.isIncompleteChecked())); - return false; - }); - - // write/compose (open compose popup) - key('w,c', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:Compose */ 21)); - return false; - }); - - // important - star/flag messages - key('i', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - self.flagMessagesFast(); - return false; - }); - - // move - key('m', Enums.KeyState.MessageList, function () { - self.moveDropdownTrigger(true); - return false; - }); - - // read - key('q', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - self.seenMessagesFast(true); - return false; - }); - - // unread - key('u', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - self.seenMessagesFast(false); - return false; - }); - - key('shift+f', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - self.multyForwardCommand(); - return false; - }); - - // search input focus - key('/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - self.inputMessageListSearchFocus(true); - return false; - }); - - // cancel search - key('esc', Enums.KeyState.MessageList, function () { - if ('' !== self.messageListSearchDesc()) - { - self.cancelSearch(); - return false; - } - }); - - // change focused state - key('tab, shift+tab, left, right', Enums.KeyState.MessageList, function (event, handler) { - if (event && handler && ('shift+tab' === handler.shortcut || 'left' === handler.shortcut)) - { - self.folderList.focused(true); - } - else if (self.message()) - { - self.message.focused(true); - } - - return false; - }); - - // TODO - key('ctrl+left, command+left', Enums.KeyState.MessageView, function () { - return false; - }); - - // TODO - key('ctrl+right, command+right', Enums.KeyState.MessageView, function () { - return false; - }); - }; - - MailBoxMessageListViewModel.prototype.prefetchNextTick = function () - { - if (!this.bPrefetch && !ifvisible.now() && this.viewModelVisibility()) - { - var - self = this, - oMessage = _.find(this.messageList(), function (oMessage) { - return oMessage && - !Cache.hasRequestedMessage(oMessage.folderFullNameRaw, oMessage.uid); - }) - ; - - if (oMessage) - { - this.bPrefetch = true; - - Cache.addRequestedMessage(oMessage.folderFullNameRaw, oMessage.uid); - - Remote.message(function (sResult, oData) { - - var bNext = !!(Enums.StorageResultType.Success === sResult && oData && oData.Result); - - _.delay(function () { - self.bPrefetch = false; - if (bNext) - { - self.prefetchNextTick(); - } - }, 1000); - - }, oMessage.folderFullNameRaw, oMessage.uid); - } - } - }; - - MailBoxMessageListViewModel.prototype.composeClick = function () - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:Compose */ 21)); - }; - - MailBoxMessageListViewModel.prototype.advancedSearchClick = function () - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:AdvancedSearch */ 103)); - }; - - MailBoxMessageListViewModel.prototype.quotaTooltip = function () - { - return Utils.i18n('MESSAGE_LIST/QUOTA_SIZE', { - 'SIZE': Utils.friendlySize(this.userUsageSize()), - 'PROC': this.userUsageProc(), - 'LIMIT': Utils.friendlySize(this.userQuota()) - }); - }; - - MailBoxMessageListViewModel.prototype.initUploaderForAppend = function () - { - if (!Settings.settingsGet('AllowAppendMessage') || !this.dragOverArea()) - { - return false; - } - - var - oJua = new Jua({ - 'action': LinkBuilder.append(), - 'name': 'AppendFile', - 'queueSize': 1, - 'multipleSizeLimit': 1, - 'disableFolderDragAndDrop': true, - 'hidden': { - 'Folder': function () { - return Data.currentFolderFullNameRaw(); - } - }, - 'dragAndDropElement': this.dragOverArea(), - 'dragAndDropBodyElement': this.dragOverBodyArea() - }) - ; - - oJua - .on('onDragEnter', _.bind(function () { - this.dragOverEnter(true); - }, this)) - .on('onDragLeave', _.bind(function () { - this.dragOverEnter(false); - }, this)) - .on('onBodyDragEnter', _.bind(function () { - this.dragOver(true); - }, this)) - .on('onBodyDragLeave', _.bind(function () { - this.dragOver(false); - }, this)) - .on('onSelect', _.bind(function (sUid, oData) { - if (sUid && oData && 'message/rfc822' === oData['Type']) - { - Data.messageListLoading(true); - return true; - } - - return false; - }, this)) - .on('onComplete', _.bind(function () { - __webpack_require__(/*! App:RainLoop */ 4).reloadMessageList(true, true); - }, this)) - ; - - return !!oJua; - }; - - module.exports = MailBoxMessageListViewModel; - - }()); - - -/***/ }, -/* 99 */ -/*!*******************************************************!*\ - !*** ./dev/ViewModels/MailBoxMessageViewViewModel.js ***! - \*******************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - key = __webpack_require__(/*! key */ 19), - - Consts = __webpack_require__(/*! Common/Consts */ 17), - Enums = __webpack_require__(/*! Common/Enums */ 6), - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1), - Events = __webpack_require__(/*! Common/Events */ 22), - - Cache = __webpack_require__(/*! Storage:RainLoop:Cache */ 20), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function MailBoxMessageViewViewModel() - { - KnoinAbstractViewModel.call(this, 'Right', 'MailMessageView'); - - var - self = this, - sLastEmail = '', - createCommandHelper = function (sType) { - return Utils.createCommand(self, function () { - this.replyOrforward(sType); - }, self.canBeRepliedOrForwarded); - } - ; - - this.oMessageScrollerDom = null; - - this.message = Data.message; - this.currentMessage = Data.currentMessage; - this.messageListChecked = Data.messageListChecked; - this.hasCheckedMessages = Data.hasCheckedMessages; - this.messageListCheckedOrSelectedUidsWithSubMails = Data.messageListCheckedOrSelectedUidsWithSubMails; - this.messageLoading = Data.messageLoading; - this.messageLoadingThrottle = Data.messageLoadingThrottle; - this.messagesBodiesDom = Data.messagesBodiesDom; - this.useThreads = Data.useThreads; - this.replySameFolder = Data.replySameFolder; - this.layout = Data.layout; - this.usePreviewPane = Data.usePreviewPane; - this.isMessageSelected = Data.isMessageSelected; - this.messageActiveDom = Data.messageActiveDom; - this.messageError = Data.messageError; - - this.fullScreenMode = Data.messageFullScreenMode; - - this.showFullInfo = ko.observable(false); - this.moreDropdownTrigger = ko.observable(false); - this.messageDomFocused = ko.observable(false).extend({'rateLimit': 0}); - - this.messageVisibility = ko.computed(function () { - return !this.messageLoadingThrottle() && !!this.message(); - }, this); - - this.message.subscribe(function (oMessage) { - if (!oMessage) - { - this.currentMessage(null); - } - }, this); - - this.canBeRepliedOrForwarded = this.messageVisibility; - - // commands - this.closeMessage = Utils.createCommand(this, function () { - Data.message(null); - }); - - this.replyCommand = createCommandHelper(Enums.ComposeType.Reply); - this.replyAllCommand = createCommandHelper(Enums.ComposeType.ReplyAll); - this.forwardCommand = createCommandHelper(Enums.ComposeType.Forward); - this.forwardAsAttachmentCommand = createCommandHelper(Enums.ComposeType.ForwardAsAttachment); - this.editAsNewCommand = createCommandHelper(Enums.ComposeType.EditAsNew); - - this.messageVisibilityCommand = Utils.createCommand(this, Utils.emptyFunction, this.messageVisibility); - - this.messageEditCommand = Utils.createCommand(this, function () { - this.editMessage(); - }, this.messageVisibility); - - this.deleteCommand = Utils.createCommand(this, function () { - if (this.message()) - { - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolder(Enums.FolderType.Trash, - this.message().folderFullNameRaw, - [this.message().uid], true); - } - }, this.messageVisibility); - - this.deleteWithoutMoveCommand = Utils.createCommand(this, function () { - if (this.message()) - { - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolder(Enums.FolderType.Trash, - Data.currentFolderFullNameRaw(), - [this.message().uid], false); - } - }, this.messageVisibility); - - this.archiveCommand = Utils.createCommand(this, function () { - if (this.message()) - { - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolder(Enums.FolderType.Archive, - this.message().folderFullNameRaw, - [this.message().uid], true); - } - }, this.messageVisibility); - - this.spamCommand = Utils.createCommand(this, function () { - if (this.message()) - { - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolder(Enums.FolderType.Spam, - this.message().folderFullNameRaw, - [this.message().uid], true); - } - }, this.messageVisibility); - - this.notSpamCommand = Utils.createCommand(this, function () { - if (this.message()) - { - __webpack_require__(/*! App:RainLoop */ 4).deleteMessagesFromFolder(Enums.FolderType.NotSpam, - this.message().folderFullNameRaw, - [this.message().uid], true); - } - }, this.messageVisibility); - - // viewer - this.viewHash = ''; - this.viewSubject = ko.observable(''); - this.viewFromShort = ko.observable(''); - this.viewToShort = ko.observable(''); - this.viewFrom = ko.observable(''); - this.viewTo = ko.observable(''); - this.viewCc = ko.observable(''); - this.viewBcc = ko.observable(''); - this.viewDate = ko.observable(''); - this.viewSize = ko.observable(''); - this.viewMoment = ko.observable(''); - this.viewLineAsCcc = ko.observable(''); - this.viewViewLink = ko.observable(''); - this.viewDownloadLink = ko.observable(''); - this.viewUserPic = ko.observable(Consts.DataImages.UserDotPic); - this.viewUserPicVisible = ko.observable(false); - - this.viewPgpPassword = ko.observable(''); - this.viewPgpSignedVerifyStatus = ko.computed(function () { - return this.message() ? this.message().pgpSignedVerifyStatus() : Enums.SignedVerifyStatus.None; - }, this); - - this.viewPgpSignedVerifyUser = ko.computed(function () { - return this.message() ? this.message().pgpSignedVerifyUser() : ''; - }, this); - - this.message.subscribe(function (oMessage) { - - this.messageActiveDom(null); - - this.viewPgpPassword(''); - - if (oMessage) - { - if (this.viewHash !== oMessage.hash) - { - this.scrollMessageToTop(); - } - - this.viewHash = oMessage.hash; - this.viewSubject(oMessage.subject()); - this.viewFromShort(oMessage.fromToLine(true, true)); - this.viewToShort(oMessage.toToLine(true, true)); - this.viewFrom(oMessage.fromToLine(false)); - this.viewTo(oMessage.toToLine(false)); - this.viewCc(oMessage.ccToLine(false)); - this.viewBcc(oMessage.bccToLine(false)); - this.viewDate(oMessage.fullFormatDateValue()); - this.viewSize(oMessage.friendlySize()); - this.viewMoment(oMessage.momentDate()); - this.viewLineAsCcc(oMessage.lineAsCcc()); - this.viewViewLink(oMessage.viewLink()); - this.viewDownloadLink(oMessage.downloadLink()); - - sLastEmail = oMessage.fromAsSingleEmail(); - Cache.getUserPic(sLastEmail, function (sPic, $sEmail) { - if (sPic !== self.viewUserPic() && sLastEmail === $sEmail) - { - self.viewUserPicVisible(false); - self.viewUserPic(Consts.DataImages.UserDotPic); - if ('' !== sPic) - { - self.viewUserPicVisible(true); - self.viewUserPic(sPic); - } - } - }); - } - else - { - this.viewHash = ''; - this.scrollMessageToTop(); - } - - }, this); - - this.fullScreenMode.subscribe(function (bValue) { - if (bValue) - { - Globals.$html.addClass('rl-message-fullscreen'); - } - else - { - Globals.$html.removeClass('rl-message-fullscreen'); - } - - Utils.windowResize(); - }); - - this.messageLoadingThrottle.subscribe(function (bV) { - if (bV) - { - Utils.windowResize(); - } - }); - - this.goUpCommand = Utils.createCommand(this, function () { - Events.pub('mailbox.message-list.selector.go-up'); - }); - - this.goDownCommand = Utils.createCommand(this, function () { - Events.pub('mailbox.message-list.selector.go-down'); - }); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:RainLoop:MailBoxMessageView', 'MailBoxMessageViewViewModel'], MailBoxMessageViewViewModel); - _.extend(MailBoxMessageViewViewModel.prototype, KnoinAbstractViewModel.prototype); - - MailBoxMessageViewViewModel.prototype.isPgpActionVisible = function () - { - return Enums.SignedVerifyStatus.Success !== this.viewPgpSignedVerifyStatus(); - }; - - MailBoxMessageViewViewModel.prototype.isPgpStatusVerifyVisible = function () - { - return Enums.SignedVerifyStatus.None !== this.viewPgpSignedVerifyStatus(); - }; - - MailBoxMessageViewViewModel.prototype.isPgpStatusVerifySuccess = function () - { - return Enums.SignedVerifyStatus.Success === this.viewPgpSignedVerifyStatus(); - }; - - MailBoxMessageViewViewModel.prototype.pgpStatusVerifyMessage = function () - { - var sResult = ''; - switch (this.viewPgpSignedVerifyStatus()) - { - case Enums.SignedVerifyStatus.UnknownPublicKeys: - sResult = Utils.i18n('PGP_NOTIFICATIONS/NO_PUBLIC_KEYS_FOUND'); - break; - case Enums.SignedVerifyStatus.UnknownPrivateKey: - sResult = Utils.i18n('PGP_NOTIFICATIONS/NO_PRIVATE_KEY_FOUND'); - break; - case Enums.SignedVerifyStatus.Unverified: - sResult = Utils.i18n('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE'); - break; - case Enums.SignedVerifyStatus.Error: - sResult = Utils.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'); - break; - case Enums.SignedVerifyStatus.Success: - sResult = Utils.i18n('PGP_NOTIFICATIONS/GOOD_SIGNATURE', { - 'USER': this.viewPgpSignedVerifyUser() - }); - break; - } - - return sResult; - }; - - MailBoxMessageViewViewModel.prototype.fullScreen = function () - { - this.fullScreenMode(true); - Utils.windowResize(); - }; - - MailBoxMessageViewViewModel.prototype.unFullScreen = function () - { - this.fullScreenMode(false); - Utils.windowResize(); - }; - - MailBoxMessageViewViewModel.prototype.toggleFullScreen = function () - { - Utils.removeSelection(); - - this.fullScreenMode(!this.fullScreenMode()); - Utils.windowResize(); - }; - - /** - * @param {string} sType - */ - MailBoxMessageViewViewModel.prototype.replyOrforward = function (sType) - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:Compose */ 21), [sType, Data.message()]); - }; - - MailBoxMessageViewViewModel.prototype.onBuild = function (oDom) - { - var self = this; - this.fullScreenMode.subscribe(function (bValue) { - if (bValue) - { - self.message.focused(true); - } - }, this); - - $('.attachmentsPlace', oDom).magnificPopup({ - 'delegate': '.magnificPopupImage:visible', - 'type': 'image', - 'gallery': { - 'enabled': true, - 'preload': [1, 1], - 'navigateByImgClick': true - }, - 'callbacks': { - 'open': function() { - Globals.useKeyboardShortcuts(false); - }, - 'close': function() { - Globals.useKeyboardShortcuts(true); - } - }, - 'mainClass': 'mfp-fade', - 'removalDelay': 400 - }); - - oDom - .on('click', 'a', function (oEvent) { - // setup maito protocol - return !(!!oEvent && 3 !== oEvent['which'] && Utils.mailToHelper($(this).attr('href'), __webpack_require__(/*! View:Popup:Compose */ 21))); - }) - .on('click', '.attachmentsPlace .attachmentPreview', function (oEvent) { - if (oEvent && oEvent.stopPropagation) - { - oEvent.stopPropagation(); - } - }) - .on('click', '.attachmentsPlace .attachmentItem', function () { - - var - oAttachment = ko.dataFor(this) - ; - - if (oAttachment && oAttachment.download) - { - __webpack_require__(/*! App:RainLoop */ 4).download(oAttachment.linkDownload()); - } - }) - ; - - this.message.focused.subscribe(function (bValue) { - if (bValue && !Utils.inFocus()) { - this.messageDomFocused(true); - } else { - this.messageDomFocused(false); - this.scrollMessageToTop(); - this.scrollMessageToLeft(); - } - }, this); - - this.messageDomFocused.subscribe(function (bValue) { - if (!bValue && Enums.KeyState.MessageView === Globals.keyScope()) - { - this.message.focused(false); - } - }, this); - - Globals.keyScope.subscribe(function (sValue) { - if (Enums.KeyState.MessageView === sValue && this.message.focused()) - { - this.messageDomFocused(true); - } - }, this); - - this.oMessageScrollerDom = oDom.find('.messageItem .content'); - this.oMessageScrollerDom = this.oMessageScrollerDom && this.oMessageScrollerDom[0] ? this.oMessageScrollerDom : null; - - this.initShortcuts(); - }; - - /** - * @return {boolean} - */ - MailBoxMessageViewViewModel.prototype.escShortcuts = function () - { - if (this.viewModelVisibility() && this.message()) - { - if (this.fullScreenMode()) - { - this.fullScreenMode(false); - } - else if (Enums.Layout.NoPreview === Data.layout()) - { - this.message(null); - } - else - { - this.message.focused(false); - } - - return false; - } - }; - - MailBoxMessageViewViewModel.prototype.initShortcuts = function () - { - var - self = this - ; - - // exit fullscreen, back - key('esc', Enums.KeyState.MessageView, _.bind(this.escShortcuts, this)); - - // fullscreen - key('enter', Enums.KeyState.MessageView, function () { - self.toggleFullScreen(); - return false; - }); - - key('enter', Enums.KeyState.MessageList, function () { - if (Enums.Layout.NoPreview !== Data.layout() && self.message()) - { - self.toggleFullScreen(); - return false; - } - }); - - // TODO // more toggle - // key('', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - // self.moreDropdownTrigger(true); - // return false; - // }); - - // reply - key('r', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - if (Data.message()) - { - self.replyCommand(); - return false; - } - }); - - // replaAll - key('a', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - if (Data.message()) - { - self.replyAllCommand(); - return false; - } - }); - - // forward - key('f', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - if (Data.message()) - { - self.forwardCommand(); - return false; - } - }); - - // message information - // key('i', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - // if (oData.message()) - // { - // self.showFullInfo(!self.showFullInfo()); - // return false; - // } - // }); - - // toggle message blockquotes - key('b', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () { - if (Data.message() && Data.message().body) - { - Data.message().body.find('.rlBlockquoteSwitcher').click(); - return false; - } - }); - - key('ctrl+left, command+left, ctrl+up, command+up', Enums.KeyState.MessageView, function () { - self.goUpCommand(); - return false; - }); - - key('ctrl+right, command+right, ctrl+down, command+down', Enums.KeyState.MessageView, function () { - self.goDownCommand(); - return false; - }); - - // print - key('ctrl+p, command+p', Enums.KeyState.MessageView, function () { - if (self.message()) - { - self.message().printMessage(); - } - - return false; - }); - - // delete - key('delete, shift+delete', Enums.KeyState.MessageView, function (event, handler) { - if (event) - { - if (handler && 'shift+delete' === handler.shortcut) - { - self.deleteWithoutMoveCommand(); - } - else - { - self.deleteCommand(); - } - - return false; - } - }); - - // change focused state - key('tab, shift+tab, left', Enums.KeyState.MessageView, function (event, handler) { - if (!self.fullScreenMode() && self.message() && Enums.Layout.NoPreview !== Data.layout()) - { - if (event && handler && 'left' === handler.shortcut) - { - if (self.oMessageScrollerDom && 0 < self.oMessageScrollerDom.scrollLeft()) - { - return true; - } - - self.message.focused(false); - } - else - { - self.message.focused(false); - } - } - else if (self.message() && Enums.Layout.NoPreview === Data.layout() && event && handler && 'left' === handler.shortcut) - { - return true; - } - - return false; - }); - }; - - /** - * @return {boolean} - */ - MailBoxMessageViewViewModel.prototype.isDraftFolder = function () - { - return Data.message() && Data.draftFolder() === Data.message().folderFullNameRaw; - }; - - /** - * @return {boolean} - */ - MailBoxMessageViewViewModel.prototype.isSentFolder = function () - { - return Data.message() && Data.sentFolder() === Data.message().folderFullNameRaw; - }; - - /** - * @return {boolean} - */ - MailBoxMessageViewViewModel.prototype.isSpamFolder = function () - { - return Data.message() && Data.spamFolder() === Data.message().folderFullNameRaw; - }; - - /** - * @return {boolean} - */ - MailBoxMessageViewViewModel.prototype.isSpamDisabled = function () - { - return Data.message() && Data.spamFolder() === Consts.Values.UnuseOptionValue; - }; - - /** - * @return {boolean} - */ - MailBoxMessageViewViewModel.prototype.isArchiveFolder = function () - { - return Data.message() && Data.archiveFolder() === Data.message().folderFullNameRaw; - }; - - /** - * @return {boolean} - */ - MailBoxMessageViewViewModel.prototype.isArchiveDisabled = function () - { - return Data.message() && Data.archiveFolder() === Consts.Values.UnuseOptionValue; - }; - - /** - * @return {boolean} - */ - MailBoxMessageViewViewModel.prototype.isDraftOrSentFolder = function () - { - return this.isDraftFolder() || this.isSentFolder(); - }; - - MailBoxMessageViewViewModel.prototype.composeClick = function () - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:Compose */ 21)); - }; - - MailBoxMessageViewViewModel.prototype.editMessage = function () - { - if (Data.message()) - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:Compose */ 21), [Enums.ComposeType.Draft, Data.message()]); - } - }; - - MailBoxMessageViewViewModel.prototype.scrollMessageToTop = function () - { - if (this.oMessageScrollerDom) - { - this.oMessageScrollerDom.scrollTop(0); - Utils.windowResize(); - } - }; - - MailBoxMessageViewViewModel.prototype.scrollMessageToLeft = function () - { - if (this.oMessageScrollerDom) - { - this.oMessageScrollerDom.scrollLeft(0); - Utils.windowResize(); - } - }; - - /** - * @param {MessageModel} oMessage - */ - MailBoxMessageViewViewModel.prototype.showImages = function (oMessage) - { - if (oMessage && oMessage.showExternalImages) - { - oMessage.showExternalImages(true); - } - }; - - /** - * @returns {string} - */ - MailBoxMessageViewViewModel.prototype.printableCheckedMessageCount = function () - { - var iCnt = this.messageListCheckedOrSelectedUidsWithSubMails().length; - return 0 < iCnt ? (100 > iCnt ? iCnt : '99+') : ''; - }; - - - /** - * @param {MessageModel} oMessage - */ - MailBoxMessageViewViewModel.prototype.verifyPgpSignedClearMessage = function (oMessage) - { - if (oMessage) - { - oMessage.verifyPgpSignedClearMessage(); - } - }; - - /** - * @param {MessageModel} oMessage - */ - MailBoxMessageViewViewModel.prototype.decryptPgpEncryptedMessage = function (oMessage) - { - if (oMessage) - { - oMessage.decryptPgpEncryptedMessage(this.viewPgpPassword()); - } - }; - - /** - * @param {MessageModel} oMessage - */ - MailBoxMessageViewViewModel.prototype.readReceipt = function (oMessage) - { - if (oMessage && '' !== oMessage.readReceipt()) - { - Remote.sendReadReceiptMessage(Utils.emptyFunction, oMessage.folderFullNameRaw, oMessage.uid, - oMessage.readReceipt(), - Utils.i18n('READ_RECEIPT/SUBJECT', {'SUBJECT': oMessage.subject()}), - Utils.i18n('READ_RECEIPT/BODY', {'READ-RECEIPT': Data.accountEmail()})); - - oMessage.isReadReceipt(true); - - Cache.storeMessageFlagsToCache(oMessage); - - __webpack_require__(/*! App:RainLoop */ 4).reloadFlagsCurrentMessageListAndMessageFromCache(); - } - }; - - module.exports = MailBoxMessageViewViewModel; - - }()); - -/***/ }, -/* 100 */ -/*!**********************************************************!*\ - !*** ./dev/ViewModels/MailBoxSystemDropDownViewModel.js ***! - \**********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - kn = __webpack_require__(/*! App:Knoin */ 5), - AbstractSystemDropDownViewModel = __webpack_require__(/*! View:RainLoop:AbstractSystemDropDown */ 41) - ; - - /** - * @constructor - * @extends AbstractSystemDropDownViewModel - */ - function MailBoxSystemDropDownViewModel() - { - AbstractSystemDropDownViewModel.call(this); - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:RainLoop:MailBoxSystemDropDown', 'MailBoxSystemDropDownViewModel'], MailBoxSystemDropDownViewModel); - _.extend(MailBoxSystemDropDownViewModel.prototype, AbstractSystemDropDownViewModel.prototype); - - module.exports = MailBoxSystemDropDownViewModel; - - }()); - - -/***/ }, -/* 101 */, -/* 102 */ -/*!***************************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsAddOpenPgpKeyViewModel.js ***! - \***************************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsAddOpenPgpKeyViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsAddOpenPgpKey'); - - this.key = ko.observable(''); - this.key.error = ko.observable(false); - this.key.focus = ko.observable(false); - - this.key.subscribe(function () { - this.key.error(false); - }, this); - - this.addOpenPgpKeyCommand = Utils.createCommand(this, function () { - - var - iCount = 30, - aMatch = null, - sKey = Utils.trim(this.key()), - oReg = /[\-]{3,6}BEGIN[\s]PGP[\s](PRIVATE|PUBLIC)[\s]KEY[\s]BLOCK[\-]{3,6}[\s\S]+?[\-]{3,6}END[\s]PGP[\s](PRIVATE|PUBLIC)[\s]KEY[\s]BLOCK[\-]{3,6}/gi, - oOpenpgpKeyring = Data.openpgpKeyring - ; - - sKey = sKey.replace(/[\r\n]([a-zA-Z0-9]{2,}:[^\r\n]+)[\r\n]+([a-zA-Z0-9\/\\+=]{10,})/g, '\n$1!-!N!-!$2') - .replace(/[\n\r]+/g, '\n').replace(/!-!N!-!/g, '\n\n'); - - this.key.error('' === sKey); - - if (!oOpenpgpKeyring || this.key.error()) - { - return false; - } - - do - { - aMatch = oReg.exec(sKey); - if (!aMatch || 0 > iCount) - { - break; - } - - if (aMatch[0] && aMatch[1] && aMatch[2] && aMatch[1] === aMatch[2]) - { - if ('PRIVATE' === aMatch[1]) - { - oOpenpgpKeyring.privateKeys.importKey(aMatch[0]); - } - else if ('PUBLIC' === aMatch[1]) - { - oOpenpgpKeyring.publicKeys.importKey(aMatch[0]); - } - } - - iCount--; - } - while (true); - - oOpenpgpKeyring.store(); - - __webpack_require__(/*! App:RainLoop */ 4).reloadOpenPgpKeys(); - Utils.delegateRun(this, 'cancelCommand'); - - return true; - }); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:AddOpenPgpKey', 'PopupsAddOpenPgpKeyViewModel'], PopupsAddOpenPgpKeyViewModel); - _.extend(PopupsAddOpenPgpKeyViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsAddOpenPgpKeyViewModel.prototype.clearPopup = function () - { - this.key(''); - this.key.error(false); - }; - - PopupsAddOpenPgpKeyViewModel.prototype.onShow = function () - { - this.clearPopup(); - }; - - PopupsAddOpenPgpKeyViewModel.prototype.onFocus = function () - { - this.key.focus(true); - }; - - module.exports = PopupsAddOpenPgpKeyViewModel; - - }()); - -/***/ }, -/* 103 */ -/*!****************************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsAdvancedSearchViewModel.js ***! - \****************************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - moment = __webpack_require__(/*! moment */ 25), - - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsAdvancedSearchViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsAdvancedSearch'); - - this.fromFocus = ko.observable(false); - - this.from = ko.observable(''); - this.to = ko.observable(''); - this.subject = ko.observable(''); - this.text = ko.observable(''); - this.selectedDateValue = ko.observable(-1); - - this.hasAttachment = ko.observable(false); - this.starred = ko.observable(false); - this.unseen = ko.observable(false); - - this.searchCommand = Utils.createCommand(this, function () { - - var sSearch = this.buildSearchString(); - if ('' !== sSearch) - { - Data.mainMessageListSearch(sSearch); - } - - this.cancelCommand(); - }); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:AdvancedSearch', 'PopupsAdvancedSearchViewModel'], PopupsAdvancedSearchViewModel); - _.extend(PopupsAdvancedSearchViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsAdvancedSearchViewModel.prototype.buildSearchStringValue = function (sValue) - { - if (-1 < sValue.indexOf(' ')) - { - sValue = '"' + sValue + '"'; - } - - return sValue; - }; - - PopupsAdvancedSearchViewModel.prototype.buildSearchString = function () - { - var - aResult = [], - sFrom = Utils.trim(this.from()), - sTo = Utils.trim(this.to()), - sSubject = Utils.trim(this.subject()), - sText = Utils.trim(this.text()), - aIs = [], - aHas = [] - ; - - if (sFrom && '' !== sFrom) - { - aResult.push('from:' + this.buildSearchStringValue(sFrom)); - } - - if (sTo && '' !== sTo) - { - aResult.push('to:' + this.buildSearchStringValue(sTo)); - } - - if (sSubject && '' !== sSubject) - { - aResult.push('subject:' + this.buildSearchStringValue(sSubject)); - } - - if (this.hasAttachment()) - { - aHas.push('attachment'); - } - - if (this.unseen()) - { - aIs.push('unseen'); - } - - if (this.starred()) - { - aIs.push('flagged'); - } - - if (0 < aHas.length) - { - aResult.push('has:' + aHas.join(',')); - } - - if (0 < aIs.length) - { - aResult.push('is:' + aIs.join(',')); - } - - if (-1 < this.selectedDateValue()) - { - aResult.push('date:' + moment().subtract('days', this.selectedDateValue()).format('YYYY.MM.DD') + '/'); - } - - if (sText && '' !== sText) - { - aResult.push('text:' + this.buildSearchStringValue(sText)); - } - - return Utils.trim(aResult.join(' ')); - }; - - PopupsAdvancedSearchViewModel.prototype.clearPopup = function () - { - this.from(''); - this.to(''); - this.subject(''); - this.text(''); - - this.selectedDateValue(-1); - this.hasAttachment(false); - this.starred(false); - this.unseen(false); - - this.fromFocus(true); - }; - - PopupsAdvancedSearchViewModel.prototype.onShow = function () - { - this.clearPopup(); - }; - - PopupsAdvancedSearchViewModel.prototype.onFocus = function () - { - this.fromFocus(true); - }; - - module.exports = PopupsAdvancedSearchViewModel; - - }()); - -/***/ }, -/* 104 */ -/*!****************************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsComposeOpenPgpViewModel.js ***! - \****************************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - key = __webpack_require__(/*! key */ 19), - - Utils = __webpack_require__(/*! Common/Utils */ 1), - Enums = __webpack_require__(/*! Common/Enums */ 6), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - - EmailModel = __webpack_require__(/*! Model:Email */ 23), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsComposeOpenPgpViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsComposeOpenPgp'); - - this.notification = ko.observable(''); - - this.sign = ko.observable(true); - this.encrypt = ko.observable(true); - - this.password = ko.observable(''); - this.password.focus = ko.observable(false); - this.buttonFocus = ko.observable(false); - - this.from = ko.observable(''); - this.to = ko.observableArray([]); - this.text = ko.observable(''); - - this.resultCallback = null; - - this.submitRequest = ko.observable(false); - - // commands - this.doCommand = Utils.createCommand(this, function () { - - var - self = this, - bResult = true, - oPrivateKey = null, - aPublicKeys = [] - ; - - this.submitRequest(true); - - if (bResult && this.sign() && '' === this.from()) - { - this.notification(Utils.i18n('PGP_NOTIFICATIONS/SPECIFY_FROM_EMAIL')); - bResult = false; - } - - if (bResult && this.sign()) - { - oPrivateKey = Data.findPrivateKeyByEmail(this.from(), this.password()); - if (!oPrivateKey) - { - this.notification(Utils.i18n('PGP_NOTIFICATIONS/NO_PRIVATE_KEY_FOUND_FOR', { - 'EMAIL': this.from() - })); - - bResult = false; - } - } - - if (bResult && this.encrypt() && 0 === this.to().length) - { - this.notification(Utils.i18n('PGP_NOTIFICATIONS/SPECIFY_AT_LEAST_ONE_RECIPIENT')); - bResult = false; - } - - if (bResult && this.encrypt()) - { - aPublicKeys = []; - _.each(this.to(), function (sEmail) { - var aKeys = Data.findPublicKeysByEmail(sEmail); - if (0 === aKeys.length && bResult) - { - self.notification(Utils.i18n('PGP_NOTIFICATIONS/NO_PUBLIC_KEYS_FOUND_FOR', { - 'EMAIL': sEmail - })); - - bResult = false; - } - - aPublicKeys = aPublicKeys.concat(aKeys); - }); - - if (bResult && (0 === aPublicKeys.length || this.to().length !== aPublicKeys.length)) - { - bResult = false; - } - } - - _.delay(function () { - - if (self.resultCallback && bResult) - { - try { - - if (oPrivateKey && 0 === aPublicKeys.length) - { - self.resultCallback( - window.openpgp.signClearMessage([oPrivateKey], self.text()) - ); - } - else if (oPrivateKey && 0 < aPublicKeys.length) - { - self.resultCallback( - window.openpgp.signAndEncryptMessage(aPublicKeys, oPrivateKey, self.text()) - ); - } - else if (!oPrivateKey && 0 < aPublicKeys.length) - { - self.resultCallback( - window.openpgp.encryptMessage(aPublicKeys, self.text()) - ); - } - } - catch (e) - { - self.notification(Utils.i18n('PGP_NOTIFICATIONS/PGP_ERROR', { - 'ERROR': '' + e - })); - - bResult = false; - } - } - - if (bResult) - { - self.cancelCommand(); - } - - self.submitRequest(false); - - }, 10); - - }, function () { - return !this.submitRequest() && (this.sign() || this.encrypt()); - }); - - this.sDefaultKeyScope = Enums.KeyState.PopupComposeOpenPGP; - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:ComposeOpenPgp', 'PopupsComposeOpenPgpViewModel'], PopupsComposeOpenPgpViewModel); - _.extend(PopupsComposeOpenPgpViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsComposeOpenPgpViewModel.prototype.clearPopup = function () - { - this.notification(''); - - this.password(''); - this.password.focus(false); - this.buttonFocus(false); - - this.from(''); - this.to([]); - this.text(''); - - this.submitRequest(false); - - this.resultCallback = null; - }; - - PopupsComposeOpenPgpViewModel.prototype.onBuild = function () - { - key('tab,shift+tab', Enums.KeyState.PopupComposeOpenPGP, _.bind(function () { - - switch (true) - { - case this.password.focus(): - this.buttonFocus(true); - break; - case this.buttonFocus(): - this.password.focus(true); - break; - } - - return false; - - }, this)); - }; - - PopupsComposeOpenPgpViewModel.prototype.onHide = function () - { - this.clearPopup(); - }; - - PopupsComposeOpenPgpViewModel.prototype.onFocus = function () - { - if (this.sign()) - { - this.password.focus(true); - } - else - { - this.buttonFocus(true); - } - }; - - PopupsComposeOpenPgpViewModel.prototype.onShow = function (fCallback, sText, sFromEmail, sTo, sCc, sBcc) - { - this.clearPopup(); - - var - oEmail = new EmailModel(), - sResultFromEmail = '', - aRec = [] - ; - - this.resultCallback = fCallback; - - oEmail.clear(); - oEmail.mailsoParse(sFromEmail); - if ('' !== oEmail.email) - { - sResultFromEmail = oEmail.email; - } - - if ('' !== sTo) - { - aRec.push(sTo); - } - - if ('' !== sCc) - { - aRec.push(sCc); - } - - if ('' !== sBcc) - { - aRec.push(sBcc); - } - - aRec = aRec.join(', ').split(','); - aRec = _.compact(_.map(aRec, function (sValue) { - oEmail.clear(); - oEmail.mailsoParse(Utils.trim(sValue)); - return '' === oEmail.email ? false : oEmail.email; - })); - - this.from(sResultFromEmail); - this.to(aRec); - this.text(sText); - }; - - module.exports = PopupsComposeOpenPgpViewModel; - - }()); - -/***/ }, -/* 105 */, -/* 106 */ -/*!********************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsFilterViewModel.js ***! - \********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Consts = __webpack_require__(/*! Common/Consts */ 17), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsFilterViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsFilter'); - - this.filter = ko.observable(null); - - this.selectedFolderValue = ko.observable(Consts.Values.UnuseOptionValue); - this.folderSelectList = Data.folderMenuForMove; - this.defautOptionsAfterRender = Utils.defautOptionsAfterRender; - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:Filter', 'PopupsFilterViewModel'], PopupsFilterViewModel); - _.extend(PopupsFilterViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsFilterViewModel.prototype.clearPopup = function () - { - // TODO - }; - - PopupsFilterViewModel.prototype.onShow = function (oFilter) - { - this.clearPopup(); - - this.filter(oFilter); - }; - - module.exports = PopupsFilterViewModel; - - }()); - -/***/ }, -/* 107 */ -/*!*************************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsFolderClearViewModel.js ***! - \*************************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Cache = __webpack_require__(/*! Storage:RainLoop:Cache */ 20), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsFolderClearViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsFolderClear'); - - this.selectedFolder = ko.observable(null); - this.clearingProcess = ko.observable(false); - this.clearingError = ko.observable(''); - - this.folderFullNameForClear = ko.computed(function () { - var oFolder = this.selectedFolder(); - return oFolder ? oFolder.printableFullName() : ''; - }, this); - - this.folderNameForClear = ko.computed(function () { - var oFolder = this.selectedFolder(); - return oFolder ? oFolder.localName() : ''; - }, this); - - this.dangerDescHtml = ko.computed(function () { - return Utils.i18n('POPUPS_CLEAR_FOLDER/DANGER_DESC_HTML_1', { - 'FOLDER': this.folderNameForClear() - }); - }, this); - - this.clearCommand = Utils.createCommand(this, function () { - - var - self = this, - oFolderToClear = this.selectedFolder() - ; - - if (oFolderToClear) - { - Data.message(null); - Data.messageList([]); - - this.clearingProcess(true); - - oFolderToClear.messageCountAll(0); - oFolderToClear.messageCountUnread(0); - - Cache.setFolderHash(oFolderToClear.fullNameRaw, ''); - - Remote.folderClear(function (sResult, oData) { - - self.clearingProcess(false); - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - __webpack_require__(/*! App:RainLoop */ 4).reloadMessageList(true); - self.cancelCommand(); - } - else - { - if (oData && oData.ErrorCode) - { - self.clearingError(Utils.getNotification(oData.ErrorCode)); - } - else - { - self.clearingError(Utils.getNotification(Enums.Notification.MailServerError)); - } - } - }, oFolderToClear.fullNameRaw); - } - - }, function () { - - var - oFolder = this.selectedFolder(), - bIsClearing = this.clearingProcess() - ; - - return !bIsClearing && null !== oFolder; - - }); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:FolderClear', 'PopupsFolderClearViewModel'], PopupsFolderClearViewModel); - _.extend(PopupsFolderClearViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsFolderClearViewModel.prototype.clearPopup = function () - { - this.clearingProcess(false); - this.selectedFolder(null); - }; - - PopupsFolderClearViewModel.prototype.onShow = function (oFolder) - { - this.clearPopup(); - if (oFolder) - { - this.selectedFolder(oFolder); - } - }; - - module.exports = PopupsFolderClearViewModel; - - }()); - - -/***/ }, -/* 108 */ -/*!***************************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsNewOpenPgpKeyViewModel.js ***! - \***************************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsNewOpenPgpKeyViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsNewOpenPgpKey'); - - this.email = ko.observable(''); - this.email.focus = ko.observable(''); - this.email.error = ko.observable(false); - - this.name = ko.observable(''); - this.password = ko.observable(''); - this.keyBitLength = ko.observable(2048); - - this.submitRequest = ko.observable(false); - - this.email.subscribe(function () { - this.email.error(false); - }, this); - - this.generateOpenPgpKeyCommand = Utils.createCommand(this, function () { - - var - self = this, - sUserID = '', - mKeyPair = null, - oOpenpgpKeyring = Data.openpgpKeyring - ; - - this.email.error('' === Utils.trim(this.email())); - if (!oOpenpgpKeyring || this.email.error()) - { - return false; - } - - sUserID = this.email(); - if ('' !== this.name()) - { - sUserID = this.name() + ' <' + sUserID + '>'; - } - - this.submitRequest(true); - - _.delay(function () { - // mKeyPair = window.openpgp.generateKeyPair(1, Utils.pInt(self.keyBitLength()), sUserID, Utils.trim(self.password())); - mKeyPair = window.openpgp.generateKeyPair({ - 'userId': sUserID, - 'numBits': Utils.pInt(self.keyBitLength()), - 'passphrase': Utils.trim(self.password()) - }); - - if (mKeyPair && mKeyPair.privateKeyArmored) - { - oOpenpgpKeyring.privateKeys.importKey(mKeyPair.privateKeyArmored); - oOpenpgpKeyring.publicKeys.importKey(mKeyPair.publicKeyArmored); - oOpenpgpKeyring.store(); - - __webpack_require__(/*! App:RainLoop */ 4).reloadOpenPgpKeys(); - Utils.delegateRun(self, 'cancelCommand'); - } - - self.submitRequest(false); - }, 100); - - return true; - }); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:NewOpenPgpKey', 'PopupsNewOpenPgpKeyViewModel'], PopupsNewOpenPgpKeyViewModel); - _.extend(PopupsNewOpenPgpKeyViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsNewOpenPgpKeyViewModel.prototype.clearPopup = function () - { - this.name(''); - this.password(''); - - this.email(''); - this.email.error(false); - this.keyBitLength(2048); - }; - - PopupsNewOpenPgpKeyViewModel.prototype.onShow = function () - { - this.clearPopup(); - }; - - PopupsNewOpenPgpKeyViewModel.prototype.onFocus = function () - { - this.email.focus(true); - }; - - module.exports = PopupsNewOpenPgpKeyViewModel; - - }()); - -/***/ }, -/* 109 */, -/* 110 */ -/*!***************************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsTwoFactorTestViewModel.js ***! - \***************************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsTwoFactorTestViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsTwoFactorTest'); - - var self = this; - - this.code = ko.observable(''); - this.code.focused = ko.observable(false); - this.code.status = ko.observable(null); - - this.testing = ko.observable(false); - - // commands - this.testCode = Utils.createCommand(this, function () { - - this.testing(true); - Remote.testTwoFactor(function (sResult, oData) { - - self.testing(false); - self.code.status(Enums.StorageResultType.Success === sResult && oData && oData.Result ? true : false); - - }, this.code()); - - }, function () { - return '' !== this.code() && !this.testing(); - }); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:TwoFactorTest', 'PopupsTwoFactorTestViewModel'], PopupsTwoFactorTestViewModel); - _.extend(PopupsTwoFactorTestViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsTwoFactorTestViewModel.prototype.clearPopup = function () - { - this.code(''); - this.code.focused(false); - this.code.status(null); - this.testing(false); - }; - - PopupsTwoFactorTestViewModel.prototype.onShow = function () - { - this.clearPopup(); - }; - - PopupsTwoFactorTestViewModel.prototype.onFocus = function () - { - this.code.focused(true); - }; - - module.exports = PopupsTwoFactorTestViewModel; - - }()); - -/***/ }, -/* 111 */ -/*!****************************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsViewOpenPgpKeyViewModel.js ***! - \****************************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Utils = __webpack_require__(/*! Common/Utils */ 1), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsViewOpenPgpKeyViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsViewOpenPgpKey'); - - this.key = ko.observable(''); - this.keyDom = ko.observable(null); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:ViewOpenPgpKey', 'PopupsViewOpenPgpKeyViewModel'], PopupsViewOpenPgpKeyViewModel); - _.extend(PopupsViewOpenPgpKeyViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsViewOpenPgpKeyViewModel.prototype.clearPopup = function () - { - this.key(''); - }; - - PopupsViewOpenPgpKeyViewModel.prototype.selectKey = function () - { - var oEl = this.keyDom(); - if (oEl) - { - Utils.selectElement(oEl); - } - }; - - PopupsViewOpenPgpKeyViewModel.prototype.onShow = function (oOpenPgpKey) - { - this.clearPopup(); - - if (oOpenPgpKey) - { - this.key(oOpenPgpKey.armor); - } - }; - - module.exports = PopupsViewOpenPgpKeyViewModel; - - }()); - -/***/ }, -/* 112 */ -/*!*************************************************!*\ - !*** ./dev/ViewModels/SettingsMenuViewModel.js ***! - \*************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - Globals = __webpack_require__(/*! Common/Globals */ 7), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @param {?} oScreen - * - * @constructor - * @extends KnoinAbstractViewModel - */ - function SettingsMenuViewModel(oScreen) - { - KnoinAbstractViewModel.call(this, 'Left', 'SettingsMenu'); - - this.leftPanelDisabled = Globals.leftPanelDisabled; - - this.menu = oScreen.menu; - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:RainLoop:SettingsMenu', 'SettingsMenuViewModel'], SettingsMenuViewModel); - _.extend(SettingsMenuViewModel.prototype, KnoinAbstractViewModel.prototype); - - SettingsMenuViewModel.prototype.link = function (sRoute) - { - return LinkBuilder.settings(sRoute); - }; - - SettingsMenuViewModel.prototype.backToMailBoxClick = function () - { - kn.setHash(LinkBuilder.inbox()); - }; - - module.exports = SettingsMenuViewModel; - - }()); - -/***/ }, -/* 113 */ -/*!*************************************************!*\ - !*** ./dev/ViewModels/SettingsPaneViewModel.js ***! - \*************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - key = __webpack_require__(/*! key */ 19), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function SettingsPaneViewModel() - { - KnoinAbstractViewModel.call(this, 'Right', 'SettingsPane'); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:RainLoop:SettingsPane', 'SettingsPaneViewModel'], SettingsPaneViewModel); - _.extend(SettingsPaneViewModel.prototype, KnoinAbstractViewModel.prototype); - - SettingsPaneViewModel.prototype.onBuild = function () - { - var self = this; - key('esc', Enums.KeyState.Settings, function () { - self.backToMailBoxClick(); - }); - }; - - SettingsPaneViewModel.prototype.onShow = function () - { - Data.message(null); - }; - - SettingsPaneViewModel.prototype.backToMailBoxClick = function () - { - kn.setHash(LinkBuilder.inbox()); - }; - - module.exports = SettingsPaneViewModel; - - }()); - -/***/ }, -/* 114 */ -/*!***********************************************************!*\ - !*** ./dev/ViewModels/SettingsSystemDropDownViewModel.js ***! - \***********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - kn = __webpack_require__(/*! App:Knoin */ 5), - AbstractSystemDropDownViewModel = __webpack_require__(/*! View:RainLoop:AbstractSystemDropDown */ 41) - ; - - /** - * @constructor - * @extends AbstractSystemDropDownViewModel - */ - function SettingsSystemDropDownViewModel() - { - AbstractSystemDropDownViewModel.call(this); - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:RainLoop:SettingsSystemDropDown', 'SettingsSystemDropDownViewModel'], SettingsSystemDropDownViewModel); - _.extend(SettingsSystemDropDownViewModel.prototype, AbstractSystemDropDownViewModel.prototype); - - module.exports = SettingsSystemDropDownViewModel; - - }()); - -/***/ }, -/* 115 */, -/* 116 */ -/*!****************************!*\ - !*** external "ifvisible" ***! - \****************************/ -/***/ function(module, exports, __webpack_require__) { - - module.exports = ifvisible; - -/***/ } -])); \ No newline at end of file diff --git a/rainloop/v/0.0.0/static/js/admin.js b/rainloop/v/0.0.0/static/js/admin.js deleted file mode 100644 index 4146898df..000000000 --- a/rainloop/v/0.0.0/static/js/admin.js +++ /dev/null @@ -1,3331 +0,0 @@ -/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ -webpackJsonp([2],{ - -/***/ 0: -/*!**********************!*\ - !*** ./dev/Admin.js ***! - \**********************/ -/***/ function(module, exports, __webpack_require__) { - - var require;(function (require) { - 'use strict'; - __webpack_require__(/*! App:Boot */ 35)(__webpack_require__(/*! App:Admin */ 16)); - }(require)); - -/***/ }, - -/***/ 15: -/*!********************************************!*\ - !*** ./dev/Storages/AdminRemoteStorage.js ***! - \********************************************/ -/***/ function(module, exports, __webpack_require__) { - - /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - AbstractRemoteStorage = __webpack_require__(/*! Storage:Abstract:Remote */ 40) - ; - - /** - * @constructor - * @extends AbstractRemoteStorage - */ - function AdminRemoteStorage() - { - AbstractRemoteStorage.call(this); - - this.oRequests = {}; - } - - _.extend(AdminRemoteStorage.prototype, AbstractRemoteStorage.prototype); - - /** - * @param {?Function} fCallback - * @param {string} sLogin - * @param {string} sPassword - */ - AdminRemoteStorage.prototype.adminLogin = function (fCallback, sLogin, sPassword) - { - this.defaultRequest(fCallback, 'AdminLogin', { - 'Login': sLogin, - 'Password': sPassword - }); - }; - - /** - * @param {?Function} fCallback - */ - AdminRemoteStorage.prototype.adminLogout = function (fCallback) - { - this.defaultRequest(fCallback, 'AdminLogout'); - }; - - /** - * @param {?Function} fCallback - * @param {?} oData - */ - AdminRemoteStorage.prototype.saveAdminConfig = function (fCallback, oData) - { - this.defaultRequest(fCallback, 'AdminSettingsUpdate', oData); - }; - - /** - * @param {?Function} fCallback - */ - AdminRemoteStorage.prototype.domainList = function (fCallback) - { - this.defaultRequest(fCallback, 'AdminDomainList'); - }; - - /** - * @param {?Function} fCallback - */ - AdminRemoteStorage.prototype.pluginList = function (fCallback) - { - this.defaultRequest(fCallback, 'AdminPluginList'); - }; - - /** - * @param {?Function} fCallback - */ - AdminRemoteStorage.prototype.packagesList = function (fCallback) - { - this.defaultRequest(fCallback, 'AdminPackagesList'); - }; - - /** - * @param {?Function} fCallback - */ - AdminRemoteStorage.prototype.coreData = function (fCallback) - { - this.defaultRequest(fCallback, 'AdminCoreData'); - }; - - /** - * @param {?Function} fCallback - */ - AdminRemoteStorage.prototype.updateCoreData = function (fCallback) - { - this.defaultRequest(fCallback, 'AdminUpdateCoreData', {}, 90000); - }; - - /** - * @param {?Function} fCallback - * @param {Object} oPackage - */ - AdminRemoteStorage.prototype.packageInstall = function (fCallback, oPackage) - { - this.defaultRequest(fCallback, 'AdminPackageInstall', { - 'Id': oPackage.id, - 'Type': oPackage.type, - 'File': oPackage.file - }, 60000); - }; - - /** - * @param {?Function} fCallback - * @param {Object} oPackage - */ - AdminRemoteStorage.prototype.packageDelete = function (fCallback, oPackage) - { - this.defaultRequest(fCallback, 'AdminPackageDelete', { - 'Id': oPackage.id - }); - }; - - /** - * @param {?Function} fCallback - * @param {string} sName - */ - AdminRemoteStorage.prototype.domain = function (fCallback, sName) - { - this.defaultRequest(fCallback, 'AdminDomainLoad', { - 'Name': sName - }); - }; - - /** - * @param {?Function} fCallback - * @param {string} sName - */ - AdminRemoteStorage.prototype.plugin = function (fCallback, sName) - { - this.defaultRequest(fCallback, 'AdminPluginLoad', { - 'Name': sName - }); - }; - - /** - * @param {?Function} fCallback - * @param {string} sName - */ - AdminRemoteStorage.prototype.domainDelete = function (fCallback, sName) - { - this.defaultRequest(fCallback, 'AdminDomainDelete', { - 'Name': sName - }); - }; - - /** - * @param {?Function} fCallback - * @param {string} sName - * @param {boolean} bDisabled - */ - AdminRemoteStorage.prototype.domainDisable = function (fCallback, sName, bDisabled) - { - return this.defaultRequest(fCallback, 'AdminDomainDisable', { - 'Name': sName, - 'Disabled': !!bDisabled ? '1' : '0' - }); - }; - - /** - * @param {?Function} fCallback - * @param {Object} oConfig - */ - AdminRemoteStorage.prototype.pluginSettingsUpdate = function (fCallback, oConfig) - { - return this.defaultRequest(fCallback, 'AdminPluginSettingsUpdate', oConfig); - }; - - /** - * @param {?Function} fCallback - * @param {boolean} bForce - */ - AdminRemoteStorage.prototype.licensing = function (fCallback, bForce) - { - return this.defaultRequest(fCallback, 'AdminLicensing', { - 'Force' : bForce ? '1' : '0' - }); - }; - - /** - * @param {?Function} fCallback - * @param {string} sDomain - * @param {string} sKey - */ - AdminRemoteStorage.prototype.licensingActivate = function (fCallback, sDomain, sKey) - { - return this.defaultRequest(fCallback, 'AdminLicensingActivate', { - 'Domain' : sDomain, - 'Key' : sKey - }); - }; - - /** - * @param {?Function} fCallback - * @param {string} sName - * @param {boolean} bDisabled - */ - AdminRemoteStorage.prototype.pluginDisable = function (fCallback, sName, bDisabled) - { - return this.defaultRequest(fCallback, 'AdminPluginDisable', { - 'Name': sName, - 'Disabled': !!bDisabled ? '1' : '0' - }); - }; - - AdminRemoteStorage.prototype.createOrUpdateDomain = function (fCallback, - bCreate, sName, sIncHost, iIncPort, sIncSecure, bIncShortLogin, - sOutHost, iOutPort, sOutSecure, bOutShortLogin, bOutAuth, sWhiteList) - { - this.defaultRequest(fCallback, 'AdminDomainSave', { - 'Create': bCreate ? '1' : '0', - 'Name': sName, - 'IncHost': sIncHost, - 'IncPort': iIncPort, - 'IncSecure': sIncSecure, - 'IncShortLogin': bIncShortLogin ? '1' : '0', - 'OutHost': sOutHost, - 'OutPort': iOutPort, - 'OutSecure': sOutSecure, - 'OutShortLogin': bOutShortLogin ? '1' : '0', - 'OutAuth': bOutAuth ? '1' : '0', - 'WhiteList': sWhiteList - }); - }; - - AdminRemoteStorage.prototype.testConnectionForDomain = function (fCallback, sName, - sIncHost, iIncPort, sIncSecure, - sOutHost, iOutPort, sOutSecure, bOutAuth) - { - this.defaultRequest(fCallback, 'AdminDomainTest', { - 'Name': sName, - 'IncHost': sIncHost, - 'IncPort': iIncPort, - 'IncSecure': sIncSecure, - 'OutHost': sOutHost, - 'OutPort': iOutPort, - 'OutSecure': sOutSecure, - 'OutAuth': bOutAuth ? '1' : '0' - }); - }; - - /** - * @param {?Function} fCallback - * @param {?} oData - */ - AdminRemoteStorage.prototype.testContacts = function (fCallback, oData) - { - this.defaultRequest(fCallback, 'AdminContactsTest', oData); - }; - - /** - * @param {?Function} fCallback - * @param {?} oData - */ - AdminRemoteStorage.prototype.saveNewAdminPassword = function (fCallback, oData) - { - this.defaultRequest(fCallback, 'AdminPasswordUpdate', oData); - }; - - /** - * @param {?Function} fCallback - */ - AdminRemoteStorage.prototype.adminPing = function (fCallback) - { - this.defaultRequest(fCallback, 'AdminPing'); - }; - - module.exports = new AdminRemoteStorage(); - - }()); - -/***/ }, - -/***/ 16: -/*!******************************!*\ - !*** ./dev/Apps/AdminApp.js ***! - \******************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:Admin:Data */ 18), - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15), - - AdminSettingsScreen = __webpack_require__(/*! Screen:Admin:Settings */ 63), - AdminLoginScreen = __webpack_require__(/*! Screen:Admin:Login */ 62), - - kn = __webpack_require__(/*! App:Knoin */ 5), - AbstractApp = __webpack_require__(/*! App:Abstract */ 34) - ; - - /** - * @constructor - * @extends AbstractApp - */ - function AdminApp() - { - AbstractApp.call(this, Remote); - } - - _.extend(AdminApp.prototype, AbstractApp.prototype); - - AdminApp.prototype.remote = function () - { - return Remote; - }; - - AdminApp.prototype.data = function () - { - return Data; - }; - - AdminApp.prototype.reloadDomainList = function () - { - Data.domainsLoading(true); - - Remote.domainList(function (sResult, oData) { - Data.domainsLoading(false); - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - var aList = _.map(oData.Result, function (bEnabled, sName) { - return { - 'name': sName, - 'disabled': ko.observable(!bEnabled), - 'deleteAccess': ko.observable(false) - }; - }, this); - - Data.domains(aList); - } - }); - }; - - AdminApp.prototype.reloadPluginList = function () - { - Data.pluginsLoading(true); - Remote.pluginList(function (sResult, oData) { - - Data.pluginsLoading(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - var aList = _.map(oData.Result, function (oItem) { - return { - 'name': oItem['Name'], - 'disabled': ko.observable(!oItem['Enabled']), - 'configured': ko.observable(!!oItem['Configured']) - }; - }, this); - - Data.plugins(aList); - } - }); - }; - - AdminApp.prototype.reloadPackagesList = function () - { - Data.packagesLoading(true); - Data.packagesReal(true); - - Remote.packagesList(function (sResult, oData) { - - Data.packagesLoading(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - Data.packagesReal(!!oData.Result.Real); - Data.packagesMainUpdatable(!!oData.Result.MainUpdatable); - - var - aList = [], - aLoading = {} - ; - - _.each(Data.packages(), function (oItem) { - if (oItem && oItem['loading']()) - { - aLoading[oItem['file']] = oItem; - } - }); - - if (Utils.isArray(oData.Result.List)) - { - aList = _.compact(_.map(oData.Result.List, function (oItem) { - if (oItem) - { - oItem['loading'] = ko.observable(!Utils.isUnd(aLoading[oItem['file']])); - return 'core' === oItem['type'] && !oItem['canBeInstalled'] ? null : oItem; - } - return null; - })); - } - - Data.packages(aList); - } - else - { - Data.packagesReal(false); - } - }); - }; - - AdminApp.prototype.updateCoreData = function () - { - Data.coreUpdating(true); - Remote.updateCoreData(function (sResult, oData) { - - Data.coreUpdating(false); - Data.coreRemoteVersion(''); - Data.coreRemoteRelease(''); - Data.coreVersionCompare(-2); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - Data.coreReal(true); - window.location.reload(); - } - else - { - Data.coreReal(false); - } - }); - - }; - - AdminApp.prototype.reloadCoreData = function () - { - Data.coreChecking(true); - Data.coreReal(true); - - Remote.coreData(function (sResult, oData) { - - Data.coreChecking(false); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - Data.coreReal(!!oData.Result.Real); - Data.coreUpdatable(!!oData.Result.Updatable); - Data.coreAccess(!!oData.Result.Access); - Data.coreRemoteVersion(oData.Result.RemoteVersion || ''); - Data.coreRemoteRelease(oData.Result.RemoteRelease || ''); - Data.coreVersionCompare(Utils.pInt(oData.Result.VersionCompare)); - } - else - { - Data.coreReal(false); - Data.coreRemoteVersion(''); - Data.coreRemoteRelease(''); - Data.coreVersionCompare(-2); - } - }); - }; - - /** - * - * @param {boolean=} bForce = false - */ - AdminApp.prototype.reloadLicensing = function (bForce) - { - bForce = Utils.isUnd(bForce) ? false : !!bForce; - - Data.licensingProcess(true); - Data.licenseError(''); - - Remote.licensing(function (sResult, oData) { - Data.licensingProcess(false); - if (Enums.StorageResultType.Success === sResult && oData && oData.Result && Utils.isNormal(oData.Result['Expired'])) - { - Data.licenseValid(true); - Data.licenseExpired(Utils.pInt(oData.Result['Expired'])); - Data.licenseError(''); - - Data.licensing(true); - } - else - { - if (oData && oData.ErrorCode && -1 < Utils.inArray(Utils.pInt(oData.ErrorCode), [ - Enums.Notification.LicensingServerIsUnavailable, - Enums.Notification.LicensingExpired - ])) - { - Data.licenseError(Utils.getNotification(Utils.pInt(oData.ErrorCode))); - Data.licensing(true); - } - else - { - if (Enums.StorageResultType.Abort === sResult) - { - Data.licenseError(Utils.getNotification(Enums.Notification.LicensingServerIsUnavailable)); - Data.licensing(true); - } - else - { - Data.licensing(false); - } - } - } - }, bForce); - }; - - AdminApp.prototype.bootstart = function () - { - AbstractApp.prototype.bootstart.call(this); - - Data.populateDataOnStart(); - - kn.hideLoading(); - - if (!Settings.settingsGet('AllowAdminPanel')) - { - kn.routeOff(); - kn.setHash(LinkBuilder.root(), true); - kn.routeOff(); - - _.defer(function () { - window.location.href = '/'; - }); - } - else - { - if (!!Settings.settingsGet('Auth')) - { - kn.startScreens([AdminSettingsScreen]); - } - else - { - kn.startScreens([AdminLoginScreen]); - } - } - - if (window.SimplePace) - { - window.SimplePace.set(100); - } - }; - - module.exports = new AdminApp(); - - }()); - -/***/ }, - -/***/ 18: -/*!******************************************!*\ - !*** ./dev/Storages/AdminDataStorage.js ***! - \******************************************/ -/***/ function(module, exports, __webpack_require__) { - - /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - AbstractData = __webpack_require__(/*! Storage:Abstract:Data */ 39) - ; - - /** - * @constructor - * @extends AbstractData - */ - function AdminDataStorage() - { - AbstractData.call(this); - - this.domainsLoading = ko.observable(false).extend({'throttle': 100}); - this.domains = ko.observableArray([]); - - this.pluginsLoading = ko.observable(false).extend({'throttle': 100}); - this.plugins = ko.observableArray([]); - - this.packagesReal = ko.observable(true); - this.packagesMainUpdatable = ko.observable(true); - this.packagesLoading = ko.observable(false).extend({'throttle': 100}); - this.packages = ko.observableArray([]); - - this.coreReal = ko.observable(true); - this.coreUpdatable = ko.observable(true); - this.coreAccess = ko.observable(true); - this.coreChecking = ko.observable(false).extend({'throttle': 100}); - this.coreUpdating = ko.observable(false).extend({'throttle': 100}); - this.coreRemoteVersion = ko.observable(''); - this.coreRemoteRelease = ko.observable(''); - this.coreVersionCompare = ko.observable(-2); - - this.licensing = ko.observable(false); - this.licensingProcess = ko.observable(false); - this.licenseValid = ko.observable(false); - this.licenseExpired = ko.observable(0); - this.licenseError = ko.observable(''); - - this.licenseTrigger = ko.observable(false); - - this.adminManLoading = ko.computed(function () { - return '000' !== [this.domainsLoading() ? '1' : '0', this.pluginsLoading() ? '1' : '0', this.packagesLoading() ? '1' : '0'].join(''); - }, this); - - this.adminManLoadingVisibility = ko.computed(function () { - return this.adminManLoading() ? 'visible' : 'hidden'; - }, this).extend({'rateLimit': 300}); - } - - _.extend(AdminDataStorage.prototype, AbstractData.prototype); - - AdminDataStorage.prototype.populateDataOnStart = function() - { - AbstractData.prototype.populateDataOnStart.call(this); - }; - - module.exports = new AdminDataStorage(); - - }()); - -/***/ }, - -/***/ 29: -/*!***********************************************!*\ - !*** ./dev/Screens/AbstractSettingsScreen.js ***! - \***********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractScreen = __webpack_require__(/*! Knoin:AbstractScreen */ 24) - ; - - /** - * @constructor - * @param {Array} aViewModels - * @extends KnoinAbstractScreen - */ - function AbstractSettingsScreen(aViewModels) - { - KnoinAbstractScreen.call(this, 'settings', aViewModels); - - this.menu = ko.observableArray([]); - - this.oCurrentSubScreen = null; - this.oViewModelPlace = null; - - this.setupSettings(); - } - - _.extend(AbstractSettingsScreen.prototype, KnoinAbstractScreen.prototype); - - /** - * @param {Function=} fCallback - */ - AbstractSettingsScreen.prototype.setupSettings = function (fCallback) - { - if (fCallback) - { - fCallback(); - } - }; - - AbstractSettingsScreen.prototype.onRoute = function (sSubName) - { - var - self = this, - oSettingsScreen = null, - RoutedSettingsViewModel = null, - oViewModelPlace = null, - oViewModelDom = null - ; - - RoutedSettingsViewModel = _.find(Globals.aViewModels['settings'], function (SettingsViewModel) { - return SettingsViewModel && SettingsViewModel.__rlSettingsData && - sSubName === SettingsViewModel.__rlSettingsData.Route; - }); - - if (RoutedSettingsViewModel) - { - if (_.find(Globals.aViewModels['settings-removed'], function (DisabledSettingsViewModel) { - return DisabledSettingsViewModel && DisabledSettingsViewModel === RoutedSettingsViewModel; - })) - { - RoutedSettingsViewModel = null; - } - - if (RoutedSettingsViewModel && _.find(Globals.aViewModels['settings-disabled'], function (DisabledSettingsViewModel) { - return DisabledSettingsViewModel && DisabledSettingsViewModel === RoutedSettingsViewModel; - })) - { - RoutedSettingsViewModel = null; - } - } - - if (RoutedSettingsViewModel) - { - if (RoutedSettingsViewModel.__builded && RoutedSettingsViewModel.__vm) - { - oSettingsScreen = RoutedSettingsViewModel.__vm; - } - else - { - oViewModelPlace = this.oViewModelPlace; - if (oViewModelPlace && 1 === oViewModelPlace.length) - { - oSettingsScreen = new RoutedSettingsViewModel(); - - oViewModelDom = $('
').addClass('rl-settings-view-model').hide(); - oViewModelDom.appendTo(oViewModelPlace); - - oSettingsScreen.viewModelDom = oViewModelDom; - - oSettingsScreen.__rlSettingsData = RoutedSettingsViewModel.__rlSettingsData; - - RoutedSettingsViewModel.__dom = oViewModelDom; - RoutedSettingsViewModel.__builded = true; - RoutedSettingsViewModel.__vm = oSettingsScreen; - - ko.applyBindingAccessorsToNode(oViewModelDom[0], { - 'i18nInit': true, - 'template': function () { return {'name': RoutedSettingsViewModel.__rlSettingsData.Template}; } - }, oSettingsScreen); - - Utils.delegateRun(oSettingsScreen, 'onBuild', [oViewModelDom]); - } - else - { - Utils.log('Cannot find sub settings view model position: SettingsSubScreen'); - } - } - - if (oSettingsScreen) - { - _.defer(function () { - // hide - if (self.oCurrentSubScreen) - { - Utils.delegateRun(self.oCurrentSubScreen, 'onHide'); - self.oCurrentSubScreen.viewModelDom.hide(); - } - // -- - - self.oCurrentSubScreen = oSettingsScreen; - - // show - if (self.oCurrentSubScreen) - { - self.oCurrentSubScreen.viewModelDom.show(); - Utils.delegateRun(self.oCurrentSubScreen, 'onShow'); - Utils.delegateRun(self.oCurrentSubScreen, 'onFocus', [], 200); - - _.each(self.menu(), function (oItem) { - oItem.selected(oSettingsScreen && oSettingsScreen.__rlSettingsData && oItem.route === oSettingsScreen.__rlSettingsData.Route); - }); - - $('#rl-content .b-settings .b-content .content').scrollTop(0); - } - // -- - - Utils.windowResize(); - }); - } - } - else - { - kn.setHash(LinkBuilder.settings(), false, true); - } - }; - - AbstractSettingsScreen.prototype.onHide = function () - { - if (this.oCurrentSubScreen && this.oCurrentSubScreen.viewModelDom) - { - Utils.delegateRun(this.oCurrentSubScreen, 'onHide'); - this.oCurrentSubScreen.viewModelDom.hide(); - } - }; - - AbstractSettingsScreen.prototype.onBuild = function () - { - _.each(Globals.aViewModels['settings'], function (SettingsViewModel) { - if (SettingsViewModel && SettingsViewModel.__rlSettingsData && - !_.find(Globals.aViewModels['settings-removed'], function (RemoveSettingsViewModel) { - return RemoveSettingsViewModel && RemoveSettingsViewModel === SettingsViewModel; - })) - { - this.menu.push({ - 'route': SettingsViewModel.__rlSettingsData.Route, - 'label': SettingsViewModel.__rlSettingsData.Label, - 'selected': ko.observable(false), - 'disabled': !!_.find(Globals.aViewModels['settings-disabled'], function (DisabledSettingsViewModel) { - return DisabledSettingsViewModel && DisabledSettingsViewModel === SettingsViewModel; - }) - }); - } - }, this); - - this.oViewModelPlace = $('#rl-content #rl-settings-subscreen'); - }; - - AbstractSettingsScreen.prototype.routes = function () - { - var - DefaultViewModel = _.find(Globals.aViewModels['settings'], function (SettingsViewModel) { - return SettingsViewModel && SettingsViewModel.__rlSettingsData && SettingsViewModel.__rlSettingsData['IsDefault']; - }), - sDefaultRoute = DefaultViewModel ? DefaultViewModel.__rlSettingsData['Route'] : 'general', - oRules = { - 'subname': /^(.*)$/, - 'normalize_': function (oRequest, oVals) { - oVals.subname = Utils.isUnd(oVals.subname) ? sDefaultRoute : Utils.pString(oVals.subname); - return [oVals.subname]; - } - } - ; - - return [ - ['{subname}/', oRules], - ['{subname}', oRules], - ['', oRules] - ]; - }; - - module.exports = AbstractSettingsScreen; - - }()); - -/***/ }, - -/***/ 62: -/*!*****************************************!*\ - !*** ./dev/Screens/AdminLoginScreen.js ***! - \*****************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - KnoinAbstractScreen = __webpack_require__(/*! Knoin:AbstractScreen */ 24) - ; - - /** - * @constructor - * @extends KnoinAbstractScreen - */ - function AdminLoginScreen() - { - KnoinAbstractScreen.call(this, 'login', [ - __webpack_require__(/*! View:Admin:Login */ 93) - ]); - } - - _.extend(AdminLoginScreen.prototype, KnoinAbstractScreen.prototype); - - AdminLoginScreen.prototype.onShow = function () - { - __webpack_require__(/*! App:Admin */ 16).setTitle(''); - }; - - module.exports = AdminLoginScreen; - - }()); - -/***/ }, - -/***/ 63: -/*!********************************************!*\ - !*** ./dev/Screens/AdminSettingsScreen.js ***! - \********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - kn = __webpack_require__(/*! App:Knoin */ 5), - - AbstractSettings = __webpack_require__(/*! Screen:AbstractSettings */ 29) - ; - - /** - * @constructor - * @extends AbstractSettings - */ - function AdminSettingsScreen() - { - AbstractSettings.call(this, [ - __webpack_require__(/*! View:Admin:SettingsMenu */ 94), - __webpack_require__(/*! View:Admin:SettingsPane */ 95) - ]); - } - - _.extend(AdminSettingsScreen.prototype, AbstractSettings.prototype); - - /** - * @param {Function=} fCallback - */ - AdminSettingsScreen.prototype.setupSettings = function (fCallback) - { - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:General */ 71), - 'AdminSettingsGeneral', 'General', 'general', true); - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:Login */ 73), - 'AdminSettingsLogin', 'Login', 'login'); - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:Branding */ 68), - 'AdminSettingsBranding', 'Branding', 'branding'); - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:Contacts */ 69), - 'AdminSettingsContacts', 'Contacts', 'contacts'); - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:Domains */ 70), - 'AdminSettingsDomains', 'Domains', 'domains'); - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:Security */ 76), - 'AdminSettingsSecurity', 'Security', 'security'); - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:Social */ 77), - 'AdminSettingsSocial', 'Social', 'social'); - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:Plugins */ 75), - 'AdminSettingsPlugins', 'Plugins', 'plugins'); - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:Packages */ 74), - 'AdminSettingsPackages', 'Packages', 'packages'); - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:Licensing */ 72), - 'AdminSettingsLicensing', 'Licensing', 'licensing'); - - kn.addSettingsViewModel(__webpack_require__(/*! Settings:Admin:About */ 67), - 'AdminSettingsAbout', 'About', 'about'); - - if (fCallback) - { - fCallback(); - } - }; - - AdminSettingsScreen.prototype.onShow = function () - { - __webpack_require__(/*! App:Admin */ 16).setTitle(''); - }; - - module.exports = AdminSettingsScreen; - - }()); - -/***/ }, - -/***/ 67: -/*!**************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsAbout.js ***! - \**************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3) - ; - - /** - * @constructor - */ - function AdminSettingsAbout() - { - var - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:Admin:Data */ 18) - ; - - this.version = ko.observable(Settings.settingsGet('Version')); - this.access = ko.observable(!!Settings.settingsGet('CoreAccess')); - this.errorDesc = ko.observable(''); - - this.coreReal = Data.coreReal; - this.coreUpdatable = Data.coreUpdatable; - this.coreAccess = Data.coreAccess; - this.coreChecking = Data.coreChecking; - this.coreUpdating = Data.coreUpdating; - this.coreRemoteVersion = Data.coreRemoteVersion; - this.coreRemoteRelease = Data.coreRemoteRelease; - this.coreVersionCompare = Data.coreVersionCompare; - - this.statusType = ko.computed(function () { - - var - sType = '', - iVersionCompare = this.coreVersionCompare(), - bChecking = this.coreChecking(), - bUpdating = this.coreUpdating(), - bReal = this.coreReal() - ; - - if (bChecking) - { - sType = 'checking'; - } - else if (bUpdating) - { - sType = 'updating'; - } - else if (bReal && 0 === iVersionCompare) - { - sType = 'up-to-date'; - } - else if (bReal && -1 === iVersionCompare) - { - sType = 'available'; - } - else if (!bReal) - { - sType = 'error'; - this.errorDesc('Cannot access the repository at the moment.'); - } - - return sType; - - }, this); - } - - AdminSettingsAbout.prototype.onBuild = function () - { - if (this.access()) - { - __webpack_require__(/*! App:Admin */ 16).reloadCoreData(); - } - }; - - AdminSettingsAbout.prototype.updateCoreData = function () - { - if (!this.coreUpdating()) - { - __webpack_require__(/*! App:Admin */ 16).updateCoreData(); - } - }; - - module.exports = AdminSettingsAbout; - - }()); - -/***/ }, - -/***/ 68: -/*!*****************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsBranding.js ***! - \*****************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @constructor - */ - function AdminSettingsBranding() - { - var - Enums = __webpack_require__(/*! Common/Enums */ 6), - Settings = __webpack_require__(/*! Storage:Settings */ 10) - ; - - this.title = ko.observable(Settings.settingsGet('Title')); - this.title.trigger = ko.observable(Enums.SaveSettingsStep.Idle); - - this.loadingDesc = ko.observable(Settings.settingsGet('LoadingDescription')); - this.loadingDesc.trigger = ko.observable(Enums.SaveSettingsStep.Idle); - - this.loginLogo = ko.observable(Settings.settingsGet('LoginLogo')); - this.loginLogo.trigger = ko.observable(Enums.SaveSettingsStep.Idle); - - this.loginDescription = ko.observable(Settings.settingsGet('LoginDescription')); - this.loginDescription.trigger = ko.observable(Enums.SaveSettingsStep.Idle); - - this.loginCss = ko.observable(Settings.settingsGet('LoginCss')); - this.loginCss.trigger = ko.observable(Enums.SaveSettingsStep.Idle); - } - - AdminSettingsBranding.prototype.onBuild = function () - { - var - self = this, - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - _.delay(function () { - - var - f1 = Utils.settingsSaveHelperSimpleFunction(self.title.trigger, self), - f2 = Utils.settingsSaveHelperSimpleFunction(self.loadingDesc.trigger, self), - f3 = Utils.settingsSaveHelperSimpleFunction(self.loginLogo.trigger, self), - f4 = Utils.settingsSaveHelperSimpleFunction(self.loginDescription.trigger, self), - f5 = Utils.settingsSaveHelperSimpleFunction(self.loginCss.trigger, self) - ; - - self.title.subscribe(function (sValue) { - Remote.saveAdminConfig(f1, { - 'Title': Utils.trim(sValue) - }); - }); - - self.loadingDesc.subscribe(function (sValue) { - Remote.saveAdminConfig(f2, { - 'LoadingDescription': Utils.trim(sValue) - }); - }); - - self.loginLogo.subscribe(function (sValue) { - Remote.saveAdminConfig(f3, { - 'LoginLogo': Utils.trim(sValue) - }); - }); - - self.loginDescription.subscribe(function (sValue) { - Remote.saveAdminConfig(f4, { - 'LoginDescription': Utils.trim(sValue) - }); - }); - - self.loginCss.subscribe(function (sValue) { - Remote.saveAdminConfig(f5, { - 'LoginCss': Utils.trim(sValue) - }); - }); - - }, 50); - }; - - module.exports = AdminSettingsBranding; - - }()); - -/***/ }, - -/***/ 69: -/*!*****************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsContacts.js ***! - \*****************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Settings = __webpack_require__(/*! Storage:Settings */ 10) - ; - - /** - * @constructor - */ - function AdminSettingsContacts() - { - var - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - this.defautOptionsAfterRender = Utils.defautOptionsAfterRender; - this.enableContacts = ko.observable(!!Settings.settingsGet('ContactsEnable')); - this.contactsSharing = ko.observable(!!Settings.settingsGet('ContactsSharing')); - this.contactsSync = ko.observable(!!Settings.settingsGet('ContactsSync')); - - var - aTypes = ['sqlite', 'mysql', 'pgsql'], - aSupportedTypes = [], - getTypeName = function(sName) { - switch (sName) - { - case 'sqlite': - sName = 'SQLite'; - break; - case 'mysql': - sName = 'MySQL'; - break; - case 'pgsql': - sName = 'PostgreSQL'; - break; - } - - return sName; - } - ; - - if (!!Settings.settingsGet('SQLiteIsSupported')) - { - aSupportedTypes.push('sqlite'); - } - if (!!Settings.settingsGet('MySqlIsSupported')) - { - aSupportedTypes.push('mysql'); - } - if (!!Settings.settingsGet('PostgreSqlIsSupported')) - { - aSupportedTypes.push('pgsql'); - } - - this.contactsSupported = 0 < aSupportedTypes.length; - - this.contactsTypes = ko.observableArray([]); - this.contactsTypesOptions = this.contactsTypes.map(function (sValue) { - var bDisabled = -1 === Utils.inArray(sValue, aSupportedTypes); - return { - 'id': sValue, - 'name': getTypeName(sValue) + (bDisabled ? ' (not supported)' : ''), - 'disabled': bDisabled - }; - }); - - this.contactsTypes(aTypes); - this.contactsType = ko.observable(''); - - this.mainContactsType = ko.computed({ - 'owner': this, - 'read': this.contactsType, - 'write': function (sValue) { - if (sValue !== this.contactsType()) - { - if (-1 < Utils.inArray(sValue, aSupportedTypes)) - { - this.contactsType(sValue); - } - else if (0 < aSupportedTypes.length) - { - this.contactsType(''); - } - } - else - { - this.contactsType.valueHasMutated(); - } - } - }); - - this.contactsType.subscribe(function () { - this.testContactsSuccess(false); - this.testContactsError(false); - this.testContactsErrorMessage(''); - }, this); - - this.pdoDsn = ko.observable(Settings.settingsGet('ContactsPdoDsn')); - this.pdoUser = ko.observable(Settings.settingsGet('ContactsPdoUser')); - this.pdoPassword = ko.observable(Settings.settingsGet('ContactsPdoPassword')); - - this.pdoDsnTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - this.pdoUserTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - this.pdoPasswordTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - this.contactsTypeTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - - this.testing = ko.observable(false); - this.testContactsSuccess = ko.observable(false); - this.testContactsError = ko.observable(false); - this.testContactsErrorMessage = ko.observable(''); - - this.testContactsCommand = Utils.createCommand(this, function () { - - this.testContactsSuccess(false); - this.testContactsError(false); - this.testContactsErrorMessage(''); - this.testing(true); - - Remote.testContacts(this.onTestContactsResponse, { - 'ContactsPdoType': this.contactsType(), - 'ContactsPdoDsn': this.pdoDsn(), - 'ContactsPdoUser': this.pdoUser(), - 'ContactsPdoPassword': this.pdoPassword() - }); - - }, function () { - return '' !== this.pdoDsn() && '' !== this.pdoUser(); - }); - - this.contactsType(Settings.settingsGet('ContactsPdoType')); - - this.onTestContactsResponse = _.bind(this.onTestContactsResponse, this); - } - - AdminSettingsContacts.prototype.onTestContactsResponse = function (sResult, oData) - { - this.testContactsSuccess(false); - this.testContactsError(false); - this.testContactsErrorMessage(''); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result && oData.Result.Result) - { - this.testContactsSuccess(true); - } - else - { - this.testContactsError(true); - if (oData && oData.Result) - { - this.testContactsErrorMessage(oData.Result.Message || ''); - } - else - { - this.testContactsErrorMessage(''); - } - } - - this.testing(false); - }; - - AdminSettingsContacts.prototype.onShow = function () - { - this.testContactsSuccess(false); - this.testContactsError(false); - this.testContactsErrorMessage(''); - }; - - AdminSettingsContacts.prototype.onBuild = function () - { - var - self = this, - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - _.delay(function () { - - var - f1 = Utils.settingsSaveHelperSimpleFunction(self.pdoDsnTrigger, self), - f3 = Utils.settingsSaveHelperSimpleFunction(self.pdoUserTrigger, self), - f4 = Utils.settingsSaveHelperSimpleFunction(self.pdoPasswordTrigger, self), - f5 = Utils.settingsSaveHelperSimpleFunction(self.contactsTypeTrigger, self) - ; - - self.enableContacts.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'ContactsEnable': bValue ? '1' : '0' - }); - }); - - self.contactsSharing.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'ContactsSharing': bValue ? '1' : '0' - }); - }); - - self.contactsSync.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'ContactsSync': bValue ? '1' : '0' - }); - }); - - self.contactsType.subscribe(function (sValue) { - Remote.saveAdminConfig(f5, { - 'ContactsPdoType': sValue - }); - }); - - self.pdoDsn.subscribe(function (sValue) { - Remote.saveAdminConfig(f1, { - 'ContactsPdoDsn': Utils.trim(sValue) - }); - }); - - self.pdoUser.subscribe(function (sValue) { - Remote.saveAdminConfig(f3, { - 'ContactsPdoUser': Utils.trim(sValue) - }); - }); - - self.pdoPassword.subscribe(function (sValue) { - Remote.saveAdminConfig(f4, { - 'ContactsPdoPassword': Utils.trim(sValue) - }); - }); - - self.contactsType(Settings.settingsGet('ContactsPdoType')); - - }, 50); - }; - - module.exports = AdminSettingsContacts; - - }()); - -/***/ }, - -/***/ 70: -/*!****************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsDomains.js ***! - \****************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - - PopupsDomainViewModel = __webpack_require__(/*! View:Popup:Domain */ 105), - - Data = __webpack_require__(/*! Storage:Admin:Data */ 18), - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - /** - * @constructor - */ - function AdminSettingsDomains() - { - this.domains = Data.domains; - this.domainsLoading = Data.domainsLoading; - - this.iDomainForDeletionTimeout = 0; - - this.visibility = ko.computed(function () { - return Data.domainsLoading() ? 'visible' : 'hidden'; - }, this); - - this.domainForDeletion = ko.observable(null).extend({'toggleSubscribe': [this, - function (oPrev) { - if (oPrev) - { - oPrev.deleteAccess(false); - } - }, function (oNext) { - if (oNext) - { - oNext.deleteAccess(true); - this.startDomainForDeletionTimeout(); - } - } - ]}); - } - - AdminSettingsDomains.prototype.startDomainForDeletionTimeout = function () - { - var self = this; - window.clearInterval(this.iDomainForDeletionTimeout); - this.iDomainForDeletionTimeout = window.setTimeout(function () { - self.domainForDeletion(null); - }, 1000 * 3); - }; - - AdminSettingsDomains.prototype.createDomain = function () - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(PopupsDomainViewModel); - }; - - AdminSettingsDomains.prototype.deleteDomain = function (oDomain) - { - this.domains.remove(oDomain); - Remote.domainDelete(_.bind(this.onDomainListChangeRequest, this), oDomain.name); - }; - - AdminSettingsDomains.prototype.disableDomain = function (oDomain) - { - oDomain.disabled(!oDomain.disabled()); - Remote.domainDisable(_.bind(this.onDomainListChangeRequest, this), oDomain.name, oDomain.disabled()); - }; - - AdminSettingsDomains.prototype.onBuild = function (oDom) - { - var self = this; - oDom - .on('click', '.b-admin-domains-list-table .e-item .e-action', function () { - var oDomainItem = ko.dataFor(this); - if (oDomainItem) - { - Remote.domain(_.bind(self.onDomainLoadRequest, self), oDomainItem.name); - } - }) - ; - - __webpack_require__(/*! App:Admin */ 16).reloadDomainList(); - }; - - AdminSettingsDomains.prototype.onDomainLoadRequest = function (sResult, oData) - { - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(PopupsDomainViewModel, [oData.Result]); - } - }; - - AdminSettingsDomains.prototype.onDomainListChangeRequest = function () - { - __webpack_require__(/*! App:Admin */ 16).reloadDomainList(); - }; - - module.exports = AdminSettingsDomains; - - }()); - -/***/ }, - -/***/ 71: -/*!****************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsGeneral.js ***! - \****************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:Admin:Data */ 18) - ; - - /** - * @constructor - */ - function AdminSettingsGeneral() - { - this.mainLanguage = Data.mainLanguage; - this.mainTheme = Data.mainTheme; - - this.language = Data.language; - this.theme = Data.theme; - - this.allowLanguagesOnSettings = Data.allowLanguagesOnSettings; - this.capaThemes = Data.capaThemes; - this.capaGravatar = Data.capaGravatar; - this.capaAdditionalAccounts = Data.capaAdditionalAccounts; - this.capaAdditionalIdentities = Data.capaAdditionalIdentities; - - this.mainAttachmentLimit = ko.observable(Utils.pInt(Settings.settingsGet('AttachmentLimit')) / (1024 * 1024)).extend({'posInterer': 25}); - this.uploadData = Settings.settingsGet('PhpUploadSizes'); - this.uploadDataDesc = this.uploadData && (this.uploadData['upload_max_filesize'] || this.uploadData['post_max_size']) ? - [ - this.uploadData['upload_max_filesize'] ? 'upload_max_filesize = ' + this.uploadData['upload_max_filesize'] + '; ' : '', - this.uploadData['post_max_size'] ? 'post_max_size = ' + this.uploadData['post_max_size'] : '' - ].join('') - : ''; - - this.themesOptions = ko.computed(function () { - return _.map(Data.themes(), function (sTheme) { - return { - 'optValue': sTheme, - 'optText': Utils.convertThemeName(sTheme) - }; - }); - }); - - this.mainLanguageFullName = ko.computed(function () { - return Utils.convertLangName(this.mainLanguage()); - }, this); - - this.weakPassword = !!Settings.settingsGet('WeakPassword'); - - this.attachmentLimitTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - this.languageTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - this.themeTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - } - - AdminSettingsGeneral.prototype.onBuild = function () - { - var - self = this, - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - _.delay(function () { - - var - f1 = Utils.settingsSaveHelperSimpleFunction(self.attachmentLimitTrigger, self), - f2 = Utils.settingsSaveHelperSimpleFunction(self.languageTrigger, self), - f3 = Utils.settingsSaveHelperSimpleFunction(self.themeTrigger, self) - ; - - self.mainAttachmentLimit.subscribe(function (sValue) { - Remote.saveAdminConfig(f1, { - 'AttachmentLimit': Utils.pInt(sValue) - }); - }); - - self.language.subscribe(function (sValue) { - Remote.saveAdminConfig(f2, { - 'Language': Utils.trim(sValue) - }); - }); - - self.theme.subscribe(function (sValue) { - Remote.saveAdminConfig(f3, { - 'Theme': Utils.trim(sValue) - }); - }); - - self.capaAdditionalAccounts.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'CapaAdditionalAccounts': bValue ? '1' : '0' - }); - }); - - self.capaAdditionalIdentities.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'CapaAdditionalIdentities': bValue ? '1' : '0' - }); - }); - - self.capaGravatar.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'CapaGravatar': bValue ? '1' : '0' - }); - }); - - self.capaThemes.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'CapaThemes': bValue ? '1' : '0' - }); - }); - - self.allowLanguagesOnSettings.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'AllowLanguagesOnSettings': bValue ? '1' : '0' - }); - }); - - }, 50); - }; - - AdminSettingsGeneral.prototype.selectLanguage = function () - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:Languages */ 32)); - }; - - /** - * @return {string} - */ - AdminSettingsGeneral.prototype.phpInfoLink = function () - { - return LinkBuilder.phpInfo(); - }; - - module.exports = AdminSettingsGeneral; - - }()); - -/***/ }, - -/***/ 72: -/*!******************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsLicensing.js ***! - \******************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - moment = __webpack_require__(/*! moment */ 25), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:Admin:Data */ 18) - ; - - /** - * @constructor - */ - function AdminSettingsLicensing() - { - this.licensing = Data.licensing; - this.licensingProcess = Data.licensingProcess; - this.licenseValid = Data.licenseValid; - this.licenseExpired = Data.licenseExpired; - this.licenseError = Data.licenseError; - this.licenseTrigger = Data.licenseTrigger; - - this.adminDomain = ko.observable(''); - this.subscriptionEnabled = ko.observable(!!Settings.settingsGet('SubscriptionEnabled')); - - this.licenseTrigger.subscribe(function () { - if (this.subscriptionEnabled()) - { - __webpack_require__(/*! App:Admin */ 16).reloadLicensing(true); - } - }, this); - } - - AdminSettingsLicensing.prototype.onBuild = function () - { - if (this.subscriptionEnabled()) - { - __webpack_require__(/*! App:Admin */ 16).reloadLicensing(false); - } - }; - - AdminSettingsLicensing.prototype.onShow = function () - { - this.adminDomain(Settings.settingsGet('AdminDomain')); - }; - - AdminSettingsLicensing.prototype.showActivationForm = function () - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:Activate */ 101)); - }; - - /** - * @returns {string} - */ - AdminSettingsLicensing.prototype.licenseExpiredMomentValue = function () - { - var - iTime = this.licenseExpired(), - oDate = moment.unix(iTime) - ; - - return iTime && 1898625600 === iTime ? 'Never' : (oDate.format('LL') + ' (' + oDate.from(moment()) + ')'); - }; - - module.exports = AdminSettingsLicensing; - - }()); - -/***/ }, - -/***/ 73: -/*!**************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsLogin.js ***! - \**************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:Admin:Data */ 18) - ; - - /** - * @constructor - */ - function AdminSettingsLogin() - { - this.determineUserLanguage = Data.determineUserLanguage; - this.determineUserDomain = Data.determineUserDomain; - - this.defaultDomain = ko.observable(Settings.settingsGet('LoginDefaultDomain')); - - this.allowLanguagesOnLogin = Data.allowLanguagesOnLogin; - this.defaultDomainTrigger = ko.observable(Enums.SaveSettingsStep.Idle); - } - - AdminSettingsLogin.prototype.onBuild = function () - { - var - self = this, - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - _.delay(function () { - - var f1 = Utils.settingsSaveHelperSimpleFunction(self.defaultDomainTrigger, self); - - self.determineUserLanguage.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'DetermineUserLanguage': bValue ? '1' : '0' - }); - }); - - self.determineUserDomain.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'DetermineUserDomain': bValue ? '1' : '0' - }); - }); - - self.allowLanguagesOnLogin.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'AllowLanguagesOnLogin': bValue ? '1' : '0' - }); - }); - - self.defaultDomain.subscribe(function (sValue) { - Remote.saveAdminConfig(f1, { - 'LoginDefaultDomain': Utils.trim(sValue) - }); - }); - - }, 50); - }; - - module.exports = AdminSettingsLogin; - - }()); - -/***/ }, - -/***/ 74: -/*!*****************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsPackages.js ***! - \*****************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Data = __webpack_require__(/*! Storage:Admin:Data */ 18), - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - /** - * @constructor - */ - function AdminSettingsPackages() - { - this.packagesError = ko.observable(''); - - this.packages = Data.packages; - this.packagesLoading = Data.packagesLoading; - this.packagesReal = Data.packagesReal; - this.packagesMainUpdatable = Data.packagesMainUpdatable; - - this.packagesCurrent = this.packages.filter(function (oItem) { - return oItem && '' !== oItem['installed'] && !oItem['compare']; - }); - - this.packagesAvailableForUpdate = this.packages.filter(function (oItem) { - return oItem && '' !== oItem['installed'] && !!oItem['compare']; - }); - - this.packagesAvailableForInstallation = this.packages.filter(function (oItem) { - return oItem && '' === oItem['installed']; - }); - - this.visibility = ko.computed(function () { - return Data.packagesLoading() ? 'visible' : 'hidden'; - }, this); - } - - AdminSettingsPackages.prototype.onShow = function () - { - this.packagesError(''); - }; - - AdminSettingsPackages.prototype.onBuild = function () - { - __webpack_require__(/*! App:Admin */ 16).reloadPackagesList(); - }; - - AdminSettingsPackages.prototype.requestHelper = function (oPackage, bInstall) - { - var self = this; - return function (sResult, oData) { - - if (Enums.StorageResultType.Success !== sResult || !oData || !oData.Result) - { - if (oData && oData.ErrorCode) - { - self.packagesError(Utils.getNotification(oData.ErrorCode)); - } - else - { - self.packagesError(Utils.getNotification( - bInstall ? Enums.Notification.CantInstallPackage : Enums.Notification.CantDeletePackage)); - } - } - - _.each(Data.packages(), function (oItem) { - if (oItem && oPackage && oItem['loading']() && oPackage['file'] === oItem['file']) - { - oPackage['loading'](false); - oItem['loading'](false); - } - }); - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result && oData.Result['Reload']) - { - window.location.reload(); - } - else - { - __webpack_require__(/*! App:Admin */ 16).reloadPackagesList(); - } - }; - }; - - AdminSettingsPackages.prototype.deletePackage = function (oPackage) - { - if (oPackage) - { - oPackage['loading'](true); - Remote.packageDelete(this.requestHelper(oPackage, false), oPackage); - } - }; - - AdminSettingsPackages.prototype.installPackage = function (oPackage) - { - if (oPackage) - { - oPackage['loading'](true); - Remote.packageInstall(this.requestHelper(oPackage, true), oPackage); - } - }; - - module.exports = AdminSettingsPackages; - - }()); - -/***/ }, - -/***/ 75: -/*!****************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsPlugins.js ***! - \****************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:Admin:Data */ 18), - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - /** - * @constructor - */ - function AdminSettingsPlugins() - { - this.enabledPlugins = ko.observable(!!Settings.settingsGet('EnabledPlugins')); - - this.pluginsError = ko.observable(''); - - this.plugins = Data.plugins; - this.pluginsLoading = Data.pluginsLoading; - - this.visibility = ko.computed(function () { - return Data.pluginsLoading() ? 'visible' : 'hidden'; - }, this); - - this.onPluginLoadRequest = _.bind(this.onPluginLoadRequest, this); - this.onPluginDisableRequest = _.bind(this.onPluginDisableRequest, this); - } - - AdminSettingsPlugins.prototype.disablePlugin = function (oPlugin) - { - oPlugin.disabled(!oPlugin.disabled()); - Remote.pluginDisable(this.onPluginDisableRequest, oPlugin.name, oPlugin.disabled()); - }; - - AdminSettingsPlugins.prototype.configurePlugin = function (oPlugin) - { - Remote.plugin(this.onPluginLoadRequest, oPlugin.name); - }; - - AdminSettingsPlugins.prototype.onBuild = function (oDom) - { - var self = this; - - oDom - .on('click', '.e-item .configure-plugin-action', function () { - var oPlugin = ko.dataFor(this); - if (oPlugin) - { - self.configurePlugin(oPlugin); - } - }) - .on('click', '.e-item .disabled-plugin', function () { - var oPlugin = ko.dataFor(this); - if (oPlugin) - { - self.disablePlugin(oPlugin); - } - }) - ; - - this.enabledPlugins.subscribe(function (bValue) { - Remote.saveAdminConfig(Utils.emptyFunction, { - 'EnabledPlugins': bValue ? '1' : '0' - }); - }); - }; - - AdminSettingsPlugins.prototype.onShow = function () - { - this.pluginsError(''); - __webpack_require__(/*! App:Admin */ 16).reloadPluginList(); - }; - - AdminSettingsPlugins.prototype.onPluginLoadRequest = function (sResult, oData) - { - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - __webpack_require__(/*! App:Knoin */ 5).showScreenPopup(__webpack_require__(/*! View:Popup:Plugin */ 109), [oData.Result]); - } - }; - - AdminSettingsPlugins.prototype.onPluginDisableRequest = function (sResult, oData) - { - if (Enums.StorageResultType.Success === sResult && oData) - { - if (!oData.Result && oData.ErrorCode) - { - if (Enums.Notification.UnsupportedPluginPackage === oData.ErrorCode && oData.ErrorMessage && '' !== oData.ErrorMessage) - { - this.pluginsError(oData.ErrorMessage); - } - else - { - this.pluginsError(Utils.getNotification(oData.ErrorCode)); - } - } - } - - __webpack_require__(/*! App:Admin */ 16).reloadPluginList(); - }; - - module.exports = AdminSettingsPlugins; - - }()); - -/***/ }, - -/***/ 76: -/*!*****************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsSecurity.js ***! - \*****************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:Admin:Data */ 18), - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - /** - * @constructor - */ - function AdminSettingsSecurity() - { - this.useLocalProxyForExternalImages = Data.useLocalProxyForExternalImages; - - this.capaOpenPGP = ko.observable(Settings.capa(Enums.Capa.OpenPGP)); - this.capaTwoFactorAuth = ko.observable(Settings.capa(Enums.Capa.TwoFactor)); - - this.adminLogin = ko.observable(Settings.settingsGet('AdminLogin')); - this.adminPassword = ko.observable(''); - this.adminPasswordNew = ko.observable(''); - this.adminPasswordNew2 = ko.observable(''); - this.adminPasswordNewError = ko.observable(false); - - this.adminPasswordUpdateError = ko.observable(false); - this.adminPasswordUpdateSuccess = ko.observable(false); - - this.adminPassword.subscribe(function () { - this.adminPasswordUpdateError(false); - this.adminPasswordUpdateSuccess(false); - }, this); - - this.adminPasswordNew.subscribe(function () { - this.adminPasswordUpdateError(false); - this.adminPasswordUpdateSuccess(false); - this.adminPasswordNewError(false); - }, this); - - this.adminPasswordNew2.subscribe(function () { - this.adminPasswordUpdateError(false); - this.adminPasswordUpdateSuccess(false); - this.adminPasswordNewError(false); - }, this); - - this.saveNewAdminPasswordCommand = Utils.createCommand(this, function () { - - if (this.adminPasswordNew() !== this.adminPasswordNew2()) - { - this.adminPasswordNewError(true); - return false; - } - - this.adminPasswordUpdateError(false); - this.adminPasswordUpdateSuccess(false); - - Remote.saveNewAdminPassword(this.onNewAdminPasswordResponse, { - 'Password': this.adminPassword(), - 'NewPassword': this.adminPasswordNew() - }); - - }, function () { - return '' !== this.adminPassword() && '' !== this.adminPasswordNew() && '' !== this.adminPasswordNew2(); - }); - - this.onNewAdminPasswordResponse = _.bind(this.onNewAdminPasswordResponse, this); - } - - AdminSettingsSecurity.prototype.onNewAdminPasswordResponse = function (sResult, oData) - { - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - this.adminPassword(''); - this.adminPasswordNew(''); - this.adminPasswordNew2(''); - - this.adminPasswordUpdateSuccess(true); - } - else - { - this.adminPasswordUpdateError(true); - } - }; - - AdminSettingsSecurity.prototype.onBuild = function () - { - var - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - this.capaOpenPGP.subscribe(function (bValue) { - Remote.saveAdminConfig(Utils.emptyFunction, { - 'CapaOpenPGP': bValue ? '1' : '0' - }); - }); - - this.capaTwoFactorAuth.subscribe(function (bValue) { - Remote.saveAdminConfig(Utils.emptyFunction, { - 'CapaTwoFactorAuth': bValue ? '1' : '0' - }); - }); - - this.useLocalProxyForExternalImages.subscribe(function (bValue) { - Remote.saveAdminConfig(null, { - 'UseLocalProxyForExternalImages': bValue ? '1' : '0' - }); - }); - }; - - AdminSettingsSecurity.prototype.onHide = function () - { - this.adminPassword(''); - this.adminPasswordNew(''); - this.adminPasswordNew2(''); - }; - - /** - * @return {string} - */ - AdminSettingsSecurity.prototype.phpInfoLink = function () - { - return LinkBuilder.phpInfo(); - }; - - module.exports = AdminSettingsSecurity; - - }()); - - -/***/ }, - -/***/ 77: -/*!***************************************************!*\ - !*** ./dev/Settings/Admin/AdminSettingsSocial.js ***! - \***************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @constructor - */ - function AdminSettingsSocial() - { - var Data = __webpack_require__(/*! Storage:Admin:Data */ 18); - - this.googleEnable = Data.googleEnable; - this.googleClientID = Data.googleClientID; - this.googleApiKey = Data.googleApiKey; - this.googleClientSecret = Data.googleClientSecret; - this.googleTrigger1 = ko.observable(Enums.SaveSettingsStep.Idle); - this.googleTrigger2 = ko.observable(Enums.SaveSettingsStep.Idle); - this.googleTrigger3 = ko.observable(Enums.SaveSettingsStep.Idle); - - this.facebookSupported = Data.facebookSupported; - this.facebookEnable = Data.facebookEnable; - this.facebookAppID = Data.facebookAppID; - this.facebookAppSecret = Data.facebookAppSecret; - this.facebookTrigger1 = ko.observable(Enums.SaveSettingsStep.Idle); - this.facebookTrigger2 = ko.observable(Enums.SaveSettingsStep.Idle); - - this.twitterEnable = Data.twitterEnable; - this.twitterConsumerKey = Data.twitterConsumerKey; - this.twitterConsumerSecret = Data.twitterConsumerSecret; - this.twitterTrigger1 = ko.observable(Enums.SaveSettingsStep.Idle); - this.twitterTrigger2 = ko.observable(Enums.SaveSettingsStep.Idle); - - this.dropboxEnable = Data.dropboxEnable; - this.dropboxApiKey = Data.dropboxApiKey; - this.dropboxTrigger1 = ko.observable(Enums.SaveSettingsStep.Idle); - } - - AdminSettingsSocial.prototype.onBuild = function () - { - var - self = this, - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15) - ; - - _.delay(function () { - - var - f1 = Utils.settingsSaveHelperSimpleFunction(self.facebookTrigger1, self), - f2 = Utils.settingsSaveHelperSimpleFunction(self.facebookTrigger2, self), - f3 = Utils.settingsSaveHelperSimpleFunction(self.twitterTrigger1, self), - f4 = Utils.settingsSaveHelperSimpleFunction(self.twitterTrigger2, self), - f5 = Utils.settingsSaveHelperSimpleFunction(self.googleTrigger1, self), - f6 = Utils.settingsSaveHelperSimpleFunction(self.googleTrigger2, self), - f7 = Utils.settingsSaveHelperSimpleFunction(self.googleTrigger3, self), - f8 = Utils.settingsSaveHelperSimpleFunction(self.dropboxTrigger1, self) - ; - - self.facebookEnable.subscribe(function (bValue) { - if (self.facebookSupported()) - { - Remote.saveAdminConfig(Utils.emptyFunction, { - 'FacebookEnable': bValue ? '1' : '0' - }); - } - }); - - self.facebookAppID.subscribe(function (sValue) { - if (self.facebookSupported()) - { - Remote.saveAdminConfig(f1, { - 'FacebookAppID': Utils.trim(sValue) - }); - } - }); - - self.facebookAppSecret.subscribe(function (sValue) { - if (self.facebookSupported()) - { - Remote.saveAdminConfig(f2, { - 'FacebookAppSecret': Utils.trim(sValue) - }); - } - }); - - self.twitterEnable.subscribe(function (bValue) { - Remote.saveAdminConfig(Utils.emptyFunction, { - 'TwitterEnable': bValue ? '1' : '0' - }); - }); - - self.twitterConsumerKey.subscribe(function (sValue) { - Remote.saveAdminConfig(f3, { - 'TwitterConsumerKey': Utils.trim(sValue) - }); - }); - - self.twitterConsumerSecret.subscribe(function (sValue) { - Remote.saveAdminConfig(f4, { - 'TwitterConsumerSecret': Utils.trim(sValue) - }); - }); - - self.googleEnable.subscribe(function (bValue) { - Remote.saveAdminConfig(Utils.emptyFunction, { - 'GoogleEnable': bValue ? '1' : '0' - }); - }); - - self.googleClientID.subscribe(function (sValue) { - Remote.saveAdminConfig(f5, { - 'GoogleClientID': Utils.trim(sValue) - }); - }); - - self.googleClientSecret.subscribe(function (sValue) { - Remote.saveAdminConfig(f6, { - 'GoogleClientSecret': Utils.trim(sValue) - }); - }); - - self.googleApiKey.subscribe(function (sValue) { - Remote.saveAdminConfig(f7, { - 'GoogleApiKey': Utils.trim(sValue) - }); - }); - - self.dropboxEnable.subscribe(function (bValue) { - Remote.saveAdminConfig(Utils.emptyFunction, { - 'DropboxEnable': bValue ? '1' : '0' - }); - }); - - self.dropboxApiKey.subscribe(function (sValue) { - Remote.saveAdminConfig(f8, { - 'DropboxApiKey': Utils.trim(sValue) - }); - }); - - }, 50); - }; - - module.exports = AdminSettingsSocial; - - }()); - -/***/ }, - -/***/ 93: -/*!***********************************************!*\ - !*** ./dev/ViewModels/AdminLoginViewModel.js ***! - \***********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function AdminLoginViewModel() - { - KnoinAbstractViewModel.call(this, 'Center', 'AdminLogin'); - - this.login = ko.observable(''); - this.password = ko.observable(''); - - this.loginError = ko.observable(false); - this.passwordError = ko.observable(false); - - this.loginFocus = ko.observable(false); - - this.login.subscribe(function () { - this.loginError(false); - }, this); - - this.password.subscribe(function () { - this.passwordError(false); - }, this); - - this.submitRequest = ko.observable(false); - this.submitError = ko.observable(''); - - this.submitCommand = Utils.createCommand(this, function () { - - Utils.triggerAutocompleteInputChange(); - - this.loginError('' === Utils.trim(this.login())); - this.passwordError('' === Utils.trim(this.password())); - - if (this.loginError() || this.passwordError()) - { - return false; - } - - this.submitRequest(true); - - Remote.adminLogin(_.bind(function (sResult, oData) { - - if (Enums.StorageResultType.Success === sResult && oData && 'AdminLogin' === oData.Action) - { - if (oData.Result) - { - __webpack_require__(/*! App:Admin */ 16).loginAndLogoutReload(); - } - else if (oData.ErrorCode) - { - this.submitRequest(false); - this.submitError(Utils.getNotification(oData.ErrorCode)); - } - } - else - { - this.submitRequest(false); - this.submitError(Utils.getNotification(Enums.Notification.UnknownError)); - } - - }, this), this.login(), this.password()); - - return true; - - }, function () { - return !this.submitRequest(); - }); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Admin:Login', 'AdminLoginViewModel'], AdminLoginViewModel); - _.extend(AdminLoginViewModel.prototype, KnoinAbstractViewModel.prototype); - - AdminLoginViewModel.prototype.onShow = function () - { - kn.routeOff(); - - _.delay(_.bind(function () { - this.loginFocus(true); - }, this), 100); - - }; - - AdminLoginViewModel.prototype.onHide = function () - { - this.loginFocus(false); - }; - - AdminLoginViewModel.prototype.onBuild = function () - { - Utils.triggerAutocompleteInputChange(true); - }; - - AdminLoginViewModel.prototype.submitForm = function () - { - this.submitCommand(); - }; - - module.exports = AdminLoginViewModel; - - }()); - -/***/ }, - -/***/ 94: -/*!******************************************************!*\ - !*** ./dev/ViewModels/AdminSettingsMenuViewModel.js ***! - \******************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - Globals = __webpack_require__(/*! Common/Globals */ 7), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @param {?} oScreen - * - * @constructor - * @extends KnoinAbstractViewModel - */ - function AdminSettingsMenuViewModel(oScreen) - { - KnoinAbstractViewModel.call(this, 'Left', 'AdminMenu'); - - this.leftPanelDisabled = Globals.leftPanelDisabled; - - this.menu = oScreen.menu; - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Admin:SettingsMenu', 'AdminSettingsMenuViewModel'], AdminSettingsMenuViewModel); - _.extend(AdminSettingsMenuViewModel.prototype, KnoinAbstractViewModel.prototype); - - AdminSettingsMenuViewModel.prototype.link = function (sRoute) - { - return '#/' + sRoute; - }; - - module.exports = AdminSettingsMenuViewModel; - - }()); - - -/***/ }, - -/***/ 95: -/*!******************************************************!*\ - !*** ./dev/ViewModels/AdminSettingsPaneViewModel.js ***! - \******************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:Admin:Data */ 18), - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function AdminSettingsPaneViewModel() - { - KnoinAbstractViewModel.call(this, 'Right', 'AdminPane'); - - this.adminDomain = ko.observable(Settings.settingsGet('AdminDomain')); - this.version = ko.observable(Settings.settingsGet('Version')); - - this.adminManLoadingVisibility = Data.adminManLoadingVisibility; - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Admin:SettingsPane', 'AdminSettingsPaneViewModel'], AdminSettingsPaneViewModel); - _.extend(AdminSettingsPaneViewModel.prototype, KnoinAbstractViewModel.prototype); - - AdminSettingsPaneViewModel.prototype.logoutClick = function () - { - Remote.adminLogout(function () { - __webpack_require__(/*! App:Admin */ 16).loginAndLogoutReload(); - }); - }; - - module.exports = AdminSettingsPaneViewModel; - - }()); - -/***/ }, - -/***/ 101: -/*!**********************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsActivateViewModel.js ***! - \**********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:Admin:Data */ 18), - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsActivateViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsActivate'); - - var self = this; - - this.domain = ko.observable(''); - this.key = ko.observable(''); - this.key.focus = ko.observable(false); - this.activationSuccessed = ko.observable(false); - - this.licenseTrigger = Data.licenseTrigger; - - this.activateProcess = ko.observable(false); - this.activateText = ko.observable(''); - this.activateText.isError = ko.observable(false); - - this.key.subscribe(function () { - this.activateText(''); - this.activateText.isError(false); - }, this); - - this.activationSuccessed.subscribe(function (bValue) { - if (bValue) - { - this.licenseTrigger(!this.licenseTrigger()); - } - }, this); - - this.activateCommand = Utils.createCommand(this, function () { - - this.activateProcess(true); - if (this.validateSubscriptionKey()) - { - Remote.licensingActivate(function (sResult, oData) { - - self.activateProcess(false); - if (Enums.StorageResultType.Success === sResult && oData.Result) - { - if (true === oData.Result) - { - self.activationSuccessed(true); - self.activateText('Subscription Key Activated Successfully'); - self.activateText.isError(false); - } - else - { - self.activateText(oData.Result); - self.activateText.isError(true); - self.key.focus(true); - } - } - else if (oData.ErrorCode) - { - self.activateText(Utils.getNotification(oData.ErrorCode)); - self.activateText.isError(true); - self.key.focus(true); - } - else - { - self.activateText(Utils.getNotification(Enums.Notification.UnknownError)); - self.activateText.isError(true); - self.key.focus(true); - } - - }, this.domain(), this.key()); - } - else - { - this.activateProcess(false); - this.activateText('Invalid Subscription Key'); - this.activateText.isError(true); - this.key.focus(true); - } - - }, function () { - return !this.activateProcess() && '' !== this.domain() && '' !== this.key() && !this.activationSuccessed(); - }); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:Activate', 'PopupsActivateViewModel'], PopupsActivateViewModel); - _.extend(PopupsActivateViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsActivateViewModel.prototype.onShow = function () - { - this.domain(Settings.settingsGet('AdminDomain')); - if (!this.activateProcess()) - { - this.key(''); - this.activateText(''); - this.activateText.isError(false); - this.activationSuccessed(false); - } - }; - - PopupsActivateViewModel.prototype.onFocus = function () - { - if (!this.activateProcess()) - { - this.key.focus(true); - } - }; - - /** - * @returns {boolean} - */ - PopupsActivateViewModel.prototype.validateSubscriptionKey = function () - { - var sValue = this.key(); - return '' === sValue || !!/^RL[\d]+-[A-Z0-9\-]+Z$/.test(Utils.trim(sValue)); - }; - - module.exports = PopupsActivateViewModel; - - }()); - -/***/ }, - -/***/ 105: -/*!********************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsDomainViewModel.js ***! - \********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Consts = __webpack_require__(/*! Common/Consts */ 17), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsDomainViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsDomain'); - - this.edit = ko.observable(false); - this.saving = ko.observable(false); - this.savingError = ko.observable(''); - this.whiteListPage = ko.observable(false); - - this.testing = ko.observable(false); - this.testingDone = ko.observable(false); - this.testingImapError = ko.observable(false); - this.testingSmtpError = ko.observable(false); - this.testingImapErrorDesc = ko.observable(''); - this.testingSmtpErrorDesc = ko.observable(''); - - this.testingImapError.subscribe(function (bValue) { - if (!bValue) - { - this.testingImapErrorDesc(''); - } - }, this); - - this.testingSmtpError.subscribe(function (bValue) { - if (!bValue) - { - this.testingSmtpErrorDesc(''); - } - }, this); - - this.testingImapErrorDesc = ko.observable(''); - this.testingSmtpErrorDesc = ko.observable(''); - - this.imapServerFocus = ko.observable(false); - this.smtpServerFocus = ko.observable(false); - - this.name = ko.observable(''); - this.name.focused = ko.observable(false); - - this.imapServer = ko.observable(''); - this.imapPort = ko.observable('' + Consts.Values.ImapDefaulPort); - this.imapSecure = ko.observable(Enums.ServerSecure.None); - this.imapShortLogin = ko.observable(false); - this.smtpServer = ko.observable(''); - this.smtpPort = ko.observable('' + Consts.Values.SmtpDefaulPort); - this.smtpSecure = ko.observable(Enums.ServerSecure.None); - this.smtpShortLogin = ko.observable(false); - this.smtpAuth = ko.observable(true); - this.whiteList = ko.observable(''); - - this.headerText = ko.computed(function () { - var sName = this.name(); - return this.edit() ? 'Edit Domain "' + sName + '"' : - 'Add Domain' + ('' === sName ? '' : ' "' + sName + '"'); - }, this); - - this.domainIsComputed = ko.computed(function () { - return '' !== this.name() && - '' !== this.imapServer() && - '' !== this.imapPort() && - '' !== this.smtpServer() && - '' !== this.smtpPort(); - }, this); - - this.canBeTested = ko.computed(function () { - return !this.testing() && this.domainIsComputed(); - }, this); - - this.canBeSaved = ko.computed(function () { - return !this.saving() && this.domainIsComputed(); - }, this); - - this.createOrAddCommand = Utils.createCommand(this, function () { - this.saving(true); - Remote.createOrUpdateDomain( - _.bind(this.onDomainCreateOrSaveResponse, this), - !this.edit(), - this.name(), - this.imapServer(), - Utils.pInt(this.imapPort()), - this.imapSecure(), - this.imapShortLogin(), - this.smtpServer(), - Utils.pInt(this.smtpPort()), - this.smtpSecure(), - this.smtpShortLogin(), - this.smtpAuth(), - this.whiteList() - ); - }, this.canBeSaved); - - this.testConnectionCommand = Utils.createCommand(this, function () { - this.whiteListPage(false); - this.testingDone(false); - this.testingImapError(false); - this.testingSmtpError(false); - this.testing(true); - Remote.testConnectionForDomain( - _.bind(this.onTestConnectionResponse, this), - this.name(), - this.imapServer(), - Utils.pInt(this.imapPort()), - this.imapSecure(), - this.smtpServer(), - Utils.pInt(this.smtpPort()), - this.smtpSecure(), - this.smtpAuth() - ); - }, this.canBeTested); - - this.whiteListCommand = Utils.createCommand(this, function () { - this.whiteListPage(!this.whiteListPage()); - }); - - // smart form improvements - this.imapServerFocus.subscribe(function (bValue) { - if (bValue && '' !== this.name() && '' === this.imapServer()) - { - this.imapServer(this.name().replace(/[.]?[*][.]?/g, '')); - } - }, this); - - this.smtpServerFocus.subscribe(function (bValue) { - if (bValue && '' !== this.imapServer() && '' === this.smtpServer()) - { - this.smtpServer(this.imapServer().replace(/imap/ig, 'smtp')); - } - }, this); - - this.imapSecure.subscribe(function (sValue) { - var iPort = Utils.pInt(this.imapPort()); - sValue = Utils.pString(sValue); - switch (sValue) - { - case '0': - if (993 === iPort) - { - this.imapPort('143'); - } - break; - case '1': - if (143 === iPort) - { - this.imapPort('993'); - } - break; - } - }, this); - - this.smtpSecure.subscribe(function (sValue) { - var iPort = Utils.pInt(this.smtpPort()); - sValue = Utils.pString(sValue); - switch (sValue) - { - case '0': - if (465 === iPort || 587 === iPort) - { - this.smtpPort('25'); - } - break; - case '1': - if (25 === iPort || 587 === iPort) - { - this.smtpPort('465'); - } - break; - case '2': - if (25 === iPort || 465 === iPort) - { - this.smtpPort('587'); - } - break; - } - }, this); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:Domain', 'PopupsDomainViewModel'], PopupsDomainViewModel); - _.extend(PopupsDomainViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsDomainViewModel.prototype.onTestConnectionResponse = function (sResult, oData) - { - this.testing(false); - if (Enums.StorageResultType.Success === sResult && oData.Result) - { - this.testingDone(true); - this.testingImapError(true !== oData.Result.Imap); - this.testingSmtpError(true !== oData.Result.Smtp); - - if (this.testingImapError() && oData.Result.Imap) - { - this.testingImapErrorDesc(oData.Result.Imap); - } - - if (this.testingSmtpError() && oData.Result.Smtp) - { - this.testingSmtpErrorDesc(oData.Result.Smtp); - } - } - else - { - this.testingImapError(true); - this.testingSmtpError(true); - } - }; - - PopupsDomainViewModel.prototype.onDomainCreateOrSaveResponse = function (sResult, oData) - { - this.saving(false); - if (Enums.StorageResultType.Success === sResult && oData) - { - if (oData.Result) - { - __webpack_require__(/*! App:Admin */ 16).reloadDomainList(); - this.closeCommand(); - } - else if (Enums.Notification.DomainAlreadyExists === oData.ErrorCode) - { - this.savingError('Domain already exists'); - } - } - else - { - this.savingError('Unknown error'); - } - }; - - PopupsDomainViewModel.prototype.onHide = function () - { - this.whiteListPage(false); - }; - - PopupsDomainViewModel.prototype.onShow = function (oDomain) - { - this.saving(false); - this.whiteListPage(false); - - this.testing(false); - this.testingDone(false); - this.testingImapError(false); - this.testingSmtpError(false); - - this.clearForm(); - if (oDomain) - { - this.edit(true); - - this.name(Utils.trim(oDomain.Name)); - this.imapServer(Utils.trim(oDomain.IncHost)); - this.imapPort('' + Utils.pInt(oDomain.IncPort)); - this.imapSecure(Utils.trim(oDomain.IncSecure)); - this.imapShortLogin(!!oDomain.IncShortLogin); - this.smtpServer(Utils.trim(oDomain.OutHost)); - this.smtpPort('' + Utils.pInt(oDomain.OutPort)); - this.smtpSecure(Utils.trim(oDomain.OutSecure)); - this.smtpShortLogin(!!oDomain.OutShortLogin); - this.smtpAuth(!!oDomain.OutAuth); - this.whiteList(Utils.trim(oDomain.WhiteList)); - } - }; - - PopupsDomainViewModel.prototype.onFocus = function () - { - if ('' === this.name()) - { - this.name.focused(true); - } - }; - - PopupsDomainViewModel.prototype.clearForm = function () - { - this.edit(false); - this.whiteListPage(false); - - this.savingError(''); - - this.name(''); - this.name.focused(false); - - this.imapServer(''); - this.imapPort('' + Consts.Values.ImapDefaulPort); - this.imapSecure(Enums.ServerSecure.None); - this.imapShortLogin(false); - this.smtpServer(''); - this.smtpPort('' + Consts.Values.SmtpDefaulPort); - this.smtpSecure(Enums.ServerSecure.None); - this.smtpShortLogin(false); - this.smtpAuth(true); - this.whiteList(''); - }; - - module.exports = PopupsDomainViewModel; - - }()); - -/***/ }, - -/***/ 109: -/*!********************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsPluginViewModel.js ***! - \********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - key = __webpack_require__(/*! key */ 19), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - Remote = __webpack_require__(/*! Storage:Admin:Remote */ 15), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsPluginViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsPlugin'); - - var self = this; - - this.onPluginSettingsUpdateResponse = _.bind(this.onPluginSettingsUpdateResponse, this); - - this.saveError = ko.observable(''); - - this.name = ko.observable(''); - this.readme = ko.observable(''); - - this.configures = ko.observableArray([]); - - this.hasReadme = ko.computed(function () { - return '' !== this.readme(); - }, this); - - this.hasConfiguration = ko.computed(function () { - return 0 < this.configures().length; - }, this); - - this.readmePopoverConf = { - 'placement': 'top', - 'trigger': 'hover', - 'title': 'About', - 'content': function () { - return self.readme(); - } - }; - - this.saveCommand = Utils.createCommand(this, function () { - - var oList = {}; - - oList['Name'] = this.name(); - - _.each(this.configures(), function (oItem) { - - var mValue = oItem.value(); - if (false === mValue || true === mValue) - { - mValue = mValue ? '1' : '0'; - } - - oList['_' + oItem['Name']] = mValue; - - }, this); - - this.saveError(''); - Remote.pluginSettingsUpdate(this.onPluginSettingsUpdateResponse, oList); - - }, this.hasConfiguration); - - this.bDisabeCloseOnEsc = true; - this.sDefaultKeyScope = Enums.KeyState.All; - - this.tryToClosePopup = _.debounce(_.bind(this.tryToClosePopup, this), 200); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:Plugin', 'PopupsPluginViewModel'], PopupsPluginViewModel); - _.extend(PopupsPluginViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsPluginViewModel.prototype.onPluginSettingsUpdateResponse = function (sResult, oData) - { - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - this.cancelCommand(); - } - else - { - this.saveError(''); - if (oData && oData.ErrorCode) - { - this.saveError(Utils.getNotification(oData.ErrorCode)); - } - else - { - this.saveError(Utils.getNotification(Enums.Notification.CantSavePluginSettings)); - } - } - }; - - PopupsPluginViewModel.prototype.onShow = function (oPlugin) - { - this.name(); - this.readme(); - this.configures([]); - - if (oPlugin) - { - this.name(oPlugin['Name']); - this.readme(oPlugin['Readme']); - - var aConfig = oPlugin['Config']; - if (Utils.isNonEmptyArray(aConfig)) - { - this.configures(_.map(aConfig, function (aItem) { - return { - 'value': ko.observable(aItem[0]), - 'Name': aItem[1], - 'Type': aItem[2], - 'Label': aItem[3], - 'Default': aItem[4], - 'Desc': aItem[5] - }; - })); - } - } - }; - - PopupsPluginViewModel.prototype.tryToClosePopup = function () - { - var - self = this, - PopupsAskViewModel = __webpack_require__(/*! View:Popup:Ask */ 31) - ; - - if (!kn.isPopupVisible(PopupsAskViewModel)) - { - kn.showScreenPopup(PopupsAskViewModel, [Utils.i18n('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () { - if (self.modalVisibility()) - { - Utils.delegateRun(self, 'cancelCommand'); - } - }]); - } - }; - - PopupsPluginViewModel.prototype.onBuild = function () - { - key('esc', Enums.KeyState.All, _.bind(function () { - if (this.modalVisibility()) - { - this.tryToClosePopup(); - } - return false; - }, this)); - }; - - module.exports = PopupsPluginViewModel; - - }()); - -/***/ } - -}); \ No newline at end of file diff --git a/rainloop/v/0.0.0/static/js/app.js b/rainloop/v/0.0.0/static/js/app.js deleted file mode 100644 index adb1939dd..000000000 --- a/rainloop/v/0.0.0/static/js/app.js +++ /dev/null @@ -1,6866 +0,0 @@ -/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ -webpackJsonp([3],{ - -/***/ 0: -/*!*************************!*\ - !*** ./dev/RainLoop.js ***! - \*************************/ -/***/ function(module, exports, __webpack_require__) { - - var require;(function (require) { - 'use strict'; - __webpack_require__(/*! App:Boot */ 35)(__webpack_require__(/*! App:RainLoop */ 4)); - }(require)); - -/***/ }, - -/***/ 4: -/*!*********************************!*\ - !*** ./dev/Apps/RainLoopApp.js ***! - \*********************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - moment = __webpack_require__(/*! moment */ 25), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Globals = __webpack_require__(/*! Common/Globals */ 7), - Consts = __webpack_require__(/*! Common/Consts */ 17), - Plugins = __webpack_require__(/*! Common/Plugins */ 26), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - Events = __webpack_require__(/*! Common/Events */ 22), - - kn = __webpack_require__(/*! App:Knoin */ 5), - - Local = __webpack_require__(/*! Storage:LocalStorage */ 30), - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8), - Cache = __webpack_require__(/*! Storage:RainLoop:Cache */ 20), - Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13), - - EmailModel = __webpack_require__(/*! Model:Email */ 23), - FolderModel = __webpack_require__(/*! Model:Folder */ 58), - MessageModel = __webpack_require__(/*! Model:Message */ 38), - AccountModel = __webpack_require__(/*! Model:Account */ 51), - IdentityModel = __webpack_require__(/*! Model:Identity */ 59), - OpenPgpKeyModel = __webpack_require__(/*! Model:OpenPgpKey */ 60), - - AbstractApp = __webpack_require__(/*! App:Abstract */ 34) - ; - - /** - * @constructor - * @extends AbstractApp - */ - function RainLoopApp() - { - AbstractApp.call(this, Remote); - - this.oMoveCache = {}; - - this.quotaDebounce = _.debounce(this.quota, 1000 * 30); - this.moveOrDeleteResponseHelper = _.bind(this.moveOrDeleteResponseHelper, this); - - this.messagesMoveTrigger = _.debounce(this.messagesMoveTrigger, 500); - - window.setInterval(function () { - Events.pub('interval.30s'); - }, 30000); - - window.setInterval(function () { - Events.pub('interval.1m'); - }, 60000); - - window.setInterval(function () { - Events.pub('interval.2m'); - }, 60000 * 2); - - window.setInterval(function () { - Events.pub('interval.3m'); - }, 60000 * 3); - - window.setInterval(function () { - Events.pub('interval.5m'); - }, 60000 * 5); - - window.setInterval(function () { - Events.pub('interval.10m'); - }, 60000 * 10); - - window.setTimeout(function () { - window.setInterval(function () { - Events.pub('interval.10m-after5m'); - }, 60000 * 10); - }, 60000 * 5); - - $.wakeUp(function () { - - Remote.jsVersion(function (sResult, oData) { - if (Enums.StorageResultType.Success === sResult && oData && !oData.Result) - { - if (window.parent && !!Settings.settingsGet('InIframe')) - { - window.parent.location.reload(); - } - else - { - window.location.reload(); - } - } - }, Settings.settingsGet('Version')); - - }, {}, 60 * 60 * 1000); - - - this.socialUsers = _.bind(this.socialUsers, this); - } - - _.extend(RainLoopApp.prototype, AbstractApp.prototype); - - RainLoopApp.prototype.remote = function () - { - return Remote; - }; - - RainLoopApp.prototype.data = function () - { - return Data; - }; - - RainLoopApp.prototype.reloadFlagsCurrentMessageListAndMessageFromCache = function () - { - _.each(Data.messageList(), function (oMessage) { - Cache.initMessageFlagsFromCache(oMessage); - }); - - Cache.initMessageFlagsFromCache(Data.message()); - }; - - /** - * @param {boolean=} bDropPagePosition = false - * @param {boolean=} bDropCurrenFolderCache = false - */ - RainLoopApp.prototype.reloadMessageList = function (bDropPagePosition, bDropCurrenFolderCache) - { - var - self = this, - iOffset = (Data.messageListPage() - 1) * Data.messagesPerPage() - ; - - if (Utils.isUnd(bDropCurrenFolderCache) ? false : !!bDropCurrenFolderCache) - { - Cache.setFolderHash(Data.currentFolderFullNameRaw(), ''); - } - - if (Utils.isUnd(bDropPagePosition) ? false : !!bDropPagePosition) - { - Data.messageListPage(1); - iOffset = 0; - } - - Data.messageListLoading(true); - Remote.messageList(function (sResult, oData, bCached) { - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - Data.messageListError(''); - Data.messageListLoading(false); - self.setMessageList(oData, bCached); - } - else if (Enums.StorageResultType.Unload === sResult) - { - Data.messageListError(''); - Data.messageListLoading(false); - } - else if (Enums.StorageResultType.Abort !== sResult) - { - Data.messageList([]); - Data.messageListLoading(false); - Data.messageListError(oData && oData.ErrorCode ? - Utils.getNotification(oData.ErrorCode) : Utils.i18n('NOTIFICATIONS/CANT_GET_MESSAGE_LIST') - ); - } - - }, Data.currentFolderFullNameRaw(), iOffset, Data.messagesPerPage(), Data.messageListSearch()); - }; - - RainLoopApp.prototype.recacheInboxMessageList = function () - { - Remote.messageList(Utils.emptyFunction, 'INBOX', 0, Data.messagesPerPage(), '', true); - }; - - RainLoopApp.prototype.reloadMessageListHelper = function (bEmptyList) - { - this.reloadMessageList(bEmptyList); - }; - - /** - * @param {Function} fResultFunc - * @returns {boolean} - */ - RainLoopApp.prototype.contactsSync = function (fResultFunc) - { - var oContacts = Data.contacts; - if (oContacts.importing() || oContacts.syncing() || !Data.enableContactsSync() || !Data.allowContactsSync()) - { - return false; - } - - oContacts.syncing(true); - - Remote.contactsSync(function (sResult, oData) { - - oContacts.syncing(false); - - if (fResultFunc) - { - fResultFunc(sResult, oData); - } - }); - - return true; - }; - - RainLoopApp.prototype.messagesMoveTrigger = function () - { - var - self = this, - sSpamFolder = Data.spamFolder() - ; - - _.each(this.oMoveCache, function (oItem) { - - var - bSpam = sSpamFolder === oItem['To'], - bHam = !bSpam && sSpamFolder === oItem['From'] && 'INBOX' === oItem['To'] - ; - - Remote.messagesMove(self.moveOrDeleteResponseHelper, oItem['From'], oItem['To'], oItem['Uid'], - bSpam ? 'SPAM' : (bHam ? 'HAM' : '')); - }); - - this.oMoveCache = {}; - }; - - RainLoopApp.prototype.messagesMoveHelper = function (sFromFolderFullNameRaw, sToFolderFullNameRaw, aUidForMove) - { - var sH = '$$' + sFromFolderFullNameRaw + '$$' + sToFolderFullNameRaw + '$$'; - if (!this.oMoveCache[sH]) - { - this.oMoveCache[sH] = { - 'From': sFromFolderFullNameRaw, - 'To': sToFolderFullNameRaw, - 'Uid': [] - }; - } - - this.oMoveCache[sH]['Uid'] = _.union(this.oMoveCache[sH]['Uid'], aUidForMove); - this.messagesMoveTrigger(); - }; - - RainLoopApp.prototype.messagesCopyHelper = function (sFromFolderFullNameRaw, sToFolderFullNameRaw, aUidForCopy) - { - Remote.messagesCopy( - this.moveOrDeleteResponseHelper, - sFromFolderFullNameRaw, - sToFolderFullNameRaw, - aUidForCopy - ); - }; - - RainLoopApp.prototype.messagesDeleteHelper = function (sFromFolderFullNameRaw, aUidForRemove) - { - Remote.messagesDelete( - this.moveOrDeleteResponseHelper, - sFromFolderFullNameRaw, - aUidForRemove - ); - }; - - RainLoopApp.prototype.moveOrDeleteResponseHelper = function (sResult, oData) - { - if (Enums.StorageResultType.Success === sResult && Data.currentFolder()) - { - if (oData && Utils.isArray(oData.Result) && 2 === oData.Result.length) - { - Cache.setFolderHash(oData.Result[0], oData.Result[1]); - } - else - { - Cache.setFolderHash(Data.currentFolderFullNameRaw(), ''); - - if (oData && -1 < Utils.inArray(oData.ErrorCode, - [Enums.Notification.CantMoveMessage, Enums.Notification.CantCopyMessage])) - { - window.alert(Utils.getNotification(oData.ErrorCode)); - } - } - - this.reloadMessageListHelper(0 === Data.messageList().length); - this.quotaDebounce(); - } - }; - - /** - * @param {string} sFromFolderFullNameRaw - * @param {Array} aUidForRemove - */ - RainLoopApp.prototype.deleteMessagesFromFolderWithoutCheck = function (sFromFolderFullNameRaw, aUidForRemove) - { - this.messagesDeleteHelper(sFromFolderFullNameRaw, aUidForRemove); - Data.removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove); - }; - - /** - * @param {number} iDeleteType - * @param {string} sFromFolderFullNameRaw - * @param {Array} aUidForRemove - * @param {boolean=} bUseFolder = true - */ - RainLoopApp.prototype.deleteMessagesFromFolder = function (iDeleteType, sFromFolderFullNameRaw, aUidForRemove, bUseFolder) - { - var - self = this, - oMoveFolder = null, - nSetSystemFoldersNotification = null - ; - - switch (iDeleteType) - { - case Enums.FolderType.Spam: - oMoveFolder = Cache.getFolderFromCacheList(Data.spamFolder()); - nSetSystemFoldersNotification = Enums.SetSystemFoldersNotification.Spam; - break; - case Enums.FolderType.NotSpam: - oMoveFolder = Cache.getFolderFromCacheList('INBOX'); - break; - case Enums.FolderType.Trash: - oMoveFolder = Cache.getFolderFromCacheList(Data.trashFolder()); - nSetSystemFoldersNotification = Enums.SetSystemFoldersNotification.Trash; - break; - case Enums.FolderType.Archive: - oMoveFolder = Cache.getFolderFromCacheList(Data.archiveFolder()); - nSetSystemFoldersNotification = Enums.SetSystemFoldersNotification.Archive; - break; - } - - bUseFolder = Utils.isUnd(bUseFolder) ? true : !!bUseFolder; - if (bUseFolder) - { - if ((Enums.FolderType.Spam === iDeleteType && Consts.Values.UnuseOptionValue === Data.spamFolder()) || - (Enums.FolderType.Trash === iDeleteType && Consts.Values.UnuseOptionValue === Data.trashFolder()) || - (Enums.FolderType.Archive === iDeleteType && Consts.Values.UnuseOptionValue === Data.archiveFolder())) - { - bUseFolder = false; - } - } - - if (!oMoveFolder && bUseFolder) - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:FolderSystem */ 27), [nSetSystemFoldersNotification]); - } - else if (!bUseFolder || (Enums.FolderType.Trash === iDeleteType && - (sFromFolderFullNameRaw === Data.spamFolder() || sFromFolderFullNameRaw === Data.trashFolder()))) - { - kn.showScreenPopup(__webpack_require__(/*! View:Popup:Ask */ 31), [Utils.i18n('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'), function () { - - self.messagesDeleteHelper(sFromFolderFullNameRaw, aUidForRemove); - Data.removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove); - - }]); - } - else if (oMoveFolder) - { - this.messagesMoveHelper(sFromFolderFullNameRaw, oMoveFolder.fullNameRaw, aUidForRemove); - Data.removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove, oMoveFolder.fullNameRaw); - } - }; - - /** - * @param {string} sFromFolderFullNameRaw - * @param {Array} aUidForMove - * @param {string} sToFolderFullNameRaw - * @param {boolean=} bCopy = false - */ - RainLoopApp.prototype.moveMessagesToFolder = function (sFromFolderFullNameRaw, aUidForMove, sToFolderFullNameRaw, bCopy) - { - if (sFromFolderFullNameRaw !== sToFolderFullNameRaw && Utils.isArray(aUidForMove) && 0 < aUidForMove.length) - { - var - oFromFolder = Cache.getFolderFromCacheList(sFromFolderFullNameRaw), - oToFolder = Cache.getFolderFromCacheList(sToFolderFullNameRaw) - ; - - if (oFromFolder && oToFolder) - { - if (Utils.isUnd(bCopy) ? false : !!bCopy) - { - this.messagesCopyHelper(oFromFolder.fullNameRaw, oToFolder.fullNameRaw, aUidForMove); - } - else - { - this.messagesMoveHelper(oFromFolder.fullNameRaw, oToFolder.fullNameRaw, aUidForMove); - } - - Data.removeMessagesFromList(oFromFolder.fullNameRaw, aUidForMove, oToFolder.fullNameRaw, bCopy); - return true; - } - } - - return false; - }; - - /** - * @param {Function=} fCallback - */ - RainLoopApp.prototype.folders = function (fCallback) - { - Data.foldersLoading(true); - Remote.folders(_.bind(function (sResult, oData) { - - Data.foldersLoading(false); - if (Enums.StorageResultType.Success === sResult) - { - this.setFolders(oData); - if (fCallback) - { - fCallback(true); - } - } - else - { - if (fCallback) - { - fCallback(false); - } - } - }, this)); - }; - - RainLoopApp.prototype.reloadOpenPgpKeys = function () - { - if (Data.capaOpenPGP()) - { - var - aKeys = [], - oEmail = new EmailModel(), - oOpenpgpKeyring = Data.openpgpKeyring, - oOpenpgpKeys = oOpenpgpKeyring ? oOpenpgpKeyring.getAllKeys() : [] - ; - - _.each(oOpenpgpKeys, function (oItem, iIndex) { - if (oItem && oItem.primaryKey) - { - var - - oPrimaryUser = oItem.getPrimaryUser(), - sUser = (oPrimaryUser && oPrimaryUser.user) ? oPrimaryUser.user.userId.userid - : (oItem.users && oItem.users[0] ? oItem.users[0].userId.userid : '') - ; - - oEmail.clear(); - oEmail.mailsoParse(sUser); - - if (oEmail.validate()) - { - aKeys.push(new OpenPgpKeyModel( - iIndex, - oItem.primaryKey.getFingerprint(), - oItem.primaryKey.getKeyId().toHex().toLowerCase(), - sUser, - oEmail.email, - oItem.isPrivate(), - oItem.armor()) - ); - } - } - }); - - Data.openpgpkeys(aKeys); - } - }; - - RainLoopApp.prototype.accountsAndIdentities = function () - { - Data.accountsLoading(true); - Data.identitiesLoading(true); - - Remote.accountsAndIdentities(function (sResult, oData) { - - Data.accountsLoading(false); - Data.identitiesLoading(false); - - if (Enums.StorageResultType.Success === sResult && oData.Result) - { - var - sParentEmail = Settings.settingsGet('ParentEmail'), - sAccountEmail = Data.accountEmail() - ; - - sParentEmail = '' === sParentEmail ? sAccountEmail : sParentEmail; - - if (Utils.isArray(oData.Result['Accounts'])) - { - Data.accounts(_.map(oData.Result['Accounts'], function (sValue) { - return new AccountModel(sValue, sValue !== sParentEmail); - })); - } - - if (Utils.isArray(oData.Result['Identities'])) - { - Data.identities(_.map(oData.Result['Identities'], function (oIdentityData) { - - var - sId = Utils.pString(oIdentityData['Id']), - sEmail = Utils.pString(oIdentityData['Email']), - oIdentity = new IdentityModel(sId, sEmail, sId !== sAccountEmail) - ; - - oIdentity.name(Utils.pString(oIdentityData['Name'])); - oIdentity.replyTo(Utils.pString(oIdentityData['ReplyTo'])); - oIdentity.bcc(Utils.pString(oIdentityData['Bcc'])); - - return oIdentity; - })); - } - } - }); - }; - - RainLoopApp.prototype.quota = function () - { - Remote.quota(function (sResult, oData) { - if (Enums.StorageResultType.Success === sResult && oData && oData.Result && - Utils.isArray(oData.Result) && 1 < oData.Result.length && - Utils.isPosNumeric(oData.Result[0], true) && Utils.isPosNumeric(oData.Result[1], true)) - { - Data.userQuota(Utils.pInt(oData.Result[1]) * 1024); - Data.userUsageSize(Utils.pInt(oData.Result[0]) * 1024); - } - }); - }; - - /** - * @param {string} sFolder - * @param {Array=} aList = [] - */ - RainLoopApp.prototype.folderInformation = function (sFolder, aList) - { - if ('' !== Utils.trim(sFolder)) - { - var self = this; - Remote.folderInformation(function (sResult, oData) { - if (Enums.StorageResultType.Success === sResult) - { - if (oData && oData.Result && oData.Result.Hash && oData.Result.Folder) - { - var - iUtc = moment().unix(), - sHash = Cache.getFolderHash(oData.Result.Folder), - oFolder = Cache.getFolderFromCacheList(oData.Result.Folder), - bCheck = false, - sUid = '', - aList = [], - bUnreadCountChange = false, - oFlags = null - ; - - if (oFolder) - { - oFolder.interval = iUtc; - - if (oData.Result.Hash) - { - Cache.setFolderHash(oData.Result.Folder, oData.Result.Hash); - } - - if (Utils.isNormal(oData.Result.MessageCount)) - { - oFolder.messageCountAll(oData.Result.MessageCount); - } - - if (Utils.isNormal(oData.Result.MessageUnseenCount)) - { - if (Utils.pInt(oFolder.messageCountUnread()) !== Utils.pInt(oData.Result.MessageUnseenCount)) - { - bUnreadCountChange = true; - } - - oFolder.messageCountUnread(oData.Result.MessageUnseenCount); - } - - if (bUnreadCountChange) - { - Cache.clearMessageFlagsFromCacheByFolder(oFolder.fullNameRaw); - } - - if (oData.Result.Flags) - { - for (sUid in oData.Result.Flags) - { - if (oData.Result.Flags.hasOwnProperty(sUid)) - { - bCheck = true; - oFlags = oData.Result.Flags[sUid]; - Cache.storeMessageFlagsToCacheByFolderAndUid(oFolder.fullNameRaw, sUid.toString(), [ - !oFlags['IsSeen'], !!oFlags['IsFlagged'], !!oFlags['IsAnswered'], !!oFlags['IsForwarded'], !!oFlags['IsReadReceipt'] - ]); - } - } - - if (bCheck) - { - self.reloadFlagsCurrentMessageListAndMessageFromCache(); - } - } - - Data.initUidNextAndNewMessages(oFolder.fullNameRaw, oData.Result.UidNext, oData.Result.NewMessages); - - if (oData.Result.Hash !== sHash || '' === sHash) - { - if (oFolder.fullNameRaw === Data.currentFolderFullNameRaw()) - { - self.reloadMessageList(); - } - else if ('INBOX' === oFolder.fullNameRaw) - { - self.recacheInboxMessageList(); - } - } - else if (bUnreadCountChange) - { - if (oFolder.fullNameRaw === Data.currentFolderFullNameRaw()) - { - aList = Data.messageList(); - if (Utils.isNonEmptyArray(aList)) - { - self.folderInformation(oFolder.fullNameRaw, aList); - } - } - } - } - } - } - }, sFolder, aList); - } - }; - - /** - * @param {boolean=} bBoot = false - */ - RainLoopApp.prototype.folderInformationMultiply = function (bBoot) - { - bBoot = Utils.isUnd(bBoot) ? false : !!bBoot; - - var - self = this, - iUtc = moment().unix(), - aFolders = Data.getNextFolderNames(bBoot) - ; - - if (Utils.isNonEmptyArray(aFolders)) - { - Remote.folderInformationMultiply(function (sResult, oData) { - if (Enums.StorageResultType.Success === sResult) - { - if (oData && oData.Result && oData.Result.List && Utils.isNonEmptyArray(oData.Result.List)) - { - _.each(oData.Result.List, function (oItem) { - - var - aList = [], - sHash = Cache.getFolderHash(oItem.Folder), - oFolder = Cache.getFolderFromCacheList(oItem.Folder), - bUnreadCountChange = false - ; - - if (oFolder) - { - oFolder.interval = iUtc; - - if (oItem.Hash) - { - Cache.setFolderHash(oItem.Folder, oItem.Hash); - } - - if (Utils.isNormal(oItem.MessageCount)) - { - oFolder.messageCountAll(oItem.MessageCount); - } - - if (Utils.isNormal(oItem.MessageUnseenCount)) - { - if (Utils.pInt(oFolder.messageCountUnread()) !== Utils.pInt(oItem.MessageUnseenCount)) - { - bUnreadCountChange = true; - } - - oFolder.messageCountUnread(oItem.MessageUnseenCount); - } - - if (bUnreadCountChange) - { - Cache.clearMessageFlagsFromCacheByFolder(oFolder.fullNameRaw); - } - - if (oItem.Hash !== sHash || '' === sHash) - { - if (oFolder.fullNameRaw === Data.currentFolderFullNameRaw()) - { - self.reloadMessageList(); - } - } - else if (bUnreadCountChange) - { - if (oFolder.fullNameRaw === Data.currentFolderFullNameRaw()) - { - aList = Data.messageList(); - if (Utils.isNonEmptyArray(aList)) - { - self.folderInformation(oFolder.fullNameRaw, aList); - } - } - } - } - }); - - if (bBoot) - { - self.folderInformationMultiply(true); - } - } - } - }, aFolders); - } - }; - - RainLoopApp.prototype.setMessageSeen = function (oMessage) - { - if (oMessage.unseen()) - { - oMessage.unseen(false); - - var oFolder = Cache.getFolderFromCacheList(oMessage.folderFullNameRaw); - if (oFolder) - { - oFolder.messageCountUnread(0 <= oFolder.messageCountUnread() - 1 ? - oFolder.messageCountUnread() - 1 : 0); - } - - Cache.storeMessageFlagsToCache(oMessage); - this.reloadFlagsCurrentMessageListAndMessageFromCache(); - } - - Remote.messageSetSeen(Utils.emptyFunction, oMessage.folderFullNameRaw, [oMessage.uid], true); - }; - - RainLoopApp.prototype.googleConnect = function () - { - window.open(LinkBuilder.socialGoogle(), 'Google', 'left=200,top=100,width=650,height=600,menubar=no,status=no,resizable=yes,scrollbars=yes'); - }; - - RainLoopApp.prototype.twitterConnect = function () - { - window.open(LinkBuilder.socialTwitter(), 'Twitter', 'left=200,top=100,width=650,height=350,menubar=no,status=no,resizable=yes,scrollbars=yes'); - }; - - RainLoopApp.prototype.facebookConnect = function () - { - window.open(LinkBuilder.socialFacebook(), 'Facebook', 'left=200,top=100,width=650,height=335,menubar=no,status=no,resizable=yes,scrollbars=yes'); - }; - - /** - * @param {boolean=} bFireAllActions - */ - RainLoopApp.prototype.socialUsers = function (bFireAllActions) - { - if (bFireAllActions) - { - Data.googleActions(true); - Data.facebookActions(true); - Data.twitterActions(true); - } - - Remote.socialUsers(function (sResult, oData) { - - if (Enums.StorageResultType.Success === sResult && oData && oData.Result) - { - Data.googleUserName(oData.Result['Google'] || ''); - Data.facebookUserName(oData.Result['Facebook'] || ''); - Data.twitterUserName(oData.Result['Twitter'] || ''); - } - else - { - Data.googleUserName(''); - Data.facebookUserName(''); - Data.twitterUserName(''); - } - - Data.googleLoggined('' !== Data.googleUserName()); - Data.facebookLoggined('' !== Data.facebookUserName()); - Data.twitterLoggined('' !== Data.twitterUserName()); - - Data.googleActions(false); - Data.facebookActions(false); - Data.twitterActions(false); - }); - }; - - RainLoopApp.prototype.googleDisconnect = function () - { - Data.googleActions(true); - Remote.googleDisconnect(this.socialUsers); - }; - - RainLoopApp.prototype.facebookDisconnect = function () - { - Data.facebookActions(true); - Remote.facebookDisconnect(this.socialUsers); - }; - - RainLoopApp.prototype.twitterDisconnect = function () - { - Data.twitterActions(true); - Remote.twitterDisconnect(this.socialUsers); - }; - - /** - * @param {string} sQuery - * @param {Function} fCallback - */ - RainLoopApp.prototype.getAutocomplete = function (sQuery, fCallback) - { - var - aData = [] - ; - - Remote.suggestions(function (sResult, oData) { - if (Enums.StorageResultType.Success === sResult && oData && Utils.isArray(oData.Result)) - { - aData = _.map(oData.Result, function (aItem) { - return aItem && aItem[0] ? new EmailModel(aItem[0], aItem[1]) : null; - }); - - fCallback(_.compact(aData)); - } - else if (Enums.StorageResultType.Abort !== sResult) - { - fCallback([]); - } - - }, sQuery); - }; - - /** - * @param {string} sQuery - * @param {Function} fCallback - */ - RainLoopApp.prototype.getContactTagsAutocomplete = function (sQuery, fCallback) - { - fCallback(_.filter(Data.contactTags(), function (oContactTag) { - return oContactTag && oContactTag.filterHelper(sQuery); - })); - }; - - RainLoopApp.prototype.setMessageList = function (oData, bCached) - { - if (oData && oData.Result && 'Collection/MessageCollection' === oData.Result['@Object'] && - oData.Result['@Collection'] && Utils.isArray(oData.Result['@Collection'])) - { - var - mLastCollapsedThreadUids = null, - iIndex = 0, - iLen = 0, - iCount = 0, - iOffset = 0, - aList = [], - iUtc = moment().unix(), - aStaticList = Data.staticMessageList, - oJsonMessage = null, - oMessage = null, - oFolder = null, - iNewCount = 0, - bUnreadCountChange = false - ; - - iCount = Utils.pInt(oData.Result.MessageResultCount); - iOffset = Utils.pInt(oData.Result.Offset); - - if (Utils.isNonEmptyArray(oData.Result.LastCollapsedThreadUids)) - { - mLastCollapsedThreadUids = oData.Result.LastCollapsedThreadUids; - } - - oFolder = Cache.getFolderFromCacheList( - Utils.isNormal(oData.Result.Folder) ? oData.Result.Folder : ''); - - if (oFolder && !bCached) - { - oFolder.interval = iUtc; - - Cache.setFolderHash(oData.Result.Folder, oData.Result.FolderHash); - - if (Utils.isNormal(oData.Result.MessageCount)) - { - oFolder.messageCountAll(oData.Result.MessageCount); - } - - if (Utils.isNormal(oData.Result.MessageUnseenCount)) - { - if (Utils.pInt(oFolder.messageCountUnread()) !== Utils.pInt(oData.Result.MessageUnseenCount)) - { - bUnreadCountChange = true; - } - - oFolder.messageCountUnread(oData.Result.MessageUnseenCount); - } - - Data.initUidNextAndNewMessages(oFolder.fullNameRaw, oData.Result.UidNext, oData.Result.NewMessages); - } - - if (bUnreadCountChange && oFolder) - { - Cache.clearMessageFlagsFromCacheByFolder(oFolder.fullNameRaw); - } - - for (iIndex = 0, iLen = oData.Result['@Collection'].length; iIndex < iLen; iIndex++) - { - oJsonMessage = oData.Result['@Collection'][iIndex]; - if (oJsonMessage && 'Object/Message' === oJsonMessage['@Object']) - { - oMessage = aStaticList[iIndex]; - if (!oMessage || !oMessage.initByJson(oJsonMessage)) - { - oMessage = MessageModel.newInstanceFromJson(oJsonMessage); - } - - if (oMessage) - { - if (Cache.hasNewMessageAndRemoveFromCache(oMessage.folderFullNameRaw, oMessage.uid) && 5 >= iNewCount) - { - iNewCount++; - oMessage.newForAnimation(true); - } - - oMessage.deleted(false); - - if (bCached) - { - Cache.initMessageFlagsFromCache(oMessage); - } - else - { - Cache.storeMessageFlagsToCache(oMessage); - } - - oMessage.lastInCollapsedThread(mLastCollapsedThreadUids && -1 < Utils.inArray(Utils.pInt(oMessage.uid), mLastCollapsedThreadUids) ? true : false); - - aList.push(oMessage); - } - } - } - - Data.messageListCount(iCount); - Data.messageListSearch(Utils.isNormal(oData.Result.Search) ? oData.Result.Search : ''); - Data.messageListPage(window.Math.ceil((iOffset / Data.messagesPerPage()) + 1)); - Data.messageListEndFolder(Utils.isNormal(oData.Result.Folder) ? oData.Result.Folder : ''); - Data.messageListEndSearch(Utils.isNormal(oData.Result.Search) ? oData.Result.Search : ''); - Data.messageListEndPage(Data.messageListPage()); - - Data.messageList(aList); - Data.messageListIsNotCompleted(false); - - if (aStaticList.length < aList.length) - { - Data.staticMessageList = aList; - } - - Cache.clearNewMessageCache(); - - if (oFolder && (bCached || bUnreadCountChange || Data.useThreads())) - { - this.folderInformation(oFolder.fullNameRaw, aList); - } - } - else - { - Data.messageListCount(0); - Data.messageList([]); - Data.messageListError(Utils.getNotification( - oData && oData.ErrorCode ? oData.ErrorCode : Enums.Notification.CantGetMessageList - )); - } - }; - - /** - * @param {string} sNamespace - * @param {Array} aFolders - * @return {Array} - */ - RainLoopApp.prototype.folderResponseParseRec = function (sNamespace, aFolders) - { - var - self = this, - iIndex = 0, - iLen = 0, - oFolder = null, - oCacheFolder = null, - sFolderFullNameRaw = '', - aSubFolders = [], - aList = [] - ; - - for (iIndex = 0, iLen = aFolders.length; iIndex < iLen; iIndex++) - { - oFolder = aFolders[iIndex]; - if (oFolder) - { - sFolderFullNameRaw = oFolder.FullNameRaw; - - oCacheFolder = Cache.getFolderFromCacheList(sFolderFullNameRaw); - if (!oCacheFolder) - { - oCacheFolder = FolderModel.newInstanceFromJson(oFolder); - if (oCacheFolder) - { - Cache.setFolderToCacheList(sFolderFullNameRaw, oCacheFolder); - Cache.setFolderFullNameRaw(oCacheFolder.fullNameHash, sFolderFullNameRaw); - } - } - - if (oCacheFolder) - { - oCacheFolder.collapsed(!self.isFolderExpanded(oCacheFolder.fullNameHash)); - - if (oFolder.Extended) - { - if (oFolder.Extended.Hash) - { - Cache.setFolderHash(oCacheFolder.fullNameRaw, oFolder.Extended.Hash); - } - - if (Utils.isNormal(oFolder.Extended.MessageCount)) - { - oCacheFolder.messageCountAll(oFolder.Extended.MessageCount); - } - - if (Utils.isNormal(oFolder.Extended.MessageUnseenCount)) - { - oCacheFolder.messageCountUnread(oFolder.Extended.MessageUnseenCount); - } - } - - aSubFolders = oFolder['SubFolders']; - if (aSubFolders && 'Collection/FolderCollection' === aSubFolders['@Object'] && - aSubFolders['@Collection'] && Utils.isArray(aSubFolders['@Collection'])) - { - oCacheFolder.subFolders( - this.folderResponseParseRec(sNamespace, aSubFolders['@Collection'])); - } - - aList.push(oCacheFolder); - } - } - } - - return aList; - }; - - /** - * @param {*} oData - */ - RainLoopApp.prototype.setFolders = function (oData) - { - var - aList = [], - bUpdate = false, - fNormalizeFolder = function (sFolderFullNameRaw) { - return ('' === sFolderFullNameRaw || Consts.Values.UnuseOptionValue === sFolderFullNameRaw || - null !== Cache.getFolderFromCacheList(sFolderFullNameRaw)) ? sFolderFullNameRaw : ''; - } - ; - - if (oData && oData.Result && 'Collection/FolderCollection' === oData.Result['@Object'] && - oData.Result['@Collection'] && Utils.isArray(oData.Result['@Collection'])) - { - if (!Utils.isUnd(oData.Result.Namespace)) - { - Data.namespace = oData.Result.Namespace; - } - - Data.threading(!!Settings.settingsGet('UseImapThread') && oData.Result.IsThreadsSupported && true); - - aList = this.folderResponseParseRec(Data.namespace, oData.Result['@Collection']); - Data.folderList(aList); - - if (oData.Result['SystemFolders'] && - '' === '' + Settings.settingsGet('SentFolder') + Settings.settingsGet('DraftFolder') + - Settings.settingsGet('SpamFolder') + Settings.settingsGet('TrashFolder') + Settings.settingsGet('ArchiveFolder') + - Settings.settingsGet('NullFolder')) - { - // TODO Magic Numbers - Settings.settingsSet('SentFolder', oData.Result['SystemFolders'][2] || null); - Settings.settingsSet('DraftFolder', oData.Result['SystemFolders'][3] || null); - Settings.settingsSet('SpamFolder', oData.Result['SystemFolders'][4] || null); - Settings.settingsSet('TrashFolder', oData.Result['SystemFolders'][5] || null); - Settings.settingsSet('ArchiveFolder', oData.Result['SystemFolders'][12] || null); - - bUpdate = true; - } - - Data.sentFolder(fNormalizeFolder(Settings.settingsGet('SentFolder'))); - Data.draftFolder(fNormalizeFolder(Settings.settingsGet('DraftFolder'))); - Data.spamFolder(fNormalizeFolder(Settings.settingsGet('SpamFolder'))); - Data.trashFolder(fNormalizeFolder(Settings.settingsGet('TrashFolder'))); - Data.archiveFolder(fNormalizeFolder(Settings.settingsGet('ArchiveFolder'))); - - if (bUpdate) - { - Remote.saveSystemFolders(Utils.emptyFunction, { - 'SentFolder': Data.sentFolder(), - 'DraftFolder': Data.draftFolder(), - 'SpamFolder': Data.spamFolder(), - 'TrashFolder': Data.trashFolder(), - 'ArchiveFolder': Data.archiveFolder(), - 'NullFolder': 'NullFolder' - }); - } - - Local.set(Enums.ClientSideKeyName.FoldersLashHash, oData.Result.FoldersHash); - } - }; - - /** - * @param {string} sFullNameHash - * @return {boolean} - */ - RainLoopApp.prototype.isFolderExpanded = function (sFullNameHash) - { - var aExpandedList = Local.get(Enums.ClientSideKeyName.ExpandedFolders); - return Utils.isArray(aExpandedList) && -1 !== _.indexOf(aExpandedList, sFullNameHash); - }; - - /** - * @param {string} sFullNameHash - * @param {boolean} bExpanded - */ - RainLoopApp.prototype.setExpandedFolder = function (sFullNameHash, bExpanded) - { - var aExpandedList = Local.get(Enums.ClientSideKeyName.ExpandedFolders); - if (!Utils.isArray(aExpandedList)) - { - aExpandedList = []; - } - - if (bExpanded) - { - aExpandedList.push(sFullNameHash); - aExpandedList = _.uniq(aExpandedList); - } - else - { - aExpandedList = _.without(aExpandedList, sFullNameHash); - } - - Local.set(Enums.ClientSideKeyName.ExpandedFolders, aExpandedList); - }; - - RainLoopApp.prototype.initLayoutResizer = function (sLeft, sRight, sClientSideKeyName) - { - var - iDisabledWidth = 60, - iMinWidth = 155, - oLeft = $(sLeft), - oRight = $(sRight), - - mLeftWidth = Local.get(sClientSideKeyName) || null, - - fSetWidth = function (iWidth) { - if (iWidth) - { - oLeft.css({ - 'width': '' + iWidth + 'px' - }); - - oRight.css({ - 'left': '' + iWidth + 'px' - }); - } - }, - - fDisable = function (bDisable) { - if (bDisable) - { - oLeft.resizable('disable'); - fSetWidth(iDisabledWidth); - } - else - { - oLeft.resizable('enable'); - var iWidth = Utils.pInt(Local.get(sClientSideKeyName)) || iMinWidth; - fSetWidth(iWidth > iMinWidth ? iWidth : iMinWidth); - } - }, - - fResizeFunction = function (oEvent, oObject) { - if (oObject && oObject.size && oObject.size.width) - { - Local.set(sClientSideKeyName, oObject.size.width); - - oRight.css({ - 'left': '' + oObject.size.width + 'px' - }); - } - } - ; - - if (null !== mLeftWidth) - { - fSetWidth(mLeftWidth > iMinWidth ? mLeftWidth : iMinWidth); - } - - oLeft.resizable({ - 'helper': 'ui-resizable-helper', - 'minWidth': iMinWidth, - 'maxWidth': 350, - 'handles': 'e', - 'stop': fResizeFunction - }); - - Events.sub('left-panel.off', function () { - fDisable(true); - }); - - Events.sub('left-panel.on', function () { - fDisable(false); - }); - }; - - RainLoopApp.prototype.bootstartLoginScreen = function () - { - var sCustomLoginLink = Utils.pString(Settings.settingsGet('CustomLoginLink')); - if (!sCustomLoginLink) - { - kn.hideLoading(); - - kn.startScreens([ - __webpack_require__(/*! Screen:RainLoop:Login */ 64) - ]); - - Plugins.runHook('rl-start-login-screens'); - Events.pub('rl.bootstart-login-screens'); - } - else - { - kn.routeOff(); - kn.setHash(LinkBuilder.root(), true); - kn.routeOff(); - - _.defer(function () { - window.location.href = sCustomLoginLink; - }); - } - }; - - RainLoopApp.prototype.bootstart = function () - { - AbstractApp.prototype.bootstart.call(this); - - Data.populateDataOnStart(); - - var - self = this, - sJsHash = Settings.settingsGet('JsHash'), - iContactsSyncInterval = Utils.pInt(Settings.settingsGet('ContactsSyncInterval')), - bGoogle = Settings.settingsGet('AllowGoogleSocial'), - bFacebook = Settings.settingsGet('AllowFacebookSocial'), - bTwitter = Settings.settingsGet('AllowTwitterSocial') - ; - - Utils.initOnStartOrLangChange(function () { - - $.extend(true, $.magnificPopup.defaults, { - 'tClose': Utils.i18n('MAGNIFIC_POPUP/CLOSE'), - 'tLoading': Utils.i18n('MAGNIFIC_POPUP/LOADING'), - 'gallery': { - 'tPrev': Utils.i18n('MAGNIFIC_POPUP/GALLERY_PREV'), - 'tNext': Utils.i18n('MAGNIFIC_POPUP/GALLERY_NEXT'), - 'tCounter': Utils.i18n('MAGNIFIC_POPUP/GALLERY_COUNTER') - }, - 'image': { - 'tError': Utils.i18n('MAGNIFIC_POPUP/IMAGE_ERROR') - }, - 'ajax': { - 'tError': Utils.i18n('MAGNIFIC_POPUP/AJAX_ERROR') - } - }); - - }, this); - - if (window.SimplePace) - { - window.SimplePace.set(70); - window.SimplePace.sleep(); - } - - Globals.leftPanelDisabled.subscribe(function (bValue) { - Events.pub('left-panel.' + (bValue ? 'off' : 'on')); - }); - - if (!!Settings.settingsGet('Auth')) - { - this.setTitle(Utils.i18n('TITLES/LOADING')); - - this.folders(_.bind(function (bValue) { - - if (bValue) - { - __webpack_require__.e/*nsure*/(0, function () { - - kn.hideLoading(); - - if (window.$LAB && window.crypto && window.crypto.getRandomValues && Settings.capa(Enums.Capa.OpenPGP)) - { - window.$LAB.script(window.openpgp ? '' : LinkBuilder.openPgpJs()).wait(function () { - if (window.openpgp) - { - Data.openpgpKeyring = new window.openpgp.Keyring(); - Data.capaOpenPGP(true); - - Events.pub('openpgp.init'); - - self.reloadOpenPgpKeys(); - } - }); - } - else - { - Data.capaOpenPGP(false); - } - - kn.startScreens([ - __webpack_require__(/*! Screen:RainLoop:MailBox */ 65), - __webpack_require__(/*! Screen:RainLoop:Settings */ 66), - __webpack_require__(/*! Screen:RainLoop:About */ 61) - ]); - - if (bGoogle || bFacebook || bTwitter) - { - self.socialUsers(true); - } - - Events.sub('interval.2m', function () { - self.folderInformation('INBOX'); - }); - - Events.sub('interval.2m', function () { - var sF = Data.currentFolderFullNameRaw(); - if ('INBOX' !== sF) - { - self.folderInformation(sF); - } - }); - - Events.sub('interval.3m', function () { - self.folderInformationMultiply(); - }); - - Events.sub('interval.5m', function () { - self.quota(); - }); - - Events.sub('interval.10m', function () { - self.folders(); - }); - - iContactsSyncInterval = 5 <= iContactsSyncInterval ? iContactsSyncInterval : 20; - iContactsSyncInterval = 320 >= iContactsSyncInterval ? iContactsSyncInterval : 320; - - window.setInterval(function () { - self.contactsSync(); - }, iContactsSyncInterval * 60000 + 5000); - - _.delay(function () { - self.contactsSync(); - }, 5000); - - _.delay(function () { - self.folderInformationMultiply(true); - }, 500); - - Plugins.runHook('rl-start-user-screens'); - Events.pub('rl.bootstart-user-screens'); - - if (!!Settings.settingsGet('AccountSignMe') && window.navigator.registerProtocolHandler) - { - _.delay(function () { - try { - window.navigator.registerProtocolHandler('mailto', - window.location.protocol + '//' + window.location.host + window.location.pathname + '?mailto&to=%s', - '' + (Settings.settingsGet('Title') || 'RainLoop')); - } catch(e) {} - - if (Settings.settingsGet('MailToEmail')) - { - Utils.mailToHelper(Settings.settingsGet('MailToEmail'), __webpack_require__(/*! View:Popup:Compose */ 21)); - } - }, 500); - } - - if (!Globals.bMobileDevice) - { - _.defer(function () { - self.initLayoutResizer('#rl-left', '#rl-right', Enums.ClientSideKeyName.FolderListSize); - }); - } - }); - } - else - { - kn.hideLoading(); - - self.bootstartLoginScreen(); - } - - if (window.SimplePace) - { - window.SimplePace.set(100); - } - - }, this)); - } - else - { - this.bootstartLoginScreen(); - - if (window.SimplePace) - { - window.SimplePace.set(100); - } - } - - if (bGoogle) - { - window['rl_' + sJsHash + '_google_service'] = function () { - Data.googleActions(true); - self.socialUsers(); - }; - } - - if (bFacebook) - { - window['rl_' + sJsHash + '_facebook_service'] = function () { - Data.facebookActions(true); - self.socialUsers(); - }; - } - - if (bTwitter) - { - window['rl_' + sJsHash + '_twitter_service'] = function () { - Data.twitterActions(true); - self.socialUsers(); - }; - } - - Events.sub('interval.1m', function () { - Globals.momentTrigger(!Globals.momentTrigger()); - }); - - Plugins.runHook('rl-start-screens'); - Events.pub('rl.bootstart-end'); - }; - - module.exports = new RainLoopApp(); - - }()); - -/***/ }, - -/***/ 8: -/*!*************************************!*\ - !*** ./dev/Storages/DataStorage.js ***! - \*************************************/ -/***/ function(module, exports, __webpack_require__) { - - /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - moment = __webpack_require__(/*! moment */ 25), - - Consts = __webpack_require__(/*! Common/Consts */ 17), - Enums = __webpack_require__(/*! Common/Enums */ 6), - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - Cache = __webpack_require__(/*! Storage:RainLoop:Cache */ 20), - - kn = __webpack_require__(/*! App:Knoin */ 5), - - MessageModel = __webpack_require__(/*! Model:Message */ 38), - - LocalStorage = __webpack_require__(/*! Storage:LocalStorage */ 30), - AbstractData = __webpack_require__(/*! Storage:Abstract:Data */ 39) - ; - - /** - * @constructor - * @extends AbstractData - */ - function DataStorage() - { - AbstractData.call(this); - - var - fRemoveSystemFolderType = function (observable) { - return function () { - var oFolder = Cache.getFolderFromCacheList(observable()); - if (oFolder) - { - oFolder.type(Enums.FolderType.User); - } - }; - }, - fSetSystemFolderType = function (iType) { - return function (sValue) { - var oFolder = Cache.getFolderFromCacheList(sValue); - if (oFolder) - { - oFolder.type(iType); - } - }; - } - ; - - this.devEmail = ''; - this.devPassword = ''; - - this.accountEmail = ko.observable(''); - this.accountIncLogin = ko.observable(''); - this.accountOutLogin = ko.observable(''); - this.projectHash = ko.observable(''); - this.threading = ko.observable(false); - - this.lastFoldersHash = ''; - this.remoteSuggestions = false; - - // system folders - this.sentFolder = ko.observable(''); - this.draftFolder = ko.observable(''); - this.spamFolder = ko.observable(''); - this.trashFolder = ko.observable(''); - this.archiveFolder = ko.observable(''); - - this.sentFolder.subscribe(fRemoveSystemFolderType(this.sentFolder), this, 'beforeChange'); - this.draftFolder.subscribe(fRemoveSystemFolderType(this.draftFolder), this, 'beforeChange'); - this.spamFolder.subscribe(fRemoveSystemFolderType(this.spamFolder), this, 'beforeChange'); - this.trashFolder.subscribe(fRemoveSystemFolderType(this.trashFolder), this, 'beforeChange'); - this.archiveFolder.subscribe(fRemoveSystemFolderType(this.archiveFolder), this, 'beforeChange'); - - this.sentFolder.subscribe(fSetSystemFolderType(Enums.FolderType.SentItems), this); - this.draftFolder.subscribe(fSetSystemFolderType(Enums.FolderType.Draft), this); - this.spamFolder.subscribe(fSetSystemFolderType(Enums.FolderType.Spam), this); - this.trashFolder.subscribe(fSetSystemFolderType(Enums.FolderType.Trash), this); - this.archiveFolder.subscribe(fSetSystemFolderType(Enums.FolderType.Archive), this); - - this.draftFolderNotEnabled = ko.computed(function () { - return '' === this.draftFolder() || Consts.Values.UnuseOptionValue === this.draftFolder(); - }, this); - - // personal - this.displayName = ko.observable(''); - this.signature = ko.observable(''); - this.signatureToAll = ko.observable(false); - this.replyTo = ko.observable(''); - - // security - this.enableTwoFactor = ko.observable(false); - - // accounts - this.accounts = ko.observableArray([]); - this.accountsLoading = ko.observable(false).extend({'throttle': 100}); - - // identities - this.defaultIdentityID = ko.observable(''); - this.identities = ko.observableArray([]); - this.identitiesLoading = ko.observable(false).extend({'throttle': 100}); - - // contacts - this.contactTags = ko.observableArray([]); - this.contacts = ko.observableArray([]); - this.contacts.loading = ko.observable(false).extend({'throttle': 200}); - this.contacts.importing = ko.observable(false).extend({'throttle': 200}); - this.contacts.syncing = ko.observable(false).extend({'throttle': 200}); - this.contacts.exportingVcf = ko.observable(false).extend({'throttle': 200}); - this.contacts.exportingCsv = ko.observable(false).extend({'throttle': 200}); - - this.allowContactsSync = ko.observable(false); - this.enableContactsSync = ko.observable(false); - this.contactsSyncUrl = ko.observable(''); - this.contactsSyncUser = ko.observable(''); - this.contactsSyncPass = ko.observable(''); - - this.allowContactsSync = ko.observable(!!Settings.settingsGet('ContactsSyncIsAllowed')); - this.enableContactsSync = ko.observable(!!Settings.settingsGet('EnableContactsSync')); - this.contactsSyncUrl = ko.observable(Settings.settingsGet('ContactsSyncUrl')); - this.contactsSyncUser = ko.observable(Settings.settingsGet('ContactsSyncUser')); - this.contactsSyncPass = ko.observable(Settings.settingsGet('ContactsSyncPassword')); - - // folders - this.namespace = ''; - this.folderList = ko.observableArray([]); - this.folderList.focused = ko.observable(false); - - this.foldersListError = ko.observable(''); - - this.foldersLoading = ko.observable(false); - this.foldersCreating = ko.observable(false); - this.foldersDeleting = ko.observable(false); - this.foldersRenaming = ko.observable(false); - - this.foldersChanging = ko.computed(function () { - var - bLoading = this.foldersLoading(), - bCreating = this.foldersCreating(), - bDeleting = this.foldersDeleting(), - bRenaming = this.foldersRenaming() - ; - return bLoading || bCreating || bDeleting || bRenaming; - }, this); - - this.foldersInboxUnreadCount = ko.observable(0); - - this.currentFolder = ko.observable(null).extend({'toggleSubscribe': [null, - function (oPrev) { - if (oPrev) - { - oPrev.selected(false); - } - }, function (oNext) { - if (oNext) - { - oNext.selected(true); - } - } - ]}); - - this.currentFolderFullNameRaw = ko.computed(function () { - return this.currentFolder() ? this.currentFolder().fullNameRaw : ''; - }, this); - - this.currentFolderFullName = ko.computed(function () { - return this.currentFolder() ? this.currentFolder().fullName : ''; - }, this); - - this.currentFolderFullNameHash = ko.computed(function () { - return this.currentFolder() ? this.currentFolder().fullNameHash : ''; - }, this); - - this.currentFolderName = ko.computed(function () { - return this.currentFolder() ? this.currentFolder().name() : ''; - }, this); - - this.folderListSystemNames = ko.computed(function () { - - var - aList = ['INBOX'], - aFolders = this.folderList(), - sSentFolder = this.sentFolder(), - sDraftFolder = this.draftFolder(), - sSpamFolder = this.spamFolder(), - sTrashFolder = this.trashFolder(), - sArchiveFolder = this.archiveFolder() - ; - - if (Utils.isArray(aFolders) && 0 < aFolders.length) - { - if ('' !== sSentFolder && Consts.Values.UnuseOptionValue !== sSentFolder) - { - aList.push(sSentFolder); - } - if ('' !== sDraftFolder && Consts.Values.UnuseOptionValue !== sDraftFolder) - { - aList.push(sDraftFolder); - } - if ('' !== sSpamFolder && Consts.Values.UnuseOptionValue !== sSpamFolder) - { - aList.push(sSpamFolder); - } - if ('' !== sTrashFolder && Consts.Values.UnuseOptionValue !== sTrashFolder) - { - aList.push(sTrashFolder); - } - if ('' !== sArchiveFolder && Consts.Values.UnuseOptionValue !== sArchiveFolder) - { - aList.push(sArchiveFolder); - } - } - - return aList; - - }, this); - - this.folderListSystem = ko.computed(function () { - return _.compact(_.map(this.folderListSystemNames(), function (sName) { - return Cache.getFolderFromCacheList(sName); - })); - }, this); - - this.folderMenuForMove = ko.computed(function () { - return Utils.folderListOptionsBuilder(this.folderListSystem(), this.folderList(), [ - this.currentFolderFullNameRaw() - ], null, null, null, null, function (oItem) { - return oItem ? oItem.localName() : ''; - }); - }, this); - - // message list - this.staticMessageList = []; - - this.messageList = ko.observableArray([]).extend({'rateLimit': 0}); - - this.messageListCount = ko.observable(0); - this.messageListSearch = ko.observable(''); - this.messageListPage = ko.observable(1); - - this.messageListThreadFolder = ko.observable(''); - this.messageListThreadUids = ko.observableArray([]); - - this.messageListThreadFolder.subscribe(function () { - this.messageListThreadUids([]); - }, this); - - this.messageListEndFolder = ko.observable(''); - this.messageListEndSearch = ko.observable(''); - this.messageListEndPage = ko.observable(1); - - this.messageListEndHash = ko.computed(function () { - return this.messageListEndFolder() + '|' + this.messageListEndSearch() + '|' + this.messageListEndPage(); - }, this); - - this.messageListPageCount = ko.computed(function () { - var iPage = window.Math.ceil(this.messageListCount() / this.messagesPerPage()); - return 0 >= iPage ? 1 : iPage; - }, this); - - this.mainMessageListSearch = ko.computed({ - 'read': this.messageListSearch, - 'write': function (sValue) { - kn.setHash(LinkBuilder.mailBox( - this.currentFolderFullNameHash(), 1, Utils.trim(sValue.toString()) - )); - }, - 'owner': this - }); - - this.messageListError = ko.observable(''); - - this.messageListLoading = ko.observable(false); - this.messageListIsNotCompleted = ko.observable(false); - this.messageListCompleteLoadingThrottle = ko.observable(false).extend({'throttle': 200}); - - this.messageListCompleteLoading = ko.computed(function () { - var - bOne = this.messageListLoading(), - bTwo = this.messageListIsNotCompleted() - ; - return bOne || bTwo; - }, this); - - this.messageListCompleteLoading.subscribe(function (bValue) { - this.messageListCompleteLoadingThrottle(bValue); - }, this); - - this.messageList.subscribe(_.debounce(function (aList) { - _.each(aList, function (oItem) { - if (oItem.newForAnimation()) - { - oItem.newForAnimation(false); - } - }); - }, 500)); - - // message preview - this.staticMessageList = new MessageModel(); - this.message = ko.observable(null); - this.messageLoading = ko.observable(false); - this.messageLoadingThrottle = ko.observable(false).extend({'throttle': 50}); - - this.message.focused = ko.observable(false); - - this.message.subscribe(function (oMessage) { - if (!oMessage) - { - this.message.focused(false); - this.messageFullScreenMode(false); - this.hideMessageBodies(); - - if (Enums.Layout.NoPreview === this.layout() && - -1 < window.location.hash.indexOf('message-preview')) - { - if (Globals.__APP) - { - Globals.__APP.historyBack(); - } - } - } - else if (Enums.Layout.NoPreview === this.layout()) - { - this.message.focused(true); - } - }, this); - - this.message.focused.subscribe(function (bValue) { - if (bValue) - { - this.folderList.focused(false); - Globals.keyScope(Enums.KeyState.MessageView); - } - else if (Enums.KeyState.MessageView === Globals.keyScope()) - { - if (Enums.Layout.NoPreview === this.layout() && this.message()) - { - Globals.keyScope(Enums.KeyState.MessageView); - } - else - { - Globals.keyScope(Enums.KeyState.MessageList); - } - } - }, this); - - this.folderList.focused.subscribe(function (bValue) { - if (bValue) - { - Globals.keyScope(Enums.KeyState.FolderList); - } - else if (Enums.KeyState.FolderList === Globals.keyScope()) - { - Globals.keyScope(Enums.KeyState.MessageList); - } - }); - - this.messageLoading.subscribe(function (bValue) { - this.messageLoadingThrottle(bValue); - }, this); - - this.messageFullScreenMode = ko.observable(false); - - this.messageError = ko.observable(''); - - this.messagesBodiesDom = ko.observable(null); - - this.messagesBodiesDom.subscribe(function (oDom) { - if (oDom && !(oDom instanceof $)) - { - this.messagesBodiesDom($(oDom)); - } - }, this); - - this.messageActiveDom = ko.observable(null); - - this.isMessageSelected = ko.computed(function () { - return null !== this.message(); - }, this); - - this.currentMessage = ko.observable(null); - - this.messageListChecked = ko.computed(function () { - return _.filter(this.messageList(), function (oItem) { - return oItem.checked(); - }); - }, this).extend({'rateLimit': 0}); - - this.hasCheckedMessages = ko.computed(function () { - return 0 < this.messageListChecked().length; - }, this).extend({'rateLimit': 0}); - - this.messageListCheckedOrSelected = ko.computed(function () { - - var - aChecked = this.messageListChecked(), - oSelectedMessage = this.currentMessage() - ; - - return _.union(aChecked, oSelectedMessage ? [oSelectedMessage] : []); - - }, this); - - this.messageListCheckedOrSelectedUidsWithSubMails = ko.computed(function () { - var aList = []; - _.each(this.messageListCheckedOrSelected(), function (oMessage) { - if (oMessage) - { - aList.push(oMessage.uid); - if (0 < oMessage.threadsLen() && 0 === oMessage.parentUid() && oMessage.lastInCollapsedThread()) - { - aList = _.union(aList, oMessage.threads()); - } - } - }); - return aList; - }, this); - - // quota - this.userQuota = ko.observable(0); - this.userUsageSize = ko.observable(0); - this.userUsageProc = ko.computed(function () { - - var - iQuota = this.userQuota(), - iUsed = this.userUsageSize() - ; - - return 0 < iQuota ? window.Math.ceil((iUsed / iQuota) * 100) : 0; - - }, this); - - // other - this.capaOpenPGP = ko.observable(false); - this.openpgpkeys = ko.observableArray([]); - this.openpgpKeyring = null; - - this.openpgpkeysPublic = this.openpgpkeys.filter(function (oItem) { - return !!(oItem && !oItem.isPrivate); - }); - - this.openpgpkeysPrivate = this.openpgpkeys.filter(function (oItem) { - return !!(oItem && oItem.isPrivate); - }); - - // google - this.googleActions = ko.observable(false); - this.googleLoggined = ko.observable(false); - this.googleUserName = ko.observable(''); - - // facebook - this.facebookActions = ko.observable(false); - this.facebookLoggined = ko.observable(false); - this.facebookUserName = ko.observable(''); - - // twitter - this.twitterActions = ko.observable(false); - this.twitterLoggined = ko.observable(false); - this.twitterUserName = ko.observable(''); - - this.customThemeType = ko.observable(Enums.CustomThemeType.Light); - - this.purgeMessageBodyCacheThrottle = _.throttle(this.purgeMessageBodyCache, 1000 * 30); - } - - _.extend(DataStorage.prototype, AbstractData.prototype); - - DataStorage.prototype.purgeMessageBodyCache = function() - { - var - iCount = 0, - oMessagesBodiesDom = null, - iEnd = Globals.iMessageBodyCacheCount - Consts.Values.MessageBodyCacheLimit - ; - - if (0 < iEnd) - { - oMessagesBodiesDom = this.messagesBodiesDom(); - if (oMessagesBodiesDom) - { - oMessagesBodiesDom.find('.rl-cache-class').each(function () { - var oItem = $(this); - if (iEnd > oItem.data('rl-cache-count')) - { - oItem.addClass('rl-cache-purge'); - iCount++; - } - }); - - if (0 < iCount) - { - _.delay(function () { - oMessagesBodiesDom.find('.rl-cache-purge').remove(); - }, 300); - } - } - } - }; - - DataStorage.prototype.populateDataOnStart = function() - { - AbstractData.prototype.populateDataOnStart.call(this); - - this.accountEmail(Settings.settingsGet('Email')); - this.accountIncLogin(Settings.settingsGet('IncLogin')); - this.accountOutLogin(Settings.settingsGet('OutLogin')); - this.projectHash(Settings.settingsGet('ProjectHash')); - - this.defaultIdentityID(Settings.settingsGet('DefaultIdentityID')); - - this.displayName(Settings.settingsGet('DisplayName')); - this.replyTo(Settings.settingsGet('ReplyTo')); - this.signature(Settings.settingsGet('Signature')); - this.signatureToAll(!!Settings.settingsGet('SignatureToAll')); - this.enableTwoFactor(!!Settings.settingsGet('EnableTwoFactor')); - - this.lastFoldersHash = LocalStorage.get(Enums.ClientSideKeyName.FoldersLashHash) || ''; - - this.remoteSuggestions = !!Settings.settingsGet('RemoteSuggestions'); - - this.devEmail = Settings.settingsGet('DevEmail'); - this.devPassword = Settings.settingsGet('DevPassword'); - }; - - DataStorage.prototype.initUidNextAndNewMessages = function (sFolder, sUidNext, aNewMessages) - { - if ('INBOX' === sFolder && Utils.isNormal(sUidNext) && sUidNext !== '') - { - if (Utils.isArray(aNewMessages) && 0 < aNewMessages.length) - { - var - self = this, - iIndex = 0, - iLen = aNewMessages.length, - fNotificationHelper = function (sImageSrc, sTitle, sText) - { - var - NotificationClass = Utils.notificationClass(), - oNotification = null - ; - - if (NotificationClass && self.useDesktopNotifications()) - { - oNotification = new NotificationClass(sTitle, { - 'body': sText, - 'icon': sImageSrc - }); - - if (oNotification) - { - if (oNotification.show) - { - oNotification.show(); - } - - window.setTimeout((function (oLocalNotifications) { - return function () { - if (oLocalNotifications.cancel) - { - oLocalNotifications.cancel(); - } - else if (oLocalNotifications.close) - { - oLocalNotifications.close(); - } - }; - }(oNotification)), 7000); - } - } - } - ; - - _.each(aNewMessages, function (oItem) { - Cache.addNewMessageCache(sFolder, oItem.Uid); - }); - - if (3 < iLen) - { - fNotificationHelper( - LinkBuilder.notificationMailIcon(), - this.accountEmail(), - Utils.i18n('MESSAGE_LIST/NEW_MESSAGE_NOTIFICATION', { - 'COUNT': iLen - }) - ); - } - else - { - for (; iIndex < iLen; iIndex++) - { - fNotificationHelper( - LinkBuilder.notificationMailIcon(), - MessageModel.emailsToLine(MessageModel.initEmailsFromJson(aNewMessages[iIndex].From), false), - aNewMessages[iIndex].Subject - ); - } - } - } - - Cache.setFolderUidNext(sFolder, sUidNext); - } - }; - - DataStorage.prototype.hideMessageBodies = function () - { - var oMessagesBodiesDom = this.messagesBodiesDom(); - if (oMessagesBodiesDom) - { - oMessagesBodiesDom.find('.b-text-part').hide(); - } - }; - - /** - * @param {boolean=} bBoot = false - * @returns {Array} - */ - DataStorage.prototype.getNextFolderNames = function (bBoot) - { - bBoot = Utils.isUnd(bBoot) ? false : !!bBoot; - - var - aResult = [], - iLimit = 10, - iUtc = moment().unix(), - iTimeout = iUtc - 60 * 5, - aTimeouts = [], - fSearchFunction = function (aList) { - _.each(aList, function (oFolder) { - if (oFolder && 'INBOX' !== oFolder.fullNameRaw && - oFolder.selectable && oFolder.existen && - iTimeout > oFolder.interval && - (!bBoot || oFolder.subScribed())) - { - aTimeouts.push([oFolder.interval, oFolder.fullNameRaw]); - } - - if (oFolder && 0 < oFolder.subFolders().length) - { - fSearchFunction(oFolder.subFolders()); - } - }); - } - ; - - fSearchFunction(this.folderList()); - - aTimeouts.sort(function(a, b) { - if (a[0] < b[0]) - { - return -1; - } - else if (a[0] > b[0]) - { - return 1; - } - - return 0; - }); - - _.find(aTimeouts, function (aItem) { - var oFolder = Cache.getFolderFromCacheList(aItem[1]); - if (oFolder) - { - oFolder.interval = iUtc; - aResult.push(aItem[1]); - } - - return iLimit <= aResult.length; - }); - - return _.uniq(aResult); - }; - - /** - * @param {string} sFromFolderFullNameRaw - * @param {Array} aUidForRemove - * @param {string=} sToFolderFullNameRaw = '' - * @param {bCopy=} bCopy = false - */ - DataStorage.prototype.removeMessagesFromList = function ( - sFromFolderFullNameRaw, aUidForRemove, sToFolderFullNameRaw, bCopy) - { - sToFolderFullNameRaw = Utils.isNormal(sToFolderFullNameRaw) ? sToFolderFullNameRaw : ''; - bCopy = Utils.isUnd(bCopy) ? false : !!bCopy; - - aUidForRemove = _.map(aUidForRemove, function (mValue) { - return Utils.pInt(mValue); - }); - - var - self = this, - iUnseenCount = 0, - aMessageList = this.messageList(), - oFromFolder = Cache.getFolderFromCacheList(sFromFolderFullNameRaw), - oToFolder = '' === sToFolderFullNameRaw ? null : Cache.getFolderFromCacheList(sToFolderFullNameRaw || ''), - sCurrentFolderFullNameRaw = this.currentFolderFullNameRaw(), - oCurrentMessage = this.message(), - aMessages = sCurrentFolderFullNameRaw === sFromFolderFullNameRaw ? _.filter(aMessageList, function (oMessage) { - return oMessage && -1 < Utils.inArray(Utils.pInt(oMessage.uid), aUidForRemove); - }) : [] - ; - - _.each(aMessages, function (oMessage) { - if (oMessage && oMessage.unseen()) - { - iUnseenCount++; - } - }); - - if (oFromFolder && !bCopy) - { - oFromFolder.messageCountAll(0 <= oFromFolder.messageCountAll() - aUidForRemove.length ? - oFromFolder.messageCountAll() - aUidForRemove.length : 0); - - if (0 < iUnseenCount) - { - oFromFolder.messageCountUnread(0 <= oFromFolder.messageCountUnread() - iUnseenCount ? - oFromFolder.messageCountUnread() - iUnseenCount : 0); - } - } - - if (oToFolder) - { - oToFolder.messageCountAll(oToFolder.messageCountAll() + aUidForRemove.length); - if (0 < iUnseenCount) - { - oToFolder.messageCountUnread(oToFolder.messageCountUnread() + iUnseenCount); - } - - oToFolder.actionBlink(true); - } - - if (0 < aMessages.length) - { - if (bCopy) - { - _.each(aMessages, function (oMessage) { - oMessage.checked(false); - }); - } - else - { - this.messageListIsNotCompleted(true); - - _.each(aMessages, function (oMessage) { - if (oCurrentMessage && oCurrentMessage.hash === oMessage.hash) - { - oCurrentMessage = null; - self.message(null); - } - - oMessage.deleted(true); - }); - - _.delay(function () { - _.each(aMessages, function (oMessage) { - self.messageList.remove(oMessage); - }); - }, 400); - } - } - - if ('' !== sFromFolderFullNameRaw) - { - Cache.setFolderHash(sFromFolderFullNameRaw, ''); - } - - if ('' !== sToFolderFullNameRaw) - { - Cache.setFolderHash(sToFolderFullNameRaw, ''); - } - }; - - /** - * @private - * @param {Object} oMessageTextBody - */ - DataStorage.prototype.initBlockquoteSwitcher = function (oMessageTextBody) - { - if (oMessageTextBody) - { - var $oList = $('blockquote:not(.rl-bq-switcher)', oMessageTextBody).filter(function () { - return 0 === $(this).parent().closest('blockquote', oMessageTextBody).length; - }); - - if ($oList && 0 < $oList.length) - { - $oList.each(function () { - var $self = $(this), iH = $self.height(); - if (0 === iH || 100 < iH) - { - $self.addClass('rl-bq-switcher hidden-bq'); - $('') - .insertBefore($self) - .click(function () { - $self.toggleClass('hidden-bq'); - Utils.windowResize(); - }) - .after('
') - .before('
') - ; - } - }); - } - } - }; - - DataStorage.prototype.setMessage = function (oData, bCached) - { - var - bIsHtml = false, - bHasExternals = false, - bHasInternals = false, - oBody = null, - oTextBody = null, - sId = '', - sResultHtml = '', - bPgpSigned = false, - bPgpEncrypted = false, - oMessagesBodiesDom = this.messagesBodiesDom(), - oMessage = this.message() - ; - - if (oData && oMessage && oData.Result && 'Object/Message' === oData.Result['@Object'] && - oMessage.folderFullNameRaw === oData.Result.Folder && oMessage.uid === oData.Result.Uid) - { - this.messageError(''); - - oMessage.initUpdateByMessageJson(oData.Result); - Cache.addRequestedMessage(oMessage.folderFullNameRaw, oMessage.uid); - - if (!bCached) - { - oMessage.initFlagsByJson(oData.Result); - } - - oMessagesBodiesDom = oMessagesBodiesDom && oMessagesBodiesDom[0] ? oMessagesBodiesDom : null; - if (oMessagesBodiesDom) - { - sId = 'rl-mgs-' + oMessage.hash.replace(/[^a-zA-Z0-9]/g, ''); - oTextBody = oMessagesBodiesDom.find('#' + sId); - if (!oTextBody || !oTextBody[0]) - { - bHasExternals = !!oData.Result.HasExternals; - bHasInternals = !!oData.Result.HasInternals; - - oBody = $('
').hide().addClass('rl-cache-class'); - oBody.data('rl-cache-count', ++Globals.iMessageBodyCacheCount); - - if (Utils.isNormal(oData.Result.Html) && '' !== oData.Result.Html) - { - bIsHtml = true; - sResultHtml = oData.Result.Html.toString(); - } - else if (Utils.isNormal(oData.Result.Plain) && '' !== oData.Result.Plain) - { - bIsHtml = false; - sResultHtml = Utils.plainToHtml(oData.Result.Plain.toString(), false); - - if ((oMessage.isPgpSigned() || oMessage.isPgpEncrypted()) && this.capaOpenPGP()) - { - oMessage.plainRaw = Utils.pString(oData.Result.Plain); - - bPgpEncrypted = /---BEGIN PGP MESSAGE---/.test(oMessage.plainRaw); - if (!bPgpEncrypted) - { - bPgpSigned = /-----BEGIN PGP SIGNED MESSAGE-----/.test(oMessage.plainRaw) && - /-----BEGIN PGP SIGNATURE-----/.test(oMessage.plainRaw); - } - - Globals.$div.empty(); - if (bPgpSigned && oMessage.isPgpSigned()) - { - sResultHtml = - Globals.$div.append( - $('
').text(oMessage.plainRaw)
-										).html()
-									;
-								}
-								else if (bPgpEncrypted && oMessage.isPgpEncrypted())
-								{
-									sResultHtml =
-										Globals.$div.append(
-											$('
').text(oMessage.plainRaw)
-										).html()
-									;
-								}
-
-								Globals.$div.empty();
-
-								oMessage.isPgpSigned(bPgpSigned);
-								oMessage.isPgpEncrypted(bPgpEncrypted);
-							}
-						}
-						else
-						{
-							bIsHtml = false;
-						}
-
-						oBody
-							.html(Utils.linkify(sResultHtml))
-							.addClass('b-text-part ' + (bIsHtml ? 'html' : 'plain'))
-						;
-
-						oMessage.isHtml(!!bIsHtml);
-						oMessage.hasImages(!!bHasExternals);
-						oMessage.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.None);
-						oMessage.pgpSignedVerifyUser('');
-
-						oMessage.body = oBody;
-						if (oMessage.body)
-						{
-							oMessagesBodiesDom.append(oMessage.body);
-						}
-
-						oMessage.storeDataToDom();
-
-						if (bHasInternals)
-						{
-							oMessage.showInternalImages(true);
-						}
-
-						if (oMessage.hasImages() && this.showImages())
-						{
-							oMessage.showExternalImages(true);
-						}
-
-						this.purgeMessageBodyCacheThrottle();
-					}
-					else
-					{
-						oMessage.body = oTextBody;
-						if (oMessage.body)
-						{
-							oMessage.body.data('rl-cache-count', ++Globals.iMessageBodyCacheCount);
-							oMessage.fetchDataToDom();
-						}
-					}
-
-					this.messageActiveDom(oMessage.body);
-
-					this.hideMessageBodies();
-					oMessage.body.show();
-
-					if (oBody)
-					{
-						this.initBlockquoteSwitcher(oBody);
-					}
-				}
-
-				Cache.initMessageFlagsFromCache(oMessage);
-				if (oMessage.unseen())
-				{
-					if (Globals.__APP)
-					{
-						Globals.__APP.setMessageSeen(oMessage);
-					}
-				}
-
-				Utils.windowResize();
-			}
-		};
-
-		/**
-		 * @param {Array} aList
-		 * @returns {string}
-		 */
-		DataStorage.prototype.calculateMessageListHash = function (aList)
-		{
-			return _.map(aList, function (oMessage) {
-				return '' + oMessage.hash + '_' + oMessage.threadsLen() + '_' + oMessage.flagHash();
-			}).join('|');
-		};
-
-		DataStorage.prototype.findPublicKeyByHex = function (sHash)
-		{
-			return _.find(this.openpgpkeysPublic(), function (oItem) {
-				return oItem && sHash === oItem.id;
-			});
-		};
-
-		DataStorage.prototype.findPublicKeysByEmail = function (sEmail)
-		{
-			return _.compact(_.map(this.openpgpkeysPublic(), function (oItem) {
-
-				var oKey = null;
-				if (oItem && sEmail === oItem.email)
-				{
-					try
-					{
-						oKey = window.openpgp.key.readArmored(oItem.armor);
-						if (oKey && !oKey.err && oKey.keys && oKey.keys[0])
-						{
-							return oKey.keys[0];
-						}
-					}
-					catch (e) {}
-				}
-
-				return null;
-
-			}));
-		};
-
-		/**
-		 * @param {string} sEmail
-		 * @param {string=} sPassword
-		 * @returns {?}
-		 */
-		DataStorage.prototype.findPrivateKeyByEmail = function (sEmail, sPassword)
-		{
-			var
-				oPrivateKey = null,
-				oKey = _.find(this.openpgpkeysPrivate(), function (oItem) {
-					return oItem && sEmail === oItem.email;
-				})
-			;
-
-			if (oKey)
-			{
-				try
-				{
-					oPrivateKey = window.openpgp.key.readArmored(oKey.armor);
-					if (oPrivateKey && !oPrivateKey.err && oPrivateKey.keys && oPrivateKey.keys[0])
-					{
-						oPrivateKey = oPrivateKey.keys[0];
-						oPrivateKey.decrypt(Utils.pString(sPassword));
-					}
-					else
-					{
-						oPrivateKey = null;
-					}
-				}
-				catch (e)
-				{
-					oPrivateKey = null;
-				}
-			}
-
-			return oPrivateKey;
-		};
-
-		/**
-		 * @param {string=} sPassword
-		 * @returns {?}
-		 */
-		DataStorage.prototype.findSelfPrivateKey = function (sPassword)
-		{
-			return this.findPrivateKeyByEmail(this.accountEmail(), sPassword);
-		};
-
-		module.exports = new DataStorage();
-
-	}());
-
-
-/***/ },
-
-/***/ 13:
-/*!***************************************!*\
-  !*** ./dev/Storages/RemoteStorage.js ***!
-  \***************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
-
-	(function () {
-
-		'use strict';
-
-		var
-			_ = __webpack_require__(/*! _ */ 2),
-
-			Utils = __webpack_require__(/*! Common/Utils */ 1),
-			Consts = __webpack_require__(/*! Common/Consts */ 17),
-			Globals = __webpack_require__(/*! Common/Globals */ 7),
-			Base64 = __webpack_require__(/*! Common/Base64 */ 49),
-
-			Settings = __webpack_require__(/*! Storage:Settings */ 10),
-			Cache = __webpack_require__(/*! Storage:RainLoop:Cache */ 20),
-			Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8),
-
-			AbstractRemoteStorage = __webpack_require__(/*! Storage:Abstract:Remote */ 40)
-		;
-
-		/**
-		 * @constructor
-		 * @extends AbstractRemoteStorage
-		 */
-		function RemoteStorage()
-		{
-			AbstractRemoteStorage.call(this);
-
-			this.oRequests = {};
-		}
-
-		_.extend(RemoteStorage.prototype, AbstractRemoteStorage.prototype);
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.folders = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'Folders', {
-				'SentFolder': Settings.settingsGet('SentFolder'),
-				'DraftFolder': Settings.settingsGet('DraftFolder'),
-				'SpamFolder': Settings.settingsGet('SpamFolder'),
-				'TrashFolder': Settings.settingsGet('TrashFolder'),
-				'ArchiveFolder': Settings.settingsGet('ArchiveFolder')
-			}, null, '', ['Folders']);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sEmail
-		 * @param {string} sLogin
-		 * @param {string} sPassword
-		 * @param {boolean} bSignMe
-		 * @param {string=} sLanguage
-		 * @param {string=} sAdditionalCode
-		 * @param {boolean=} bAdditionalCodeSignMe
-		 */
-		RemoteStorage.prototype.login = function (fCallback, sEmail, sLogin, sPassword, bSignMe, sLanguage, sAdditionalCode, bAdditionalCodeSignMe)
-		{
-			this.defaultRequest(fCallback, 'Login', {
-				'Email': sEmail,
-				'Login': sLogin,
-				'Password': sPassword,
-				'Language': sLanguage || '',
-				'AdditionalCode': sAdditionalCode || '',
-				'AdditionalCodeSignMe': bAdditionalCodeSignMe ? '1' : '0',
-				'SignMe': bSignMe ? '1' : '0'
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.getTwoFactor = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'GetTwoFactorInfo');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.createTwoFactor = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'CreateTwoFactorSecret');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.clearTwoFactor = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'ClearTwoFactorInfo');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.showTwoFactorSecret = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'ShowTwoFactorSecret');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sCode
-		 */
-		RemoteStorage.prototype.testTwoFactor = function (fCallback, sCode)
-		{
-			this.defaultRequest(fCallback, 'TestTwoFactorInfo', {
-				'Code': sCode
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {boolean} bEnable
-		 */
-		RemoteStorage.prototype.enableTwoFactor = function (fCallback, bEnable)
-		{
-			this.defaultRequest(fCallback, 'EnableTwoFactor', {
-				'Enable': bEnable ? '1' : '0'
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.clearTwoFactorInfo = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'ClearTwoFactorInfo');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.contactsSync = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'ContactsSync', null, Consts.Defaults.ContactsSyncAjaxTimeout);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {boolean} bEnable
-		 * @param {string} sUrl
-		 * @param {string} sUser
-		 * @param {string} sPassword
-		 */
-		RemoteStorage.prototype.saveContactsSyncData = function (fCallback, bEnable, sUrl, sUser, sPassword)
-		{
-			this.defaultRequest(fCallback, 'SaveContactsSyncData', {
-				'Enable': bEnable ? '1' : '0',
-				'Url': sUrl,
-				'User': sUser,
-				'Password': sPassword
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sEmail
-		 * @param {string} sLogin
-		 * @param {string} sPassword
-		 */
-		RemoteStorage.prototype.accountAdd = function (fCallback, sEmail, sLogin, sPassword)
-		{
-			this.defaultRequest(fCallback, 'AccountAdd', {
-				'Email': sEmail,
-				'Login': sLogin,
-				'Password': sPassword
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sEmailToDelete
-		 */
-		RemoteStorage.prototype.accountDelete = function (fCallback, sEmailToDelete)
-		{
-			this.defaultRequest(fCallback, 'AccountDelete', {
-				'EmailToDelete': sEmailToDelete
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sId
-		 * @param {string} sEmail
-		 * @param {string} sName
-		 * @param {string} sReplyTo
-		 * @param {string} sBcc
-		 */
-		RemoteStorage.prototype.identityUpdate = function (fCallback, sId, sEmail, sName, sReplyTo, sBcc)
-		{
-			this.defaultRequest(fCallback, 'IdentityUpdate', {
-				'Id': sId,
-				'Email': sEmail,
-				'Name': sName,
-				'ReplyTo': sReplyTo,
-				'Bcc': sBcc
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sIdToDelete
-		 */
-		RemoteStorage.prototype.identityDelete = function (fCallback, sIdToDelete)
-		{
-			this.defaultRequest(fCallback, 'IdentityDelete', {
-				'IdToDelete': sIdToDelete
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.accountsAndIdentities = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'AccountsAndIdentities');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolderFullNameRaw
-		 * @param {number=} iOffset = 0
-		 * @param {number=} iLimit = 20
-		 * @param {string=} sSearch = ''
-		 * @param {boolean=} bSilent = false
-		 */
-		RemoteStorage.prototype.messageList = function (fCallback, sFolderFullNameRaw, iOffset, iLimit, sSearch, bSilent)
-		{
-			sFolderFullNameRaw = Utils.pString(sFolderFullNameRaw);
-
-			var
-				sFolderHash = Cache.getFolderHash(sFolderFullNameRaw)
-			;
-
-			bSilent = Utils.isUnd(bSilent) ? false : !!bSilent;
-			iOffset = Utils.isUnd(iOffset) ? 0 : Utils.pInt(iOffset);
-			iLimit = Utils.isUnd(iOffset) ? 20 : Utils.pInt(iLimit);
-			sSearch = Utils.pString(sSearch);
-
-			if ('' !== sFolderHash && ('' === sSearch || -1 === sSearch.indexOf('is:')))
-			{
-				this.defaultRequest(fCallback, 'MessageList', {},
-					'' === sSearch ? Consts.Defaults.DefaultAjaxTimeout : Consts.Defaults.SearchAjaxTimeout,
-					'MessageList/' + Base64.urlsafe_encode([
-						sFolderFullNameRaw,
-						iOffset,
-						iLimit,
-						sSearch,
-						Data.projectHash(),
-						sFolderHash,
-						'INBOX' === sFolderFullNameRaw ? Cache.getFolderUidNext(sFolderFullNameRaw) : '',
-						Data.threading() && Data.useThreads() ? '1' : '0',
-						Data.threading() && sFolderFullNameRaw === Data.messageListThreadFolder() ? Data.messageListThreadUids().join(',') : ''
-					].join(String.fromCharCode(0))), bSilent ? [] : ['MessageList']);
-			}
-			else
-			{
-				this.defaultRequest(fCallback, 'MessageList', {
-					'Folder': sFolderFullNameRaw,
-					'Offset': iOffset,
-					'Limit': iLimit,
-					'Search': sSearch,
-					'UidNext': 'INBOX' === sFolderFullNameRaw ? Cache.getFolderUidNext(sFolderFullNameRaw) : '',
-					'UseThreads': Data.threading() && Data.useThreads() ? '1' : '0',
-					'ExpandedThreadUid': Data.threading() && sFolderFullNameRaw === Data.messageListThreadFolder() ? Data.messageListThreadUids().join(',') : ''
-				}, '' === sSearch ? Consts.Defaults.DefaultAjaxTimeout : Consts.Defaults.SearchAjaxTimeout, '', bSilent ? [] : ['MessageList']);
-			}
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {Array} aDownloads
-		 */
-		RemoteStorage.prototype.messageUploadAttachments = function (fCallback, aDownloads)
-		{
-			this.defaultRequest(fCallback, 'MessageUploadAttachments', {
-				'Attachments': aDownloads
-			}, 999000);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolderFullNameRaw
-		 * @param {number} iUid
-		 * @return {boolean}
-		 */
-		RemoteStorage.prototype.message = function (fCallback, sFolderFullNameRaw, iUid)
-		{
-			sFolderFullNameRaw = Utils.pString(sFolderFullNameRaw);
-			iUid = Utils.pInt(iUid);
-
-			if (Cache.getFolderFromCacheList(sFolderFullNameRaw) && 0 < iUid)
-			{
-				this.defaultRequest(fCallback, 'Message', {}, null,
-					'Message/' + Base64.urlsafe_encode([
-						sFolderFullNameRaw,
-						iUid,
-						Data.projectHash(),
-						Data.threading() && Data.useThreads() ? '1' : '0'
-					].join(String.fromCharCode(0))), ['Message']);
-
-				return true;
-			}
-
-			return false;
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {Array} aExternals
-		 */
-		RemoteStorage.prototype.composeUploadExternals = function (fCallback, aExternals)
-		{
-			this.defaultRequest(fCallback, 'ComposeUploadExternals', {
-				'Externals': aExternals
-			}, 999000);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sUrl
-		 * @param {string} sAccessToken
-		 */
-		RemoteStorage.prototype.composeUploadDrive = function (fCallback, sUrl, sAccessToken)
-		{
-			this.defaultRequest(fCallback, 'ComposeUploadDrive', {
-				'AccessToken': sAccessToken,
-				'Url': sUrl
-			}, 999000);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolder
-		 * @param {Array=} aList = []
-		 */
-		RemoteStorage.prototype.folderInformation = function (fCallback, sFolder, aList)
-		{
-			var
-				bRequest = true,
-				aUids = []
-			;
-
-			if (Utils.isArray(aList) && 0 < aList.length)
-			{
-				bRequest = false;
-				_.each(aList, function (oMessageListItem) {
-					if (!Cache.getMessageFlagsFromCache(oMessageListItem.folderFullNameRaw, oMessageListItem.uid))
-					{
-						aUids.push(oMessageListItem.uid);
-					}
-
-					if (0 < oMessageListItem.threads().length)
-					{
-						_.each(oMessageListItem.threads(), function (sUid) {
-							if (!Cache.getMessageFlagsFromCache(oMessageListItem.folderFullNameRaw, sUid))
-							{
-								aUids.push(sUid);
-							}
-						});
-					}
-				});
-
-				if (0 < aUids.length)
-				{
-					bRequest = true;
-				}
-			}
-
-			if (bRequest)
-			{
-				this.defaultRequest(fCallback, 'FolderInformation', {
-					'Folder': sFolder,
-					'FlagsUids': Utils.isArray(aUids) ? aUids.join(',') : '',
-					'UidNext': 'INBOX' === sFolder ? Cache.getFolderUidNext(sFolder) : ''
-				});
-			}
-			else if (Data.useThreads())
-			{
-				if (Globals.__APP)
-				{
-					Globals.__APP.reloadFlagsCurrentMessageListAndMessageFromCache();
-				}
-			}
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {Array} aFolders
-		 */
-		RemoteStorage.prototype.folderInformationMultiply = function (fCallback, aFolders)
-		{
-			this.defaultRequest(fCallback, 'FolderInformationMultiply', {
-				'Folders': aFolders
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.logout = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'Logout');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolderFullNameRaw
-		 * @param {Array} aUids
-		 * @param {boolean} bSetFlagged
-		 */
-		RemoteStorage.prototype.messageSetFlagged = function (fCallback, sFolderFullNameRaw, aUids, bSetFlagged)
-		{
-			this.defaultRequest(fCallback, 'MessageSetFlagged', {
-				'Folder': sFolderFullNameRaw,
-				'Uids': aUids.join(','),
-				'SetAction': bSetFlagged ? '1' : '0'
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolderFullNameRaw
-		 * @param {Array} aUids
-		 * @param {boolean} bSetSeen
-		 */
-		RemoteStorage.prototype.messageSetSeen = function (fCallback, sFolderFullNameRaw, aUids, bSetSeen)
-		{
-			this.defaultRequest(fCallback, 'MessageSetSeen', {
-				'Folder': sFolderFullNameRaw,
-				'Uids': aUids.join(','),
-				'SetAction': bSetSeen ? '1' : '0'
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolderFullNameRaw
-		 * @param {boolean} bSetSeen
-		 */
-		RemoteStorage.prototype.messageSetSeenToAll = function (fCallback, sFolderFullNameRaw, bSetSeen)
-		{
-			this.defaultRequest(fCallback, 'MessageSetSeenToAll', {
-				'Folder': sFolderFullNameRaw,
-				'SetAction': bSetSeen ? '1' : '0'
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sMessageFolder
-		 * @param {string} sMessageUid
-		 * @param {string} sDraftFolder
-		 * @param {string} sFrom
-		 * @param {string} sTo
-		 * @param {string} sCc
-		 * @param {string} sBcc
-		 * @param {string} sSubject
-		 * @param {boolean} bTextIsHtml
-		 * @param {string} sText
-		 * @param {Array} aAttachments
-		 * @param {(Array|null)} aDraftInfo
-		 * @param {string} sInReplyTo
-		 * @param {string} sReferences
-		 */
-		RemoteStorage.prototype.saveMessage = function (fCallback, sMessageFolder, sMessageUid, sDraftFolder,
-			sFrom, sTo, sCc, sBcc, sSubject, bTextIsHtml, sText, aAttachments, aDraftInfo, sInReplyTo, sReferences)
-		{
-			this.defaultRequest(fCallback, 'SaveMessage', {
-				'MessageFolder': sMessageFolder,
-				'MessageUid': sMessageUid,
-				'DraftFolder': sDraftFolder,
-				'From': sFrom,
-				'To': sTo,
-				'Cc': sCc,
-				'Bcc': sBcc,
-				'Subject': sSubject,
-				'TextIsHtml': bTextIsHtml ? '1' : '0',
-				'Text': sText,
-				'DraftInfo': aDraftInfo,
-				'InReplyTo': sInReplyTo,
-				'References': sReferences,
-				'Attachments': aAttachments
-			}, Consts.Defaults.SaveMessageAjaxTimeout);
-		};
-
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sMessageFolder
-		 * @param {string} sMessageUid
-		 * @param {string} sReadReceipt
-		 * @param {string} sSubject
-		 * @param {string} sText
-		 */
-		RemoteStorage.prototype.sendReadReceiptMessage = function (fCallback, sMessageFolder, sMessageUid, sReadReceipt, sSubject, sText)
-		{
-			this.defaultRequest(fCallback, 'SendReadReceiptMessage', {
-				'MessageFolder': sMessageFolder,
-				'MessageUid': sMessageUid,
-				'ReadReceipt': sReadReceipt,
-				'Subject': sSubject,
-				'Text': sText
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sMessageFolder
-		 * @param {string} sMessageUid
-		 * @param {string} sSentFolder
-		 * @param {string} sFrom
-		 * @param {string} sTo
-		 * @param {string} sCc
-		 * @param {string} sBcc
-		 * @param {string} sSubject
-		 * @param {boolean} bTextIsHtml
-		 * @param {string} sText
-		 * @param {Array} aAttachments
-		 * @param {(Array|null)} aDraftInfo
-		 * @param {string} sInReplyTo
-		 * @param {string} sReferences
-		 * @param {boolean} bRequestReadReceipt
-		 */
-		RemoteStorage.prototype.sendMessage = function (fCallback, sMessageFolder, sMessageUid, sSentFolder,
-			sFrom, sTo, sCc, sBcc, sSubject, bTextIsHtml, sText, aAttachments, aDraftInfo, sInReplyTo, sReferences, bRequestReadReceipt)
-		{
-			this.defaultRequest(fCallback, 'SendMessage', {
-				'MessageFolder': sMessageFolder,
-				'MessageUid': sMessageUid,
-				'SentFolder': sSentFolder,
-				'From': sFrom,
-				'To': sTo,
-				'Cc': sCc,
-				'Bcc': sBcc,
-				'Subject': sSubject,
-				'TextIsHtml': bTextIsHtml ? '1' : '0',
-				'Text': sText,
-				'DraftInfo': aDraftInfo,
-				'InReplyTo': sInReplyTo,
-				'References': sReferences,
-				'ReadReceiptRequest': bRequestReadReceipt ? '1' : '0',
-				'Attachments': aAttachments
-			}, Consts.Defaults.SendMessageAjaxTimeout);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {Object} oData
-		 */
-		RemoteStorage.prototype.saveSystemFolders = function (fCallback, oData)
-		{
-			this.defaultRequest(fCallback, 'SystemFoldersUpdate', oData);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {Object} oData
-		 */
-		RemoteStorage.prototype.saveSettings = function (fCallback, oData)
-		{
-			this.defaultRequest(fCallback, 'SettingsUpdate', oData);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sPrevPassword
-		 * @param {string} sNewPassword
-		 */
-		RemoteStorage.prototype.changePassword = function (fCallback, sPrevPassword, sNewPassword)
-		{
-			this.defaultRequest(fCallback, 'ChangePassword', {
-				'PrevPassword': sPrevPassword,
-				'NewPassword': sNewPassword
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sNewFolderName
-		 * @param {string} sParentName
-		 */
-		RemoteStorage.prototype.folderCreate = function (fCallback, sNewFolderName, sParentName)
-		{
-			this.defaultRequest(fCallback, 'FolderCreate', {
-				'Folder': sNewFolderName,
-				'Parent': sParentName
-			}, null, '', ['Folders']);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolderFullNameRaw
-		 */
-		RemoteStorage.prototype.folderDelete = function (fCallback, sFolderFullNameRaw)
-		{
-			this.defaultRequest(fCallback, 'FolderDelete', {
-				'Folder': sFolderFullNameRaw
-			}, null, '', ['Folders']);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sPrevFolderFullNameRaw
-		 * @param {string} sNewFolderName
-		 */
-		RemoteStorage.prototype.folderRename = function (fCallback, sPrevFolderFullNameRaw, sNewFolderName)
-		{
-			this.defaultRequest(fCallback, 'FolderRename', {
-				'Folder': sPrevFolderFullNameRaw,
-				'NewFolderName': sNewFolderName
-			}, null, '', ['Folders']);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolderFullNameRaw
-		 */
-		RemoteStorage.prototype.folderClear = function (fCallback, sFolderFullNameRaw)
-		{
-			this.defaultRequest(fCallback, 'FolderClear', {
-				'Folder': sFolderFullNameRaw
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolderFullNameRaw
-		 * @param {boolean} bSubscribe
-		 */
-		RemoteStorage.prototype.folderSetSubscribe = function (fCallback, sFolderFullNameRaw, bSubscribe)
-		{
-			this.defaultRequest(fCallback, 'FolderSubscribe', {
-				'Folder': sFolderFullNameRaw,
-				'Subscribe': bSubscribe ? '1' : '0'
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolder
-		 * @param {string} sToFolder
-		 * @param {Array} aUids
-		 * @param {string=} sLearning
-		 */
-		RemoteStorage.prototype.messagesMove = function (fCallback, sFolder, sToFolder, aUids, sLearning)
-		{
-			this.defaultRequest(fCallback, 'MessageMove', {
-				'FromFolder': sFolder,
-				'ToFolder': sToFolder,
-				'Uids': aUids.join(','),
-				'Learning': sLearning || ''
-			}, null, '', ['MessageList']);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolder
-		 * @param {string} sToFolder
-		 * @param {Array} aUids
-		 */
-		RemoteStorage.prototype.messagesCopy = function (fCallback, sFolder, sToFolder, aUids)
-		{
-			this.defaultRequest(fCallback, 'MessageCopy', {
-				'FromFolder': sFolder,
-				'ToFolder': sToFolder,
-				'Uids': aUids.join(',')
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sFolder
-		 * @param {Array} aUids
-		 */
-		RemoteStorage.prototype.messagesDelete = function (fCallback, sFolder, aUids)
-		{
-			this.defaultRequest(fCallback, 'MessageDelete', {
-				'Folder': sFolder,
-				'Uids': aUids.join(',')
-			}, null, '', ['MessageList']);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.appDelayStart = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'AppDelayStart');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.quota = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'Quota');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {number} iOffset
-		 * @param {number} iLimit
-		 * @param {string} sSearch
-		 */
-		RemoteStorage.prototype.contacts = function (fCallback, iOffset, iLimit, sSearch)
-		{
-			this.defaultRequest(fCallback, 'Contacts', {
-				'Offset': iOffset,
-				'Limit': iLimit,
-				'Search': sSearch
-			}, null, '', ['Contacts']);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.contactSave = function (fCallback, sRequestUid, sUid, sTags, aProperties)
-		{
-			this.defaultRequest(fCallback, 'ContactSave', {
-				'RequestUid': sRequestUid,
-				'Uid': Utils.trim(sUid),
-				'Tags': Utils.trim(sTags),
-				'Properties': aProperties
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {Array} aUids
-		 */
-		RemoteStorage.prototype.contactsDelete = function (fCallback, aUids)
-		{
-			this.defaultRequest(fCallback, 'ContactsDelete', {
-				'Uids': aUids.join(',')
-			});
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 * @param {string} sQuery
-		 * @param {number} iPage
-		 */
-		RemoteStorage.prototype.suggestions = function (fCallback, sQuery, iPage)
-		{
-			this.defaultRequest(fCallback, 'Suggestions', {
-				'Query': sQuery,
-				'Page': iPage
-			}, null, '', ['Suggestions']);
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.facebookUser = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'SocialFacebookUserInformation');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.facebookDisconnect = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'SocialFacebookDisconnect');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.twitterUser = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'SocialTwitterUserInformation');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.twitterDisconnect = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'SocialTwitterDisconnect');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.googleUser = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'SocialGoogleUserInformation');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.googleDisconnect = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'SocialGoogleDisconnect');
-		};
-
-		/**
-		 * @param {?Function} fCallback
-		 */
-		RemoteStorage.prototype.socialUsers = function (fCallback)
-		{
-			this.defaultRequest(fCallback, 'SocialUsers');
-		};
-
-		module.exports = new RemoteStorage();
-
-	}());
-
-/***/ },
-
-/***/ 20:
-/*!**************************************!*\
-  !*** ./dev/Storages/CacheStorage.js ***!
-  \**************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
-
-	(function () {
-
-		'use strict';
-
-		var
-			_ = __webpack_require__(/*! _ */ 2),
-
-			Enums = __webpack_require__(/*! Common/Enums */ 6),
-			Utils = __webpack_require__(/*! Common/Utils */ 1),
-			LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11),
-
-			Settings = __webpack_require__(/*! Storage:Settings */ 10)
-		;
-
-		/**
-		 * @constructor
-		 */
-		function CacheStorage()
-		{
-			this.oFoldersCache = {};
-			this.oFoldersNamesCache = {};
-			this.oFolderHashCache = {};
-			this.oFolderUidNextCache = {};
-			this.oMessageListHashCache = {};
-			this.oMessageFlagsCache = {};
-			this.oNewMessage = {};
-			this.oRequestedMessage = {};
-
-			this.bCapaGravatar = Settings.capa(Enums.Capa.Gravatar);
-		}
-
-		/**
-		 * @type {boolean}
-		 */
-		CacheStorage.prototype.bCapaGravatar = false;
-
-		/**
-		 * @type {Object}
-		 */
-		CacheStorage.prototype.oFoldersCache = {};
-
-		/**
-		 * @type {Object}
-		 */
-		CacheStorage.prototype.oFoldersNamesCache = {};
-
-		/**
-		 * @type {Object}
-		 */
-		CacheStorage.prototype.oFolderHashCache = {};
-
-		/**
-		 * @type {Object}
-		 */
-		CacheStorage.prototype.oFolderUidNextCache = {};
-
-		/**
-		 * @type {Object}
-		 */
-		CacheStorage.prototype.oMessageListHashCache = {};
-
-		/**
-		 * @type {Object}
-		 */
-		CacheStorage.prototype.oMessageFlagsCache = {};
-
-		/**
-		 * @type {Object}
-		 */
-		CacheStorage.prototype.oBodies = {};
-
-		/**
-		 * @type {Object}
-		 */
-		CacheStorage.prototype.oNewMessage = {};
-
-		/**
-		 * @type {Object}
-		 */
-		CacheStorage.prototype.oRequestedMessage = {};
-
-		CacheStorage.prototype.clear = function ()
-		{
-			this.oFoldersCache = {};
-			this.oFoldersNamesCache = {};
-			this.oFolderHashCache = {};
-			this.oFolderUidNextCache = {};
-			this.oMessageListHashCache = {};
-			this.oMessageFlagsCache = {};
-			this.oBodies = {};
-		};
-
-
-		/**
-		 * @param {string} sEmail
-		 * @param {Function} fCallback
-		 * @return {string}
-		 */
-		CacheStorage.prototype.getUserPic = function (sEmail, fCallback)
-		{
-			sEmail = Utils.trim(sEmail);
-			fCallback(this.bCapaGravatar && '' !== sEmail ? LinkBuilder.avatarLink(sEmail) : '', sEmail);
-		};
-
-		/**
-		 * @param {string} sFolderFullNameRaw
-		 * @param {string} sUid
-		 * @return {string}
-		 */
-		CacheStorage.prototype.getMessageKey = function (sFolderFullNameRaw, sUid)
-		{
-			return sFolderFullNameRaw + '#' + sUid;
-		};
-
-		/**
-		 * @param {string} sFolder
-		 * @param {string} sUid
-		 */
-		CacheStorage.prototype.addRequestedMessage = function (sFolder, sUid)
-		{
-			this.oRequestedMessage[this.getMessageKey(sFolder, sUid)] = true;
-		};
-
-		/**
-		 * @param {string} sFolder
-		 * @param {string} sUid
-		 * @return {boolean}
-		 */
-		CacheStorage.prototype.hasRequestedMessage = function (sFolder, sUid)
-		{
-			return true === this.oRequestedMessage[this.getMessageKey(sFolder, sUid)];
-		};
-
-		/**
-		 * @param {string} sFolderFullNameRaw
-		 * @param {string} sUid
-		 */
-		CacheStorage.prototype.addNewMessageCache = function (sFolderFullNameRaw, sUid)
-		{
-			this.oNewMessage[this.getMessageKey(sFolderFullNameRaw, sUid)] = true;
-		};
-
-		/**
-		 * @param {string} sFolderFullNameRaw
-		 * @param {string} sUid
-		 */
-		CacheStorage.prototype.hasNewMessageAndRemoveFromCache = function (sFolderFullNameRaw, sUid)
-		{
-			if (this.oNewMessage[this.getMessageKey(sFolderFullNameRaw, sUid)])
-			{
-				this.oNewMessage[this.getMessageKey(sFolderFullNameRaw, sUid)] = null;
-				return true;
-			}
-
-			return false;
-		};
-
-		CacheStorage.prototype.clearNewMessageCache = function ()
-		{
-			this.oNewMessage = {};
-		};
-
-		/**
-		 * @param {string} sFolderHash
-		 * @return {string}
-		 */
-		CacheStorage.prototype.getFolderFullNameRaw = function (sFolderHash)
-		{
-			return '' !== sFolderHash && this.oFoldersNamesCache[sFolderHash] ? this.oFoldersNamesCache[sFolderHash] : '';
-		};
-
-		/**
-		 * @param {string} sFolderHash
-		 * @param {string} sFolderFullNameRaw
-		 */
-		CacheStorage.prototype.setFolderFullNameRaw = function (sFolderHash, sFolderFullNameRaw)
-		{
-			this.oFoldersNamesCache[sFolderHash] = sFolderFullNameRaw;
-		};
-
-		/**
-		 * @param {string} sFolderFullNameRaw
-		 * @return {string}
-		 */
-		CacheStorage.prototype.getFolderHash = function (sFolderFullNameRaw)
-		{
-			return '' !== sFolderFullNameRaw && this.oFolderHashCache[sFolderFullNameRaw] ? this.oFolderHashCache[sFolderFullNameRaw] : '';
-		};
-
-		/**
-		 * @param {string} sFolderFullNameRaw
-		 * @param {string} sFolderHash
-		 */
-		CacheStorage.prototype.setFolderHash = function (sFolderFullNameRaw, sFolderHash)
-		{
-			this.oFolderHashCache[sFolderFullNameRaw] = sFolderHash;
-		};
-
-		/**
-		 * @param {string} sFolderFullNameRaw
-		 * @return {string}
-		 */
-		CacheStorage.prototype.getFolderUidNext = function (sFolderFullNameRaw)
-		{
-			return '' !== sFolderFullNameRaw && this.oFolderUidNextCache[sFolderFullNameRaw] ? this.oFolderUidNextCache[sFolderFullNameRaw] : '';
-		};
-
-		/**
-		 * @param {string} sFolderFullNameRaw
-		 * @param {string} sUidNext
-		 */
-		CacheStorage.prototype.setFolderUidNext = function (sFolderFullNameRaw, sUidNext)
-		{
-			this.oFolderUidNextCache[sFolderFullNameRaw] = sUidNext;
-		};
-
-		/**
-		 * @param {string} sFolderFullNameRaw
-		 * @return {?FolderModel}
-		 */
-		CacheStorage.prototype.getFolderFromCacheList = function (sFolderFullNameRaw)
-		{
-			return '' !== sFolderFullNameRaw && this.oFoldersCache[sFolderFullNameRaw] ? this.oFoldersCache[sFolderFullNameRaw] : null;
-		};
-
-		/**
-		 * @param {string} sFolderFullNameRaw
-		 * @param {?FolderModel} oFolder
-		 */
-		CacheStorage.prototype.setFolderToCacheList = function (sFolderFullNameRaw, oFolder)
-		{
-			this.oFoldersCache[sFolderFullNameRaw] = oFolder;
-		};
-
-		/**
-		 * @param {string} sFolderFullNameRaw
-		 */
-		CacheStorage.prototype.removeFolderFromCacheList = function (sFolderFullNameRaw)
-		{
-			this.setFolderToCacheList(sFolderFullNameRaw, null);
-		};
-
-		/**
-		 * @param {string} sFolderFullName
-		 * @param {string} sUid
-		 * @return {?Array}
-		 */
-		CacheStorage.prototype.getMessageFlagsFromCache = function (sFolderFullName, sUid)
-		{
-			return this.oMessageFlagsCache[sFolderFullName] && this.oMessageFlagsCache[sFolderFullName][sUid] ?
-				this.oMessageFlagsCache[sFolderFullName][sUid] : null;
-		};
-
-		/**
-		 * @param {string} sFolderFullName
-		 * @param {string} sUid
-		 * @param {Array} aFlagsCache
-		 */
-		CacheStorage.prototype.setMessageFlagsToCache = function (sFolderFullName, sUid, aFlagsCache)
-		{
-			if (!this.oMessageFlagsCache[sFolderFullName])
-			{
-				this.oMessageFlagsCache[sFolderFullName] = {};
-			}
-
-			this.oMessageFlagsCache[sFolderFullName][sUid] = aFlagsCache;
-		};
-
-		/**
-		 * @param {string} sFolderFullName
-		 */
-		CacheStorage.prototype.clearMessageFlagsFromCacheByFolder = function (sFolderFullName)
-		{
-			this.oMessageFlagsCache[sFolderFullName] = {};
-		};
-
-		/**
-		 * @param {(MessageModel|null)} oMessage
-		 */
-		CacheStorage.prototype.initMessageFlagsFromCache = function (oMessage)
-		{
-			if (oMessage)
-			{
-				var
-					self = this,
-					aFlags = this.getMessageFlagsFromCache(oMessage.folderFullNameRaw, oMessage.uid),
-					mUnseenSubUid = null,
-					mFlaggedSubUid = null
-				;
-
-				if (aFlags && 0 < aFlags.length)
-				{
-					oMessage.unseen(!!aFlags[0]);
-					oMessage.flagged(!!aFlags[1]);
-					oMessage.answered(!!aFlags[2]);
-					oMessage.forwarded(!!aFlags[3]);
-					oMessage.isReadReceipt(!!aFlags[4]);
-				}
-
-				if (0 < oMessage.threads().length)
-				{
-					mUnseenSubUid = _.find(oMessage.threads(), function (iSubUid) {
-						var aFlags = self.getMessageFlagsFromCache(oMessage.folderFullNameRaw, iSubUid);
-						return aFlags && 0 < aFlags.length && !!aFlags[0];
-					});
-
-					mFlaggedSubUid = _.find(oMessage.threads(), function (iSubUid) {
-						var aFlags = self.getMessageFlagsFromCache(oMessage.folderFullNameRaw, iSubUid);
-						return aFlags && 0 < aFlags.length && !!aFlags[1];
-					});
-
-					oMessage.hasUnseenSubMessage(mUnseenSubUid && 0 < Utils.pInt(mUnseenSubUid));
-					oMessage.hasFlaggedSubMessage(mFlaggedSubUid && 0 < Utils.pInt(mFlaggedSubUid));
-				}
-			}
-		};
-
-		/**
-		 * @param {(MessageModel|null)} oMessage
-		 */
-		CacheStorage.prototype.storeMessageFlagsToCache = function (oMessage)
-		{
-			if (oMessage)
-			{
-				this.setMessageFlagsToCache(
-					oMessage.folderFullNameRaw,
-					oMessage.uid,
-					[oMessage.unseen(), oMessage.flagged(), oMessage.answered(), oMessage.forwarded(), oMessage.isReadReceipt()]
-				);
-			}
-		};
-		/**
-		 * @param {string} sFolder
-		 * @param {string} sUid
-		 * @param {Array} aFlags
-		 */
-		CacheStorage.prototype.storeMessageFlagsToCacheByFolderAndUid = function (sFolder, sUid, aFlags)
-		{
-			if (Utils.isArray(aFlags) && 0 < aFlags.length)
-			{
-				this.setMessageFlagsToCache(sFolder, sUid, aFlags);
-			}
-		};
-
-		module.exports = new CacheStorage();
-
-	}());
-
-/***/ },
-
-/***/ 27:
-/*!**************************************************************!*\
-  !*** ./dev/ViewModels/Popups/PopupsFolderSystemViewModel.js ***!
-  \**************************************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	(function () {
-
-		'use strict';
-
-		var
-			_ = __webpack_require__(/*! _ */ 2),
-			ko = __webpack_require__(/*! ko */ 3),
-
-			Enums = __webpack_require__(/*! Common/Enums */ 6),
-			Consts = __webpack_require__(/*! Common/Consts */ 17),
-			Utils = __webpack_require__(/*! Common/Utils */ 1),
-
-			Settings = __webpack_require__(/*! Storage:Settings */ 10),
-			Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8),
-			Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13),
-
-			kn = __webpack_require__(/*! App:Knoin */ 5),
-			KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9)
-		;
-
-		/**
-		 * @constructor
-		 * @extends KnoinAbstractViewModel
-		 */
-		function PopupsFolderSystemViewModel()
-		{
-			KnoinAbstractViewModel.call(this, 'Popups', 'PopupsFolderSystem');
-
-			Utils.initOnStartOrLangChange(function () {
-				this.sChooseOnText = Utils.i18n('POPUPS_SYSTEM_FOLDERS/SELECT_CHOOSE_ONE');
-				this.sUnuseText = Utils.i18n('POPUPS_SYSTEM_FOLDERS/SELECT_UNUSE_NAME');
-			}, this);
-
-			this.notification = ko.observable('');
-
-			this.folderSelectList = ko.computed(function () {
-				return Utils.folderListOptionsBuilder([], Data.folderList(), Data.folderListSystemNames(), [
-					['', this.sChooseOnText],
-					[Consts.Values.UnuseOptionValue, this.sUnuseText]
-				]);
-			}, this);
-
-			var
-				self = this,
-				fSaveSystemFolders = null,
-				fCallback = null
-			;
-
-			this.sentFolder = Data.sentFolder;
-			this.draftFolder = Data.draftFolder;
-			this.spamFolder = Data.spamFolder;
-			this.trashFolder = Data.trashFolder;
-			this.archiveFolder = Data.archiveFolder;
-
-			fSaveSystemFolders = _.debounce(function () {
-
-				Settings.settingsSet('SentFolder', self.sentFolder());
-				Settings.settingsSet('DraftFolder', self.draftFolder());
-				Settings.settingsSet('SpamFolder', self.spamFolder());
-				Settings.settingsSet('TrashFolder', self.trashFolder());
-				Settings.settingsSet('ArchiveFolder', self.archiveFolder());
-
-				Remote.saveSystemFolders(Utils.emptyFunction, {
-					'SentFolder': self.sentFolder(),
-					'DraftFolder': self.draftFolder(),
-					'SpamFolder': self.spamFolder(),
-					'TrashFolder': self.trashFolder(),
-					'ArchiveFolder': self.archiveFolder(),
-					'NullFolder': 'NullFolder'
-				});
-
-			}, 1000);
-
-			fCallback = function () {
-
-				Settings.settingsSet('SentFolder', self.sentFolder());
-				Settings.settingsSet('DraftFolder', self.draftFolder());
-				Settings.settingsSet('SpamFolder', self.spamFolder());
-				Settings.settingsSet('TrashFolder', self.trashFolder());
-				Settings.settingsSet('ArchiveFolder', self.archiveFolder());
-
-				fSaveSystemFolders();
-			};
-
-			this.sentFolder.subscribe(fCallback);
-			this.draftFolder.subscribe(fCallback);
-			this.spamFolder.subscribe(fCallback);
-			this.trashFolder.subscribe(fCallback);
-			this.archiveFolder.subscribe(fCallback);
-
-			this.defautOptionsAfterRender = Utils.defautOptionsAfterRender;
-
-			kn.constructorEnd(this);
-		}
-
-		kn.extendAsViewModel(['View:Popup:FolderSystem', 'PopupsFolderSystemViewModel'], PopupsFolderSystemViewModel);
-		_.extend(PopupsFolderSystemViewModel.prototype, KnoinAbstractViewModel.prototype);
-
-		PopupsFolderSystemViewModel.prototype.sChooseOnText = '';
-		PopupsFolderSystemViewModel.prototype.sUnuseText = '';
-
-		/**
-		 * @param {number=} iNotificationType = Enums.SetSystemFoldersNotification.None
-		 */
-		PopupsFolderSystemViewModel.prototype.onShow = function (iNotificationType)
-		{
-			var sNotification = '';
-
-			iNotificationType = Utils.isUnd(iNotificationType) ? Enums.SetSystemFoldersNotification.None : iNotificationType;
-
-			switch (iNotificationType)
-			{
-				case Enums.SetSystemFoldersNotification.Sent:
-					sNotification = Utils.i18n('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_SENT');
-					break;
-				case Enums.SetSystemFoldersNotification.Draft:
-					sNotification = Utils.i18n('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_DRAFTS');
-					break;
-				case Enums.SetSystemFoldersNotification.Spam:
-					sNotification = Utils.i18n('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_SPAM');
-					break;
-				case Enums.SetSystemFoldersNotification.Trash:
-					sNotification = Utils.i18n('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_TRASH');
-					break;
-				case Enums.SetSystemFoldersNotification.Archive:
-					sNotification = Utils.i18n('POPUPS_SYSTEM_FOLDERS/NOTIFICATION_ARCHIVE');
-					break;
-			}
-
-			this.notification(sNotification);
-		};
-
-		module.exports = PopupsFolderSystemViewModel;
-
-	}());
-
-/***/ },
-
-/***/ 30:
-/*!**************************************!*\
-  !*** ./dev/Storages/LocalStorage.js ***!
-  \**************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
-
-	(function () {
-
-		'use strict';
-
-		/**
-		 * @constructor
-		 */
-		function LocalStorage()
-		{
-			var
-				NextStorageDriver = __webpack_require__(/*! _ */ 2).find([
-					__webpack_require__(/*! Storage:LocalStorage:LocalStorage */ 91),
-					__webpack_require__(/*! Storage:LocalStorage:Cookie */ 90)
-				], function (NextStorageDriver) {
-					return NextStorageDriver && NextStorageDriver.supported();
-				})
-			;
-
-			this.oDriver = null;
-
-			if (NextStorageDriver)
-			{
-				this.oDriver = new NextStorageDriver();
-			}
-		}
-
-		/**
-		 * @type {LocalStorageDriver|CookieDriver|null}
-		 */
-		LocalStorage.prototype.oDriver = null;
-
-		/**
-		 * @param {number} iKey
-		 * @param {*} mData
-		 * @return {boolean}
-		 */
-		LocalStorage.prototype.set = function (iKey, mData)
-		{
-			return this.oDriver ? this.oDriver.set('p' + iKey, mData) : false;
-		};
-
-		/**
-		 * @param {number} iKey
-		 * @return {*}
-		 */
-		LocalStorage.prototype.get = function (iKey)
-		{
-			return this.oDriver ? this.oDriver.get('p' + iKey) : null;
-		};
-
-		module.exports = new LocalStorage();
-
-	}());
-
-/***/ },
-
-/***/ 33:
-/*!***********************!*\
-  !*** external "JSON" ***!
-  \***********************/
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = JSON;
-
-/***/ },
-
-/***/ 38:
-/*!************************************!*\
-  !*** ./dev/Models/MessageModel.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	(function () {
-
-		'use strict';
-
-		var
-			window = __webpack_require__(/*! window */ 12),
-			_ = __webpack_require__(/*! _ */ 2),
-			$ = __webpack_require__(/*! $ */ 14),
-			ko = __webpack_require__(/*! ko */ 3),
-			moment = __webpack_require__(/*! moment */ 25),
-
-			Enums = __webpack_require__(/*! Common/Enums */ 6),
-			Utils = __webpack_require__(/*! Common/Utils */ 1),
-			Globals = __webpack_require__(/*! Common/Globals */ 7),
-			LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11),
-
-			EmailModel = __webpack_require__(/*! Model:Email */ 23),
-			AttachmentModel = __webpack_require__(/*! Model:Attachment */ 52)
-		;
-
-		/**
-		* @constructor
-		*/
-		function MessageModel()
-		{
-			this.folderFullNameRaw = '';
-			this.uid = '';
-			this.hash = '';
-			this.requestHash = '';
-			this.subject = ko.observable('');
-			this.subjectPrefix = ko.observable('');
-			this.subjectSuffix = ko.observable('');
-			this.size = ko.observable(0);
-			this.dateTimeStampInUTC = ko.observable(0);
-			this.priority = ko.observable(Enums.MessagePriority.Normal);
-
-			this.proxy = false;
-
-			this.fromEmailString = ko.observable('');
-			this.fromClearEmailString = ko.observable('');
-			this.toEmailsString = ko.observable('');
-			this.toClearEmailsString = ko.observable('');
-
-			this.senderEmailsString = ko.observable('');
-			this.senderClearEmailsString = ko.observable('');
-
-			this.emails = [];
-
-			this.from = [];
-			this.to = [];
-			this.cc = [];
-			this.bcc = [];
-			this.replyTo = [];
-			this.deliveredTo = [];
-
-			this.newForAnimation = ko.observable(false);
-
-			this.deleted = ko.observable(false);
-			this.unseen = ko.observable(false);
-			this.flagged = ko.observable(false);
-			this.answered = ko.observable(false);
-			this.forwarded = ko.observable(false);
-			this.isReadReceipt = ko.observable(false);
-
-			this.focused = ko.observable(false);
-			this.selected = ko.observable(false);
-			this.checked = ko.observable(false);
-			this.hasAttachments = ko.observable(false);
-			this.attachmentsMainType = ko.observable('');
-			
-			this.moment = ko.observable(moment(moment.unix(0)));
-			
-			this.attachmentIconClass = ko.computed(function () {
-				var sClass = '';
-				if (this.hasAttachments())
-				{
-					sClass = 'icon-attachment';
-					switch (this.attachmentsMainType())
-					{
-						case 'image':
-							sClass = 'icon-image';
-							break;
-						case 'archive':
-							sClass = 'icon-file-zip';
-							break;
-						case 'doc':
-							sClass = 'icon-file-text';
-							break;
-		 //				case 'pdf':
-		 //					sClass = 'icon-file-pdf';
-		 //					break;
-					}
-				}
-				return sClass;
-			}, this);
-
-			this.fullFormatDateValue = ko.computed(function () {
-				return MessageModel.calculateFullFromatDateValue(this.dateTimeStampInUTC());
-			}, this);
-
-			this.momentDate = Utils.createMomentDate(this);
-			this.momentShortDate = Utils.createMomentShortDate(this);
-
-			this.dateTimeStampInUTC.subscribe(function (iValue) {
-				var iNow = moment().unix();
-				this.moment(moment.unix(iNow < iValue ? iNow : iValue));
-			}, this);
-
-			this.body = null;
-			this.plainRaw = '';
-			this.isHtml = ko.observable(false);
-			this.hasImages = ko.observable(false);
-			this.attachments = ko.observableArray([]);
-
-			this.isPgpSigned = ko.observable(false);
-			this.isPgpEncrypted = ko.observable(false);
-			this.pgpSignedVerifyStatus = ko.observable(Enums.SignedVerifyStatus.None);
-			this.pgpSignedVerifyUser = ko.observable('');
-
-			this.priority = ko.observable(Enums.MessagePriority.Normal);
-			this.readReceipt = ko.observable('');
-
-			this.aDraftInfo = [];
-			this.sMessageId = '';
-			this.sInReplyTo = '';
-			this.sReferences = '';
-
-			this.parentUid = ko.observable(0);
-			this.threads = ko.observableArray([]);
-			this.threadsLen = ko.observable(0);
-			this.hasUnseenSubMessage = ko.observable(false);
-			this.hasFlaggedSubMessage = ko.observable(false);
-
-			this.lastInCollapsedThread = ko.observable(false);
-			this.lastInCollapsedThreadLoading = ko.observable(false);
-
-			this.threadsLenResult = ko.computed(function () {
-				var iCount = this.threadsLen();
-				return 0 === this.parentUid() && 0 < iCount ? iCount + 1 : '';
-			}, this);
-		}
-
-		/**
-		* @static
-		* @param {AjaxJsonMessage} oJsonMessage
-		* @return {?MessageModel}
-		*/
-		MessageModel.newInstanceFromJson = function (oJsonMessage)
-		{
-			var oMessageModel = new MessageModel();
-			return oMessageModel.initByJson(oJsonMessage) ? oMessageModel : null;
-		};
-
-		/**
-		* @static
-		* @param {number} iTimeStampInUTC
-		* @return {string}
-		*/
-		MessageModel.calculateFullFromatDateValue = function (iTimeStampInUTC)
-		{
-			return 0 < iTimeStampInUTC ? moment.unix(iTimeStampInUTC).format('LLL') : '';
-		};
-
-		/**
-		* @static
-		* @param {Array} aEmail
-		* @param {boolean=} bFriendlyView
-		* @param {boolean=} bWrapWithLink = false
-		* @return {string}
-		*/
-		MessageModel.emailsToLine = function (aEmail, bFriendlyView, bWrapWithLink)
-		{
-			var
-				aResult = [],
-				iIndex = 0,
-				iLen = 0
-			;
-
-			if (Utils.isNonEmptyArray(aEmail))
-			{
-				for (iIndex = 0, iLen = aEmail.length; iIndex < iLen; iIndex++)
-				{
-					aResult.push(aEmail[iIndex].toLine(bFriendlyView, bWrapWithLink));
-				}
-			}
-
-			return aResult.join(', ');
-		};
-
-		/**
-		* @static
-		* @param {Array} aEmail
-		* @return {string}
-		*/
-		MessageModel.emailsToLineClear = function (aEmail)
-		{
-			var
-				aResult = [],
-				iIndex = 0,
-				iLen = 0
-			;
-
-			if (Utils.isNonEmptyArray(aEmail))
-			{
-				for (iIndex = 0, iLen = aEmail.length; iIndex < iLen; iIndex++)
-				{
-					if (aEmail[iIndex] && aEmail[iIndex].email && '' !== aEmail[iIndex].name)
-					{
-						aResult.push(aEmail[iIndex].email);
-					}
-				}
-			}
-
-			return aResult.join(', ');
-		};
-
-		/**
-		* @static
-		* @param {?Array} aJsonEmails
-		* @return {Array.}
-		*/
-		MessageModel.initEmailsFromJson = function (aJsonEmails)
-		{
-			var
-				iIndex = 0,
-				iLen = 0,
-				oEmailModel = null,
-				aResult = []
-			;
-
-			if (Utils.isNonEmptyArray(aJsonEmails))
-			{
-				for (iIndex = 0, iLen = aJsonEmails.length; iIndex < iLen; iIndex++)
-				{
-					oEmailModel = EmailModel.newInstanceFromJson(aJsonEmails[iIndex]);
-					if (oEmailModel)
-					{
-						aResult.push(oEmailModel);
-					}
-				}
-			}
-
-			return aResult;
-		};
-
-		/**
-		* @static
-		* @param {Array.} aMessageEmails
-		* @param {Object} oLocalUnic
-		* @param {Array} aLocalEmails
-		*/
-		MessageModel.replyHelper = function (aMessageEmails, oLocalUnic, aLocalEmails)
-		{
-		   if (aMessageEmails && 0 < aMessageEmails.length)
-		   {
-			   var
-				   iIndex = 0,
-				   iLen = aMessageEmails.length
-			   ;
-
-			   for (; iIndex < iLen; iIndex++)
-			   {
-				   if (Utils.isUnd(oLocalUnic[aMessageEmails[iIndex].email]))
-				   {
-					   oLocalUnic[aMessageEmails[iIndex].email] = true;
-					   aLocalEmails.push(aMessageEmails[iIndex]);
-				   }
-			   }
-		   }
-		};
-
-		MessageModel.prototype.clear = function ()
-		{
-		   this.folderFullNameRaw = '';
-		   this.uid = '';
-		   this.hash = '';
-		   this.requestHash = '';
-		   this.subject('');
-		   this.subjectPrefix('');
-		   this.subjectSuffix('');
-		   this.size(0);
-		   this.dateTimeStampInUTC(0);
-		   this.priority(Enums.MessagePriority.Normal);
-
-		   this.proxy = false;
-
-		   this.fromEmailString('');
-		   this.fromClearEmailString('');
-		   this.toEmailsString('');
-		   this.toClearEmailsString('');
-		   this.senderEmailsString('');
-		   this.senderClearEmailsString('');
-
-		   this.emails = [];
-
-		   this.from = [];
-		   this.to = [];
-		   this.cc = [];
-		   this.bcc = [];
-		   this.replyTo = [];
-		   this.deliveredTo = [];
-
-		   this.newForAnimation(false);
-
-		   this.deleted(false);
-		   this.unseen(false);
-		   this.flagged(false);
-		   this.answered(false);
-		   this.forwarded(false);
-		   this.isReadReceipt(false);
-
-		   this.selected(false);
-		   this.checked(false);
-		   this.hasAttachments(false);
-		   this.attachmentsMainType('');
-
-		   this.body = null;
-		   this.isHtml(false);
-		   this.hasImages(false);
-		   this.attachments([]);
-
-		   this.isPgpSigned(false);
-		   this.isPgpEncrypted(false);
-		   this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.None);
-		   this.pgpSignedVerifyUser('');
-
-		   this.priority(Enums.MessagePriority.Normal);
-		   this.readReceipt('');
-		   this.aDraftInfo = [];
-		   this.sMessageId = '';
-		   this.sInReplyTo = '';
-		   this.sReferences = '';
-
-		   this.parentUid(0);
-		   this.threads([]);
-		   this.threadsLen(0);
-		   this.hasUnseenSubMessage(false);
-		   this.hasFlaggedSubMessage(false);
-
-		   this.lastInCollapsedThread(false);
-		   this.lastInCollapsedThreadLoading(false);
-		};
-
-		/**
-		 * @return {string}
-		 */
-		MessageModel.prototype.friendlySize = function ()
-		{
-			return Utils.friendlySize(this.size());
-		};
-
-		MessageModel.prototype.computeSenderEmail = function ()
-		{
-			var
-				Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8),
-				sSent = Data.sentFolder(),
-				sDraft = Data.draftFolder()
-			;
-
-			this.senderEmailsString(this.folderFullNameRaw === sSent || this.folderFullNameRaw === sDraft ?
-				this.toEmailsString() : this.fromEmailString());
-
-			this.senderClearEmailsString(this.folderFullNameRaw === sSent || this.folderFullNameRaw === sDraft ?
-				this.toClearEmailsString() : this.fromClearEmailString());
-		};
-
-		/**
-		* @param {AjaxJsonMessage} oJsonMessage
-		* @return {boolean}
-		*/
-		MessageModel.prototype.initByJson = function (oJsonMessage)
-		{
-		   var bResult = false;
-		   if (oJsonMessage && 'Object/Message' === oJsonMessage['@Object'])
-		   {
-			   this.folderFullNameRaw = oJsonMessage.Folder;
-			   this.uid = oJsonMessage.Uid;
-			   this.hash = oJsonMessage.Hash;
-			   this.requestHash = oJsonMessage.RequestHash;
-
-			   this.proxy = !!oJsonMessage.ExternalProxy;
-
-			   this.size(Utils.pInt(oJsonMessage.Size));
-
-			   this.from = MessageModel.initEmailsFromJson(oJsonMessage.From);
-			   this.to = MessageModel.initEmailsFromJson(oJsonMessage.To);
-			   this.cc = MessageModel.initEmailsFromJson(oJsonMessage.Cc);
-			   this.bcc = MessageModel.initEmailsFromJson(oJsonMessage.Bcc);
-			   this.replyTo = MessageModel.initEmailsFromJson(oJsonMessage.ReplyTo);
-			   this.deliveredTo = MessageModel.initEmailsFromJson(oJsonMessage.DeliveredTo);
-
-			   this.subject(oJsonMessage.Subject);
-			   if (Utils.isArray(oJsonMessage.SubjectParts))
-			   {
-				   this.subjectPrefix(oJsonMessage.SubjectParts[0]);
-				   this.subjectSuffix(oJsonMessage.SubjectParts[1]);
-			   }
-			   else
-			   {
-				   this.subjectPrefix('');
-				   this.subjectSuffix(this.subject());
-			   }
-
-			   this.dateTimeStampInUTC(Utils.pInt(oJsonMessage.DateTimeStampInUTC));
-			   this.hasAttachments(!!oJsonMessage.HasAttachments);
-			   this.attachmentsMainType(oJsonMessage.AttachmentsMainType);
-
-			   this.fromEmailString(MessageModel.emailsToLine(this.from, true));
-			   this.fromClearEmailString(MessageModel.emailsToLineClear(this.from));
-			   this.toEmailsString(MessageModel.emailsToLine(this.to, true));
-			   this.toClearEmailsString(MessageModel.emailsToLineClear(this.to));
-
-			   this.parentUid(Utils.pInt(oJsonMessage.ParentThread));
-			   this.threads(Utils.isArray(oJsonMessage.Threads) ? oJsonMessage.Threads : []);
-			   this.threadsLen(Utils.pInt(oJsonMessage.ThreadsLen));
-
-			   this.initFlagsByJson(oJsonMessage);
-			   this.computeSenderEmail();
-
-			   bResult = true;
-		   }
-
-		   return bResult;
-		};
-
-		/**
-		* @param {AjaxJsonMessage} oJsonMessage
-		* @return {boolean}
-		*/
-		MessageModel.prototype.initUpdateByMessageJson = function (oJsonMessage)
-		{
-		   var
-			   Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8),
-			   bResult = false,
-			   iPriority = Enums.MessagePriority.Normal
-		   ;
-
-		   if (oJsonMessage && 'Object/Message' === oJsonMessage['@Object'])
-		   {
-			   iPriority = Utils.pInt(oJsonMessage.Priority);
-			   this.priority(-1 < Utils.inArray(iPriority, [Enums.MessagePriority.High, Enums.MessagePriority.Low]) ?
-				   iPriority : Enums.MessagePriority.Normal);
-
-			   this.aDraftInfo = oJsonMessage.DraftInfo;
-
-			   this.sMessageId = oJsonMessage.MessageId;
-			   this.sInReplyTo = oJsonMessage.InReplyTo;
-			   this.sReferences = oJsonMessage.References;
-
-			   this.proxy = !!oJsonMessage.ExternalProxy;
-
-			   if (Data.capaOpenPGP())
-			   {
-				   this.isPgpSigned(!!oJsonMessage.PgpSigned);
-				   this.isPgpEncrypted(!!oJsonMessage.PgpEncrypted);
-			   }
-
-			   this.hasAttachments(!!oJsonMessage.HasAttachments);
-			   this.attachmentsMainType(oJsonMessage.AttachmentsMainType);
-
-			   this.foundedCIDs = Utils.isArray(oJsonMessage.FoundedCIDs) ? oJsonMessage.FoundedCIDs : [];
-			   this.attachments(this.initAttachmentsFromJson(oJsonMessage.Attachments));
-
-			   this.readReceipt(oJsonMessage.ReadReceipt || '');
-
-			   this.computeSenderEmail();
-
-			   bResult = true;
-		   }
-
-		   return bResult;
-		};
-
-		/**
-		* @param {(AjaxJsonAttachment|null)} oJsonAttachments
-		* @return {Array}
-		*/
-		MessageModel.prototype.initAttachmentsFromJson = function (oJsonAttachments)
-		{
-		   var
-			   iIndex = 0,
-			   iLen = 0,
-			   oAttachmentModel = null,
-			   aResult = []
-		   ;
-
-		   if (oJsonAttachments && 'Collection/AttachmentCollection' === oJsonAttachments['@Object'] &&
-			   Utils.isNonEmptyArray(oJsonAttachments['@Collection']))
-		   {
-			   for (iIndex = 0, iLen = oJsonAttachments['@Collection'].length; iIndex < iLen; iIndex++)
-			   {
-				   oAttachmentModel = AttachmentModel.newInstanceFromJson(oJsonAttachments['@Collection'][iIndex]);
-				   if (oAttachmentModel)
-				   {
-					   if ('' !== oAttachmentModel.cidWithOutTags && 0 < this.foundedCIDs.length &&
-						   0 <= Utils.inArray(oAttachmentModel.cidWithOutTags, this.foundedCIDs))
-					   {
-						   oAttachmentModel.isLinked = true;
-					   }
-
-					   aResult.push(oAttachmentModel);
-				   }
-			   }
-		   }
-
-		   return aResult;
-		};
-
-		/**
-		* @param {AjaxJsonMessage} oJsonMessage
-		* @return {boolean}
-		*/
-		MessageModel.prototype.initFlagsByJson = function (oJsonMessage)
-		{
-		   var bResult = false;
-
-		   if (oJsonMessage && 'Object/Message' === oJsonMessage['@Object'])
-		   {
-			   this.unseen(!oJsonMessage.IsSeen);
-			   this.flagged(!!oJsonMessage.IsFlagged);
-			   this.answered(!!oJsonMessage.IsAnswered);
-			   this.forwarded(!!oJsonMessage.IsForwarded);
-			   this.isReadReceipt(!!oJsonMessage.IsReadReceipt);
-
-			   bResult = true;
-		   }
-
-		   return bResult;
-		};
-
-		/**
-		* @param {boolean} bFriendlyView
-		* @param {boolean=} bWrapWithLink = false
-		* @return {string}
-		*/
-		MessageModel.prototype.fromToLine = function (bFriendlyView, bWrapWithLink)
-		{
-		   return MessageModel.emailsToLine(this.from, bFriendlyView, bWrapWithLink);
-		};
-
-		/**
-		* @param {boolean} bFriendlyView
-		* @param {boolean=} bWrapWithLink = false
-		* @return {string}
-		*/
-		MessageModel.prototype.toToLine = function (bFriendlyView, bWrapWithLink)
-		{
-		   return MessageModel.emailsToLine(this.to, bFriendlyView, bWrapWithLink);
-		};
-
-		/**
-		* @param {boolean} bFriendlyView
-		* @param {boolean=} bWrapWithLink = false
-		* @return {string}
-		*/
-		MessageModel.prototype.ccToLine = function (bFriendlyView, bWrapWithLink)
-		{
-		   return MessageModel.emailsToLine(this.cc, bFriendlyView, bWrapWithLink);
-		};
-
-		/**
-		* @param {boolean} bFriendlyView
-		* @param {boolean=} bWrapWithLink = false
-		* @return {string}
-		*/
-		MessageModel.prototype.bccToLine = function (bFriendlyView, bWrapWithLink)
-		{
-		   return MessageModel.emailsToLine(this.bcc, bFriendlyView, bWrapWithLink);
-		};
-
-		/**
-		* @return string
-		*/
-		MessageModel.prototype.lineAsCcc = function ()
-		{
-		   var aResult = [];
-		   if (this.deleted())
-		   {
-			   aResult.push('deleted');
-		   }
-		   if (this.selected())
-		   {
-			   aResult.push('selected');
-		   }
-		   if (this.checked())
-		   {
-			   aResult.push('checked');
-		   }
-		   if (this.flagged())
-		   {
-			   aResult.push('flagged');
-		   }
-		   if (this.unseen())
-		   {
-			   aResult.push('unseen');
-		   }
-		   if (this.answered())
-		   {
-			   aResult.push('answered');
-		   }
-		   if (this.forwarded())
-		   {
-			   aResult.push('forwarded');
-		   }
-		   if (this.focused())
-		   {
-			   aResult.push('focused');
-		   }
-		   if (this.hasAttachments())
-		   {
-			   aResult.push('withAttachments');
-			   switch (this.attachmentsMainType())
-			   {
-				   case 'image':
-					   aResult.push('imageOnlyAttachments');
-					   break;
-				   case 'archive':
-					   aResult.push('archiveOnlyAttachments');
-					   break;
-			   }
-		   }
-		   if (this.newForAnimation())
-		   {
-			   aResult.push('new');
-		   }
-		   if ('' === this.subject())
-		   {
-			   aResult.push('emptySubject');
-		   }
-		   if (0 < this.parentUid())
-		   {
-			   aResult.push('hasParentMessage');
-		   }
-		   if (0 < this.threadsLen() && 0 === this.parentUid())
-		   {
-			   aResult.push('hasChildrenMessage');
-		   }
-		   if (this.hasUnseenSubMessage())
-		   {
-			   aResult.push('hasUnseenSubMessage');
-		   }
-		   if (this.hasFlaggedSubMessage())
-		   {
-			   aResult.push('hasFlaggedSubMessage');
-		   }
-
-		   return aResult.join(' ');
-		};
-
-		/**
-		* @return {boolean}
-		*/
-		MessageModel.prototype.hasVisibleAttachments = function ()
-		{
-		   return !!_.find(this.attachments(), function (oAttachment) {
-			   return !oAttachment.isLinked;
-		   });
-		};
-
-		/**
-		* @param {string} sCid
-		* @return {*}
-		*/
-		MessageModel.prototype.findAttachmentByCid = function (sCid)
-		{
-		   var
-			   oResult = null,
-			   aAttachments = this.attachments()
-		   ;
-
-		   if (Utils.isNonEmptyArray(aAttachments))
-		   {
-			   sCid = sCid.replace(/^<+/, '').replace(/>+$/, '');
-			   oResult = _.find(aAttachments, function (oAttachment) {
-				   return sCid === oAttachment.cidWithOutTags;
-			   });
-		   }
-
-		   return oResult || null;
-		};
-
-		/**
-		* @param {string} sContentLocation
-		* @return {*}
-		*/
-		MessageModel.prototype.findAttachmentByContentLocation = function (sContentLocation)
-		{
-		   var
-			   oResult = null,
-			   aAttachments = this.attachments()
-		   ;
-
-		   if (Utils.isNonEmptyArray(aAttachments))
-		   {
-			   oResult = _.find(aAttachments, function (oAttachment) {
-				   return sContentLocation === oAttachment.contentLocation;
-			   });
-		   }
-
-		   return oResult || null;
-		};
-
-
-		/**
-		* @return {string}
-		*/
-		MessageModel.prototype.messageId = function ()
-		{
-		   return this.sMessageId;
-		};
-
-		/**
-		* @return {string}
-		*/
-		MessageModel.prototype.inReplyTo = function ()
-		{
-		   return this.sInReplyTo;
-		};
-
-		/**
-		* @return {string}
-		*/
-		MessageModel.prototype.references = function ()
-		{
-		   return this.sReferences;
-		};
-
-		/**
-		* @return {string}
-		*/
-		MessageModel.prototype.fromAsSingleEmail = function ()
-		{
-		   return Utils.isArray(this.from) && this.from[0] ? this.from[0].email : '';
-		};
-
-		/**
-		* @return {string}
-		*/
-		MessageModel.prototype.viewLink = function ()
-		{
-		   return LinkBuilder.messageViewLink(this.requestHash);
-		};
-
-		/**
-		* @return {string}
-		*/
-		MessageModel.prototype.downloadLink = function ()
-		{
-		   return LinkBuilder.messageDownloadLink(this.requestHash);
-		};
-
-		/**
-		* @param {Object} oExcludeEmails
-		* @return {Array}
-		*/
-		MessageModel.prototype.replyEmails = function (oExcludeEmails)
-		{
-		   var
-			   aResult = [],
-			   oUnic = Utils.isUnd(oExcludeEmails) ? {} : oExcludeEmails
-		   ;
-
-		   MessageModel.replyHelper(this.replyTo, oUnic, aResult);
-		   if (0 === aResult.length)
-		   {
-			   MessageModel.replyHelper(this.from, oUnic, aResult);
-		   }
-
-		   return aResult;
-		};
-
-		/**
-		* @param {Object} oExcludeEmails
-		* @return {Array.}
-		*/
-		MessageModel.prototype.replyAllEmails = function (oExcludeEmails)
-		{
-		   var
-			   aToResult = [],
-			   aCcResult = [],
-			   oUnic = Utils.isUnd(oExcludeEmails) ? {} : oExcludeEmails
-		   ;
-
-		   MessageModel.replyHelper(this.replyTo, oUnic, aToResult);
-		   if (0 === aToResult.length)
-		   {
-			   MessageModel.replyHelper(this.from, oUnic, aToResult);
-		   }
-
-		   MessageModel.replyHelper(this.to, oUnic, aToResult);
-		   MessageModel.replyHelper(this.cc, oUnic, aCcResult);
-
-		   return [aToResult, aCcResult];
-		};
-
-		/**
-		* @return {string}
-		*/
-		MessageModel.prototype.textBodyToString = function ()
-		{
-		   return this.body ? this.body.html() : '';
-		};
-
-		/**
-		* @return {string}
-		*/
-		MessageModel.prototype.attachmentsToStringLine = function ()
-		{
-		   var aAttachLines = _.map(this.attachments(), function (oItem) {
-			   return oItem.fileName + ' (' + oItem.friendlySize + ')';
-		   });
-
-		   return aAttachLines && 0 < aAttachLines.length ? aAttachLines.join(', ') : '';
-		};
-
-		/**
-		* @return {Object}
-		*/
-		MessageModel.prototype.getDataForWindowPopup = function ()
-		{
-		   return {
-			   'popupFrom': this.fromToLine(false),
-			   'popupTo': this.toToLine(false),
-			   'popupCc': this.ccToLine(false),
-			   'popupBcc': this.bccToLine(false),
-			   'popupSubject': this.subject(),
-			   'popupIsHtml': this.isHtml(),
-			   'popupDate': this.fullFormatDateValue(),
-			   'popupAttachments': this.attachmentsToStringLine(),
-			   'popupBody': this.textBodyToString()
-		   };
-		};
-
-		/**
-		* @param {boolean=} bPrint = false
-		*/
-		MessageModel.prototype.viewPopupMessage = function (bPrint)
-		{
-		   Utils.windowPopupKnockout(this.getDataForWindowPopup(), 'PopupsWindowSimpleMessage', this.subject(), function (oPopupWin) {
-			   if (oPopupWin && oPopupWin.document && oPopupWin.document.body)
-			   {
-				   $('img.lazy', oPopupWin.document.body).each(function (iIndex, oImg) {
-
-					   var
-						   $oImg = $(oImg),
-						   sOrig = $oImg.data('original'),
-						   sSrc = $oImg.attr('src')
-					   ;
-
-					   if (0 <= iIndex && sOrig && !sSrc)
-					   {
-						   $oImg.attr('src', sOrig);
-					   }
-				   });
-
-				   if (bPrint)
-				   {
-					   window.setTimeout(function () {
-						   oPopupWin.print();
-					   }, 100);
-				   }
-			   }
-		   });
-		};
-
-		MessageModel.prototype.printMessage = function ()
-		{
-		   this.viewPopupMessage(true);
-		};
-
-		/**
-		* @returns {string}
-		*/
-		MessageModel.prototype.generateUid = function ()
-		{
-		   return this.folderFullNameRaw + '/' + this.uid;
-		};
-
-		/**
-		* @param {MessageModel} oMessage
-		* @return {MessageModel}
-		*/
-		MessageModel.prototype.populateByMessageListItem = function (oMessage)
-		{
-		   this.folderFullNameRaw = oMessage.folderFullNameRaw;
-		   this.uid = oMessage.uid;
-		   this.hash = oMessage.hash;
-		   this.requestHash = oMessage.requestHash;
-		   this.subject(oMessage.subject());
-		   this.subjectPrefix(this.subjectPrefix());
-		   this.subjectSuffix(this.subjectSuffix());
-
-		   this.size(oMessage.size());
-		   this.dateTimeStampInUTC(oMessage.dateTimeStampInUTC());
-		   this.priority(oMessage.priority());
-
-		   this.proxy = oMessage.proxy;
-
-		   this.fromEmailString(oMessage.fromEmailString());
-		   this.fromClearEmailString(oMessage.fromClearEmailString());
-		   this.toEmailsString(oMessage.toEmailsString());
-		   this.toClearEmailsString(oMessage.toClearEmailsString());
-
-		   this.emails = oMessage.emails;
-
-		   this.from = oMessage.from;
-		   this.to = oMessage.to;
-		   this.cc = oMessage.cc;
-		   this.bcc = oMessage.bcc;
-		   this.replyTo = oMessage.replyTo;
-		   this.deliveredTo = oMessage.deliveredTo;
-
-		   this.unseen(oMessage.unseen());
-		   this.flagged(oMessage.flagged());
-		   this.answered(oMessage.answered());
-		   this.forwarded(oMessage.forwarded());
-		   this.isReadReceipt(oMessage.isReadReceipt());
-
-		   this.selected(oMessage.selected());
-		   this.checked(oMessage.checked());
-		   this.hasAttachments(oMessage.hasAttachments());
-		   this.attachmentsMainType(oMessage.attachmentsMainType());
-
-		   this.moment(oMessage.moment());
-
-		   this.body = null;
-
-		   this.priority(Enums.MessagePriority.Normal);
-		   this.aDraftInfo = [];
-		   this.sMessageId = '';
-		   this.sInReplyTo = '';
-		   this.sReferences = '';
-
-		   this.parentUid(oMessage.parentUid());
-		   this.threads(oMessage.threads());
-		   this.threadsLen(oMessage.threadsLen());
-
-		   this.computeSenderEmail();
-
-		   return this;
-		};
-
-		MessageModel.prototype.showExternalImages = function (bLazy)
-		{
-		   if (this.body && this.body.data('rl-has-images'))
-		   {
-			   var sAttr = '';
-			   bLazy = Utils.isUnd(bLazy) ? false : bLazy;
-
-			   this.hasImages(false);
-			   this.body.data('rl-has-images', false);
-
-			   sAttr = this.proxy ? 'data-x-additional-src' : 'data-x-src';
-			   $('[' + sAttr + ']', this.body).each(function () {
-				   if (bLazy && $(this).is('img'))
-				   {
-					   $(this)
-						   .addClass('lazy')
-						   .attr('data-original', $(this).attr(sAttr))
-						   .removeAttr(sAttr)
-					   ;
-				   }
-				   else
-				   {
-					   $(this).attr('src', $(this).attr(sAttr)).removeAttr(sAttr);
-				   }
-			   });
-
-			   sAttr = this.proxy ? 'data-x-additional-style-url' : 'data-x-style-url';
-			   $('[' + sAttr + ']', this.body).each(function () {
-				   var sStyle = Utils.trim($(this).attr('style'));
-				   sStyle = '' === sStyle ? '' : (';' === sStyle.substr(-1) ? sStyle + ' ' : sStyle + '; ');
-				   $(this).attr('style', sStyle + $(this).attr(sAttr)).removeAttr(sAttr);
-			   });
-
-			   if (bLazy)
-			   {
-				   $('img.lazy', this.body).addClass('lazy-inited').lazyload({
-					   'threshold' : 400,
-					   'effect' : 'fadeIn',
-					   'skip_invisible' : false,
-					   'container': $('.RL-MailMessageView .messageView .messageItem .content')[0]
-				   });
-
-				   Globals.$win.resize();
-			   }
-
-			   Utils.windowResize(500);
-		   }
-		};
-
-		MessageModel.prototype.showInternalImages = function (bLazy)
-		{
-		   if (this.body && !this.body.data('rl-init-internal-images'))
-		   {
-			   this.body.data('rl-init-internal-images', true);
-
-			   bLazy = Utils.isUnd(bLazy) ? false : bLazy;
-
-			   var self = this;
-
-			   $('[data-x-src-cid]', this.body).each(function () {
-
-				   var oAttachment = self.findAttachmentByCid($(this).attr('data-x-src-cid'));
-				   if (oAttachment && oAttachment.download)
-				   {
-					   if (bLazy && $(this).is('img'))
-					   {
-						   $(this)
-							   .addClass('lazy')
-							   .attr('data-original', oAttachment.linkPreview());
-					   }
-					   else
-					   {
-						   $(this).attr('src', oAttachment.linkPreview());
-					   }
-				   }
-			   });
-
-			   $('[data-x-src-location]', this.body).each(function () {
-
-				   var oAttachment = self.findAttachmentByContentLocation($(this).attr('data-x-src-location'));
-				   if (!oAttachment)
-				   {
-					   oAttachment = self.findAttachmentByCid($(this).attr('data-x-src-location'));
-				   }
-
-				   if (oAttachment && oAttachment.download)
-				   {
-					   if (bLazy && $(this).is('img'))
-					   {
-						   $(this)
-							   .addClass('lazy')
-							   .attr('data-original', oAttachment.linkPreview());
-					   }
-					   else
-					   {
-						   $(this).attr('src', oAttachment.linkPreview());
-					   }
-				   }
-			   });
-
-			   $('[data-x-style-cid]', this.body).each(function () {
-
-				   var
-					   sStyle = '',
-					   sName = '',
-					   oAttachment = self.findAttachmentByCid($(this).attr('data-x-style-cid'))
-				   ;
-
-				   if (oAttachment && oAttachment.linkPreview)
-				   {
-					   sName = $(this).attr('data-x-style-cid-name');
-					   if ('' !== sName)
-					   {
-						   sStyle = Utils.trim($(this).attr('style'));
-						   sStyle = '' === sStyle ? '' : (';' === sStyle.substr(-1) ? sStyle + ' ' : sStyle + '; ');
-						   $(this).attr('style', sStyle + sName + ': url(\'' + oAttachment.linkPreview() + '\')');
-					   }
-				   }
-			   });
-
-			   if (bLazy)
-			   {
-				   (function ($oImg, oContainer) {
-					   _.delay(function () {
-						   $oImg.addClass('lazy-inited').lazyload({
-							   'threshold' : 400,
-							   'effect' : 'fadeIn',
-							   'skip_invisible' : false,
-							   'container': oContainer
-						   });
-					   }, 300);
-				   }($('img.lazy', self.body), $('.RL-MailMessageView .messageView .messageItem .content')[0]));
-			   }
-
-			   Utils.windowResize(500);
-		   }
-		};
-
-		MessageModel.prototype.storeDataToDom = function ()
-		{
-		   if (this.body)
-		   {
-			   this.body.data('rl-is-html', !!this.isHtml());
-			   this.body.data('rl-has-images', !!this.hasImages());
-
-			   this.body.data('rl-plain-raw', this.plainRaw);
-
-			   var Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8);
-			   if (Data.capaOpenPGP())
-			   {
-				   this.body.data('rl-plain-pgp-signed', !!this.isPgpSigned());
-				   this.body.data('rl-plain-pgp-encrypted', !!this.isPgpEncrypted());
-				   this.body.data('rl-pgp-verify-status', this.pgpSignedVerifyStatus());
-				   this.body.data('rl-pgp-verify-user', this.pgpSignedVerifyUser());
-			   }
-		   }
-		};
-
-		MessageModel.prototype.storePgpVerifyDataToDom = function ()
-		{
-			var Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8);
-			if (this.body && Data.capaOpenPGP())
-			{
-				this.body.data('rl-pgp-verify-status', this.pgpSignedVerifyStatus());
-				this.body.data('rl-pgp-verify-user', this.pgpSignedVerifyUser());
-			}
-		};
-
-		MessageModel.prototype.fetchDataToDom = function ()
-		{
-			if (this.body)
-			{
-				this.isHtml(!!this.body.data('rl-is-html'));
-				this.hasImages(!!this.body.data('rl-has-images'));
-
-				this.plainRaw = Utils.pString(this.body.data('rl-plain-raw'));
-
-				var Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8);
-				if (Data.capaOpenPGP())
-				{
-					this.isPgpSigned(!!this.body.data('rl-plain-pgp-signed'));
-					this.isPgpEncrypted(!!this.body.data('rl-plain-pgp-encrypted'));
-					this.pgpSignedVerifyStatus(this.body.data('rl-pgp-verify-status'));
-					this.pgpSignedVerifyUser(this.body.data('rl-pgp-verify-user'));
-				}
-				else
-				{
-					this.isPgpSigned(false);
-					this.isPgpEncrypted(false);
-					this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.None);
-					this.pgpSignedVerifyUser('');
-				}
-			}
-		};
-
-		MessageModel.prototype.verifyPgpSignedClearMessage = function ()
-		{
-		   if (this.isPgpSigned())
-		   {
-			   var
-				   aRes = [],
-				   mPgpMessage = null,
-				   Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8),
-				   sFrom = this.from && this.from[0] && this.from[0].email ? this.from[0].email : '',
-				   aPublicKeys = Data.findPublicKeysByEmail(sFrom),
-				   oValidKey = null,
-				   oValidSysKey = null,
-				   sPlain = ''
-			   ;
-
-			   this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.Error);
-			   this.pgpSignedVerifyUser('');
-
-			   try
-			   {
-				   mPgpMessage = window.openpgp.cleartext.readArmored(this.plainRaw);
-				   if (mPgpMessage && mPgpMessage.getText)
-				   {
-					   this.pgpSignedVerifyStatus(
-						   aPublicKeys.length ? Enums.SignedVerifyStatus.Unverified : Enums.SignedVerifyStatus.UnknownPublicKeys);
-
-					   aRes = mPgpMessage.verify(aPublicKeys);
-					   if (aRes && 0 < aRes.length)
-					   {
-						   oValidKey = _.find(aRes, function (oItem) {
-							   return oItem && oItem.keyid && oItem.valid;
-						   });
-
-						   if (oValidKey)
-						   {
-							   oValidSysKey = Data.findPublicKeyByHex(oValidKey.keyid.toHex());
-							   if (oValidSysKey)
-							   {
-								   sPlain = mPgpMessage.getText();
-
-								   this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.Success);
-								   this.pgpSignedVerifyUser(oValidSysKey.user);
-
-								   sPlain =
-									   Globals.$div.empty().append(
-										   $('
').text(sPlain)
-									   ).html()
-								   ;
-
-								   Globals.$div.empty();
-
-								   this.replacePlaneTextBody(sPlain);
-							   }
-						   }
-					   }
-				   }
-			   }
-			   catch (oExc) {}
-
-			   this.storePgpVerifyDataToDom();
-		   }
-		};
-
-		MessageModel.prototype.decryptPgpEncryptedMessage = function (sPassword)
-		{
-		   if (this.isPgpEncrypted())
-		   {
-			   var
-				   aRes = [],
-				   mPgpMessage = null,
-				   mPgpMessageDecrypted = null,
-				   Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8),
-				   sFrom = this.from && this.from[0] && this.from[0].email ? this.from[0].email : '',
-				   aPublicKey = Data.findPublicKeysByEmail(sFrom),
-				   oPrivateKey = Data.findSelfPrivateKey(sPassword),
-				   oValidKey = null,
-				   oValidSysKey = null,
-				   sPlain = ''
-			   ;
-
-			   this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.Error);
-			   this.pgpSignedVerifyUser('');
-
-			   if (!oPrivateKey)
-			   {
-				   this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.UnknownPrivateKey);
-			   }
-
-			   try
-			   {
-				   mPgpMessage = window.openpgp.message.readArmored(this.plainRaw);
-				   if (mPgpMessage && oPrivateKey && mPgpMessage.decrypt)
-				   {
-					   this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.Unverified);
-
-					   mPgpMessageDecrypted = mPgpMessage.decrypt(oPrivateKey);
-					   if (mPgpMessageDecrypted)
-					   {
-						   aRes = mPgpMessageDecrypted.verify(aPublicKey);
-						   if (aRes && 0 < aRes.length)
-						   {
-							   oValidKey = _.find(aRes, function (oItem) {
-								   return oItem && oItem.keyid && oItem.valid;
-							   });
-
-							   if (oValidKey)
-							   {
-								   oValidSysKey = Data.findPublicKeyByHex(oValidKey.keyid.toHex());
-								   if (oValidSysKey)
-								   {
-									   this.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.Success);
-									   this.pgpSignedVerifyUser(oValidSysKey.user);
-								   }
-							   }
-						   }
-
-						   sPlain = mPgpMessageDecrypted.getText();
-
-						   sPlain =
-							   Globals.$div.empty().append(
-								   $('
').text(sPlain)
-							   ).html()
-						   ;
-
-						   Globals.$div.empty();
-
-						   this.replacePlaneTextBody(sPlain);
-					   }
-				   }
-			   }
-			   catch (oExc) {}
-
-			   this.storePgpVerifyDataToDom();
-		   }
-		};
-
-		MessageModel.prototype.replacePlaneTextBody = function (sPlain)
-		{
-		   if (this.body)
-		   {
-			   this.body.html(sPlain).addClass('b-text-part plain');
-		   }
-		};
-
-		/**
-		* @return {string}
-		*/
-		MessageModel.prototype.flagHash = function ()
-		{
-		   return [this.deleted(), this.unseen(), this.flagged(), this.answered(), this.forwarded(),
-			   this.isReadReceipt()].join('');
-		};
-
-		module.exports = MessageModel;
-
-	}());
-
-/***/ },
-
-/***/ 49:
-/*!******************************!*\
-  !*** ./dev/Common/Base64.js ***!
-  \******************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	// Base64 encode / decode
-	// http://www.webtoolkit.info/
-
-	(function () {
-
-		'use strict';
-
-		/*jslint bitwise: true*/
-		var Base64 = {
-
-			// private property
-			_keyStr : 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
-
-			// public method for urlsafe encoding
-			urlsafe_encode : function (input) {
-				return Base64.encode(input).replace(/[+]/g, '-').replace(/[\/]/g, '_').replace(/[=]/g, '.');
-			},
-
-			// public method for encoding
-			encode : function (input) {
-				var
-					output = '',
-					chr1, chr2, chr3, enc1, enc2, enc3, enc4,
-					i = 0
-				;
-
-				input = Base64._utf8_encode(input);
-
-				while (i < input.length)
-				{
-					chr1 = input.charCodeAt(i++);
-					chr2 = input.charCodeAt(i++);
-					chr3 = input.charCodeAt(i++);
-
-					enc1 = chr1 >> 2;
-					enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
-					enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
-					enc4 = chr3 & 63;
-
-					if (isNaN(chr2))
-					{
-						enc3 = enc4 = 64;
-					}
-					else if (isNaN(chr3))
-					{
-						enc4 = 64;
-					}
-
-					output = output +
-						this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
-						this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
-				}
-
-				return output;
-			},
-
-			// public method for decoding
-			decode : function (input) {
-				var
-					output = '',
-					chr1, chr2, chr3, enc1, enc2, enc3, enc4,
-					i = 0
-				;
-
-				input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
-
-				while (i < input.length)
-				{
-					enc1 = this._keyStr.indexOf(input.charAt(i++));
-					enc2 = this._keyStr.indexOf(input.charAt(i++));
-					enc3 = this._keyStr.indexOf(input.charAt(i++));
-					enc4 = this._keyStr.indexOf(input.charAt(i++));
-
-					chr1 = (enc1 << 2) | (enc2 >> 4);
-					chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
-					chr3 = ((enc3 & 3) << 6) | enc4;
-
-					output = output + String.fromCharCode(chr1);
-
-					if (enc3 !== 64)
-					{
-						output = output + String.fromCharCode(chr2);
-					}
-
-					if (enc4 !== 64)
-					{
-						output = output + String.fromCharCode(chr3);
-					}
-				}
-
-				return Base64._utf8_decode(output);
-			},
-
-			// private method for UTF-8 encoding
-			_utf8_encode : function (string) {
-
-				string = string.replace(/\r\n/g, "\n");
-
-				var
-					utftext = '',
-					n = 0,
-					l = string.length,
-					c = 0
-				;
-
-				for (; n < l; n++) {
-
-					c = string.charCodeAt(n);
-
-					if (c < 128)
-					{
-						utftext += String.fromCharCode(c);
-					}
-					else if ((c > 127) && (c < 2048))
-					{
-						utftext += String.fromCharCode((c >> 6) | 192);
-						utftext += String.fromCharCode((c & 63) | 128);
-					}
-					else
-					{
-						utftext += String.fromCharCode((c >> 12) | 224);
-						utftext += String.fromCharCode(((c >> 6) & 63) | 128);
-						utftext += String.fromCharCode((c & 63) | 128);
-					}
-				}
-
-				return utftext;
-			},
-
-			// private method for UTF-8 decoding
-			_utf8_decode : function (utftext) {
-				var
-					string = '',
-					i = 0,
-					c = 0,
-					c2 = 0,
-					c3 = 0
-				;
-
-				while ( i < utftext.length )
-				{
-					c = utftext.charCodeAt(i);
-
-					if (c < 128)
-					{
-						string += String.fromCharCode(c);
-						i++;
-					}
-					else if((c > 191) && (c < 224))
-					{
-						c2 = utftext.charCodeAt(i+1);
-						string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
-						i += 2;
-					}
-					else
-					{
-						c2 = utftext.charCodeAt(i+1);
-						c3 = utftext.charCodeAt(i+2);
-						string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
-						i += 3;
-					}
-				}
-
-				return string;
-			}
-		};
-
-		module.exports = Base64;
-		/*jslint bitwise: false*/
-
-	}());
-
-/***/ },
-
-/***/ 51:
-/*!************************************!*\
-  !*** ./dev/Models/AccountModel.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	(function () {
-
-		'use strict';
-
-		var
-			ko = __webpack_require__(/*! ko */ 3),
-
-			Utils = __webpack_require__(/*! Common/Utils */ 1)
-		;
-
-		/**
-		 * @constructor
-		 *
-		 * @param {string} sEmail
-		 * @param {boolean=} bCanBeDelete = true
-		 */
-		function AccountModel(sEmail, bCanBeDelete)
-		{
-			this.email = sEmail;
-
-			this.deleteAccess = ko.observable(false);
-			this.canBeDalete = ko.observable(Utils.isUnd(bCanBeDelete) ? true : !!bCanBeDelete);
-		}
-
-		/**
-		 * @type {string}
-		 */
-		AccountModel.prototype.email = '';
-
-		/**
-		 * @return {string}
-		 */
-		AccountModel.prototype.changeAccountLink = function ()
-		{
-			return __webpack_require__(/*! Common/LinkBuilder */ 11).change(this.email);
-		};
-
-		module.exports = AccountModel;
-
-	}());
-
-/***/ },
-
-/***/ 52:
-/*!***************************************!*\
-  !*** ./dev/Models/AttachmentModel.js ***!
-  \***************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	(function () {
-
-		'use strict';
-
-		var
-			window = __webpack_require__(/*! window */ 12),
-
-			Globals = __webpack_require__(/*! Common/Globals */ 7),
-			Utils = __webpack_require__(/*! Common/Utils */ 1),
-			LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11)
-		;
-
-		/**
-		 * @constructor
-		 */
-		function AttachmentModel()
-		{
-			this.mimeType = '';
-			this.fileName = '';
-			this.estimatedSize = 0;
-			this.friendlySize = '';
-			this.isInline = false;
-			this.isLinked = false;
-			this.cid = '';
-			this.cidWithOutTags = '';
-			this.contentLocation = '';
-			this.download = '';
-			this.folder = '';
-			this.uid = '';
-			this.mimeIndex = '';
-		}
-
-		/**
-		 * @static
-		 * @param {AjaxJsonAttachment} oJsonAttachment
-		 * @return {?AttachmentModel}
-		 */
-		AttachmentModel.newInstanceFromJson = function (oJsonAttachment)
-		{
-			var oAttachmentModel = new AttachmentModel();
-			return oAttachmentModel.initByJson(oJsonAttachment) ? oAttachmentModel : null;
-		};
-
-		AttachmentModel.prototype.mimeType = '';
-		AttachmentModel.prototype.fileName = '';
-		AttachmentModel.prototype.estimatedSize = 0;
-		AttachmentModel.prototype.friendlySize = '';
-		AttachmentModel.prototype.isInline = false;
-		AttachmentModel.prototype.isLinked = false;
-		AttachmentModel.prototype.cid = '';
-		AttachmentModel.prototype.cidWithOutTags = '';
-		AttachmentModel.prototype.contentLocation = '';
-		AttachmentModel.prototype.download = '';
-		AttachmentModel.prototype.folder = '';
-		AttachmentModel.prototype.uid = '';
-		AttachmentModel.prototype.mimeIndex = '';
-
-		/**
-		 * @param {AjaxJsonAttachment} oJsonAttachment
-		 */
-		AttachmentModel.prototype.initByJson = function (oJsonAttachment)
-		{
-			var bResult = false;
-			if (oJsonAttachment && 'Object/Attachment' === oJsonAttachment['@Object'])
-			{
-				this.mimeType = (oJsonAttachment.MimeType || '').toLowerCase();
-				this.fileName = oJsonAttachment.FileName;
-				this.estimatedSize = Utils.pInt(oJsonAttachment.EstimatedSize);
-				this.isInline = !!oJsonAttachment.IsInline;
-				this.isLinked = !!oJsonAttachment.IsLinked;
-				this.cid = oJsonAttachment.CID;
-				this.contentLocation = oJsonAttachment.ContentLocation;
-				this.download = oJsonAttachment.Download;
-
-				this.folder = oJsonAttachment.Folder;
-				this.uid = oJsonAttachment.Uid;
-				this.mimeIndex = oJsonAttachment.MimeIndex;
-
-				this.friendlySize = Utils.friendlySize(this.estimatedSize);
-				this.cidWithOutTags = this.cid.replace(/^<+/, '').replace(/>+$/, '');
-
-				bResult = true;
-			}
-
-			return bResult;
-		};
-
-		/**
-		 * @return {boolean}
-		 */
-		AttachmentModel.prototype.isImage = function ()
-		{
-			return -1 < Utils.inArray(this.mimeType.toLowerCase(),
-				['image/png', 'image/jpg', 'image/jpeg', 'image/gif']
-			);
-		};
-
-		/**
-		 * @return {boolean}
-		 */
-		AttachmentModel.prototype.isText = function ()
-		{
-			return 'text/' === this.mimeType.substr(0, 5) &&
-				-1 === Utils.inArray(this.mimeType, ['text/html']);
-		};
-
-		/**
-		 * @return {boolean}
-		 */
-		AttachmentModel.prototype.isPdf = function ()
-		{
-			return Globals.bAllowPdfPreview && 'application/pdf' === this.mimeType;
-		};
-
-		/**
-		 * @return {string}
-		 */
-		AttachmentModel.prototype.linkDownload = function ()
-		{
-			return LinkBuilder.attachmentDownload(this.download);
-		};
-
-		/**
-		 * @return {string}
-		 */
-		AttachmentModel.prototype.linkPreview = function ()
-		{
-			return LinkBuilder.attachmentPreview(this.download);
-		};
-
-		/**
-		 * @return {string}
-		 */
-		AttachmentModel.prototype.linkPreviewAsPlain = function ()
-		{
-			return LinkBuilder.attachmentPreviewAsPlain(this.download);
-		};
-
-		/**
-		 * @return {string}
-		 */
-		AttachmentModel.prototype.generateTransferDownloadUrl = function ()
-		{
-			var	sLink = this.linkDownload();
-			if ('http' !== sLink.substr(0, 4))
-			{
-				sLink = window.location.protocol + '//' + window.location.host + window.location.pathname + sLink;
-			}
-
-			return this.mimeType + ':' + this.fileName + ':' + sLink;
-		};
-
-		/**
-		 * @param {AttachmentModel} oAttachment
-		 * @param {*} oEvent
-		 * @return {boolean}
-		 */
-		AttachmentModel.prototype.eventDragStart = function (oAttachment, oEvent)
-		{
-			var	oLocalEvent = oEvent.originalEvent || oEvent;
-			if (oAttachment && oLocalEvent && oLocalEvent.dataTransfer && oLocalEvent.dataTransfer.setData)
-			{
-				oLocalEvent.dataTransfer.setData('DownloadURL', this.generateTransferDownloadUrl());
-			}
-
-			return true;
-		};
-
-		AttachmentModel.prototype.iconClass = function ()
-		{
-			var
-				aParts = this.mimeType.toLocaleString().split('/'),
-				sClass = 'icon-file'
-			;
-
-			if (aParts && aParts[1])
-			{
-				if ('image' === aParts[0])
-				{
-					sClass = 'icon-file-image';
-				}
-				else if ('text' === aParts[0])
-				{
-					sClass = 'icon-file-text';
-				}
-				else if ('audio' === aParts[0])
-				{
-					sClass = 'icon-file-music';
-				}
-				else if ('video' === aParts[0])
-				{
-					sClass = 'icon-file-movie';
-				}
-				else if (-1 < Utils.inArray(aParts[1],
-					['zip', '7z', 'tar', 'rar', 'gzip', 'bzip', 'bzip2', 'x-zip', 'x-7z', 'x-rar', 'x-tar', 'x-gzip', 'x-bzip', 'x-bzip2', 'x-zip-compressed', 'x-7z-compressed', 'x-rar-compressed']))
-				{
-					sClass = 'icon-file-zip';
-				}
-		//		else if (-1 < Utils.inArray(aParts[1],
-		//			['pdf', 'x-pdf']))
-		//		{
-		//			sClass = 'icon-file-pdf';
-		//		}
-		//		else if (-1 < Utils.inArray(aParts[1], [
-		//			'exe', 'x-exe', 'x-winexe', 'bat'
-		//		]))
-		//		{
-		//			sClass = 'icon-console';
-		//		}
-				else if (-1 < Utils.inArray(aParts[1], [
-					'rtf', 'msword', 'vnd.msword', 'vnd.openxmlformats-officedocument.wordprocessingml.document',
-					'vnd.openxmlformats-officedocument.wordprocessingml.template',
-					'vnd.ms-word.document.macroEnabled.12',
-					'vnd.ms-word.template.macroEnabled.12'
-				]))
-				{
-					sClass = 'icon-file-text';
-				}
-				else if (-1 < Utils.inArray(aParts[1], [
-					'excel', 'ms-excel', 'vnd.ms-excel',
-					'vnd.openxmlformats-officedocument.spreadsheetml.sheet',
-					'vnd.openxmlformats-officedocument.spreadsheetml.template',
-					'vnd.ms-excel.sheet.macroEnabled.12',
-					'vnd.ms-excel.template.macroEnabled.12',
-					'vnd.ms-excel.addin.macroEnabled.12',
-					'vnd.ms-excel.sheet.binary.macroEnabled.12'
-				]))
-				{
-					sClass = 'icon-file-excel';
-				}
-				else if (-1 < Utils.inArray(aParts[1], [
-					'powerpoint', 'ms-powerpoint', 'vnd.ms-powerpoint',
-					'vnd.openxmlformats-officedocument.presentationml.presentation',
-					'vnd.openxmlformats-officedocument.presentationml.template',
-					'vnd.openxmlformats-officedocument.presentationml.slideshow',
-					'vnd.ms-powerpoint.addin.macroEnabled.12',
-					'vnd.ms-powerpoint.presentation.macroEnabled.12',
-					'vnd.ms-powerpoint.template.macroEnabled.12',
-					'vnd.ms-powerpoint.slideshow.macroEnabled.12'
-				]))
-				{
-					sClass = 'icon-file-chart-graph';
-				}
-			}
-
-			return sClass;
-		};
-
-		module.exports = AttachmentModel;
-
-	}());
-
-/***/ },
-
-/***/ 58:
-/*!***********************************!*\
-  !*** ./dev/Models/FolderModel.js ***!
-  \***********************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	(function () {
-
-		'use strict';
-
-		var
-			_ = __webpack_require__(/*! _ */ 2),
-			ko = __webpack_require__(/*! ko */ 3),
-
-			Enums = __webpack_require__(/*! Common/Enums */ 6),
-			Globals = __webpack_require__(/*! Common/Globals */ 7),
-			Utils = __webpack_require__(/*! Common/Utils */ 1),
-			Events = __webpack_require__(/*! Common/Events */ 22)
-		;
-
-		/**
-		 * @constructor
-		 */
-		function FolderModel()
-		{
-			this.name = ko.observable('');
-			this.fullName = '';
-			this.fullNameRaw = '';
-			this.fullNameHash = '';
-			this.delimiter = '';
-			this.namespace = '';
-			this.deep = 0;
-			this.interval = 0;
-
-			this.selectable = false;
-			this.existen = true;
-
-			this.type = ko.observable(Enums.FolderType.User);
-
-			this.focused = ko.observable(false);
-			this.selected = ko.observable(false);
-			this.edited = ko.observable(false);
-			this.collapsed = ko.observable(true);
-			this.subScribed = ko.observable(true);
-			this.subFolders = ko.observableArray([]);
-			this.deleteAccess = ko.observable(false);
-			this.actionBlink = ko.observable(false).extend({'falseTimeout': 1000});
-
-			this.nameForEdit = ko.observable('');
-
-			this.privateMessageCountAll = ko.observable(0);
-			this.privateMessageCountUnread = ko.observable(0);
-
-			this.collapsedPrivate = ko.observable(true);
-		}
-
-		/**
-		 * @static
-		 * @param {AjaxJsonFolder} oJsonFolder
-		 * @return {?FolderModel}
-		 */
-		FolderModel.newInstanceFromJson = function (oJsonFolder)
-		{
-			var oFolderModel = new FolderModel();
-			return oFolderModel.initByJson(oJsonFolder) ? oFolderModel.initComputed() : null;
-		};
-
-		/**
-		 * @return {FolderModel}
-		 */
-		FolderModel.prototype.initComputed = function ()
-		{
-			this.hasSubScribedSubfolders = ko.computed(function () {
-				return !!_.find(this.subFolders(), function (oFolder) {
-					return oFolder.subScribed() && !oFolder.isSystemFolder();
-				});
-			}, this);
-
-			this.canBeEdited = ko.computed(function () {
-				return Enums.FolderType.User === this.type() && this.existen && this.selectable;
-			}, this);
-
-			this.visible = ko.computed(function () {
-				var
-					bSubScribed = this.subScribed(),
-					bSubFolders = this.hasSubScribedSubfolders()
-				;
-
-				return (bSubScribed || (bSubFolders && (!this.existen || !this.selectable)));
-			}, this);
-
-			this.isSystemFolder = ko.computed(function () {
-				return Enums.FolderType.User !== this.type();
-			}, this);
-
-			this.hidden = ko.computed(function () {
-				var
-					bSystem = this.isSystemFolder(),
-					bSubFolders = this.hasSubScribedSubfolders()
-				;
-
-				return (bSystem && !bSubFolders) || (!this.selectable && !bSubFolders);
-
-			}, this);
-
-			this.selectableForFolderList = ko.computed(function () {
-				return !this.isSystemFolder() && this.selectable;
-			}, this);
-
-			this.messageCountAll = ko.computed({
-				'read': this.privateMessageCountAll,
-				'write': function (iValue) {
-					if (Utils.isPosNumeric(iValue, true))
-					{
-						this.privateMessageCountAll(iValue);
-					}
-					else
-					{
-						this.privateMessageCountAll.valueHasMutated();
-					}
-				},
-				'owner': this
-			});
-
-			this.messageCountUnread = ko.computed({
-				'read': this.privateMessageCountUnread,
-				'write': function (iValue) {
-					if (Utils.isPosNumeric(iValue, true))
-					{
-						this.privateMessageCountUnread(iValue);
-					}
-					else
-					{
-						this.privateMessageCountUnread.valueHasMutated();
-					}
-				},
-				'owner': this
-			});
-
-			this.printableUnreadCount = ko.computed(function () {
-				var
-					iCount = this.messageCountAll(),
-					iUnread = this.messageCountUnread(),
-					iType = this.type()
-				;
-
-				if (0 < iCount)
-				{
-					if (Enums.FolderType.Draft === iType)
-					{
-						return '' + iCount;
-					}
-					else if (0 < iUnread && Enums.FolderType.Trash !== iType && Enums.FolderType.Archive !== iType && Enums.FolderType.SentItems !== iType)
-					{
-						return '' + iUnread;
-					}
-				}
-
-				return '';
-
-			}, this);
-
-			this.canBeDeleted = ko.computed(function () {
-				var
-					bSystem = this.isSystemFolder()
-				;
-				return !bSystem && 0 === this.subFolders().length && 'INBOX' !== this.fullNameRaw;
-			}, this);
-
-			this.canBeSubScribed = ko.computed(function () {
-				return !this.isSystemFolder() && this.selectable && 'INBOX' !== this.fullNameRaw;
-			}, this);
-
-	//		this.visible.subscribe(function () {
-	//			Utils.timeOutAction('folder-list-folder-visibility-change', function () {
-	//				Globals.$win.trigger('folder-list-folder-visibility-change');
-	//			}, 100);
-	//		});
-
-			this.localName = ko.computed(function () {
-
-				Globals.langChangeTrigger();
-
-				var
-					iType = this.type(),
-					sName = this.name()
-				;
-
-				if (this.isSystemFolder())
-				{
-					switch (iType)
-					{
-						case Enums.FolderType.Inbox:
-							sName = Utils.i18n('FOLDER_LIST/INBOX_NAME');
-							break;
-						case Enums.FolderType.SentItems:
-							sName = Utils.i18n('FOLDER_LIST/SENT_NAME');
-							break;
-						case Enums.FolderType.Draft:
-							sName = Utils.i18n('FOLDER_LIST/DRAFTS_NAME');
-							break;
-						case Enums.FolderType.Spam:
-							sName = Utils.i18n('FOLDER_LIST/SPAM_NAME');
-							break;
-						case Enums.FolderType.Trash:
-							sName = Utils.i18n('FOLDER_LIST/TRASH_NAME');
-							break;
-						case Enums.FolderType.Archive:
-							sName = Utils.i18n('FOLDER_LIST/ARCHIVE_NAME');
-							break;
-					}
-				}
-
-				return sName;
-
-			}, this);
-
-			this.manageFolderSystemName = ko.computed(function () {
-
-				Globals.langChangeTrigger();
-
-				var
-					sSuffix = '',
-					iType = this.type(),
-					sName = this.name()
-				;
-
-				if (this.isSystemFolder())
-				{
-					switch (iType)
-					{
-						case Enums.FolderType.Inbox:
-							sSuffix = '(' + Utils.i18n('FOLDER_LIST/INBOX_NAME') + ')';
-							break;
-						case Enums.FolderType.SentItems:
-							sSuffix = '(' + Utils.i18n('FOLDER_LIST/SENT_NAME') + ')';
-							break;
-						case Enums.FolderType.Draft:
-							sSuffix = '(' + Utils.i18n('FOLDER_LIST/DRAFTS_NAME') + ')';
-							break;
-						case Enums.FolderType.Spam:
-							sSuffix = '(' + Utils.i18n('FOLDER_LIST/SPAM_NAME') + ')';
-							break;
-						case Enums.FolderType.Trash:
-							sSuffix = '(' + Utils.i18n('FOLDER_LIST/TRASH_NAME') + ')';
-							break;
-						case Enums.FolderType.Archive:
-							sSuffix = '(' + Utils.i18n('FOLDER_LIST/ARCHIVE_NAME') + ')';
-							break;
-					}
-				}
-
-				if ('' !== sSuffix && '(' + sName + ')' === sSuffix || '(inbox)' === sSuffix.toLowerCase())
-				{
-					sSuffix = '';
-				}
-
-				return sSuffix;
-
-			}, this);
-
-			this.collapsed = ko.computed({
-				'read': function () {
-					return !this.hidden() && this.collapsedPrivate();
-				},
-				'write': function (mValue) {
-					this.collapsedPrivate(mValue);
-				},
-				'owner': this
-			});
-
-			this.hasUnreadMessages = ko.computed(function () {
-				return 0 < this.messageCountUnread();
-			}, this);
-
-			this.hasSubScribedUnreadMessagesSubfolders = ko.computed(function () {
-				return !!_.find(this.subFolders(), function (oFolder) {
-					return oFolder.hasUnreadMessages() || oFolder.hasSubScribedUnreadMessagesSubfolders();
-				});
-			}, this);
-
-			// subscribe
-			this.name.subscribe(function (sValue) {
-				this.nameForEdit(sValue);
-			}, this);
-
-			this.edited.subscribe(function (bValue) {
-				if (bValue)
-				{
-					this.nameForEdit(this.name());
-				}
-			}, this);
-
-			this.messageCountUnread.subscribe(function (iUnread) {
-				if (Enums.FolderType.Inbox === this.type())
-				{
-					Events.pub('mailbox.inbox-unread-count', [iUnread]);
-				}
-			}, this);
-
-			return this;
-		};
-
-		FolderModel.prototype.fullName = '';
-		FolderModel.prototype.fullNameRaw = '';
-		FolderModel.prototype.fullNameHash = '';
-		FolderModel.prototype.delimiter = '';
-		FolderModel.prototype.namespace = '';
-		FolderModel.prototype.deep = 0;
-		FolderModel.prototype.interval = 0;
-
-		/**
-		 * @return {string}
-		 */
-		FolderModel.prototype.collapsedCss = function ()
-		{
-			return this.hasSubScribedSubfolders() ?
-				(this.collapsed() ? 'icon-right-mini e-collapsed-sign' : 'icon-down-mini e-collapsed-sign') : 'icon-none e-collapsed-sign';
-		};
-
-		/**
-		 * @param {AjaxJsonFolder} oJsonFolder
-		 * @return {boolean}
-		 */
-		FolderModel.prototype.initByJson = function (oJsonFolder)
-		{
-			var bResult = false;
-			if (oJsonFolder && 'Object/Folder' === oJsonFolder['@Object'])
-			{
-				this.name(oJsonFolder.Name);
-				this.delimiter = oJsonFolder.Delimiter;
-				this.fullName = oJsonFolder.FullName;
-				this.fullNameRaw = oJsonFolder.FullNameRaw;
-				this.fullNameHash = oJsonFolder.FullNameHash;
-				this.deep = oJsonFolder.FullNameRaw.split(this.delimiter).length - 1;
-				this.selectable = !!oJsonFolder.IsSelectable;
-				this.existen = !!oJsonFolder.IsExists;
-
-				this.subScribed(!!oJsonFolder.IsSubscribed);
-				this.type('INBOX' === this.fullNameRaw ? Enums.FolderType.Inbox : Enums.FolderType.User);
-
-				bResult = true;
-			}
-
-			return bResult;
-		};
-
-		/**
-		 * @return {string}
-		 */
-		FolderModel.prototype.printableFullName = function ()
-		{
-			return this.fullName.split(this.delimiter).join(' / ');
-		};
-
-		module.exports = FolderModel;
-
-	}());
-
-/***/ },
-
-/***/ 59:
-/*!*************************************!*\
-  !*** ./dev/Models/IdentityModel.js ***!
-  \*************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	(function () {
-
-		'use strict';
-
-		var
-			ko = __webpack_require__(/*! ko */ 3),
-
-			Utils = __webpack_require__(/*! Common/Utils */ 1)
-		;
-
-		/**
-		 * @param {string} sId
-		 * @param {string} sEmail
-		 * @param {boolean=} bCanBeDelete = true
-		 * @constructor
-		 */
-		function IdentityModel(sId, sEmail, bCanBeDelete)
-		{
-			this.id = sId;
-			this.email = ko.observable(sEmail);
-			this.name = ko.observable('');
-			this.replyTo = ko.observable('');
-			this.bcc = ko.observable('');
-
-			this.deleteAccess = ko.observable(false);
-			this.canBeDalete = ko.observable(bCanBeDelete);
-		}
-
-		IdentityModel.prototype.formattedName = function ()
-		{
-			var sName = this.name();
-			return '' === sName ? this.email() : sName + ' <' + this.email() + '>';
-		};
-
-		IdentityModel.prototype.formattedNameForCompose = function ()
-		{
-			var sName = this.name();
-			return '' === sName ? this.email() : sName + ' (' + this.email() + ')';
-		};
-
-		IdentityModel.prototype.formattedNameForEmail = function ()
-		{
-			var sName = this.name();
-			return '' === sName ? this.email() : '"' + Utils.quoteName(sName) + '" <' + this.email() + '>';
-		};
-
-		module.exports = IdentityModel;
-
-	}());
-
-/***/ },
-
-/***/ 60:
-/*!***************************************!*\
-  !*** ./dev/Models/OpenPgpKeyModel.js ***!
-  \***************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	(function () {
-
-		'use strict';
-
-		var
-			ko = __webpack_require__(/*! ko */ 3)
-		;
-
-		/**
-		 * @param {string} iIndex
-		 * @param {string} sGuID
-		 * @param {string} sID
-		 * @param {string} sUserID
-		 * @param {string} sEmail
-		 * @param {boolean} bIsPrivate
-		 * @param {string} sArmor
-		 * @constructor
-		 */
-		function OpenPgpKeyModel(iIndex, sGuID, sID, sUserID, sEmail, bIsPrivate, sArmor)
-		{
-			this.index = iIndex;
-			this.id = sID;
-			this.guid = sGuID;
-			this.user = sUserID;
-			this.email = sEmail;
-			this.armor = sArmor;
-			this.isPrivate = !!bIsPrivate;
-
-			this.deleteAccess = ko.observable(false);
-		}
-
-		OpenPgpKeyModel.prototype.index = 0;
-		OpenPgpKeyModel.prototype.id = '';
-		OpenPgpKeyModel.prototype.guid = '';
-		OpenPgpKeyModel.prototype.user = '';
-		OpenPgpKeyModel.prototype.email = '';
-		OpenPgpKeyModel.prototype.armor = '';
-		OpenPgpKeyModel.prototype.isPrivate = false;
-
-		module.exports = OpenPgpKeyModel;
-
-	}());
-
-/***/ },
-
-/***/ 64:
-/*!************************************!*\
-  !*** ./dev/Screens/LoginScreen.js ***!
-  \************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	(function () {
-
-		'use strict';
-
-		var
-			_ = __webpack_require__(/*! _ */ 2),
-
-			KnoinAbstractScreen = __webpack_require__(/*! Knoin:AbstractScreen */ 24)
-		;
-
-		/**
-		 * @constructor
-		 * @extends KnoinAbstractScreen
-		 */
-		function LoginScreen()
-		{
-			KnoinAbstractScreen.call(this, 'login', [
-				__webpack_require__(/*! View:RainLoop:Login */ 96)
-			]);
-		}
-
-		_.extend(LoginScreen.prototype, KnoinAbstractScreen.prototype);
-
-		LoginScreen.prototype.onShow = function ()
-		{
-			__webpack_require__(/*! App:RainLoop */ 4).setTitle('');
-		};
-
-		module.exports = LoginScreen;
-
-	}());
-
-/***/ },
-
-/***/ 90:
-/*!****************************************************!*\
-  !*** ./dev/Storages/LocalStorages/CookieDriver.js ***!
-  \****************************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
-
-	(function () {
-
-		'use strict';
-
-		var
-			$ = __webpack_require__(/*! $ */ 14),
-			JSON = __webpack_require__(/*! JSON */ 33),
-
-			Consts = __webpack_require__(/*! Common/Consts */ 17),
-			Utils = __webpack_require__(/*! Common/Utils */ 1)
-		;
-
-		/**
-		 * @constructor
-		 */
-		function CookieDriver()
-		{
-		}
-
-		/**
-		 * @static
-		 * @return {boolean}
-		 */
-		CookieDriver.supported = function ()
-		{
-			return !!(window.navigator && window.navigator.cookieEnabled);
-		};
-
-		/**
-		 * @param {string} sKey
-		 * @param {*} mData
-		 * @return {boolean}
-		 */
-		CookieDriver.prototype.set = function (sKey, mData)
-		{
-			var
-				mStorageValue = $.cookie(Consts.Values.ClientSideStorageIndexName),
-				bResult = false,
-				mResult = null
-			;
-
-			try
-			{
-				mResult = null === mStorageValue ? null : JSON.parse(mStorageValue);
-			}
-			catch (oException) {}
-
-			if (!mResult)
-			{
-				mResult = {};
-			}
-
-			mResult[sKey] = mData;
-
-			try
-			{
-				$.cookie(Consts.Values.ClientSideStorageIndexName, JSON.stringify(mResult), {
-					'expires': 30
-				});
-
-				bResult = true;
-			}
-			catch (oException) {}
-
-			return bResult;
-		};
-
-		/**
-		 * @param {string} sKey
-		 * @return {*}
-		 */
-		CookieDriver.prototype.get = function (sKey)
-		{
-			var
-				mStorageValue = $.cookie(Consts.Values.ClientSideStorageIndexName),
-				mResult = null
-			;
-
-			try
-			{
-				mResult = null === mStorageValue ? null : JSON.parse(mStorageValue);
-				if (mResult && !Utils.isUnd(mResult[sKey]))
-				{
-					mResult = mResult[sKey];
-				}
-				else
-				{
-					mResult = null;
-				}
-			}
-			catch (oException) {}
-
-			return mResult;
-		};
-
-		module.exports = CookieDriver;
-
-	}());
-
-/***/ },
-
-/***/ 91:
-/*!**********************************************************!*\
-  !*** ./dev/Storages/LocalStorages/LocalStorageDriver.js ***!
-  \**********************************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
-
-	(function () {
-
-		'use strict';
-
-		var
-			window = __webpack_require__(/*! window */ 12),
-			JSON = __webpack_require__(/*! JSON */ 33),
-
-			Consts = __webpack_require__(/*! Common/Consts */ 17),
-			Utils = __webpack_require__(/*! Common/Utils */ 1)
-		;
-
-		/**
-		 * @constructor
-		 */
-		function LocalStorageDriver()
-		{
-		}
-
-		/**
-		 * @static
-		 * @return {boolean}
-		 */
-		LocalStorageDriver.supported = function ()
-		{
-			return !!window.localStorage;
-		};
-
-		/**
-		 * @param {string} sKey
-		 * @param {*} mData
-		 * @return {boolean}
-		 */
-		LocalStorageDriver.prototype.set = function (sKey, mData)
-		{
-			var
-				mStorageValue = window.localStorage[Consts.Values.ClientSideStorageIndexName] || null,
-				bResult = false,
-				mResult = null
-			;
-
-			try
-			{
-				mResult = null === mStorageValue ? null : JSON.parse(mStorageValue);
-			}
-			catch (oException) {}
-
-			if (!mResult)
-			{
-				mResult = {};
-			}
-
-			mResult[sKey] = mData;
-
-			try
-			{
-				window.localStorage[Consts.Values.ClientSideStorageIndexName] = JSON.stringify(mResult);
-
-				bResult = true;
-			}
-			catch (oException) {}
-
-			return bResult;
-		};
-
-		/**
-		 * @param {string} sKey
-		 * @return {*}
-		 */
-		LocalStorageDriver.prototype.get = function (sKey)
-		{
-			var
-				mStorageValue = window.localStorage[Consts.Values.ClientSideStorageIndexName] || null,
-				mResult = null
-			;
-
-			try
-			{
-				mResult = null === mStorageValue ? null : JSON.parse(mStorageValue);
-				if (mResult && !Utils.isUnd(mResult[sKey]))
-				{
-					mResult = mResult[sKey];
-				}
-				else
-				{
-					mResult = null;
-				}
-			}
-			catch (oException) {}
-
-			return mResult;
-		};
-
-		module.exports = LocalStorageDriver;
-
-	}());
-
-/***/ },
-
-/***/ 96:
-/*!******************************************!*\
-  !*** ./dev/ViewModels/LoginViewModel.js ***!
-  \******************************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	(function () {
-
-		'use strict';
-
-		var
-			window = __webpack_require__(/*! window */ 12),
-			_ = __webpack_require__(/*! _ */ 2),
-			$ = __webpack_require__(/*! $ */ 14),
-			ko = __webpack_require__(/*! ko */ 3),
-
-			Enums = __webpack_require__(/*! Common/Enums */ 6),
-			Utils = __webpack_require__(/*! Common/Utils */ 1),
-			LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11),
-
-			Settings = __webpack_require__(/*! Storage:Settings */ 10),
-			Data = __webpack_require__(/*! Storage:RainLoop:Data */ 8),
-			Remote = __webpack_require__(/*! Storage:RainLoop:Remote */ 13),
-
-			kn = __webpack_require__(/*! App:Knoin */ 5),
-			KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9)
-		;
-
-		/**
-		 * @constructor
-		 * @extends KnoinAbstractViewModel
-		 */
-		function LoginViewModel()
-		{
-			KnoinAbstractViewModel.call(this, 'Center', 'Login');
-
-			this.email = ko.observable('');
-			this.password = ko.observable('');
-			this.signMe = ko.observable(false);
-
-			this.additionalCode = ko.observable('');
-			this.additionalCode.error = ko.observable(false);
-			this.additionalCode.focused = ko.observable(false);
-			this.additionalCode.visibility = ko.observable(false);
-			this.additionalCodeSignMe = ko.observable(false);
-
-			this.logoImg = Utils.trim(Settings.settingsGet('LoginLogo'));
-			this.loginDescription = Utils.trim(Settings.settingsGet('LoginDescription'));
-			this.logoCss = Utils.trim(Settings.settingsGet('LoginCss'));
-
-			this.emailError = ko.observable(false);
-			this.passwordError = ko.observable(false);
-
-			this.emailFocus = ko.observable(false);
-			this.submitFocus = ko.observable(false);
-
-			this.email.subscribe(function () {
-				this.emailError(false);
-				this.additionalCode('');
-				this.additionalCode.visibility(false);
-			}, this);
-
-			this.password.subscribe(function () {
-				this.passwordError(false);
-			}, this);
-
-			this.additionalCode.subscribe(function () {
-				this.additionalCode.error(false);
-			}, this);
-
-			this.additionalCode.visibility.subscribe(function () {
-				this.additionalCode.error(false);
-			}, this);
-
-			this.submitRequest = ko.observable(false);
-			this.submitError = ko.observable('');
-
-			this.allowLanguagesOnLogin = Data.allowLanguagesOnLogin;
-
-			this.langRequest = ko.observable(false);
-			this.mainLanguage = Data.mainLanguage;
-			this.bSendLanguage = false;
-
-			this.mainLanguageFullName = ko.computed(function () {
-				return Utils.convertLangName(this.mainLanguage());
-			}, this);
-
-			this.signMeType = ko.observable(Enums.LoginSignMeType.Unused);
-
-			this.signMeType.subscribe(function (iValue) {
-				this.signMe(Enums.LoginSignMeType.DefaultOn === iValue);
-			}, this);
-
-			this.signMeVisibility = ko.computed(function () {
-				return Enums.LoginSignMeType.Unused !== this.signMeType();
-			}, this);
-
-			this.submitCommand = Utils.createCommand(this, function () {
-
-				Utils.triggerAutocompleteInputChange();
-
-				this.emailError('' === Utils.trim(this.email()));
-				this.passwordError('' === Utils.trim(this.password()));
-
-				if (this.additionalCode.visibility())
-				{
-					this.additionalCode.error('' === Utils.trim(this.additionalCode()));
-				}
-
-				if (this.emailError() || this.passwordError() || this.additionalCode.error())
-				{
-					return false;
-				}
-
-				this.submitRequest(true);
-
-				var
-					sPassword = this.password(),
-
-					fLoginRequest = _.bind(function (sPassword) {
-
-						Remote.login(_.bind(function (sResult, oData) {
-
-							if (Enums.StorageResultType.Success === sResult && oData && 'Login' === oData.Action)
-							{
-								if (oData.Result)
-								{
-									if (oData.TwoFactorAuth)
-									{
-										this.additionalCode('');
-										this.additionalCode.visibility(true);
-										this.additionalCode.focused(true);
-
-										this.submitRequest(false);
-									}
-									else
-									{
-										__webpack_require__(/*! App:RainLoop */ 4).loginAndLogoutReload();
-									}
-								}
-								else if (oData.ErrorCode)
-								{
-									this.submitRequest(false);
-									this.submitError(Utils.getNotification(oData.ErrorCode));
-
-									if ('' === this.submitError())
-									{
-										this.submitError(Utils.getNotification(Enums.Notification.UnknownError));
-									}
-								}
-								else
-								{
-									this.submitRequest(false);
-								}
-							}
-							else
-							{
-								this.submitRequest(false);
-								this.submitError(Utils.getNotification(Enums.Notification.UnknownError));
-							}
-
-						}, this), this.email(), '', sPassword, !!this.signMe(),
-							this.bSendLanguage ? this.mainLanguage() : '',
-							this.additionalCode.visibility() ? this.additionalCode() : '',
-							this.additionalCode.visibility() ? !!this.additionalCodeSignMe() : false
-						);
-
-					}, this)
-				;
-
-				if (!!Settings.settingsGet('UseRsaEncryption') && Utils.rsaEncode.supported)
-				{
-					Remote.getPublicKey(_.bind(function (sResult, oData) {
-
-						var bRequest = false;
-						if (Enums.StorageResultType.Success === sResult && oData && oData.Result &&
-							Utils.isArray(oData.Result) && oData.Result[0] && oData.Result[1] && oData.Result[2])
-						{
-							var sEncryptedPassword = Utils.rsaEncode(sPassword, oData.Result[0], oData.Result[1], oData.Result[2]);
-							if (sEncryptedPassword)
-							{
-								fLoginRequest(sEncryptedPassword);
-								bRequest = true;
-							}
-						}
-
-						if (!bRequest)
-						{
-							this.submitRequest(false);
-							this.submitError(Utils.getNotification(Enums.Notification.UnknownError));
-						}
-
-					}, this));
-				}
-				else
-				{
-					fLoginRequest(sPassword);
-				}
-
-				return true;
-
-			}, function () {
-				return !this.submitRequest();
-			});
-
-			this.facebookLoginEnabled = ko.observable(false);
-
-			this.facebookCommand = Utils.createCommand(this, function () {
-
-				window.open(LinkBuilder.socialFacebook(), 'Facebook',
-					'left=200,top=100,width=650,height=335,menubar=no,status=no,resizable=yes,scrollbars=yes');
-				return true;
-
-			}, function () {
-				return !this.submitRequest() && this.facebookLoginEnabled();
-			});
-
-			this.googleLoginEnabled = ko.observable(false);
-
-			this.googleCommand = Utils.createCommand(this, function () {
-
-				window.open(LinkBuilder.socialGoogle(), 'Google',
-					'left=200,top=100,width=650,height=335,menubar=no,status=no,resizable=yes,scrollbars=yes');
-				return true;
-
-			}, function () {
-				return !this.submitRequest() && this.googleLoginEnabled();
-			});
-
-			this.twitterLoginEnabled = ko.observable(false);
-
-			this.twitterCommand = Utils.createCommand(this, function () {
-
-				window.open(LinkBuilder.socialTwitter(), 'Twitter',
-					'left=200,top=100,width=650,height=335,menubar=no,status=no,resizable=yes,scrollbars=yes');
-
-				return true;
-
-			}, function () {
-				return !this.submitRequest() && this.twitterLoginEnabled();
-			});
-
-			this.socialLoginEnabled = ko.computed(function () {
-
-				var
-					bF = this.facebookLoginEnabled(),
-					bG = this.googleLoginEnabled(),
-					bT = this.twitterLoginEnabled()
-				;
-
-				return bF || bG || bT;
-			}, this);
-
-			kn.constructorEnd(this);
-		}
-
-		kn.extendAsViewModel(['View:RainLoop:Login', 'LoginViewModel'], LoginViewModel);
-		_.extend(LoginViewModel.prototype, KnoinAbstractViewModel.prototype);
-
-		LoginViewModel.prototype.onShow = function ()
-		{
-			kn.routeOff();
-
-			_.delay(_.bind(function () {
-				if ('' !== this.email() && '' !== this.password())
-				{
-					this.submitFocus(true);
-				}
-				else
-				{
-					this.emailFocus(true);
-				}
-
-				if (Settings.settingsGet('UserLanguage'))
-				{
-					$.cookie('rllang', Data.language(), {'expires': 30});
-				}
-
-			}, this), 100);
-		};
-
-		LoginViewModel.prototype.onHide = function ()
-		{
-			this.submitFocus(false);
-			this.emailFocus(false);
-		};
-
-		LoginViewModel.prototype.onBuild = function ()
-		{
-			var
-				self = this,
-				sJsHash = Settings.settingsGet('JsHash'),
-				fSocial = function (iErrorCode) {
-					iErrorCode = Utils.pInt(iErrorCode);
-					if (0 === iErrorCode)
-					{
-						self.submitRequest(true);
-						__webpack_require__(/*! App:RainLoop */ 4).loginAndLogoutReload();
-					}
-					else
-					{
-						self.submitError(Utils.getNotification(iErrorCode));
-					}
-				}
-			;
-
-			this.facebookLoginEnabled(!!Settings.settingsGet('AllowFacebookSocial'));
-			this.twitterLoginEnabled(!!Settings.settingsGet('AllowTwitterSocial'));
-			this.googleLoginEnabled(!!Settings.settingsGet('AllowGoogleSocial'));
-
-			switch ((Settings.settingsGet('SignMe') || 'unused').toLowerCase())
-			{
-				case Enums.LoginSignMeTypeAsString.DefaultOff:
-					this.signMeType(Enums.LoginSignMeType.DefaultOff);
-					break;
-				case Enums.LoginSignMeTypeAsString.DefaultOn:
-					this.signMeType(Enums.LoginSignMeType.DefaultOn);
-					break;
-				default:
-				case Enums.LoginSignMeTypeAsString.Unused:
-					this.signMeType(Enums.LoginSignMeType.Unused);
-					break;
-			}
-
-			this.email(Data.devEmail);
-			this.password(Data.devPassword);
-
-			if (this.googleLoginEnabled())
-			{
-				window['rl_' + sJsHash + '_google_login_service'] = fSocial;
-			}
-
-			if (this.facebookLoginEnabled())
-			{
-				window['rl_' + sJsHash + '_facebook_login_service'] = fSocial;
-			}
-
-			if (this.twitterLoginEnabled())
-			{
-				window['rl_' + sJsHash + '_twitter_login_service'] = fSocial;
-			}
-
-			_.delay(function () {
-				Data.language.subscribe(function (sValue) {
-					self.langRequest(true);
-					$.ajax({
-						'url': LinkBuilder.langLink(sValue),
-						'dataType': 'script',
-						'cache': true
-					}).done(function() {
-						self.bSendLanguage = true;
-						Utils.i18nReload();
-						$.cookie('rllang', Data.language(), {'expires': 30});
-					}).always(function() {
-						self.langRequest(false);
-					});
-				});
-			}, 50);
-
-			Utils.triggerAutocompleteInputChange(true);
-		};
-
-		LoginViewModel.prototype.submitForm = function ()
-		{
-			this.submitCommand();
-		};
-
-		LoginViewModel.prototype.selectLanguage = function ()
-		{
-			kn.showScreenPopup(__webpack_require__(/*! View:Popup:Languages */ 32));
-		};
-
-		module.exports = LoginViewModel;
-
-	}());
-
-/***/ }
-
-});
\ No newline at end of file
diff --git a/rainloop/v/0.0.0/static/js/common.js b/rainloop/v/0.0.0/static/js/common.js
deleted file mode 100644
index adec44ef0..000000000
--- a/rainloop/v/0.0.0/static/js/common.js
+++ /dev/null
@@ -1,6696 +0,0 @@
-/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// install a JSONP callback for chunk loading
-/******/ 	var parentJsonpFunction = window["webpackJsonp"];
-/******/ 	window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules) {
-/******/ 		// add "moreModules" to the modules object,
-/******/ 		// then flag all "chunkIds" as loaded and fire callback
-/******/ 		var moduleId, chunkId, i = 0, callbacks = [];
-/******/ 		for(;i < chunkIds.length; i++) {
-/******/ 			chunkId = chunkIds[i];
-/******/ 			if(installedChunks[chunkId])
-/******/ 				callbacks.push.apply(callbacks, installedChunks[chunkId]);
-/******/ 			installedChunks[chunkId] = 0;
-/******/ 		}
-/******/ 		for(moduleId in moreModules) {
-/******/ 			modules[moduleId] = moreModules[moduleId];
-/******/ 		}
-/******/ 		if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);
-/******/ 		while(callbacks.length)
-/******/ 			callbacks.shift().call(null, __webpack_require__);
-/******/ 		if(moreModules[0]) {
-/******/ 			installedModules[0] = 0;
-/******/ 			__webpack_require__(0);
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// object to store loaded and loading chunks
-/******/ 	// "0" means "already loaded"
-/******/ 	// Array means "loading", array contains callbacks
-/******/ 	var installedChunks = {
-/******/ 		1:0
-/******/ 	};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-/******/
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/ 	// This file contains only the entry chunk.
-/******/ 	// The chunk loading function for additional chunks
-/******/ 	__webpack_require__.e = function requireEnsure(chunkId, callback) {
-/******/ 		// "0" is the signal for "already loaded"
-/******/ 		if(installedChunks[chunkId] === 0)
-/******/ 			return callback.call(null, __webpack_require__);
-/******/
-/******/ 		// an array means "currently loading".
-/******/ 		if(installedChunks[chunkId] !== undefined) {
-/******/ 			installedChunks[chunkId].push(callback);
-/******/ 		} else {
-/******/ 			// start chunk loading
-/******/ 			installedChunks[chunkId] = [callback];
-/******/ 			var head = document.getElementsByTagName('head')[0];
-/******/ 			var script = document.createElement('script');
-/******/ 			script.type = 'text/javascript';
-/******/ 			script.charset = 'utf-8';
-/******/ 			script.src = __webpack_require__.p + "" + {"0":"701a517c70faed82fff3","2":"16ff7c35c340aa129a8c","3":"9970c7a3777d831f5c93"}[chunkId] + ".chunk.js";
-/******/ 			head.appendChild(script);
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "rainloop/v/0.0.0/static/js/";
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ 1:
-/*!*****************************!*\
-  !*** ./dev/Common/Utils.js ***!
-  \*****************************/
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	(function () {
-
-		'use strict';
-
-		var
-			Utils = {},
-
-			window = __webpack_require__(/*! window */ 12),
-			_ = __webpack_require__(/*! _ */ 2),
-			$ = __webpack_require__(/*! $ */ 14),
-			ko = __webpack_require__(/*! ko */ 3),
-
-			Enums = __webpack_require__(/*! Common/Enums */ 6),
-			Consts = __webpack_require__(/*! Common/Consts */ 17),
-			Globals = __webpack_require__(/*! Common/Globals */ 7)
-		;
-
-		Utils.trim = $.trim;
-		Utils.inArray = $.inArray;
-		Utils.isArray = _.isArray;
-		Utils.isFunc = _.isFunction;
-		Utils.isUnd = _.isUndefined;
-		Utils.isNull = _.isNull;
-		Utils.emptyFunction = function () {};
-
-		/**
-		 * @param {*} oValue
-		 * @return {boolean}
-		 */
-		Utils.isNormal = function (oValue)
-		{
-			return !Utils.isUnd(oValue) && !Utils.isNull(oValue);
-		};
-
-		Utils.windowResize = _.debounce(function (iTimeout) {
-			if (Utils.isUnd(iTimeout))
-			{
-				Globals.$win.resize();
-			}
-			else
-			{
-				window.setTimeout(function () {
-					Globals.$win.resize();
-				}, iTimeout);
-			}
-		}, 50);
-
-		/**
-		 * @param {(string|number)} mValue
-		 * @param {boolean=} bIncludeZero
-		 * @return {boolean}
-		 */
-		Utils.isPosNumeric = function (mValue, bIncludeZero)
-		{
-			return Utils.isNormal(mValue) ?
-				((Utils.isUnd(bIncludeZero) ? true : !!bIncludeZero) ?
-					(/^[0-9]*$/).test(mValue.toString()) :
-					(/^[1-9]+[0-9]*$/).test(mValue.toString())) :
-				false;
-		};
-
-		/**
-		 * @param {*} iValue
-		 * @param {number=} iDefault = 0
-		 * @return {number}
-		 */
-		Utils.pInt = function (iValue, iDefault)
-		{
-			var iResult = Utils.isNormal(iValue) && '' !== iValue ? window.parseInt(iValue, 10) : (iDefault || 0);
-			return window.isNaN(iResult) ? (iDefault || 0) : iResult;
-		};
-
-		/**
-		 * @param {*} mValue
-		 * @return {string}
-		 */
-		Utils.pString = function (mValue)
-		{
-			return Utils.isNormal(mValue) ? '' + mValue : '';
-		};
-
-		/**
-		 * @param {string} sComponent
-		 * @return {string}
-		 */
-		Utils.encodeURIComponent = function (sComponent)
-		{
-			return window.encodeURIComponent(sComponent);
-		};
-
-		/**
-		 * @param {*} aValue
-		 * @return {boolean}
-		 */
-		Utils.isNonEmptyArray = function (aValue)
-		{
-			return Utils.isArray(aValue) && 0 < aValue.length;
-		};
-
-		/**
-		 * @return {*|null}
-		 */
-		Utils.notificationClass = function ()
-		{
-			return window.Notification && window.Notification.requestPermission ? window.Notification : null;
-		};
-
-		/**
-		 * @param {string} sQueryString
-		 * @return {Object}
-		 */
-		Utils.simpleQueryParser = function (sQueryString)
-		{
-			var
-				oParams = {},
-				aQueries = [],
-				aTemp = [],
-				iIndex = 0,
-				iLen = 0
-			;
-
-			aQueries = sQueryString.split('&');
-			for (iIndex = 0, iLen = aQueries.length; iIndex < iLen; iIndex++)
-			{
-				aTemp = aQueries[iIndex].split('=');
-				oParams[window.decodeURIComponent(aTemp[0])] = window.decodeURIComponent(aTemp[1]);
-			}
-
-			return oParams;
-		};
-
-		/**
-		 * @param {string} sMailToUrl
-		 * @param {Function} PopupComposeVoreModel
-		 * @returns {boolean}
-		 */
-		Utils.mailToHelper = function (sMailToUrl, PopupComposeVoreModel)
-		{
-			if (sMailToUrl && 'mailto:' === sMailToUrl.toString().substr(0, 7).toLowerCase())
-			{
-				sMailToUrl = sMailToUrl.toString().substr(7);
-
-				var
-					oParams = {},
-					oEmailModel = null,
-					sEmail = sMailToUrl.replace(/\?.+$/, ''),
-					sQueryString = sMailToUrl.replace(/^[^\?]*\?/, ''),
-					EmailModel = __webpack_require__(/*! Model:Email */ 23)
-				;
-
-				oEmailModel = new EmailModel();
-				oEmailModel.parse(window.decodeURIComponent(sEmail));
-
-				if (oEmailModel && oEmailModel.email)
-				{
-					oParams = Utils.simpleQueryParser(sQueryString);
-
-					__webpack_require__(/*! App:Knoin */ 5).showScreenPopup(PopupComposeVoreModel, [Enums.ComposeType.Empty, null, [oEmailModel],
-						Utils.isUnd(oParams.subject) ? null : Utils.pString(oParams.subject),
-						Utils.isUnd(oParams.body) ? null : Utils.plainToHtml(Utils.pString(oParams.body))
-					]);
-				}
-
-				return true;
-			}
-
-			return false;
-		};
-
-		/**
-		 * @param {string} sValue
-		 * @param {string} sHash
-		 * @param {string} sKey
-		 * @param {string} sLongKey
-		 * @return {string|boolean}
-		 */
-		Utils.rsaEncode = function (sValue, sHash, sKey, sLongKey)
-		{
-			if (window.crypto && window.crypto.getRandomValues && window.RSAKey && sHash && sKey && sLongKey)
-			{
-				var oRsa = new window.RSAKey();
-				oRsa.setPublic(sLongKey, sKey);
-
-				sValue = oRsa.encrypt(Utils.fakeMd5() + ':' + sValue + ':' + Utils.fakeMd5());
-				if (false !== sValue)
-				{
-					return 'rsa:' + sHash + ':' + sValue;
-				}
-			}
-
-			return false;
-		};
-
-		Utils.rsaEncode.supported = !!(window.crypto && window.crypto.getRandomValues && window.RSAKey);
-
-		/**
-		 * @param {string} sPath
-		 * @param {*=} oObject
-		 * @param {Object=} oObjectToExportTo
-		 */
-		Utils.exportPath = function (sPath, oObject, oObjectToExportTo)
-		{
-			var
-				sPart = null,
-				aParts = sPath.split('.'),
-				oCur = oObjectToExportTo || window
-			;
-
-			for (; aParts.length && (sPart = aParts.shift());)
-			{
-				if (!aParts.length && !Utils.isUnd(oObject))
-				{
-					oCur[sPart] = oObject;
-				}
-				else if (oCur[sPart])
-				{
-					oCur = oCur[sPart];
-				}
-				else
-				{
-					oCur = oCur[sPart] = {};
-				}
-			}
-		};
-
-		/**
-		 * @param {Object} oObject
-		 * @param {string} sName
-		 * @param {*} mValue
-		 */
-		Utils.pImport = function (oObject, sName, mValue)
-		{
-			oObject[sName] = mValue;
-		};
-
-		/**
-		 * @param {Object} oObject
-		 * @param {string} sName
-		 * @param {*} mDefault
-		 * @return {*}
-		 */
-		Utils.pExport = function (oObject, sName, mDefault)
-		{
-			return Utils.isUnd(oObject[sName]) ? mDefault : oObject[sName];
-		};
-
-		/**
-		 * @param {string} sText
-		 * @return {string}
-		 */
-		Utils.encodeHtml = function (sText)
-		{
-			return Utils.isNormal(sText) ? sText.toString()
-				.replace(/&/g, '&').replace(//g, '>')
-				.replace(/"/g, '"').replace(/'/g, ''') : '';
-		};
-
-		/**
-		 * @param {string} sText
-		 * @param {number=} iLen
-		 * @return {string}
-		 */
-		Utils.splitPlainText = function (sText, iLen)
-		{
-			var
-				sPrefix = '',
-				sSubText = '',
-				sResult = sText,
-				iSpacePos = 0,
-				iNewLinePos = 0
-			;
-
-			iLen = Utils.isUnd(iLen) ? 100 : iLen;
-
-			while (sResult.length > iLen)
-			{
-				sSubText = sResult.substring(0, iLen);
-				iSpacePos = sSubText.lastIndexOf(' ');
-				iNewLinePos = sSubText.lastIndexOf('\n');
-
-				if (-1 !== iNewLinePos)
-				{
-					iSpacePos = iNewLinePos;
-				}
-
-				if (-1 === iSpacePos)
-				{
-					iSpacePos = iLen;
-				}
-
-				sPrefix += sSubText.substring(0, iSpacePos) + '\n';
-				sResult = sResult.substring(iSpacePos + 1);
-			}
-
-			return sPrefix + sResult;
-		};
-
-		Utils.timeOutAction = (function () {
-
-			var
-				oTimeOuts = {}
-			;
-
-			return function (sAction, fFunction, iTimeOut)
-			{
-				if (Utils.isUnd(oTimeOuts[sAction]))
-				{
-					oTimeOuts[sAction] = 0;
-				}
-
-				window.clearTimeout(oTimeOuts[sAction]);
-				oTimeOuts[sAction] = window.setTimeout(fFunction, iTimeOut);
-			};
-		}());
-
-		Utils.timeOutActionSecond = (function () {
-
-			var
-				oTimeOuts = {}
-			;
-
-			return function (sAction, fFunction, iTimeOut)
-			{
-				if (!oTimeOuts[sAction])
-				{
-					oTimeOuts[sAction] = window.setTimeout(function () {
-						fFunction();
-						oTimeOuts[sAction] = 0;
-					}, iTimeOut);
-				}
-			};
-		}());
-
-		Utils.audio = (function () {
-
-			var
-				oAudio = false
-			;
-
-			return function (sMp3File, sOggFile) {
-
-				if (false === oAudio)
-				{
-					if (Globals.bIsiOSDevice)
-					{
-						oAudio = null;
-					}
-					else
-					{
-						var
-							bCanPlayMp3	= false,
-							bCanPlayOgg	= false,
-							oAudioLocal = window.Audio ? new window.Audio() : null
-						;
-
-						if (oAudioLocal && oAudioLocal.canPlayType && oAudioLocal.play)
-						{
-							bCanPlayMp3 = '' !== oAudioLocal.canPlayType('audio/mpeg; codecs="mp3"');
-							if (!bCanPlayMp3)
-							{
-								bCanPlayOgg = '' !== oAudioLocal.canPlayType('audio/ogg; codecs="vorbis"');
-							}
-
-							if (bCanPlayMp3 || bCanPlayOgg)
-							{
-								oAudio = oAudioLocal;
-								oAudio.preload = 'none';
-								oAudio.loop = false;
-								oAudio.autoplay = false;
-								oAudio.muted = false;
-								oAudio.src = bCanPlayMp3 ? sMp3File : sOggFile;
-							}
-							else
-							{
-								oAudio = null;
-							}
-						}
-						else
-						{
-							oAudio = null;
-						}
-					}
-				}
-
-				return oAudio;
-			};
-		}());
-
-		/**
-		 * @param {(Object|null|undefined)} oObject
-		 * @param {string} sProp
-		 * @return {boolean}
-		 */
-		Utils.hos = function (oObject, sProp)
-		{
-			return oObject && window.Object && window.Object.hasOwnProperty ? window.Object.hasOwnProperty.call(oObject, sProp) : false;
-		};
-
-		/**
-		 * @param {string} sKey
-		 * @param {Object=} oValueList
-		 * @param {string=} sDefaulValue
-		 * @return {string}
-		 */
-		Utils.i18n = function (sKey, oValueList, sDefaulValue)
-		{
-			var
-				sValueName = '',
-				sResult = Utils.isUnd(Globals.oI18N[sKey]) ? (Utils.isUnd(sDefaulValue) ? sKey : sDefaulValue) : Globals.oI18N[sKey]
-			;
-
-			if (!Utils.isUnd(oValueList) && !Utils.isNull(oValueList))
-			{
-				for (sValueName in oValueList)
-				{
-					if (Utils.hos(oValueList, sValueName))
-					{
-						sResult = sResult.replace('%' + sValueName + '%', oValueList[sValueName]);
-					}
-				}
-			}
-
-			return sResult;
-		};
-
-		/**
-		 * @param {Object} oElement
-		 */
-		Utils.i18nToNode = function (oElement)
-		{
-			_.defer(function () {
-				$('.i18n', oElement).each(function () {
-					var
-						jqThis = $(this),
-						sKey = ''
-					;
-
-					sKey = jqThis.data('i18n-text');
-					if (sKey)
-					{
-						jqThis.text(Utils.i18n(sKey));
-					}
-					else
-					{
-						sKey = jqThis.data('i18n-html');
-						if (sKey)
-						{
-							jqThis.html(Utils.i18n(sKey));
-						}
-
-						sKey = jqThis.data('i18n-placeholder');
-						if (sKey)
-						{
-							jqThis.attr('placeholder', Utils.i18n(sKey));
-						}
-
-						sKey = jqThis.data('i18n-title');
-						if (sKey)
-						{
-							jqThis.attr('title', Utils.i18n(sKey));
-						}
-					}
-				});
-			});
-		};
-
-		Utils.i18nReload = function ()
-		{
-			if (window['rainloopI18N'])
-			{
-				Globals.oI18N = window['rainloopI18N'] || {};
-
-				Utils.i18nToNode(Globals.$doc);
-
-				Globals.langChangeTrigger(!Globals.langChangeTrigger());
-			}
-
-			window['rainloopI18N'] = null;
-		};
-
-		/**
-		 * @param {Function} fCallback
-		 * @param {Object} oScope
-		 * @param {Function=} fLangCallback
-		 */
-		Utils.initOnStartOrLangChange = function (fCallback, oScope, fLangCallback)
-		{
-			if (fCallback)
-			{
-				fCallback.call(oScope);
-			}
-
-			if (fLangCallback)
-			{
-				Globals.langChangeTrigger.subscribe(function () {
-					if (fCallback)
-					{
-						fCallback.call(oScope);
-					}
-
-					fLangCallback.call(oScope);
-				});
-			}
-			else if (fCallback)
-			{
-				Globals.langChangeTrigger.subscribe(fCallback, oScope);
-			}
-		};
-
-		/**
-		 * @return {boolean}
-		 */
-		Utils.inFocus = function ()
-		{
-			if (window.document.activeElement)
-			{
-				if (Utils.isUnd(window.document.activeElement.__inFocusCache))
-				{
-					window.document.activeElement.__inFocusCache = $(window.document.activeElement).is('input,textarea,iframe,.cke_editable');
-				}
-
-				return !!window.document.activeElement.__inFocusCache;
-			}
-
-			return false;
-		};
-
-		Utils.removeInFocus = function ()
-		{
-			if (window.document && window.document.activeElement && window.document.activeElement.blur)
-			{
-				var oA = $(window.document.activeElement);
-				if (oA.is('input,textarea'))
-				{
-					window.document.activeElement.blur();
-				}
-			}
-		};
-
-		Utils.removeSelection = function ()
-		{
-			if (window && window.getSelection)
-			{
-				var oSel = window.getSelection();
-				if (oSel && oSel.removeAllRanges)
-				{
-					oSel.removeAllRanges();
-				}
-			}
-			else if (window.document && window.document.selection && window.document.selection.empty)
-			{
-				window.document.selection.empty();
-			}
-		};
-
-		/**
-		 * @param {string} sPrefix
-		 * @param {string} sSubject
-		 * @return {string}
-		 */
-		Utils.replySubjectAdd = function (sPrefix, sSubject)
-		{
-			sPrefix = Utils.trim(sPrefix.toUpperCase());
-			sSubject = Utils.trim(sSubject.replace(/[\s]+/g, ' '));
-
-			var
-				bDrop = false,
-				aSubject = [],
-				bRe = 'RE' === sPrefix,
-				bFwd = 'FWD' === sPrefix,
-				bPrefixIsRe = !bFwd
-			;
-
-			if ('' !== sSubject)
-			{
-				_.each(sSubject.split(':'), function (sPart) {
-					var sTrimmedPart = Utils.trim(sPart);
-					if (!bDrop && (/^(RE|FWD)$/i.test(sTrimmedPart) || /^(RE|FWD)[\[\(][\d]+[\]\)]$/i.test(sTrimmedPart)))
-					{
-						if (!bRe)
-						{
-							bRe = !!(/^RE/i.test(sTrimmedPart));
-						}
-
-						if (!bFwd)
-						{
-							bFwd = !!(/^FWD/i.test(sTrimmedPart));
-						}
-					}
-					else
-					{
-						aSubject.push(sPart);
-						bDrop = true;
-					}
-				});
-			}
-
-			if (bPrefixIsRe)
-			{
-				bRe = false;
-			}
-			else
-			{
-				bFwd = false;
-			}
-
-			return Utils.trim(
-				(bPrefixIsRe ? 'Re: ' : 'Fwd: ') +
-				(bRe ? 'Re: ' : '') +
-				(bFwd ? 'Fwd: ' : '') +
-				Utils.trim(aSubject.join(':'))
-			);
-		};
-
-		/**
-		 * @param {number} iNum
-		 * @param {number} iDec
-		 * @return {number}
-		 */
-		Utils.roundNumber = function (iNum, iDec)
-		{
-			return window.Math.round(iNum * window.Math.pow(10, iDec)) / window.Math.pow(10, iDec);
-		};
-
-		/**
-		 * @param {(number|string)} iSizeInBytes
-		 * @return {string}
-		 */
-		Utils.friendlySize = function (iSizeInBytes)
-		{
-			iSizeInBytes = Utils.pInt(iSizeInBytes);
-
-			if (iSizeInBytes >= 1073741824)
-			{
-				return Utils.roundNumber(iSizeInBytes / 1073741824, 1) + 'GB';
-			}
-			else if (iSizeInBytes >= 1048576)
-			{
-				return Utils.roundNumber(iSizeInBytes / 1048576, 1) + 'MB';
-			}
-			else if (iSizeInBytes >= 1024)
-			{
-				return Utils.roundNumber(iSizeInBytes / 1024, 0) + 'KB';
-			}
-
-			return iSizeInBytes + 'B';
-		};
-
-		/**
-		 * @param {string} sDesc
-		 */
-		Utils.log = function (sDesc)
-		{
-			if (window.console && window.console.log)
-			{
-				window.console.log(sDesc);
-			}
-		};
-
-		/**
-		 * @param {number} iCode
-		 * @param {*=} mMessage = ''
-		 * @return {string}
-		 */
-		Utils.getNotification = function (iCode, mMessage)
-		{
-			iCode = Utils.pInt(iCode);
-			if (Enums.Notification.ClientViewError === iCode && mMessage)
-			{
-				return mMessage;
-			}
-
-			return Utils.isUnd(Globals.oNotificationI18N[iCode]) ? '' : Globals.oNotificationI18N[iCode];
-		};
-
-		Utils.initNotificationLanguage = function ()
-		{
-			var oN = Globals.oNotificationI18N || {};
-			oN[Enums.Notification.InvalidToken] = Utils.i18n('NOTIFICATIONS/INVALID_TOKEN');
-			oN[Enums.Notification.AuthError] = Utils.i18n('NOTIFICATIONS/AUTH_ERROR');
-			oN[Enums.Notification.AccessError] = Utils.i18n('NOTIFICATIONS/ACCESS_ERROR');
-			oN[Enums.Notification.ConnectionError] = Utils.i18n('NOTIFICATIONS/CONNECTION_ERROR');
-			oN[Enums.Notification.CaptchaError] = Utils.i18n('NOTIFICATIONS/CAPTCHA_ERROR');
-			oN[Enums.Notification.SocialFacebookLoginAccessDisable] = Utils.i18n('NOTIFICATIONS/SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE');
-			oN[Enums.Notification.SocialTwitterLoginAccessDisable] = Utils.i18n('NOTIFICATIONS/SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE');
-			oN[Enums.Notification.SocialGoogleLoginAccessDisable] = Utils.i18n('NOTIFICATIONS/SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE');
-			oN[Enums.Notification.DomainNotAllowed] = Utils.i18n('NOTIFICATIONS/DOMAIN_NOT_ALLOWED');
-			oN[Enums.Notification.AccountNotAllowed] = Utils.i18n('NOTIFICATIONS/ACCOUNT_NOT_ALLOWED');
-
-			oN[Enums.Notification.AccountTwoFactorAuthRequired] = Utils.i18n('NOTIFICATIONS/ACCOUNT_TWO_FACTOR_AUTH_REQUIRED');
-			oN[Enums.Notification.AccountTwoFactorAuthError] = Utils.i18n('NOTIFICATIONS/ACCOUNT_TWO_FACTOR_AUTH_ERROR');
-
-			oN[Enums.Notification.CouldNotSaveNewPassword] = Utils.i18n('NOTIFICATIONS/COULD_NOT_SAVE_NEW_PASSWORD');
-			oN[Enums.Notification.CurrentPasswordIncorrect] = Utils.i18n('NOTIFICATIONS/CURRENT_PASSWORD_INCORRECT');
-			oN[Enums.Notification.NewPasswordShort] = Utils.i18n('NOTIFICATIONS/NEW_PASSWORD_SHORT');
-			oN[Enums.Notification.NewPasswordWeak] = Utils.i18n('NOTIFICATIONS/NEW_PASSWORD_WEAK');
-			oN[Enums.Notification.NewPasswordForbidden] = Utils.i18n('NOTIFICATIONS/NEW_PASSWORD_FORBIDDENT');
-
-			oN[Enums.Notification.ContactsSyncError] = Utils.i18n('NOTIFICATIONS/CONTACTS_SYNC_ERROR');
-
-			oN[Enums.Notification.CantGetMessageList] = Utils.i18n('NOTIFICATIONS/CANT_GET_MESSAGE_LIST');
-			oN[Enums.Notification.CantGetMessage] = Utils.i18n('NOTIFICATIONS/CANT_GET_MESSAGE');
-			oN[Enums.Notification.CantDeleteMessage] = Utils.i18n('NOTIFICATIONS/CANT_DELETE_MESSAGE');
-			oN[Enums.Notification.CantMoveMessage] = Utils.i18n('NOTIFICATIONS/CANT_MOVE_MESSAGE');
-			oN[Enums.Notification.CantCopyMessage] = Utils.i18n('NOTIFICATIONS/CANT_MOVE_MESSAGE');
-
-			oN[Enums.Notification.CantSaveMessage] = Utils.i18n('NOTIFICATIONS/CANT_SAVE_MESSAGE');
-			oN[Enums.Notification.CantSendMessage] = Utils.i18n('NOTIFICATIONS/CANT_SEND_MESSAGE');
-			oN[Enums.Notification.InvalidRecipients] = Utils.i18n('NOTIFICATIONS/INVALID_RECIPIENTS');
-
-			oN[Enums.Notification.CantCreateFolder] = Utils.i18n('NOTIFICATIONS/CANT_CREATE_FOLDER');
-			oN[Enums.Notification.CantRenameFolder] = Utils.i18n('NOTIFICATIONS/CANT_RENAME_FOLDER');
-			oN[Enums.Notification.CantDeleteFolder] = Utils.i18n('NOTIFICATIONS/CANT_DELETE_FOLDER');
-			oN[Enums.Notification.CantDeleteNonEmptyFolder] = Utils.i18n('NOTIFICATIONS/CANT_DELETE_NON_EMPTY_FOLDER');
-			oN[Enums.Notification.CantSubscribeFolder] = Utils.i18n('NOTIFICATIONS/CANT_SUBSCRIBE_FOLDER');
-			oN[Enums.Notification.CantUnsubscribeFolder] = Utils.i18n('NOTIFICATIONS/CANT_UNSUBSCRIBE_FOLDER');
-
-			oN[Enums.Notification.CantSaveSettings] = Utils.i18n('NOTIFICATIONS/CANT_SAVE_SETTINGS');
-			oN[Enums.Notification.CantSavePluginSettings] = Utils.i18n('NOTIFICATIONS/CANT_SAVE_PLUGIN_SETTINGS');
-
-			oN[Enums.Notification.DomainAlreadyExists] = Utils.i18n('NOTIFICATIONS/DOMAIN_ALREADY_EXISTS');
-
-			oN[Enums.Notification.CantInstallPackage] = Utils.i18n('NOTIFICATIONS/CANT_INSTALL_PACKAGE');
-			oN[Enums.Notification.CantDeletePackage] = Utils.i18n('NOTIFICATIONS/CANT_DELETE_PACKAGE');
-			oN[Enums.Notification.InvalidPluginPackage] = Utils.i18n('NOTIFICATIONS/INVALID_PLUGIN_PACKAGE');
-			oN[Enums.Notification.UnsupportedPluginPackage] = Utils.i18n('NOTIFICATIONS/UNSUPPORTED_PLUGIN_PACKAGE');
-
-			oN[Enums.Notification.LicensingServerIsUnavailable] = Utils.i18n('NOTIFICATIONS/LICENSING_SERVER_IS_UNAVAILABLE');
-			oN[Enums.Notification.LicensingExpired] = Utils.i18n('NOTIFICATIONS/LICENSING_EXPIRED');
-			oN[Enums.Notification.LicensingBanned] = Utils.i18n('NOTIFICATIONS/LICENSING_BANNED');
-
-			oN[Enums.Notification.DemoSendMessageError] = Utils.i18n('NOTIFICATIONS/DEMO_SEND_MESSAGE_ERROR');
-
-			oN[Enums.Notification.AccountAlreadyExists] = Utils.i18n('NOTIFICATIONS/ACCOUNT_ALREADY_EXISTS');
-
-			oN[Enums.Notification.MailServerError] = Utils.i18n('NOTIFICATIONS/MAIL_SERVER_ERROR');
-			oN[Enums.Notification.InvalidInputArgument] = Utils.i18n('NOTIFICATIONS/INVALID_INPUT_ARGUMENT');
-			oN[Enums.Notification.UnknownNotification] = Utils.i18n('NOTIFICATIONS/UNKNOWN_ERROR');
-			oN[Enums.Notification.UnknownError] = Utils.i18n('NOTIFICATIONS/UNKNOWN_ERROR');
-		};
-
-		/**
-		 * @param {*} mCode
-		 * @return {string}
-		 */
-		Utils.getUploadErrorDescByCode = function (mCode)
-		{
-			var sResult = '';
-			switch (Utils.pInt(mCode)) {
-			case Enums.UploadErrorCode.FileIsTooBig:
-				sResult = Utils.i18n('UPLOAD/ERROR_FILE_IS_TOO_BIG');
-				break;
-			case Enums.UploadErrorCode.FilePartiallyUploaded:
-				sResult = Utils.i18n('UPLOAD/ERROR_FILE_PARTIALLY_UPLOADED');
-				break;
-			case Enums.UploadErrorCode.FileNoUploaded:
-				sResult = Utils.i18n('UPLOAD/ERROR_NO_FILE_UPLOADED');
-				break;
-			case Enums.UploadErrorCode.MissingTempFolder:
-				sResult = Utils.i18n('UPLOAD/ERROR_MISSING_TEMP_FOLDER');
-				break;
-			case Enums.UploadErrorCode.FileOnSaveingError:
-				sResult = Utils.i18n('UPLOAD/ERROR_ON_SAVING_FILE');
-				break;
-			case Enums.UploadErrorCode.FileType:
-				sResult = Utils.i18n('UPLOAD/ERROR_FILE_TYPE');
-				break;
-			default:
-				sResult = Utils.i18n('UPLOAD/ERROR_UNKNOWN');
-				break;
-			}
-
-			return sResult;
-		};
-
-		/**
-		 * @param {?} oObject
-		 * @param {string} sMethodName
-		 * @param {Array=} aParameters
-		 * @param {number=} nDelay
-		 */
-		Utils.delegateRun = function (oObject, sMethodName, aParameters, nDelay)
-		{
-			if (oObject && oObject[sMethodName])
-			{
-				nDelay = Utils.pInt(nDelay);
-				if (0 >= nDelay)
-				{
-					oObject[sMethodName].apply(oObject, Utils.isArray(aParameters) ? aParameters : []);
-				}
-				else
-				{
-					_.delay(function () {
-						oObject[sMethodName].apply(oObject, Utils.isArray(aParameters) ? aParameters : []);
-					}, nDelay);
-				}
-			}
-		};
-
-		/**
-		 * @param {?} oEvent
-		 */
-		Utils.killCtrlAandS = function (oEvent)
-		{
-			oEvent = oEvent || window.event;
-			if (oEvent && oEvent.ctrlKey && !oEvent.shiftKey && !oEvent.altKey)
-			{
-				var
-					oSender = oEvent.target || oEvent.srcElement,
-					iKey = oEvent.keyCode || oEvent.which
-				;
-
-				if (iKey === Enums.EventKeyCode.S)
-				{
-					oEvent.preventDefault();
-					return;
-				}
-
-				if (oSender && oSender.tagName && oSender.tagName.match(/INPUT|TEXTAREA/i))
-				{
-					return;
-				}
-
-				if (iKey === Enums.EventKeyCode.A)
-				{
-					if (window.getSelection)
-					{
-						window.getSelection().removeAllRanges();
-					}
-					else if (window.document.selection && window.document.selection.clear)
-					{
-						window.document.selection.clear();
-					}
-
-					oEvent.preventDefault();
-				}
-			}
-		};
-
-		/**
-		 * @param {(Object|null|undefined)} oContext
-		 * @param {Function} fExecute
-		 * @param {(Function|boolean|null)=} fCanExecute
-		 * @return {Function}
-		 */
-		Utils.createCommand = function (oContext, fExecute, fCanExecute)
-		{
-			var
-				fResult = fExecute ? function () {
-
-					if (fResult && fResult.canExecute && fResult.canExecute())
-					{
-						fExecute.apply(oContext, Array.prototype.slice.call(arguments));
-					}
-
-					return false;
-
-				} : function () {}
-			;
-
-			fResult.enabled = ko.observable(true);
-
-			fCanExecute = Utils.isUnd(fCanExecute) ? true : fCanExecute;
-			if (Utils.isFunc(fCanExecute))
-			{
-				fResult.canExecute = ko.computed(function () {
-					return fResult.enabled() && fCanExecute.call(oContext);
-				});
-			}
-			else
-			{
-				fResult.canExecute = ko.computed(function () {
-					return fResult.enabled() && !!fCanExecute;
-				});
-			}
-
-			return fResult;
-		};
-
-		/**
-		 * @param {Object} oData
-		 */
-		Utils.initDataConstructorBySettings = function (oData)
-		{
-			oData.editorDefaultType = ko.observable(Enums.EditorDefaultType.Html);
-			oData.showImages = ko.observable(false);
-			oData.interfaceAnimation = ko.observable(Enums.InterfaceAnimation.Full);
-			oData.contactsAutosave = ko.observable(false);
-
-			Globals.sAnimationType = Enums.InterfaceAnimation.Full;
-
-			oData.capaThemes = ko.observable(false);
-			oData.allowLanguagesOnSettings = ko.observable(true);
-			oData.allowLanguagesOnLogin = ko.observable(true);
-
-			oData.useLocalProxyForExternalImages = ko.observable(false);
-
-			oData.desktopNotifications = ko.observable(false);
-			oData.useThreads = ko.observable(true);
-			oData.replySameFolder = ko.observable(true);
-			oData.useCheckboxesInList = ko.observable(true);
-
-			oData.layout = ko.observable(Enums.Layout.SidePreview);
-			oData.usePreviewPane = ko.computed(function () {
-				return Enums.Layout.NoPreview !== oData.layout();
-			});
-
-			oData.interfaceAnimation.subscribe(function (sValue) {
-				if (Globals.bMobileDevice || sValue === Enums.InterfaceAnimation.None)
-				{
-					Globals.$html.removeClass('rl-anim rl-anim-full').addClass('no-rl-anim');
-
-					Globals.sAnimationType = Enums.InterfaceAnimation.None;
-				}
-				else
-				{
-					switch (sValue)
-					{
-						case Enums.InterfaceAnimation.Full:
-							Globals.$html.removeClass('no-rl-anim').addClass('rl-anim rl-anim-full');
-							Globals.sAnimationType = sValue;
-							break;
-						case Enums.InterfaceAnimation.Normal:
-							Globals.$html.removeClass('no-rl-anim rl-anim-full').addClass('rl-anim');
-							Globals.sAnimationType = sValue;
-							break;
-					}
-				}
-			});
-
-			oData.interfaceAnimation.valueHasMutated();
-
-			oData.desktopNotificationsPermisions = ko.computed(function () {
-
-				oData.desktopNotifications();
-
-				var
-					NotificationClass = Utils.notificationClass(),
-					iResult = Enums.DesktopNotifications.NotSupported
-				;
-
-				if (NotificationClass && NotificationClass.permission)
-				{
-					switch (NotificationClass.permission.toLowerCase())
-					{
-						case 'granted':
-							iResult = Enums.DesktopNotifications.Allowed;
-							break;
-						case 'denied':
-							iResult = Enums.DesktopNotifications.Denied;
-							break;
-						case 'default':
-							iResult = Enums.DesktopNotifications.NotAllowed;
-							break;
-					}
-				}
-				else if (window.webkitNotifications && window.webkitNotifications.checkPermission)
-				{
-					iResult = window.webkitNotifications.checkPermission();
-				}
-
-				return iResult;
-			});
-
-			oData.useDesktopNotifications = ko.computed({
-				'read': function () {
-					return oData.desktopNotifications() &&
-						Enums.DesktopNotifications.Allowed === oData.desktopNotificationsPermisions();
-				},
-				'write': function (bValue) {
-					if (bValue)
-					{
-						var
-							NotificationClass = Utils.notificationClass(),
-							iPermission = oData.desktopNotificationsPermisions()
-						;
-
-						if (NotificationClass && Enums.DesktopNotifications.Allowed === iPermission)
-						{
-							oData.desktopNotifications(true);
-						}
-						else if (NotificationClass && Enums.DesktopNotifications.NotAllowed === iPermission)
-						{
-							NotificationClass.requestPermission(function () {
-								oData.desktopNotifications.valueHasMutated();
-								if (Enums.DesktopNotifications.Allowed === oData.desktopNotificationsPermisions())
-								{
-									if (oData.desktopNotifications())
-									{
-										oData.desktopNotifications.valueHasMutated();
-									}
-									else
-									{
-										oData.desktopNotifications(true);
-									}
-								}
-								else
-								{
-									if (oData.desktopNotifications())
-									{
-										oData.desktopNotifications(false);
-									}
-									else
-									{
-										oData.desktopNotifications.valueHasMutated();
-									}
-								}
-							});
-						}
-						else
-						{
-							oData.desktopNotifications(false);
-						}
-					}
-					else
-					{
-						oData.desktopNotifications(false);
-					}
-				}
-			});
-
-			oData.language = ko.observable('');
-			oData.languages = ko.observableArray([]);
-
-			oData.mainLanguage = ko.computed({
-				'read': oData.language,
-				'write': function (sValue) {
-					if (sValue !== oData.language())
-					{
-						if (-1 < Utils.inArray(sValue, oData.languages()))
-						{
-							oData.language(sValue);
-						}
-						else if (0 < oData.languages().length)
-						{
-							oData.language(oData.languages()[0]);
-						}
-					}
-					else
-					{
-						oData.language.valueHasMutated();
-					}
-				}
-			});
-
-			oData.theme = ko.observable('');
-			oData.themes = ko.observableArray([]);
-
-			oData.mainTheme = ko.computed({
-				'read': oData.theme,
-				'write': function (sValue) {
-					if (sValue !== oData.theme())
-					{
-						var aThemes = oData.themes();
-						if (-1 < Utils.inArray(sValue, aThemes))
-						{
-							oData.theme(sValue);
-						}
-						else if (0 < aThemes.length)
-						{
-							oData.theme(aThemes[0]);
-						}
-					}
-					else
-					{
-						oData.theme.valueHasMutated();
-					}
-				}
-			});
-
-			oData.capaAdditionalAccounts = ko.observable(false);
-			oData.capaAdditionalIdentities = ko.observable(false);
-			oData.capaGravatar = ko.observable(false);
-			oData.determineUserLanguage = ko.observable(false);
-			oData.determineUserDomain = ko.observable(false);
-
-			oData.messagesPerPage = ko.observable(Consts.Defaults.MessagesPerPage);//.extend({'throttle': 200});
-
-			oData.mainMessagesPerPage = oData.messagesPerPage;
-			oData.mainMessagesPerPage = ko.computed({
-				'read': oData.messagesPerPage,
-				'write': function (iValue) {
-					if (-1 < Utils.inArray(Utils.pInt(iValue), Consts.Defaults.MessagesPerPageArray))
-					{
-						if (iValue !== oData.messagesPerPage())
-						{
-							oData.messagesPerPage(iValue);
-						}
-					}
-					else
-					{
-						oData.messagesPerPage.valueHasMutated();
-					}
-				}
-			});
-
-			oData.facebookSupported = ko.observable(false);
-			oData.facebookEnable = ko.observable(false);
-			oData.facebookAppID = ko.observable('');
-			oData.facebookAppSecret = ko.observable('');
-
-			oData.twitterEnable = ko.observable(false);
-			oData.twitterConsumerKey = ko.observable('');
-			oData.twitterConsumerSecret = ko.observable('');
-
-			oData.googleEnable = ko.observable(false);
-			oData.googleClientID = ko.observable('');
-			oData.googleClientSecret = ko.observable('');
-			oData.googleApiKey = ko.observable('');
-
-			oData.dropboxEnable = ko.observable(false);
-			oData.dropboxApiKey = ko.observable('');
-
-			oData.contactsIsAllowed = ko.observable(false);
-		};
-
-		/**
-		 * @param {{moment:Function}} oObject
-		 */
-		Utils.createMomentDate = function (oObject)
-		{
-			if (Utils.isUnd(oObject.moment))
-			{
-				oObject.moment = ko.observable(moment());
-			}
-
-			return ko.computed(function () {
-				Globals.momentTrigger();
-				var oMoment = this.moment();
-				return 1970 === oMoment.year() ? '' : oMoment.fromNow();
-			}, oObject);
-		};
-
-		/**
-		 * @param {{moment:Function, momentDate:Function}} oObject
-		 */
-		Utils.createMomentShortDate = function (oObject)
-		{
-			return ko.computed(function () {
-
-				var
-					sResult = '',
-					oMomentNow = moment(),
-					oMoment = this.moment(),
-					sMomentDate = this.momentDate()
-				;
-
-				if (1970 === oMoment.year())
-				{
-					sResult = '';
-				}
-				else if (4 >= oMomentNow.diff(oMoment, 'hours'))
-				{
-					sResult = sMomentDate;
-				}
-				else if (oMomentNow.format('L') === oMoment.format('L'))
-				{
-					sResult = Utils.i18n('MESSAGE_LIST/TODAY_AT', {
-						'TIME': oMoment.format('LT')
-					});
-				}
-				else if (oMomentNow.clone().subtract('days', 1).format('L') === oMoment.format('L'))
-				{
-					sResult = Utils.i18n('MESSAGE_LIST/YESTERDAY_AT', {
-						'TIME': oMoment.format('LT')
-					});
-				}
-				else if (oMomentNow.year() === oMoment.year())
-				{
-					sResult = oMoment.format('D MMM.');
-				}
-				else
-				{
-					sResult = oMoment.format('LL');
-				}
-
-				return sResult;
-
-			}, oObject);
-		};
-
-		/**
-		 * @param {string} sTheme
-		 * @return {string}
-		 */
-		Utils.convertThemeName = function (sTheme)
-		{
-			if ('@custom' === sTheme.substr(-7))
-			{
-				sTheme = Utils.trim(sTheme.substring(0, sTheme.length - 7));
-			}
-
-			return Utils.trim(sTheme.replace(/[^a-zA-Z0-9]+/g, ' ').replace(/([A-Z])/g, ' $1').replace(/[\s]+/g, ' '));
-		};
-
-		/**
-		 * @param {string} sName
-		 * @return {string}
-		 */
-		Utils.quoteName = function (sName)
-		{
-			return sName.replace(/["]/g, '\\"');
-		};
-
-		/**
-		 * @return {number}
-		 */
-		Utils.microtime = function ()
-		{
-			return (new Date()).getTime();
-		};
-
-		/**
-		 *
-		 * @param {string} sLanguage
-		 * @param {boolean=} bEng = false
-		 * @return {string}
-		 */
-		Utils.convertLangName = function (sLanguage, bEng)
-		{
-			return Utils.i18n('LANGS_NAMES' + (true === bEng ? '_EN' : '') + '/LANG_' +
-				sLanguage.toUpperCase().replace(/[^a-zA-Z0-9]+/g, '_'), null, sLanguage);
-		};
-
-		/**
-		 * @param {number=} iLen
-		 * @return {string}
-		 */
-		Utils.fakeMd5 = function(iLen)
-		{
-			var
-				sResult = '',
-				sLine = '0123456789abcdefghijklmnopqrstuvwxyz'
-			;
-
-			iLen = Utils.isUnd(iLen) ? 32 : Utils.pInt(iLen);
-
-			while (sResult.length < iLen)
-			{
-				sResult += sLine.substr(window.Math.round(window.Math.random() * sLine.length), 1);
-			}
-
-			return sResult;
-		};
-
-		/**
-		 * @param {string} sPlain
-		 * @return {string}
-		 */
-		Utils.convertPlainTextToHtml = function (sPlain)
-		{
-			return sPlain.toString()
-				.replace(/&/g, '&').replace(/>/g, '>').replace(/');
-		};
-
-		Utils.draggeblePlace = function ()
-		{
-			return $('
 
').appendTo('#rl-hidden'); - }; - - Utils.defautOptionsAfterRender = function (oDomOption, oItem) - { - if (oItem && !Utils.isUnd(oItem.disabled) && oDomOption) - { - $(oDomOption) - .toggleClass('disabled', oItem.disabled) - .prop('disabled', oItem.disabled) - ; - } - }; - - /** - * @param {Object} oViewModel - * @param {string} sTemplateID - * @param {string} sTitle - * @param {Function=} fCallback - */ - Utils.windowPopupKnockout = function (oViewModel, sTemplateID, sTitle, fCallback) - { - var - oScript = null, - oWin = window.open(''), - sFunc = '__OpenerApplyBindingsUid' + Utils.fakeMd5() + '__', - oTemplate = $('#' + sTemplateID) - ; - - window[sFunc] = function () { - - if (oWin && oWin.document.body && oTemplate && oTemplate[0]) - { - var oBody = $(oWin.document.body); - - $('#rl-content', oBody).html(oTemplate.html()); - $('html', oWin.document).addClass('external ' + $('html').attr('class')); - - Utils.i18nToNode(oBody); - - if (oViewModel && $('#rl-content', oBody)[0]) - { - ko.applyBindings(oViewModel, $('#rl-content', oBody)[0]); - } - - window[sFunc] = null; - - fCallback(oWin); - } - }; - - oWin.document.open(); - oWin.document.write('' + - '' + - '' + - '' + - '' + - '' + - '' + Utils.encodeHtml(sTitle) + '' + - '
'); - oWin.document.close(); - - oScript = oWin.document.createElement('script'); - oScript.type = 'text/javascript'; - oScript.innerHTML = 'if(window&&window.opener&&window.opener[\'' + sFunc + '\']){window.opener[\'' + sFunc + '\']();window.opener[\'' + sFunc + '\']=null}'; - oWin.document.getElementsByTagName('head')[0].appendChild(oScript); - }; - - /** - * @param {Function} fCallback - * @param {?} koTrigger - * @param {?} oContext = null - * @param {number=} iTimer = 1000 - * @return {Function} - */ - Utils.settingsSaveHelperFunction = function (fCallback, koTrigger, oContext, iTimer) - { - oContext = oContext || null; - iTimer = Utils.isUnd(iTimer) ? 1000 : Utils.pInt(iTimer); - - return function (sType, mData, bCached, sRequestAction, oRequestParameters) { - koTrigger.call(oContext, mData && mData['Result'] ? Enums.SaveSettingsStep.TrueResult : Enums.SaveSettingsStep.FalseResult); - if (fCallback) - { - fCallback.call(oContext, sType, mData, bCached, sRequestAction, oRequestParameters); - } - _.delay(function () { - koTrigger.call(oContext, Enums.SaveSettingsStep.Idle); - }, iTimer); - }; - }; - - Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext) - { - return Utils.settingsSaveHelperFunction(null, koTrigger, oContext, 1000); - }; - - /** - * @param {string} sHtml - * @return {string} - */ - Utils.htmlToPlain = function (sHtml) - { - var - iPos = 0, - iP1 = 0, - iP2 = 0, - iP3 = 0, - iLimit = 0, - - sText = '', - - splitPlainText = function (sText) - { - var - iLen = 100, - sPrefix = '', - sSubText = '', - sResult = sText, - iSpacePos = 0, - iNewLinePos = 0 - ; - - while (sResult.length > iLen) - { - sSubText = sResult.substring(0, iLen); - iSpacePos = sSubText.lastIndexOf(' '); - iNewLinePos = sSubText.lastIndexOf('\n'); - - if (-1 !== iNewLinePos) - { - iSpacePos = iNewLinePos; - } - - if (-1 === iSpacePos) - { - iSpacePos = iLen; - } - - sPrefix += sSubText.substring(0, iSpacePos) + '\n'; - sResult = sResult.substring(iSpacePos + 1); - } - - return sPrefix + sResult; - }, - - convertBlockquote = function (sText) { - sText = splitPlainText($.trim(sText)); - sText = '> ' + sText.replace(/\n/gm, '\n> '); - return sText.replace(/(^|\n)([> ]+)/gm, function () { - return (arguments && 2 < arguments.length) ? arguments[1] + $.trim(arguments[2].replace(/[\s]/g, '')) + ' ' : ''; - }); - }, - - convertDivs = function () { - if (arguments && 1 < arguments.length) - { - var sText = $.trim(arguments[1]); - if (0 < sText.length) - { - sText = sText.replace(/]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs); - sText = '\n' + $.trim(sText) + '\n'; - } - - return sText; - } - - return ''; - }, - - convertPre = function () { - return (arguments && 1 < arguments.length) ? arguments[1].toString().replace(/[\n]/gm, '
') : ''; - }, - - fixAttibuteValue = function () { - return (arguments && 1 < arguments.length) ? - '' + arguments[1] + arguments[2].replace(//g, '>') : ''; - }, - - convertLinks = function () { - return (arguments && 1 < arguments.length) ? $.trim(arguments[1]) : ''; - } - ; - - sText = sHtml - .replace(/]*>([\s\S\r\n]*)<\/pre>/gmi, convertPre) - .replace(/[\s]+/gm, ' ') - .replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gmi, fixAttibuteValue) - .replace(/]*>/gmi, '\n') - .replace(/<\/h[\d]>/gi, '\n') - .replace(/<\/p>/gi, '\n\n') - .replace(/<\/li>/gi, '\n') - .replace(/<\/td>/gi, '\n') - .replace(/<\/tr>/gi, '\n') - .replace(/]*>/gmi, '\n_______________________________\n\n') - .replace(/]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs) - .replace(/]*>/gmi, '\n__bq__start__\n') - .replace(/<\/blockquote>/gmi, '\n__bq__end__\n') - .replace(/]*>([\s\S\r\n]*?)<\/a>/gmi, convertLinks) - .replace(/<\/div>/gi, '\n') - .replace(/ /gi, ' ') - .replace(/"/gi, '"') - .replace(/<[^>]*>/gm, '') - ; - - sText = Globals.$div.html(sText).text(); - - sText = sText - .replace(/\n[ \t]+/gm, '\n') - .replace(/[\n]{3,}/gm, '\n\n') - .replace(/>/gi, '>') - .replace(/</gi, '<') - .replace(/&/gi, '&') - ; - - iPos = 0; - iLimit = 100; - - while (0 < iLimit) - { - iLimit--; - iP1 = sText.indexOf('__bq__start__', iPos); - if (-1 < iP1) - { - iP2 = sText.indexOf('__bq__start__', iP1 + 5); - iP3 = sText.indexOf('__bq__end__', iP1 + 5); - - if ((-1 === iP2 || iP3 < iP2) && iP1 < iP3) - { - sText = sText.substring(0, iP1) + - convertBlockquote(sText.substring(iP1 + 13, iP3)) + - sText.substring(iP3 + 11); - - iPos = 0; - } - else if (-1 < iP2 && iP2 < iP3) - { - iPos = iP2 - 1; - } - else - { - iPos = 0; - } - } - else - { - break; - } - } - - sText = sText - .replace(/__bq__start__/gm, '') - .replace(/__bq__end__/gm, '') - ; - - return sText; - }; - - /** - * @param {string} sPlain - * @param {boolean} bLinkify = false - * @return {string} - */ - Utils.plainToHtml = function (sPlain, bLinkify) - { - sPlain = sPlain.toString().replace(/\r/g, ''); - - var - bIn = false, - bDo = true, - bStart = true, - aNextText = [], - sLine = '', - iIndex = 0, - aText = sPlain.split("\n") - ; - - do - { - bDo = false; - aNextText = []; - for (iIndex = 0; iIndex < aText.length; iIndex++) - { - sLine = aText[iIndex]; - bStart = '>' === sLine.substr(0, 1); - if (bStart && !bIn) - { - bDo = true; - bIn = true; - aNextText.push('~~~blockquote~~~'); - aNextText.push(sLine.substr(1)); - } - else if (!bStart && bIn) - { - bIn = false; - aNextText.push('~~~/blockquote~~~'); - aNextText.push(sLine); - } - else if (bStart && bIn) - { - aNextText.push(sLine.substr(1)); - } - else - { - aNextText.push(sLine); - } - } - - if (bIn) - { - bIn = false; - aNextText.push('~~~/blockquote~~~'); - } - - aText = aNextText; - } - while (bDo); - - sPlain = aText.join("\n"); - - sPlain = sPlain - .replace(/&/g, '&') - .replace(/>/g, '>').replace(/') - .replace(/[\s]*~~~\/blockquote~~~/g, '') - .replace(/[\-_~]{10,}/g, '
') - .replace(/\n/g, '
'); - - return bLinkify ? Utils.linkify(sPlain) : sPlain; - }; - - window.rainloop_Utils_htmlToPlain = Utils.htmlToPlain; - window.rainloop_Utils_plainToHtml = Utils.plainToHtml; - - /** - * @param {string} sHtml - * @return {string} - */ - Utils.linkify = function (sHtml) - { - if ($.fn && $.fn.linkify) - { - sHtml = Globals.$div.html(sHtml.replace(/&/ig, 'amp_amp_12345_amp_amp')) - .linkify() - .find('.linkified').removeClass('linkified').end() - .html() - .replace(/amp_amp_12345_amp_amp/g, '&') - ; - } - - return sHtml; - }; - - /** - * @param {string} sUrl - * @param {number} iValue - * @param {Function} fCallback - */ - Utils.resizeAndCrop = function (sUrl, iValue, fCallback) - { - var oTempImg = new window.Image(); - oTempImg.onload = function() { - - var - aDiff = [0, 0], - oCanvas = window.document.createElement('canvas'), - oCtx = oCanvas.getContext('2d') - ; - - oCanvas.width = iValue; - oCanvas.height = iValue; - - if (this.width > this.height) - { - aDiff = [this.width - this.height, 0]; - } - else - { - aDiff = [0, this.height - this.width]; - } - - oCtx.fillStyle = '#fff'; - oCtx.fillRect(0, 0, iValue, iValue); - oCtx.drawImage(this, aDiff[0] / 2, aDiff[1] / 2, this.width - aDiff[0], this.height - aDiff[1], 0, 0, iValue, iValue); - - fCallback(oCanvas.toDataURL('image/jpeg')); - }; - - oTempImg.src = sUrl; - }; - - /** - * @param {Array} aSystem - * @param {Array} aList - * @param {Array=} aDisabled - * @param {Array=} aHeaderLines - * @param {?number=} iUnDeep - * @param {Function=} fDisableCallback - * @param {Function=} fVisibleCallback - * @param {Function=} fRenameCallback - * @param {boolean=} bSystem - * @param {boolean=} bBuildUnvisible - * @return {Array} - */ - Utils.folderListOptionsBuilder = function (aSystem, aList, aDisabled, aHeaderLines, iUnDeep, fDisableCallback, fVisibleCallback, fRenameCallback, bSystem, bBuildUnvisible) - { - var - /** - * @type {?FolderModel} - */ - oItem = null, - bSep = false, - iIndex = 0, - iLen = 0, - sDeepPrefix = '\u00A0\u00A0\u00A0', - aResult = [] - ; - - bSystem = !Utils.isNormal(bSystem) ? 0 < aSystem.length : bSystem; - bBuildUnvisible = Utils.isUnd(bBuildUnvisible) ? false : !!bBuildUnvisible; - iUnDeep = !Utils.isNormal(iUnDeep) ? 0 : iUnDeep; - fDisableCallback = Utils.isNormal(fDisableCallback) ? fDisableCallback : null; - fVisibleCallback = Utils.isNormal(fVisibleCallback) ? fVisibleCallback : null; - fRenameCallback = Utils.isNormal(fRenameCallback) ? fRenameCallback : null; - - if (!Utils.isArray(aDisabled)) - { - aDisabled = []; - } - - if (!Utils.isArray(aHeaderLines)) - { - aHeaderLines = []; - } - - for (iIndex = 0, iLen = aHeaderLines.length; iIndex < iLen; iIndex++) - { - aResult.push({ - 'id': aHeaderLines[iIndex][0], - 'name': aHeaderLines[iIndex][1], - 'system': false, - 'seporator': false, - 'disabled': false - }); - } - - bSep = true; - for (iIndex = 0, iLen = aSystem.length; iIndex < iLen; iIndex++) - { - oItem = aSystem[iIndex]; - if (fVisibleCallback ? fVisibleCallback.call(null, oItem) : true) - { - if (bSep && 0 < aResult.length) - { - aResult.push({ - 'id': '---', - 'name': '---', - 'system': false, - 'seporator': true, - 'disabled': true - }); - } - - bSep = false; - aResult.push({ - 'id': oItem.fullNameRaw, - 'name': fRenameCallback ? fRenameCallback.call(null, oItem) : oItem.name(), - 'system': true, - 'seporator': false, - 'disabled': !oItem.selectable || -1 < Utils.inArray(oItem.fullNameRaw, aDisabled) || - (fDisableCallback ? fDisableCallback.call(null, oItem) : false) - }); - } - } - - bSep = true; - for (iIndex = 0, iLen = aList.length; iIndex < iLen; iIndex++) - { - oItem = aList[iIndex]; - if (oItem.subScribed() || !oItem.existen) - { - if (fVisibleCallback ? fVisibleCallback.call(null, oItem) : true) - { - if (Enums.FolderType.User === oItem.type() || !bSystem || 0 < oItem.subFolders().length) - { - if (bSep && 0 < aResult.length) - { - aResult.push({ - 'id': '---', - 'name': '---', - 'system': false, - 'seporator': true, - 'disabled': true - }); - } - - bSep = false; - aResult.push({ - 'id': oItem.fullNameRaw, - 'name': (new window.Array(oItem.deep + 1 - iUnDeep)).join(sDeepPrefix) + - (fRenameCallback ? fRenameCallback.call(null, oItem) : oItem.name()), - 'system': false, - 'seporator': false, - 'disabled': !oItem.selectable || -1 < Utils.inArray(oItem.fullNameRaw, aDisabled) || - (fDisableCallback ? fDisableCallback.call(null, oItem) : false) - }); - } - } - } - - if (oItem.subScribed() && 0 < oItem.subFolders().length) - { - aResult = aResult.concat(Utils.folderListOptionsBuilder([], oItem.subFolders(), aDisabled, [], - iUnDeep, fDisableCallback, fVisibleCallback, fRenameCallback, bSystem, bBuildUnvisible)); - } - } - - return aResult; - }; - - Utils.computedPagenatorHelper = function (koCurrentPage, koPageCount) - { - return function() { - - var - iPrev = 0, - iNext = 0, - iLimit = 2, - aResult = [], - iCurrentPage = koCurrentPage(), - iPageCount = koPageCount(), - - /** - * @param {number} iIndex - * @param {boolean=} bPush = true - * @param {string=} sCustomName = '' - */ - fAdd = function (iIndex, bPush, sCustomName) { - - var oData = { - 'current': iIndex === iCurrentPage, - 'name': Utils.isUnd(sCustomName) ? iIndex.toString() : sCustomName.toString(), - 'custom': Utils.isUnd(sCustomName) ? false : true, - 'title': Utils.isUnd(sCustomName) ? '' : iIndex.toString(), - 'value': iIndex.toString() - }; - - if (Utils.isUnd(bPush) ? true : !!bPush) - { - aResult.push(oData); - } - else - { - aResult.unshift(oData); - } - } - ; - - if (1 < iPageCount || (0 < iPageCount && iPageCount < iCurrentPage)) - // if (0 < iPageCount && 0 < iCurrentPage) - { - if (iPageCount < iCurrentPage) - { - fAdd(iPageCount); - iPrev = iPageCount; - iNext = iPageCount; - } - else - { - if (3 >= iCurrentPage || iPageCount - 2 <= iCurrentPage) - { - iLimit += 2; - } - - fAdd(iCurrentPage); - iPrev = iCurrentPage; - iNext = iCurrentPage; - } - - while (0 < iLimit) { - - iPrev -= 1; - iNext += 1; - - if (0 < iPrev) - { - fAdd(iPrev, false); - iLimit--; - } - - if (iPageCount >= iNext) - { - fAdd(iNext, true); - iLimit--; - } - else if (0 >= iPrev) - { - break; - } - } - - if (3 === iPrev) - { - fAdd(2, false); - } - else if (3 < iPrev) - { - fAdd(window.Math.round((iPrev - 1) / 2), false, '...'); - } - - if (iPageCount - 2 === iNext) - { - fAdd(iPageCount - 1, true); - } - else if (iPageCount - 2 > iNext) - { - fAdd(window.Math.round((iPageCount + iNext) / 2), true, '...'); - } - - // first and last - if (1 < iPrev) - { - fAdd(1, false); - } - - if (iPageCount > iNext) - { - fAdd(iPageCount, true); - } - } - - return aResult; - }; - }; - - Utils.selectElement = function (element) - { - var sel, range; - if (window.getSelection) - { - sel = window.getSelection(); - sel.removeAllRanges(); - range = window.document.createRange(); - range.selectNodeContents(element); - sel.addRange(range); - } - else if (window.document.selection) - { - range = window.document.body.createTextRange(); - range.moveToElementText(element); - range.select(); - } - }; - - Utils.detectDropdownVisibility = _.debounce(function () { - Globals.dropdownVisibility(!!_.find(Globals.aBootstrapDropdowns, function (oItem) { - return oItem.hasClass('open'); - })); - }, 50); - - /** - * @param {boolean=} bDelay = false - */ - Utils.triggerAutocompleteInputChange = function (bDelay) { - - var fFunc = function () { - $('.checkAutocomplete').trigger('change'); - }; - - if (Utils.isUnd(bDelay) ? false : !!bDelay) - { - _.delay(fFunc, 100); - } - else - { - fFunc(); - } - }; - - module.exports = Utils; - - }()); - -/***/ }, - -/***/ 2: -/*!********************!*\ - !*** external "_" ***! - \********************/ -/***/ function(module, exports, __webpack_require__) { - - module.exports = _; - -/***/ }, - -/***/ 3: -/*!****************************!*\ - !*** ./dev/External/ko.js ***! - \****************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function (module, ko) { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14) - ; - - ko.bindingHandlers.tooltip = { - 'init': function (oElement, fValueAccessor) { - - var - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - if (!Globals.bMobileDevice) - { - var - $oEl = $(oElement), - sClass = $oEl.data('tooltip-class') || '', - sPlacement = $oEl.data('tooltip-placement') || 'top' - ; - - $oEl.tooltip({ - 'delay': { - 'show': 500, - 'hide': 100 - }, - 'html': true, - 'container': 'body', - 'placement': sPlacement, - 'trigger': 'hover', - 'title': function () { - return $oEl.is('.disabled') || Globals.dropdownVisibility() ? '' : '' + - Utils.i18n(ko.utils.unwrapObservable(fValueAccessor())) + ''; - } - }).click(function () { - $oEl.tooltip('hide'); - }); - - Globals.tooltipTrigger.subscribe(function () { - $oEl.tooltip('hide'); - }); - } - } - }; - - ko.bindingHandlers.tooltip2 = { - 'init': function (oElement, fValueAccessor) { - var - Globals = __webpack_require__(/*! Common/Globals */ 7), - $oEl = $(oElement), - sClass = $oEl.data('tooltip-class') || '', - sPlacement = $oEl.data('tooltip-placement') || 'top' - ; - - $oEl.tooltip({ - 'delay': { - 'show': 500, - 'hide': 100 - }, - 'html': true, - 'container': 'body', - 'placement': sPlacement, - 'title': function () { - return $oEl.is('.disabled') || Globals.dropdownVisibility() ? '' : - '' + fValueAccessor()() + ''; - } - }).click(function () { - $oEl.tooltip('hide'); - }); - - Globals.tooltipTrigger.subscribe(function () { - $oEl.tooltip('hide'); - }); - } - }; - - ko.bindingHandlers.tooltip3 = { - 'init': function (oElement) { - - var - $oEl = $(oElement), - Globals = __webpack_require__(/*! Common/Globals */ 7) - ; - - $oEl.tooltip({ - 'container': 'body', - 'trigger': 'hover manual', - 'title': function () { - return $oEl.data('tooltip3-data') || ''; - } - }); - - $(window.document).click(function () { - $oEl.tooltip('hide'); - }); - - Globals.tooltipTrigger.subscribe(function () { - $oEl.tooltip('hide'); - }); - }, - 'update': function (oElement, fValueAccessor) { - var sValue = ko.utils.unwrapObservable(fValueAccessor()); - if ('' === sValue) - { - $(oElement).data('tooltip3-data', '').tooltip('hide'); - } - else - { - $(oElement).data('tooltip3-data', sValue).tooltip('show'); - } - } - }; - - ko.bindingHandlers.registrateBootstrapDropdown = { - 'init': function (oElement) { - var Globals = __webpack_require__(/*! Common/Globals */ 7); - Globals.aBootstrapDropdowns.push($(oElement)); - } - }; - - ko.bindingHandlers.openDropdownTrigger = { - 'update': function (oElement, fValueAccessor) { - if (ko.utils.unwrapObservable(fValueAccessor())) - { - var - $el = $(oElement), - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - if (!$el.hasClass('open')) - { - $el.find('.dropdown-toggle').dropdown('toggle'); - Utils.detectDropdownVisibility(); - } - - fValueAccessor()(false); - } - } - }; - - ko.bindingHandlers.dropdownCloser = { - 'init': function (oElement) { - $(oElement).closest('.dropdown').on('click', '.e-item', function () { - $(oElement).dropdown('toggle'); - }); - } - }; - - ko.bindingHandlers.popover = { - 'init': function (oElement, fValueAccessor) { - $(oElement).popover(ko.utils.unwrapObservable(fValueAccessor())); - } - }; - - ko.bindingHandlers.csstext = { - 'init': function (oElement, fValueAccessor) { - var Utils = __webpack_require__(/*! Common/Utils */ 1); - if (oElement && oElement.styleSheet && !Utils.isUnd(oElement.styleSheet.cssText)) - { - oElement.styleSheet.cssText = ko.utils.unwrapObservable(fValueAccessor()); - } - else - { - $(oElement).text(ko.utils.unwrapObservable(fValueAccessor())); - } - }, - 'update': function (oElement, fValueAccessor) { - var Utils = __webpack_require__(/*! Common/Utils */ 1); - if (oElement && oElement.styleSheet && !Utils.isUnd(oElement.styleSheet.cssText)) - { - oElement.styleSheet.cssText = ko.utils.unwrapObservable(fValueAccessor()); - } - else - { - $(oElement).text(ko.utils.unwrapObservable(fValueAccessor())); - } - } - }; - - ko.bindingHandlers.resizecrop = { - 'init': function (oElement) { - $(oElement).addClass('resizecrop').resizecrop({ - 'width': '100', - 'height': '100', - 'wrapperCSS': { - 'border-radius': '10px' - } - }); - }, - 'update': function (oElement, fValueAccessor) { - fValueAccessor()(); - $(oElement).resizecrop({ - 'width': '100', - 'height': '100' - }); - } - }; - - ko.bindingHandlers.onEnter = { - 'init': function (oElement, fValueAccessor, fAllBindingsAccessor, oViewModel) { - $(oElement).on('keypress', function (oEvent) { - if (oEvent && 13 === window.parseInt(oEvent.keyCode, 10)) - { - $(oElement).trigger('change'); - fValueAccessor().call(oViewModel); - } - }); - } - }; - - ko.bindingHandlers.onEsc = { - 'init': function (oElement, fValueAccessor, fAllBindingsAccessor, oViewModel) { - $(oElement).on('keypress', function (oEvent) { - if (oEvent && 27 === window.parseInt(oEvent.keyCode, 10)) - { - $(oElement).trigger('change'); - fValueAccessor().call(oViewModel); - } - }); - } - }; - - ko.bindingHandlers.clickOnTrue = { - 'update': function (oElement, fValueAccessor) { - if (ko.utils.unwrapObservable(fValueAccessor())) - { - $(oElement).click(); - } - } - }; - - ko.bindingHandlers.modal = { - 'init': function (oElement, fValueAccessor) { - - var - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - $(oElement).toggleClass('fade', !Globals.bMobileDevice).modal({ - 'keyboard': false, - 'show': ko.utils.unwrapObservable(fValueAccessor()) - }) - .on('shown', function () { - Utils.windowResize(); - }) - .find('.close').click(function () { - fValueAccessor()(false); - }); - - }, - 'update': function (oElement, fValueAccessor) { - $(oElement).modal(ko.utils.unwrapObservable(fValueAccessor()) ? 'show' : 'hide'); - } - }; - - ko.bindingHandlers.i18nInit = { - 'init': function (oElement) { - var Utils = __webpack_require__(/*! Common/Utils */ 1); - Utils.i18nToNode(oElement); - } - }; - - ko.bindingHandlers.i18nUpdate = { - 'update': function (oElement, fValueAccessor) { - var Utils = __webpack_require__(/*! Common/Utils */ 1); - ko.utils.unwrapObservable(fValueAccessor()); - Utils.i18nToNode(oElement); - } - }; - - ko.bindingHandlers.link = { - 'update': function (oElement, fValueAccessor) { - $(oElement).attr('href', ko.utils.unwrapObservable(fValueAccessor())); - } - }; - - ko.bindingHandlers.title = { - 'update': function (oElement, fValueAccessor) { - $(oElement).attr('title', ko.utils.unwrapObservable(fValueAccessor())); - } - }; - - ko.bindingHandlers.textF = { - 'init': function (oElement, fValueAccessor) { - $(oElement).text(ko.utils.unwrapObservable(fValueAccessor())); - } - }; - - ko.bindingHandlers.initDom = { - 'init': function (oElement, fValueAccessor) { - fValueAccessor()(oElement); - } - }; - - ko.bindingHandlers.initResizeTrigger = { - 'init': function (oElement, fValueAccessor) { - var aValues = ko.utils.unwrapObservable(fValueAccessor()); - $(oElement).css({ - 'height': aValues[1], - 'min-height': aValues[1] - }); - }, - 'update': function (oElement, fValueAccessor) { - - var - Utils = __webpack_require__(/*! Common/Utils */ 1), - Globals = __webpack_require__(/*! Common/Globals */ 7), - aValues = ko.utils.unwrapObservable(fValueAccessor()), - iValue = Utils.pInt(aValues[1]), - iSize = 0, - iOffset = $(oElement).offset().top - ; - - if (0 < iOffset) - { - iOffset += Utils.pInt(aValues[2]); - iSize = Globals.$win.height() - iOffset; - - if (iValue < iSize) - { - iValue = iSize; - } - - $(oElement).css({ - 'height': iValue, - 'min-height': iValue - }); - } - } - }; - - ko.bindingHandlers.appendDom = { - 'update': function (oElement, fValueAccessor) { - $(oElement).hide().empty().append(ko.utils.unwrapObservable(fValueAccessor())).show(); - } - }; - - ko.bindingHandlers.draggable = { - 'init': function (oElement, fValueAccessor, fAllBindingsAccessor) { - var - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - if (!Globals.bMobileDevice) - { - var - iTriggerZone = 100, - iScrollSpeed = 3, - fAllValueFunc = fAllBindingsAccessor(), - sDroppableSelector = fAllValueFunc && fAllValueFunc['droppableSelector'] ? fAllValueFunc['droppableSelector'] : '', - oConf = { - 'distance': 20, - 'handle': '.dragHandle', - 'cursorAt': {'top': 22, 'left': 3}, - 'refreshPositions': true, - 'scroll': true - } - ; - - if (sDroppableSelector) - { - oConf['drag'] = function (oEvent) { - - $(sDroppableSelector).each(function () { - var - moveUp = null, - moveDown = null, - $this = $(this), - oOffset = $this.offset(), - bottomPos = oOffset.top + $this.height() - ; - - window.clearInterval($this.data('timerScroll')); - $this.data('timerScroll', false); - - if (oEvent.pageX >= oOffset.left && oEvent.pageX <= oOffset.left + $this.width()) - { - if (oEvent.pageY >= bottomPos - iTriggerZone && oEvent.pageY <= bottomPos) - { - moveUp = function() { - $this.scrollTop($this.scrollTop() + iScrollSpeed); - Utils.windowResize(); - }; - - $this.data('timerScroll', window.setInterval(moveUp, 10)); - moveUp(); - } - - if (oEvent.pageY >= oOffset.top && oEvent.pageY <= oOffset.top + iTriggerZone) - { - moveDown = function() { - $this.scrollTop($this.scrollTop() - iScrollSpeed); - Utils.windowResize(); - }; - - $this.data('timerScroll', window.setInterval(moveDown, 10)); - moveDown(); - } - } - }); - }; - - oConf['stop'] = function() { - $(sDroppableSelector).each(function () { - window.clearInterval($(this).data('timerScroll')); - $(this).data('timerScroll', false); - }); - }; - } - - oConf['helper'] = function (oEvent) { - return fValueAccessor()(oEvent && oEvent.target ? ko.dataFor(oEvent.target) : null); - }; - - $(oElement).draggable(oConf).on('mousedown', function () { - Utils.removeInFocus(); - }); - } - } - }; - - ko.bindingHandlers.droppable = { - 'init': function (oElement, fValueAccessor, fAllBindingsAccessor) { - var Globals = __webpack_require__(/*! Common/Globals */ 7); - if (!Globals.bMobileDevice) - { - var - fValueFunc = fValueAccessor(), - fAllValueFunc = fAllBindingsAccessor(), - fOverCallback = fAllValueFunc && fAllValueFunc['droppableOver'] ? fAllValueFunc['droppableOver'] : null, - fOutCallback = fAllValueFunc && fAllValueFunc['droppableOut'] ? fAllValueFunc['droppableOut'] : null, - oConf = { - 'tolerance': 'pointer', - 'hoverClass': 'droppableHover' - } - ; - - if (fValueFunc) - { - oConf['drop'] = function (oEvent, oUi) { - fValueFunc(oEvent, oUi); - }; - - if (fOverCallback) - { - oConf['over'] = function (oEvent, oUi) { - fOverCallback(oEvent, oUi); - }; - } - - if (fOutCallback) - { - oConf['out'] = function (oEvent, oUi) { - fOutCallback(oEvent, oUi); - }; - } - - $(oElement).droppable(oConf); - } - } - } - }; - - ko.bindingHandlers.nano = { - 'init': function (oElement) { - var Globals = __webpack_require__(/*! Common/Globals */ 7); - if (!Globals.bDisableNanoScroll) - { - $(oElement) - .addClass('nano') - .nanoScroller({ - 'iOSNativeScrolling': false, - 'preventPageScrolling': true - }) - ; - } - } - }; - - ko.bindingHandlers.saveTrigger = { - 'init': function (oElement) { - - var $oEl = $(oElement); - - $oEl.data('save-trigger-type', $oEl.is('input[type=text],input[type=email],input[type=password],select,textarea') ? 'input' : 'custom'); - - if ('custom' === $oEl.data('save-trigger-type')) - { - $oEl.append( - '  ' - ).addClass('settings-saved-trigger'); - } - else - { - $oEl.addClass('settings-saved-trigger-input'); - } - }, - 'update': function (oElement, fValueAccessor) { - var - mValue = ko.utils.unwrapObservable(fValueAccessor()), - $oEl = $(oElement) - ; - - if ('custom' === $oEl.data('save-trigger-type')) - { - switch (mValue.toString()) - { - case '1': - $oEl - .find('.animated,.error').hide().removeClass('visible') - .end() - .find('.success').show().addClass('visible') - ; - break; - case '0': - $oEl - .find('.animated,.success').hide().removeClass('visible') - .end() - .find('.error').show().addClass('visible') - ; - break; - case '-2': - $oEl - .find('.error,.success').hide().removeClass('visible') - .end() - .find('.animated').show().addClass('visible') - ; - break; - default: - $oEl - .find('.animated').hide() - .end() - .find('.error,.success').removeClass('visible') - ; - break; - } - } - else - { - switch (mValue.toString()) - { - case '1': - $oEl.addClass('success').removeClass('error'); - break; - case '0': - $oEl.addClass('error').removeClass('success'); - break; - case '-2': - // $oEl; - break; - default: - $oEl.removeClass('error success'); - break; - } - } - } - }; - - ko.bindingHandlers.emailsTags = { - 'init': function(oElement, fValueAccessor, fAllBindingsAccessor) { - - var - Utils = __webpack_require__(/*! Common/Utils */ 1), - EmailModel = __webpack_require__(/*! Model:Email */ 23), - - $oEl = $(oElement), - fValue = fValueAccessor(), - fAllBindings = fAllBindingsAccessor(), - fAutoCompleteSource = fAllBindings['autoCompleteSource'] || null, - fFocusCallback = function (bValue) { - if (fValue && fValue.focusTrigger) - { - fValue.focusTrigger(bValue); - } - } - ; - - $oEl.inputosaurus({ - 'parseOnBlur': true, - 'allowDragAndDrop': true, - 'focusCallback': fFocusCallback, - 'inputDelimiters': [',', ';'], - 'autoCompleteSource': fAutoCompleteSource, - 'parseHook': function (aInput) { - return _.map(aInput, function (sInputValue) { - - var - sValue = Utils.trim(sInputValue), - oEmail = null - ; - - if ('' !== sValue) - { - oEmail = new EmailModel(); - oEmail.mailsoParse(sValue); - oEmail.clearDuplicateName(); - return [oEmail.toLine(false), oEmail]; - } - - return [sValue, null]; - - }); - }, - 'change': _.bind(function (oEvent) { - $oEl.data('EmailsTagsValue', oEvent.target.value); - fValue(oEvent.target.value); - }, this) - }); - }, - 'update': function (oElement, fValueAccessor, fAllBindingsAccessor) { - - var - $oEl = $(oElement), - fAllValueFunc = fAllBindingsAccessor(), - fEmailsTagsFilter = fAllValueFunc['emailsTagsFilter'] || null, - sValue = ko.utils.unwrapObservable(fValueAccessor()) - ; - - if ($oEl.data('EmailsTagsValue') !== sValue) - { - $oEl.val(sValue); - $oEl.data('EmailsTagsValue', sValue); - $oEl.inputosaurus('refresh'); - } - - if (fEmailsTagsFilter && ko.utils.unwrapObservable(fEmailsTagsFilter)) - { - $oEl.inputosaurus('focus'); - } - } - }; - - ko.bindingHandlers.contactTags = { - 'init': function(oElement, fValueAccessor, fAllBindingsAccessor) { - - var - Utils = __webpack_require__(/*! Common/Utils */ 1), - ContactTagModel = __webpack_require__(/*! Model:ContactTag */ 37), - - $oEl = $(oElement), - fValue = fValueAccessor(), - fAllBindings = fAllBindingsAccessor(), - fAutoCompleteSource = fAllBindings['autoCompleteSource'] || null, - fFocusCallback = function (bValue) { - if (fValue && fValue.focusTrigger) - { - fValue.focusTrigger(bValue); - } - } - ; - - $oEl.inputosaurus({ - 'parseOnBlur': true, - 'allowDragAndDrop': false, - 'focusCallback': fFocusCallback, - 'inputDelimiters': [',', ';'], - 'outputDelimiter': ',', - 'autoCompleteSource': fAutoCompleteSource, - 'parseHook': function (aInput) { - return _.map(aInput, function (sInputValue) { - - var - sValue = Utils.trim(sInputValue), - oTag = null - ; - - if ('' !== sValue) - { - oTag = new ContactTagModel(); - oTag.name(sValue); - return [oTag.toLine(false), oTag]; - } - - return [sValue, null]; - - }); - }, - 'change': _.bind(function (oEvent) { - $oEl.data('ContactTagsValue', oEvent.target.value); - fValue(oEvent.target.value); - }, this) - }); - }, - 'update': function (oElement, fValueAccessor, fAllBindingsAccessor) { - - var - $oEl = $(oElement), - fAllValueFunc = fAllBindingsAccessor(), - fContactTagsFilter = fAllValueFunc['contactTagsFilter'] || null, - sValue = ko.utils.unwrapObservable(fValueAccessor()) - ; - - if ($oEl.data('ContactTagsValue') !== sValue) - { - $oEl.val(sValue); - $oEl.data('ContactTagsValue', sValue); - $oEl.inputosaurus('refresh'); - } - - if (fContactTagsFilter && ko.utils.unwrapObservable(fContactTagsFilter)) - { - $oEl.inputosaurus('focus'); - } - } - }; - - ko.bindingHandlers.command = { - 'init': function (oElement, fValueAccessor, fAllBindingsAccessor, oViewModel) { - var - jqElement = $(oElement), - oCommand = fValueAccessor() - ; - - if (!oCommand || !oCommand.enabled || !oCommand.canExecute) - { - throw new Error('You are not using command function'); - } - - jqElement.addClass('command'); - ko.bindingHandlers[jqElement.is('form') ? 'submit' : 'click'].init.apply(oViewModel, arguments); - }, - - 'update': function (oElement, fValueAccessor) { - - var - bResult = true, - jqElement = $(oElement), - oCommand = fValueAccessor() - ; - - bResult = oCommand.enabled(); - jqElement.toggleClass('command-not-enabled', !bResult); - - if (bResult) - { - bResult = oCommand.canExecute(); - jqElement.toggleClass('command-can-not-be-execute', !bResult); - } - - jqElement.toggleClass('command-disabled disable disabled', !bResult).toggleClass('no-disabled', !!bResult); - - if (jqElement.is('input') || jqElement.is('button')) - { - jqElement.prop('disabled', !bResult); - } - } - }; - - ko.extenders.trimmer = function (oTarget) - { - var - Utils = __webpack_require__(/*! Common/Utils */ 1), - oResult = ko.computed({ - 'read': oTarget, - 'write': function (sNewValue) { - oTarget(Utils.trim(sNewValue.toString())); - }, - 'owner': this - }) - ; - - oResult(oTarget()); - return oResult; - }; - - ko.extenders.posInterer = function (oTarget, iDefault) - { - var - Utils = __webpack_require__(/*! Common/Utils */ 1), - oResult = ko.computed({ - 'read': oTarget, - 'write': function (sNewValue) { - var iNew = Utils.pInt(sNewValue.toString(), iDefault); - if (0 >= iNew) - { - iNew = iDefault; - } - - if (iNew === oTarget() && '' + iNew !== '' + sNewValue) - { - oTarget(iNew + 1); - } - - oTarget(iNew); - } - }) - ; - - oResult(oTarget()); - return oResult; - }; - - ko.extenders.reversible = function (oTarget) - { - var mValue = oTarget(); - - oTarget.commit = function () - { - mValue = oTarget(); - }; - - oTarget.reverse = function () - { - oTarget(mValue); - }; - - oTarget.commitedValue = function () - { - return mValue; - }; - - return oTarget; - }; - - ko.extenders.toggleSubscribe = function (oTarget, oOptions) - { - oTarget.subscribe(oOptions[1], oOptions[0], 'beforeChange'); - oTarget.subscribe(oOptions[2], oOptions[0]); - - return oTarget; - }; - - ko.extenders.falseTimeout = function (oTarget, iOption) - { - var Utils = __webpack_require__(/*! Common/Utils */ 1); - - oTarget.iTimeout = 0; - oTarget.subscribe(function (bValue) { - if (bValue) - { - window.clearTimeout(oTarget.iTimeout); - oTarget.iTimeout = window.setTimeout(function () { - oTarget(false); - oTarget.iTimeout = 0; - }, Utils.pInt(iOption)); - } - }); - - return oTarget; - }; - - ko.observable.fn.validateNone = function () - { - this.hasError = ko.observable(false); - return this; - }; - - ko.observable.fn.validateEmail = function () - { - var Utils = __webpack_require__(/*! Common/Utils */ 1); - - this.hasError = ko.observable(false); - - this.subscribe(function (sValue) { - sValue = Utils.trim(sValue); - this.hasError('' !== sValue && !(/^[^@\s]+@[^@\s]+$/.test(sValue))); - }, this); - - this.valueHasMutated(); - return this; - }; - - ko.observable.fn.validateSimpleEmail = function () - { - var Utils = __webpack_require__(/*! Common/Utils */ 1); - - this.hasError = ko.observable(false); - - this.subscribe(function (sValue) { - sValue = Utils.trim(sValue); - this.hasError('' !== sValue && !(/^.+@.+$/.test(sValue))); - }, this); - - this.valueHasMutated(); - return this; - }; - - ko.observable.fn.validateFunc = function (fFunc) - { - var Utils = __webpack_require__(/*! Common/Utils */ 1); - - this.hasFuncError = ko.observable(false); - - if (Utils.isFunc(fFunc)) - { - this.subscribe(function (sValue) { - this.hasFuncError(!fFunc(sValue)); - }, this); - - this.valueHasMutated(); - } - - return this; - }; - - module.exports = ko; - - }(module, ko)); - - -/***/ }, - -/***/ 5: -/*!****************************!*\ - !*** ./dev/Knoin/Knoin.js ***! - \****************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - hasher = __webpack_require__(/*! hasher */ 115), - crossroads = __webpack_require__(/*! crossroads */ 48), - - Globals = __webpack_require__(/*! Common/Globals */ 7), - Plugins = __webpack_require__(/*! Common/Plugins */ 26), - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @constructor - */ - function Knoin() - { - this.oScreens = {}; - this.sDefaultScreenName = ''; - this.oCurrentScreen = null; - } - - Knoin.prototype.oScreens = {}; - Knoin.prototype.sDefaultScreenName = ''; - Knoin.prototype.oCurrentScreen = null; - - Knoin.prototype.hideLoading = function () - { - $('#rl-loading').hide(); - }; - - /** - * @param {Object} thisObject - */ - Knoin.prototype.constructorEnd = function (thisObject) - { - if (Utils.isFunc(thisObject['__constructor_end'])) - { - thisObject['__constructor_end'].call(thisObject); - } - }; - - /** - * @param {string|Array} mName - * @param {Function} ViewModelClass - */ - Knoin.prototype.extendAsViewModel = function (mName, ViewModelClass) - { - if (ViewModelClass) - { - if (Utils.isArray(mName)) - { - ViewModelClass.__names = mName; - } - else - { - ViewModelClass.__names = [mName]; - } - - ViewModelClass.__name = ViewModelClass.__names[0]; - } - }; - - /** - * @param {Function} SettingsViewModelClass - * @param {string} sLabelName - * @param {string} sTemplate - * @param {string} sRoute - * @param {boolean=} bDefault - */ - Knoin.prototype.addSettingsViewModel = function (SettingsViewModelClass, sTemplate, sLabelName, sRoute, bDefault) - { - SettingsViewModelClass.__rlSettingsData = { - 'Label': sLabelName, - 'Template': sTemplate, - 'Route': sRoute, - 'IsDefault': !!bDefault - }; - - Globals.aViewModels['settings'].push(SettingsViewModelClass); - }; - - /** - * @param {Function} SettingsViewModelClass - */ - Knoin.prototype.removeSettingsViewModel = function (SettingsViewModelClass) - { - Globals.aViewModels['settings-removed'].push(SettingsViewModelClass); - }; - - /** - * @param {Function} SettingsViewModelClass - */ - Knoin.prototype.disableSettingsViewModel = function (SettingsViewModelClass) - { - Globals.aViewModels['settings-disabled'].push(SettingsViewModelClass); - }; - - Knoin.prototype.routeOff = function () - { - hasher.changed.active = false; - }; - - Knoin.prototype.routeOn = function () - { - hasher.changed.active = true; - }; - - /** - * @param {string} sScreenName - * @return {?Object} - */ - Knoin.prototype.screen = function (sScreenName) - { - return ('' !== sScreenName && !Utils.isUnd(this.oScreens[sScreenName])) ? this.oScreens[sScreenName] : null; - }; - - /** - * @param {Function} ViewModelClass - * @param {Object=} oScreen - */ - Knoin.prototype.buildViewModel = function (ViewModelClass, oScreen) - { - if (ViewModelClass && !ViewModelClass.__builded) - { - var - kn = this, - oViewModel = new ViewModelClass(oScreen), - sPosition = oViewModel.viewModelPosition(), - oViewModelPlace = $('#rl-content #rl-' + sPosition.toLowerCase()), - oViewModelDom = null - ; - - ViewModelClass.__builded = true; - ViewModelClass.__vm = oViewModel; - - oViewModel.viewModelName = ViewModelClass.__name; - oViewModel.viewModelNames = ViewModelClass.__names; - - if (oViewModelPlace && 1 === oViewModelPlace.length) - { - oViewModelDom = $('
').addClass('rl-view-model').addClass('RL-' + oViewModel.viewModelTemplate()).hide(); - oViewModelDom.appendTo(oViewModelPlace); - - oViewModel.viewModelDom = oViewModelDom; - ViewModelClass.__dom = oViewModelDom; - - if ('Popups' === sPosition) - { - oViewModel.cancelCommand = oViewModel.closeCommand = Utils.createCommand(oViewModel, function () { - kn.hideScreenPopup(ViewModelClass); - }); - - oViewModel.modalVisibility.subscribe(function (bValue) { - - var self = this; - if (bValue) - { - this.viewModelDom.show(); - this.storeAndSetKeyScope(); - - Globals.popupVisibilityNames.push(this.viewModelName); - oViewModel.viewModelDom.css('z-index', 3000 + Globals.popupVisibilityNames().length + 10); - - Utils.delegateRun(this, 'onFocus', [], 500); - } - else - { - Utils.delegateRun(this, 'onHide'); - this.restoreKeyScope(); - - _.each(this.viewModelNames, function (sName) { - Plugins.runHook('view-model-on-hide', [sName, self]); - }); - - Globals.popupVisibilityNames.remove(this.viewModelName); - oViewModel.viewModelDom.css('z-index', 2000); - - Globals.tooltipTrigger(!Globals.tooltipTrigger()); - - _.delay(function () { - self.viewModelDom.hide(); - }, 300); - } - - }, oViewModel); - } - - _.each(ViewModelClass.__names, function (sName) { - Plugins.runHook('view-model-pre-build', [sName, oViewModel, oViewModelDom]); - }); - - ko.applyBindingAccessorsToNode(oViewModelDom[0], { - 'i18nInit': true, - 'template': function () { return {'name': oViewModel.viewModelTemplate()};} - }, oViewModel); - - Utils.delegateRun(oViewModel, 'onBuild', [oViewModelDom]); - if (oViewModel && 'Popups' === sPosition) - { - oViewModel.registerPopupKeyDown(); - } - - _.each(ViewModelClass.__names, function (sName) { - Plugins.runHook('view-model-post-build', [sName, oViewModel, oViewModelDom]); - }); - } - else - { - Utils.log('Cannot find view model position: ' + sPosition); - } - } - - return ViewModelClass ? ViewModelClass.__vm : null; - }; - - /** - * @param {Function} ViewModelClassToHide - */ - Knoin.prototype.hideScreenPopup = function (ViewModelClassToHide) - { - if (ViewModelClassToHide && ViewModelClassToHide.__vm && ViewModelClassToHide.__dom) - { - ViewModelClassToHide.__vm.modalVisibility(false); - } - }; - - /** - * @param {Function} ViewModelClassToShow - * @param {Array=} aParameters - */ - Knoin.prototype.showScreenPopup = function (ViewModelClassToShow, aParameters) - { - if (ViewModelClassToShow) - { - this.buildViewModel(ViewModelClassToShow); - - if (ViewModelClassToShow.__vm && ViewModelClassToShow.__dom) - { - ViewModelClassToShow.__vm.modalVisibility(true); - Utils.delegateRun(ViewModelClassToShow.__vm, 'onShow', aParameters || []); - - _.each(ViewModelClassToShow.__names, function (sName) { - Plugins.runHook('view-model-on-show', [sName, ViewModelClassToShow.__vm, aParameters || []]); - }); - } - } - }; - - /** - * @param {Function} ViewModelClassToShow - * @return {boolean} - */ - Knoin.prototype.isPopupVisible = function (ViewModelClassToShow) - { - return ViewModelClassToShow && ViewModelClassToShow.__vm ? ViewModelClassToShow.__vm.modalVisibility() : false; - }; - - /** - * @param {string} sScreenName - * @param {string} sSubPart - */ - Knoin.prototype.screenOnRoute = function (sScreenName, sSubPart) - { - var - self = this, - oScreen = null, - oCross = null - ; - - if ('' === Utils.pString(sScreenName)) - { - sScreenName = this.sDefaultScreenName; - } - - if ('' !== sScreenName) - { - oScreen = this.screen(sScreenName); - if (!oScreen) - { - oScreen = this.screen(this.sDefaultScreenName); - if (oScreen) - { - sSubPart = sScreenName + '/' + sSubPart; - sScreenName = this.sDefaultScreenName; - } - } - - if (oScreen && oScreen.__started) - { - if (!oScreen.__builded) - { - oScreen.__builded = true; - - if (Utils.isNonEmptyArray(oScreen.viewModels())) - { - _.each(oScreen.viewModels(), function (ViewModelClass) { - this.buildViewModel(ViewModelClass, oScreen); - }, this); - } - - Utils.delegateRun(oScreen, 'onBuild'); - } - - _.defer(function () { - - // hide screen - if (self.oCurrentScreen) - { - Utils.delegateRun(self.oCurrentScreen, 'onHide'); - - if (Utils.isNonEmptyArray(self.oCurrentScreen.viewModels())) - { - _.each(self.oCurrentScreen.viewModels(), function (ViewModelClass) { - - if (ViewModelClass.__vm && ViewModelClass.__dom && - 'Popups' !== ViewModelClass.__vm.viewModelPosition()) - { - ViewModelClass.__dom.hide(); - ViewModelClass.__vm.viewModelVisibility(false); - Utils.delegateRun(ViewModelClass.__vm, 'onHide'); - } - - }); - } - } - // -- - - self.oCurrentScreen = oScreen; - - // show screen - if (self.oCurrentScreen) - { - Utils.delegateRun(self.oCurrentScreen, 'onShow'); - - Plugins.runHook('screen-on-show', [self.oCurrentScreen.screenName(), self.oCurrentScreen]); - - if (Utils.isNonEmptyArray(self.oCurrentScreen.viewModels())) - { - _.each(self.oCurrentScreen.viewModels(), function (ViewModelClass) { - - if (ViewModelClass.__vm && ViewModelClass.__dom && - 'Popups' !== ViewModelClass.__vm.viewModelPosition()) - { - ViewModelClass.__dom.show(); - ViewModelClass.__vm.viewModelVisibility(true); - - Utils.delegateRun(ViewModelClass.__vm, 'onShow'); - Utils.delegateRun(ViewModelClass.__vm, 'onFocus', [], 200); - - _.each(ViewModelClass.__names, function (sName) { - Plugins.runHook('view-model-on-show', [sName, ViewModelClass.__vm]); - }); - } - - }, self); - } - } - // -- - - oCross = oScreen.__cross ? oScreen.__cross() : null; - if (oCross) - { - oCross.parse(sSubPart); - } - }); - } - } - }; - - /** - * @param {Array} aScreensClasses - */ - Knoin.prototype.startScreens = function (aScreensClasses) - { - $('#rl-content').css({ - 'visibility': 'hidden' - }); - - _.each(aScreensClasses, function (CScreen) { - - var - oScreen = new CScreen(), - sScreenName = oScreen ? oScreen.screenName() : '' - ; - - if (oScreen && '' !== sScreenName) - { - if ('' === this.sDefaultScreenName) - { - this.sDefaultScreenName = sScreenName; - } - - this.oScreens[sScreenName] = oScreen; - } - - }, this); - - - _.each(this.oScreens, function (oScreen) { - if (oScreen && !oScreen.__started && oScreen.__start) - { - oScreen.__started = true; - oScreen.__start(); - - Plugins.runHook('screen-pre-start', [oScreen.screenName(), oScreen]); - Utils.delegateRun(oScreen, 'onStart'); - Plugins.runHook('screen-post-start', [oScreen.screenName(), oScreen]); - } - }, this); - - var oCross = crossroads.create(); - oCross.addRoute(/^([a-zA-Z0-9\-]*)\/?(.*)$/, _.bind(this.screenOnRoute, this)); - - hasher.initialized.add(oCross.parse, oCross); - hasher.changed.add(oCross.parse, oCross); - hasher.init(); - - $('#rl-content').css({ - 'visibility': 'visible' - }); - - _.delay(function () { - Globals.$html.removeClass('rl-started-trigger').addClass('rl-started'); - }, 50); - }; - - /** - * @param {string} sHash - * @param {boolean=} bSilence = false - * @param {boolean=} bReplace = false - */ - Knoin.prototype.setHash = function (sHash, bSilence, bReplace) - { - sHash = '#' === sHash.substr(0, 1) ? sHash.substr(1) : sHash; - sHash = '/' === sHash.substr(0, 1) ? sHash.substr(1) : sHash; - - bReplace = Utils.isUnd(bReplace) ? false : !!bReplace; - - if (Utils.isUnd(bSilence) ? false : !!bSilence) - { - hasher.changed.active = false; - hasher[bReplace ? 'replaceHash' : 'setHash'](sHash); - hasher.changed.active = true; - } - else - { - hasher.changed.active = true; - hasher[bReplace ? 'replaceHash' : 'setHash'](sHash); - hasher.setHash(sHash); - } - }; - - module.exports = new Knoin(); - - }()); - -/***/ }, - -/***/ 6: -/*!*****************************!*\ - !*** ./dev/Common/Enums.js ***! - \*****************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var Enums = {}; - - /** - * @enum {string} - */ - Enums.StorageResultType = { - 'Success': 'success', - 'Abort': 'abort', - 'Error': 'error', - 'Unload': 'unload' - }; - - /** - * @enum {number} - */ - Enums.State = { - 'Empty': 10, - 'Login': 20, - 'Auth': 30 - }; - - /** - * @enum {number} - */ - Enums.StateType = { - 'Webmail': 0, - 'Admin': 1 - }; - - /** - * @enum {string} - */ - Enums.Capa = { - 'Prem': 'PREM', - 'TwoFactor': 'TWO_FACTOR', - 'OpenPGP': 'OPEN_PGP', - 'Prefetch': 'PREFETCH', - 'Gravatar': 'GRAVATAR', - 'Themes': 'THEMES', - 'Filters': 'FILTERS', - 'AdditionalAccounts': 'ADDITIONAL_ACCOUNTS', - 'AdditionalIdentities': 'ADDITIONAL_IDENTITIES' - }; - - /** - * @enum {string} - */ - Enums.KeyState = { - 'All': 'all', - 'None': 'none', - 'ContactList': 'contact-list', - 'MessageList': 'message-list', - 'FolderList': 'folder-list', - 'MessageView': 'message-view', - 'Compose': 'compose', - 'Settings': 'settings', - 'Menu': 'menu', - 'PopupComposeOpenPGP': 'compose-open-pgp', - 'PopupKeyboardShortcutsHelp': 'popup-keyboard-shortcuts-help', - 'PopupAsk': 'popup-ask' - }; - - /** - * @enum {number} - */ - Enums.FolderType = { - 'Inbox': 10, - 'SentItems': 11, - 'Draft': 12, - 'Trash': 13, - 'Spam': 14, - 'Archive': 15, - 'NotSpam': 80, - 'User': 99 - }; - - /** - * @enum {string} - */ - Enums.LoginSignMeTypeAsString = { - 'DefaultOff': 'defaultoff', - 'DefaultOn': 'defaulton', - 'Unused': 'unused' - }; - - /** - * @enum {number} - */ - Enums.LoginSignMeType = { - 'DefaultOff': 0, - 'DefaultOn': 1, - 'Unused': 2 - }; - - /** - * @enum {string} - */ - Enums.ComposeType = { - 'Empty': 'empty', - 'Reply': 'reply', - 'ReplyAll': 'replyall', - 'Forward': 'forward', - 'ForwardAsAttachment': 'forward-as-attachment', - 'Draft': 'draft', - 'EditAsNew': 'editasnew' - }; - - /** - * @enum {number} - */ - Enums.UploadErrorCode = { - 'Normal': 0, - 'FileIsTooBig': 1, - 'FilePartiallyUploaded': 2, - 'FileNoUploaded': 3, - 'MissingTempFolder': 4, - 'FileOnSaveingError': 5, - 'FileType': 98, - 'Unknown': 99 - }; - - /** - * @enum {number} - */ - Enums.SetSystemFoldersNotification = { - 'None': 0, - 'Sent': 1, - 'Draft': 2, - 'Spam': 3, - 'Trash': 4, - 'Archive': 5 - }; - - /** - * @enum {number} - */ - Enums.ClientSideKeyName = { - 'FoldersLashHash': 0, - 'MessagesInboxLastHash': 1, - 'MailBoxListSize': 2, - 'ExpandedFolders': 3, - 'FolderListSize': 4 - }; - - /** - * @enum {number} - */ - Enums.EventKeyCode = { - 'Backspace': 8, - 'Tab': 9, - 'Enter': 13, - 'Esc': 27, - 'PageUp': 33, - 'PageDown': 34, - 'Left': 37, - 'Right': 39, - 'Up': 38, - 'Down': 40, - 'End': 35, - 'Home': 36, - 'Space': 32, - 'Insert': 45, - 'Delete': 46, - 'A': 65, - 'S': 83 - }; - - /** - * @enum {number} - */ - Enums.MessageSetAction = { - 'SetSeen': 0, - 'UnsetSeen': 1, - 'SetFlag': 2, - 'UnsetFlag': 3 - }; - - /** - * @enum {number} - */ - Enums.MessageSelectAction = { - 'All': 0, - 'None': 1, - 'Invert': 2, - 'Unseen': 3, - 'Seen': 4, - 'Flagged': 5, - 'Unflagged': 6 - }; - - /** - * @enum {number} - */ - Enums.DesktopNotifications = { - 'Allowed': 0, - 'NotAllowed': 1, - 'Denied': 2, - 'NotSupported': 9 - }; - - /** - * @enum {number} - */ - Enums.MessagePriority = { - 'Low': 5, - 'Normal': 3, - 'High': 1 - }; - - /** - * @enum {string} - */ - Enums.EditorDefaultType = { - 'Html': 'Html', - 'Plain': 'Plain' - }; - - /** - * @enum {string} - */ - Enums.CustomThemeType = { - 'Light': 'Light', - 'Dark': 'Dark' - }; - - /** - * @enum {number} - */ - Enums.ServerSecure = { - 'None': 0, - 'SSL': 1, - 'TLS': 2 - }; - - /** - * @enum {number} - */ - Enums.SearchDateType = { - 'All': -1, - 'Days3': 3, - 'Days7': 7, - 'Month': 30 - }; - - /** - * @enum {number} - */ - Enums.SaveSettingsStep = { - 'Animate': -2, - 'Idle': -1, - 'TrueResult': 1, - 'FalseResult': 0 - }; - - /** - * @enum {string} - */ - Enums.InterfaceAnimation = { - 'None': 'None', - 'Normal': 'Normal', - 'Full': 'Full' - }; - - /** - * @enum {number} - */ - Enums.Layout = { - 'NoPreview': 0, - 'SidePreview': 1, - 'BottomPreview': 2 - }; - - /** - * @enum {string} - */ - Enums.FilterConditionField = { - 'From': 'From', - 'To': 'To', - 'Recipient': 'Recipient', - 'Subject': 'Subject' - }; - - /** - * @enum {string} - */ - Enums.FilterConditionType = { - 'Contains': 'Contains', - 'NotContains': 'NotContains', - 'EqualTo': 'EqualTo', - 'NotEqualTo': 'NotEqualTo' - }; - - /** - * @enum {string} - */ - Enums.FiltersAction = { - 'None': 'None', - 'Move': 'Move', - 'Discard': 'Discard', - 'Forward': 'Forward' - }; - - /** - * @enum {string} - */ - Enums.FilterRulesType = { - 'And': 'And', - 'Or': 'Or' - }; - - /** - * @enum {number} - */ - Enums.SignedVerifyStatus = { - 'UnknownPublicKeys': -4, - 'UnknownPrivateKey': -3, - 'Unverified': -2, - 'Error': -1, - 'None': 0, - 'Success': 1 - }; - - /** - * @enum {number} - */ - Enums.ContactPropertyType = { - - 'Unknown': 0, - - 'FullName': 10, - - 'FirstName': 15, - 'LastName': 16, - 'MiddleName': 16, - 'Nick': 18, - - 'NamePrefix': 20, - 'NameSuffix': 21, - - 'Email': 30, - 'Phone': 31, - 'Web': 32, - - 'Birthday': 40, - - 'Facebook': 90, - 'Skype': 91, - 'GitHub': 92, - - 'Note': 110, - - 'Custom': 250 - }; - - /** - * @enum {number} - */ - Enums.Notification = { - 'InvalidToken': 101, - 'AuthError': 102, - 'AccessError': 103, - 'ConnectionError': 104, - 'CaptchaError': 105, - 'SocialFacebookLoginAccessDisable': 106, - 'SocialTwitterLoginAccessDisable': 107, - 'SocialGoogleLoginAccessDisable': 108, - 'DomainNotAllowed': 109, - 'AccountNotAllowed': 110, - - 'AccountTwoFactorAuthRequired': 120, - 'AccountTwoFactorAuthError': 121, - - 'CouldNotSaveNewPassword': 130, - 'CurrentPasswordIncorrect': 131, - 'NewPasswordShort': 132, - 'NewPasswordWeak': 133, - 'NewPasswordForbidden': 134, - - 'ContactsSyncError': 140, - - 'CantGetMessageList': 201, - 'CantGetMessage': 202, - 'CantDeleteMessage': 203, - 'CantMoveMessage': 204, - 'CantCopyMessage': 205, - - 'CantSaveMessage': 301, - 'CantSendMessage': 302, - 'InvalidRecipients': 303, - - 'CantCreateFolder': 400, - 'CantRenameFolder': 401, - 'CantDeleteFolder': 402, - 'CantSubscribeFolder': 403, - 'CantUnsubscribeFolder': 404, - 'CantDeleteNonEmptyFolder': 405, - - 'CantSaveSettings': 501, - 'CantSavePluginSettings': 502, - - 'DomainAlreadyExists': 601, - - 'CantInstallPackage': 701, - 'CantDeletePackage': 702, - 'InvalidPluginPackage': 703, - 'UnsupportedPluginPackage': 704, - - 'LicensingServerIsUnavailable': 710, - 'LicensingExpired': 711, - 'LicensingBanned': 712, - - 'DemoSendMessageError': 750, - - 'AccountAlreadyExists': 801, - - 'MailServerError': 901, - 'ClientViewError': 902, - 'InvalidInputArgument': 903, - 'UnknownNotification': 999, - 'UnknownError': 999 - }; - - module.exports = Enums; - - }()); - -/***/ }, - -/***/ 7: -/*!*******************************!*\ - !*** ./dev/Common/Globals.js ***! - \*******************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - Globals = {}, - - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - ko = __webpack_require__(/*! ko */ 3), - key = __webpack_require__(/*! key */ 19), - - Enums = __webpack_require__(/*! Common/Enums */ 6) - ; - - Globals.$win = $(window); - Globals.$doc = $(window.document); - Globals.$html = $('html'); - Globals.$div = $('
'); - - /** - * @type {?} - */ - Globals.now = (new window.Date()).getTime(); - - /** - * @type {?} - */ - Globals.momentTrigger = ko.observable(true); - - /** - * @type {?} - */ - Globals.dropdownVisibility = ko.observable(false).extend({'rateLimit': 0}); - - /** - * @type {?} - */ - Globals.tooltipTrigger = ko.observable(false).extend({'rateLimit': 0}); - - /** - * @type {?} - */ - Globals.langChangeTrigger = ko.observable(true); - - /** - * @type {boolean} - */ - Globals.useKeyboardShortcuts = ko.observable(true); - - /** - * @type {number} - */ - Globals.iAjaxErrorCount = 0; - - /** - * @type {number} - */ - Globals.iTokenErrorCount = 0; - - /** - * @type {number} - */ - Globals.iMessageBodyCacheCount = 0; - - /** - * @type {boolean} - */ - Globals.bUnload = false; - - /** - * @type {string} - */ - Globals.sUserAgent = (window.navigator.userAgent || '').toLowerCase(); - - /** - * @type {boolean} - */ - Globals.bIsiOSDevice = -1 < Globals.sUserAgent.indexOf('iphone') || -1 < Globals.sUserAgent.indexOf('ipod') || -1 < Globals.sUserAgent.indexOf('ipad'); - - /** - * @type {boolean} - */ - Globals.bIsAndroidDevice = -1 < Globals.sUserAgent.indexOf('android'); - - /** - * @type {boolean} - */ - Globals.bMobileDevice = Globals.bIsiOSDevice || Globals.bIsAndroidDevice; - - /** - * @type {boolean} - */ - Globals.bDisableNanoScroll = Globals.bMobileDevice; - - /** - * @type {boolean} - */ - Globals.bAllowPdfPreview = !Globals.bMobileDevice; - - /** - * @type {boolean} - */ - Globals.bAnimationSupported = !Globals.bMobileDevice && Globals.$html.hasClass('csstransitions'); - - /** - * @type {boolean} - */ - Globals.bXMLHttpRequestSupported = !!window.XMLHttpRequest; - - /** - * @type {string} - */ - Globals.sAnimationType = ''; - - /** - * @type {*} - */ - Globals.__APP = null; - - /** - * @type {Object} - */ - Globals.oHtmlEditorDefaultConfig = { - 'title': false, - 'stylesSet': false, - 'customConfig': '', - 'contentsCss': '', - 'toolbarGroups': [ - {name: 'spec'}, - {name: 'styles'}, - {name: 'basicstyles', groups: ['basicstyles', 'cleanup']}, - {name: 'colors'}, - {name: 'paragraph', groups: ['list', 'indent', 'blocks', 'align']}, - {name: 'links'}, - {name: 'insert'}, - {name: 'others'} - // {name: 'document', groups: ['mode', 'document', 'doctools']} - ], - - 'removePlugins': 'contextmenu', //blockquote - 'removeButtons': 'Format,Undo,Redo,Cut,Copy,Paste,Anchor,Strike,Subscript,Superscript,Image,SelectAll', - 'removeDialogTabs': 'link:advanced;link:target;image:advanced;images:advanced', - - 'extraPlugins': 'plain', - - 'allowedContent': true, - 'autoParagraph': false, - - 'font_defaultLabel': 'Arial', - 'fontSize_defaultLabel': '13', - 'fontSize_sizes': '10/10px;12/12px;13/13px;14/14px;16/16px;18/18px;20/20px;24/24px;28/28px;36/36px;48/48px' - }; - - /** - * @type {Object} - */ - Globals.oHtmlEditorLangsMap = { - 'de': 'de', - 'es': 'es', - 'fr': 'fr', - 'hu': 'hu', - 'is': 'is', - 'it': 'it', - 'ja': 'ja', - 'ja-jp': 'ja', - 'ko': 'ko', - 'ko-kr': 'ko', - 'lv': 'lv', - 'nl': 'nl', - 'no': 'no', - 'pl': 'pl', - 'pt': 'pt', - 'pt-pt': 'pt', - 'pt-br': 'pt-br', - 'ro': 'ro', - 'ru': 'ru', - 'sk': 'sk', - 'tr': 'tr', - 'ua': 'ru', - 'zh': 'zh', - 'zh-cn': 'zh-cn' - }; - - if (Globals.bAllowPdfPreview && window.navigator && window.navigator.mimeTypes) - { - Globals.bAllowPdfPreview = !!_.find(window.navigator.mimeTypes, function (oType) { - return oType && 'application/pdf' === oType.type; - }); - } - - Globals.oI18N = window['rainloopI18N'] || {}; - - Globals.oNotificationI18N = {}; - - Globals.aBootstrapDropdowns = []; - - Globals.aViewModels = { - 'settings': [], - 'settings-removed': [], - 'settings-disabled': [] - }; - - Globals.leftPanelDisabled = ko.observable(false); - - // popups - Globals.popupVisibilityNames = ko.observableArray([]); - - Globals.popupVisibility = ko.computed(function () { - return 0 < Globals.popupVisibilityNames().length; - }, this); - - // keys - Globals.keyScopeReal = ko.observable(Enums.KeyState.All); - Globals.keyScopeFake = ko.observable(Enums.KeyState.All); - - Globals.keyScope = ko.computed({ - 'owner': this, - 'read': function () { - return Globals.keyScopeFake(); - }, - 'write': function (sValue) { - - if (Enums.KeyState.Menu !== sValue) - { - if (Enums.KeyState.Compose === sValue) - { - // disableKeyFilter - key.filter = function () { - return Globals.useKeyboardShortcuts(); - }; - } - else - { - // restoreKeyFilter - key.filter = function (event) { - - if (Globals.useKeyboardShortcuts()) - { - var - oElement = event.target || event.srcElement, - sTagName = oElement ? oElement.tagName : '' - ; - - sTagName = sTagName.toUpperCase(); - return !(sTagName === 'INPUT' || sTagName === 'SELECT' || sTagName === 'TEXTAREA' || - (oElement && sTagName === 'DIV' && 'editorHtmlArea' === oElement.className && oElement.contentEditable) - ); - } - - return false; - }; - } - - Globals.keyScopeFake(sValue); - if (Globals.dropdownVisibility()) - { - sValue = Enums.KeyState.Menu; - } - } - - Globals.keyScopeReal(sValue); - } - }); - - Globals.keyScopeReal.subscribe(function (sValue) { - // window.console.log(sValue); - key.setScope(sValue); - }); - - Globals.dropdownVisibility.subscribe(function (bValue) { - if (bValue) - { - Globals.tooltipTrigger(!Globals.tooltipTrigger()); - Globals.keyScope(Enums.KeyState.Menu); - } - else if (Enums.KeyState.Menu === key.getScope()) - { - Globals.keyScope(Globals.keyScopeFake()); - } - }); - - module.exports = Globals; - - }()); - -/***/ }, - -/***/ 9: -/*!*********************************************!*\ - !*** ./dev/Knoin/KnoinAbstractViewModel.js ***! - \*********************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - ko = __webpack_require__(/*! ko */ 3), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - Globals = __webpack_require__(/*! Common/Globals */ 7) - ; - - /** - * @constructor - * @param {string=} sPosition = '' - * @param {string=} sTemplate = '' - */ - function KnoinAbstractViewModel(sPosition, sTemplate) - { - this.bDisabeCloseOnEsc = false; - this.sPosition = Utils.pString(sPosition); - this.sTemplate = Utils.pString(sTemplate); - - this.sDefaultKeyScope = Enums.KeyState.None; - this.sCurrentKeyScope = this.sDefaultKeyScope; - - this.viewModelVisibility = ko.observable(false); - this.modalVisibility = ko.observable(false).extend({'rateLimit': 0}); - - this.viewModelName = ''; - this.viewModelNames = []; - this.viewModelDom = null; - } - - /** - * @type {boolean} - */ - KnoinAbstractViewModel.prototype.bDisabeCloseOnEsc = false; - - /** - * @type {string} - */ - KnoinAbstractViewModel.prototype.sPosition = ''; - - /** - * @type {string} - */ - KnoinAbstractViewModel.prototype.sTemplate = ''; - - /** - * @type {string} - */ - KnoinAbstractViewModel.prototype.sDefaultKeyScope = Enums.KeyState.None; - - /** - * @type {string} - */ - KnoinAbstractViewModel.prototype.sCurrentKeyScope = Enums.KeyState.None; - - /** - * @type {string} - */ - KnoinAbstractViewModel.prototype.viewModelName = ''; - - /** - * @type {Array} - */ - KnoinAbstractViewModel.prototype.viewModelNames = []; - - /** - * @type {?} - */ - KnoinAbstractViewModel.prototype.viewModelDom = null; - - /** - * @return {string} - */ - KnoinAbstractViewModel.prototype.viewModelTemplate = function () - { - return this.sTemplate; - }; - - /** - * @return {string} - */ - KnoinAbstractViewModel.prototype.viewModelPosition = function () - { - return this.sPosition; - }; - - KnoinAbstractViewModel.prototype.cancelCommand = function () {}; - KnoinAbstractViewModel.prototype.closeCommand = function () {}; - - KnoinAbstractViewModel.prototype.storeAndSetKeyScope = function () - { - this.sCurrentKeyScope = Globals.keyScope(); - Globals.keyScope(this.sDefaultKeyScope); - }; - - KnoinAbstractViewModel.prototype.restoreKeyScope = function () - { - Globals.keyScope(this.sCurrentKeyScope); - }; - - KnoinAbstractViewModel.prototype.registerPopupKeyDown = function () - { - var self = this; - - Globals.$win.on('keydown', function (oEvent) { - if (oEvent && self.modalVisibility && self.modalVisibility()) - { - if (!this.bDisabeCloseOnEsc && Enums.EventKeyCode.Esc === oEvent.keyCode) - { - Utils.delegateRun(self, 'cancelCommand'); - return false; - } - else if (Enums.EventKeyCode.Backspace === oEvent.keyCode && !Utils.inFocus()) - { - return false; - } - } - - return true; - }); - }; - - module.exports = KnoinAbstractViewModel; - - }()); - -/***/ }, - -/***/ 10: -/*!*****************************************!*\ - !*** ./dev/Storages/SettingsStorage.js ***! - \*****************************************/ -/***/ function(module, exports, __webpack_require__) { - - /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @constructor - */ - function SettingsStorage() - { - this.oSettings = window['rainloopAppData'] || {}; - this.oSettings = Utils.isNormal(this.oSettings) ? this.oSettings : {}; - } - - SettingsStorage.prototype.oSettings = null; - - /** - * @param {string} sName - * @return {?} - */ - SettingsStorage.prototype.settingsGet = function (sName) - { - return Utils.isUnd(this.oSettings[sName]) ? null : this.oSettings[sName]; - }; - - /** - * @param {string} sName - * @param {?} mValue - */ - SettingsStorage.prototype.settingsSet = function (sName, mValue) - { - this.oSettings[sName] = mValue; - }; - - /** - * @param {string} sName - * @return {boolean} - */ - SettingsStorage.prototype.capa = function (sName) - { - var mCapa = this.settingsGet('Capa'); - return Utils.isArray(mCapa) && Utils.isNormal(sName) && -1 < Utils.inArray(sName, mCapa); - }; - - - module.exports = new SettingsStorage(); - - }()); - -/***/ }, - -/***/ 11: -/*!***********************************!*\ - !*** ./dev/Common/LinkBuilder.js ***! - \***********************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @constructor - */ - function LinkBuilder() - { - var Settings = __webpack_require__(/*! Storage:Settings */ 10); - - this.sBase = '#/'; - this.sServer = './?'; - this.sVersion = Settings.settingsGet('Version'); - this.sSpecSuffix = Settings.settingsGet('AuthAccountHash') || '0'; - this.sStaticPrefix = Settings.settingsGet('StaticPrefix') || 'rainloop/v/' + this.sVersion + '/static/'; - } - - /** - * @return {string} - */ - LinkBuilder.prototype.root = function () - { - return this.sBase; - }; - - /** - * @param {string} sDownload - * @return {string} - */ - LinkBuilder.prototype.attachmentDownload = function (sDownload) - { - return this.sServer + '/Raw/' + this.sSpecSuffix + '/Download/' + sDownload; - }; - - /** - * @param {string} sDownload - * @return {string} - */ - LinkBuilder.prototype.attachmentPreview = function (sDownload) - { - return this.sServer + '/Raw/' + this.sSpecSuffix + '/View/' + sDownload; - }; - - /** - * @param {string} sDownload - * @return {string} - */ - LinkBuilder.prototype.attachmentPreviewAsPlain = function (sDownload) - { - return this.sServer + '/Raw/' + this.sSpecSuffix + '/ViewAsPlain/' + sDownload; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.upload = function () - { - return this.sServer + '/Upload/' + this.sSpecSuffix + '/'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.uploadContacts = function () - { - return this.sServer + '/UploadContacts/' + this.sSpecSuffix + '/'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.uploadBackground = function () - { - return this.sServer + '/UploadBackground/' + this.sSpecSuffix + '/'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.append = function () - { - return this.sServer + '/Append/' + this.sSpecSuffix + '/'; - }; - - /** - * @param {string} sEmail - * @return {string} - */ - LinkBuilder.prototype.change = function (sEmail) - { - return this.sServer + '/Change/' + this.sSpecSuffix + '/' + Utils.encodeURIComponent(sEmail) + '/'; - }; - - /** - * @param {string=} sAdd - * @return {string} - */ - LinkBuilder.prototype.ajax = function (sAdd) - { - return this.sServer + '/Ajax/' + this.sSpecSuffix + '/' + sAdd; - }; - - /** - * @param {string} sRequestHash - * @return {string} - */ - LinkBuilder.prototype.messageViewLink = function (sRequestHash) - { - return this.sServer + '/Raw/' + this.sSpecSuffix + '/ViewAsPlain/' + sRequestHash; - }; - - /** - * @param {string} sRequestHash - * @return {string} - */ - LinkBuilder.prototype.messageDownloadLink = function (sRequestHash) - { - return this.sServer + '/Raw/' + this.sSpecSuffix + '/Download/' + sRequestHash; - }; - - /** - * @param {string} sEmail - * @return {string} - */ - LinkBuilder.prototype.avatarLink = function (sEmail) - { - return this.sServer + '/Raw/0/Avatar/' + Utils.encodeURIComponent(sEmail) + '/'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.inbox = function () - { - return this.sBase + 'mailbox/Inbox'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.messagePreview = function () - { - return this.sBase + 'mailbox/message-preview'; - }; - - /** - * @param {string=} sScreenName - * @return {string} - */ - LinkBuilder.prototype.settings = function (sScreenName) - { - var sResult = this.sBase + 'settings'; - if (!Utils.isUnd(sScreenName) && '' !== sScreenName) - { - sResult += '/' + sScreenName; - } - - return sResult; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.about = function () - { - return this.sBase + 'about'; - }; - - /** - * @param {string} sScreenName - * @return {string} - */ - LinkBuilder.prototype.admin = function (sScreenName) - { - var sResult = this.sBase; - switch (sScreenName) { - case 'AdminDomains': - sResult += 'domains'; - break; - case 'AdminSecurity': - sResult += 'security'; - break; - case 'AdminLicensing': - sResult += 'licensing'; - break; - } - - return sResult; - }; - - /** - * @param {string} sFolder - * @param {number=} iPage = 1 - * @param {string=} sSearch = '' - * @return {string} - */ - LinkBuilder.prototype.mailBox = function (sFolder, iPage, sSearch) - { - iPage = Utils.isNormal(iPage) ? Utils.pInt(iPage) : 1; - sSearch = Utils.pString(sSearch); - - var sResult = this.sBase + 'mailbox/'; - if ('' !== sFolder) - { - sResult += encodeURI(sFolder); - } - if (1 < iPage) - { - sResult = sResult.replace(/[\/]+$/, ''); - sResult += '/p' + iPage; - } - if ('' !== sSearch) - { - sResult = sResult.replace(/[\/]+$/, ''); - sResult += '/' + encodeURI(sSearch); - } - - return sResult; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.phpInfo = function () - { - return this.sServer + 'Info'; - }; - - /** - * @param {string} sLang - * @return {string} - */ - LinkBuilder.prototype.langLink = function (sLang) - { - return this.sServer + '/Lang/0/' + encodeURI(sLang) + '/' + this.sVersion + '/'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.exportContactsVcf = function () - { - return this.sServer + '/Raw/' + this.sSpecSuffix + '/ContactsVcf/'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.exportContactsCsv = function () - { - return this.sServer + '/Raw/' + this.sSpecSuffix + '/ContactsCsv/'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.emptyContactPic = function () - { - return this.sStaticPrefix + 'css/images/empty-contact.png'; - }; - - /** - * @param {string} sFileName - * @return {string} - */ - LinkBuilder.prototype.sound = function (sFileName) - { - return this.sStaticPrefix + 'sounds/' + sFileName; - }; - - /** - * @param {string} sTheme - * @return {string} - */ - LinkBuilder.prototype.themePreviewLink = function (sTheme) - { - var sPrefix = 'rainloop/v/' + this.sVersion + '/'; - if ('@custom' === sTheme.substr(-7)) - { - sTheme = Utils.trim(sTheme.substring(0, sTheme.length - 7)); - sPrefix = ''; - } - - return sPrefix + 'themes/' + encodeURI(sTheme) + '/images/preview.png'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.notificationMailIcon = function () - { - return this.sStaticPrefix + 'css/images/icom-message-notification.png'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.openPgpJs = function () - { - return this.sStaticPrefix + 'js/min/openpgp.js'; - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.socialGoogle = function () - { - return this.sServer + 'SocialGoogle' + ('' !== this.sSpecSuffix ? '/' + this.sSpecSuffix + '/' : ''); - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.socialTwitter = function () - { - return this.sServer + 'SocialTwitter' + ('' !== this.sSpecSuffix ? '/' + this.sSpecSuffix + '/' : ''); - }; - - /** - * @return {string} - */ - LinkBuilder.prototype.socialFacebook = function () - { - return this.sServer + 'SocialFacebook' + ('' !== this.sSpecSuffix ? '/' + this.sSpecSuffix + '/' : ''); - }; - - module.exports = new LinkBuilder(); - - }()); - -/***/ }, - -/***/ 12: -/*!*************************!*\ - !*** external "window" ***! - \*************************/ -/***/ function(module, exports, __webpack_require__) { - - module.exports = window; - -/***/ }, - -/***/ 14: -/*!*************************!*\ - !*** external "jQuery" ***! - \*************************/ -/***/ function(module, exports, __webpack_require__) { - - module.exports = jQuery; - -/***/ }, - -/***/ 17: -/*!******************************!*\ - !*** ./dev/Common/Consts.js ***! - \******************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var Consts = {}; - - Consts.Values = {}; - Consts.DataImages = {}; - Consts.Defaults = {}; - - /** - * @const - * @type {number} - */ - Consts.Defaults.MessagesPerPage = 20; - - /** - * @const - * @type {number} - */ - Consts.Defaults.ContactsPerPage = 50; - - /** - * @const - * @type {Array} - */ - Consts.Defaults.MessagesPerPageArray = [10, 20, 30, 50, 100/*, 150, 200, 300*/]; - - /** - * @const - * @type {number} - */ - Consts.Defaults.DefaultAjaxTimeout = 30000; - - /** - * @const - * @type {number} - */ - Consts.Defaults.SearchAjaxTimeout = 300000; - - /** - * @const - * @type {number} - */ - Consts.Defaults.SendMessageAjaxTimeout = 300000; - - /** - * @const - * @type {number} - */ - Consts.Defaults.SaveMessageAjaxTimeout = 200000; - - /** - * @const - * @type {number} - */ - Consts.Defaults.ContactsSyncAjaxTimeout = 200000; - - /** - * @const - * @type {string} - */ - Consts.Values.UnuseOptionValue = '__UNUSE__'; - - /** - * @const - * @type {string} - */ - Consts.Values.ClientSideStorageIndexName = 'rlcsc'; - - /** - * @const - * @type {number} - */ - Consts.Values.ImapDefaulPort = 143; - - /** - * @const - * @type {number} - */ - Consts.Values.ImapDefaulSecurePort = 993; - - /** - * @const - * @type {number} - */ - Consts.Values.SmtpDefaulPort = 25; - - /** - * @const - * @type {number} - */ - Consts.Values.SmtpDefaulSecurePort = 465; - - /** - * @const - * @type {number} - */ - Consts.Values.MessageBodyCacheLimit = 15; - - /** - * @const - * @type {number} - */ - Consts.Values.AjaxErrorLimit = 7; - - /** - * @const - * @type {number} - */ - Consts.Values.TokenErrorLimit = 10; - - /** - * @const - * @type {string} - */ - Consts.DataImages.UserDotPic = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P8DwQACgAD/il4QJ8AAAAASUVORK5CYII='; - - /** - * @const - * @type {string} - */ - Consts.DataImages.TranspPic = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII='; - - module.exports = Consts; - - }(module)); - -/***/ }, - -/***/ 19: -/*!**********************!*\ - !*** external "key" ***! - \**********************/ -/***/ function(module, exports, __webpack_require__) { - - module.exports = key; - -/***/ }, - -/***/ 22: -/*!******************************!*\ - !*** ./dev/Common/Events.js ***! - \******************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - Utils = __webpack_require__(/*! Common/Utils */ 1), - Plugins = __webpack_require__(/*! Common/Plugins */ 26) - ; - - /** - * @constructor - */ - function Events() - { - this.oSubs = {}; - } - - Events.prototype.oSubs = {}; - - /** - * @param {string} sName - * @param {Function} fFunc - * @param {Object=} oContext - * @return {Events} - */ - Events.prototype.sub = function (sName, fFunc, oContext) - { - if (Utils.isUnd(this.oSubs[sName])) - { - this.oSubs[sName] = []; - } - - this.oSubs[sName].push([fFunc, oContext]); - - return this; - }; - - /** - * @param {string} sName - * @param {Array=} aArgs - * @return {Events} - */ - Events.prototype.pub = function (sName, aArgs) - { - Plugins.runHook('rl-pub', [sName, aArgs]); - - if (!Utils.isUnd(this.oSubs[sName])) - { - _.each(this.oSubs[sName], function (aItem) { - if (aItem[0]) - { - aItem[0].apply(aItem[1] || null, aArgs || []); - } - }); - } - - return this; - }; - - module.exports = new Events(); - - }()); - -/***/ }, - -/***/ 23: -/*!**********************************!*\ - !*** ./dev/Models/EmailModel.js ***! - \**********************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @param {string=} sEmail - * @param {string=} sName - * - * @constructor - */ - function EmailModel(sEmail, sName) - { - this.email = sEmail || ''; - this.name = sName || ''; - - this.clearDuplicateName(); - } - - /** - * @static - * @param {AjaxJsonEmail} oJsonEmail - * @return {?EmailModel} - */ - EmailModel.newInstanceFromJson = function (oJsonEmail) - { - var oEmailModel = new EmailModel(); - return oEmailModel.initByJson(oJsonEmail) ? oEmailModel : null; - }; - - /** - * @type {string} - */ - EmailModel.prototype.name = ''; - - /** - * @type {string} - */ - EmailModel.prototype.email = ''; - - EmailModel.prototype.clear = function () - { - this.email = ''; - this.name = ''; - }; - - /** - * @returns {boolean} - */ - EmailModel.prototype.validate = function () - { - return '' !== this.name || '' !== this.email; - }; - - /** - * @param {boolean} bWithoutName = false - * @return {string} - */ - EmailModel.prototype.hash = function (bWithoutName) - { - return '#' + (bWithoutName ? '' : this.name) + '#' + this.email + '#'; - }; - - EmailModel.prototype.clearDuplicateName = function () - { - if (this.name === this.email) - { - this.name = ''; - } - }; - - /** - * @param {string} sQuery - * @return {boolean} - */ - EmailModel.prototype.search = function (sQuery) - { - return -1 < (this.name + ' ' + this.email).toLowerCase().indexOf(sQuery.toLowerCase()); - }; - - /** - * @param {string} sString - */ - EmailModel.prototype.parse = function (sString) - { - this.clear(); - - sString = Utils.trim(sString); - - var - mRegex = /(?:"([^"]+)")? ?,]+)>?,? ?/g, - mMatch = mRegex.exec(sString) - ; - - if (mMatch) - { - this.name = mMatch[1] || ''; - this.email = mMatch[2] || ''; - - this.clearDuplicateName(); - } - else if ((/^[^@]+@[^@]+$/).test(sString)) - { - this.name = ''; - this.email = sString; - } - }; - - /** - * @param {AjaxJsonEmail} oJsonEmail - * @return {boolean} - */ - EmailModel.prototype.initByJson = function (oJsonEmail) - { - var bResult = false; - if (oJsonEmail && 'Object/Email' === oJsonEmail['@Object']) - { - this.name = Utils.trim(oJsonEmail.Name); - this.email = Utils.trim(oJsonEmail.Email); - - bResult = '' !== this.email; - this.clearDuplicateName(); - } - - return bResult; - }; - - /** - * @param {boolean} bFriendlyView - * @param {boolean=} bWrapWithLink = false - * @param {boolean=} bEncodeHtml = false - * @return {string} - */ - EmailModel.prototype.toLine = function (bFriendlyView, bWrapWithLink, bEncodeHtml) - { - var sResult = ''; - if ('' !== this.email) - { - bWrapWithLink = Utils.isUnd(bWrapWithLink) ? false : !!bWrapWithLink; - bEncodeHtml = Utils.isUnd(bEncodeHtml) ? false : !!bEncodeHtml; - - if (bFriendlyView && '' !== this.name) - { - sResult = bWrapWithLink ? '
') + - '" target="_blank" tabindex="-1">' + Utils.encodeHtml(this.name) + '' : - (bEncodeHtml ? Utils.encodeHtml(this.name) : this.name); - } - else - { - sResult = this.email; - if ('' !== this.name) - { - if (bWrapWithLink) - { - sResult = Utils.encodeHtml('"' + this.name + '" <') + - '') + '" target="_blank" tabindex="-1">' + Utils.encodeHtml(sResult) + '' + Utils.encodeHtml('>'); - } - else - { - sResult = '"' + this.name + '" <' + sResult + '>'; - if (bEncodeHtml) - { - sResult = Utils.encodeHtml(sResult); - } - } - } - else if (bWrapWithLink) - { - sResult = '' + Utils.encodeHtml(this.email) + ''; - } - } - } - - return sResult; - }; - - /** - * @param {string} $sEmailAddress - * @return {boolean} - */ - EmailModel.prototype.mailsoParse = function ($sEmailAddress) - { - $sEmailAddress = Utils.trim($sEmailAddress); - if ('' === $sEmailAddress) - { - return false; - } - - var - substr = function (str, start, len) { - str += ''; - var end = str.length; - - if (start < 0) { - start += end; - } - - end = typeof len === 'undefined' ? end : (len < 0 ? len + end : len + start); - - return start >= str.length || start < 0 || start > end ? false : str.slice(start, end); - }, - - substr_replace = function (str, replace, start, length) { - if (start < 0) { - start = start + str.length; - } - length = length !== undefined ? length : str.length; - if (length < 0) { - length = length + str.length - start; - } - return str.slice(0, start) + replace.substr(0, length) + replace.slice(length) + str.slice(start + length); - }, - - $sName = '', - $sEmail = '', - $sComment = '', - - $bInName = false, - $bInAddress = false, - $bInComment = false, - - $aRegs = null, - - $iStartIndex = 0, - $iEndIndex = 0, - $iCurrentIndex = 0 - ; - - while ($iCurrentIndex < $sEmailAddress.length) - { - switch ($sEmailAddress.substr($iCurrentIndex, 1)) - { - case '"': - if ((!$bInName) && (!$bInAddress) && (!$bInComment)) - { - $bInName = true; - $iStartIndex = $iCurrentIndex; - } - else if ((!$bInAddress) && (!$bInComment)) - { - $iEndIndex = $iCurrentIndex; - $sName = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1); - $sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1); - $iEndIndex = 0; - $iCurrentIndex = 0; - $iStartIndex = 0; - $bInName = false; - } - break; - case '<': - if ((!$bInName) && (!$bInAddress) && (!$bInComment)) - { - if ($iCurrentIndex > 0 && $sName.length === 0) - { - $sName = substr($sEmailAddress, 0, $iCurrentIndex); - } - - $bInAddress = true; - $iStartIndex = $iCurrentIndex; - } - break; - case '>': - if ($bInAddress) - { - $iEndIndex = $iCurrentIndex; - $sEmail = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1); - $sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1); - $iEndIndex = 0; - $iCurrentIndex = 0; - $iStartIndex = 0; - $bInAddress = false; - } - break; - case '(': - if ((!$bInName) && (!$bInAddress) && (!$bInComment)) - { - $bInComment = true; - $iStartIndex = $iCurrentIndex; - } - break; - case ')': - if ($bInComment) - { - $iEndIndex = $iCurrentIndex; - $sComment = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1); - $sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1); - $iEndIndex = 0; - $iCurrentIndex = 0; - $iStartIndex = 0; - $bInComment = false; - } - break; - case '\\': - $iCurrentIndex++; - break; - } - - $iCurrentIndex++; - } - - if ($sEmail.length === 0) - { - $aRegs = $sEmailAddress.match(/[^@\s]+@\S+/i); - if ($aRegs && $aRegs[0]) - { - $sEmail = $aRegs[0]; - } - else - { - $sName = $sEmailAddress; - } - } - - if ($sEmail.length > 0 && $sName.length === 0 && $sComment.length === 0) - { - $sName = $sEmailAddress.replace($sEmail, ''); - } - - $sEmail = Utils.trim($sEmail).replace(/^[<]+/, '').replace(/[>]+$/, ''); - $sName = Utils.trim($sName).replace(/^["']+/, '').replace(/["']+$/, ''); - $sComment = Utils.trim($sComment).replace(/^[(]+/, '').replace(/[)]+$/, ''); - - // Remove backslash - $sName = $sName.replace(/\\\\(.)/g, '$1'); - $sComment = $sComment.replace(/\\\\(.)/g, '$1'); - - this.name = $sName; - this.email = $sEmail; - - this.clearDuplicateName(); - return true; - }; - - /** - * @return {string} - */ - EmailModel.prototype.inputoTagLine = function () - { - return 0 < this.name.length ? this.name + ' (' + this.email + ')' : this.email; - }; - - module.exports = EmailModel; - - }()); - -/***/ }, - -/***/ 24: -/*!******************************************!*\ - !*** ./dev/Knoin/KnoinAbstractScreen.js ***! - \******************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - crossroads = __webpack_require__(/*! crossroads */ 48), - - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @param {string} sScreenName - * @param {?=} aViewModels = [] - * @constructor - */ - function KnoinAbstractScreen(sScreenName, aViewModels) - { - this.sScreenName = sScreenName; - this.aViewModels = Utils.isArray(aViewModels) ? aViewModels : []; - } - - /** - * @type {Array} - */ - KnoinAbstractScreen.prototype.oCross = null; - - /** - * @type {string} - */ - KnoinAbstractScreen.prototype.sScreenName = ''; - - /** - * @type {Array} - */ - KnoinAbstractScreen.prototype.aViewModels = []; - - /** - * @return {Array} - */ - KnoinAbstractScreen.prototype.viewModels = function () - { - return this.aViewModels; - }; - - /** - * @return {string} - */ - KnoinAbstractScreen.prototype.screenName = function () - { - return this.sScreenName; - }; - - KnoinAbstractScreen.prototype.routes = function () - { - return null; - }; - - /** - * @return {?Object} - */ - KnoinAbstractScreen.prototype.__cross = function () - { - return this.oCross; - }; - - KnoinAbstractScreen.prototype.__start = function () - { - var - aRoutes = this.routes(), - oRoute = null, - fMatcher = null - ; - - if (Utils.isNonEmptyArray(aRoutes)) - { - fMatcher = _.bind(this.onRoute || Utils.emptyFunction, this); - oRoute = crossroads.create(); - - _.each(aRoutes, function (aItem) { - oRoute.addRoute(aItem[0], fMatcher).rules = aItem[1]; - }); - - this.oCross = oRoute; - } - }; - - module.exports = KnoinAbstractScreen; - - }()); - -/***/ }, - -/***/ 25: -/*!*************************!*\ - !*** external "moment" ***! - \*************************/ -/***/ function(module, exports, __webpack_require__) { - - module.exports = moment; - -/***/ }, - -/***/ 26: -/*!*******************************!*\ - !*** ./dev/Common/Plugins.js ***! - \*******************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - - Utils = __webpack_require__(/*! Common/Utils */ 1) - ; - - /** - * @constructor - */ - function Plugins() - { - this.__boot = null; - this.__data = null; - this.__remote = null; - - this.oSettings = __webpack_require__(/*! Storage:Settings */ 10); - - this.oViewModelsHooks = {}; - this.oSimpleHooks = {}; - } - - Plugins.prototype.__boot = null; - Plugins.prototype.__data = null; - Plugins.prototype.__remote = null; - - /** - * @type {Object} - */ - Plugins.prototype.oViewModelsHooks = {}; - - /** - * @type {Object} - */ - Plugins.prototype.oSimpleHooks = {}; - - /** - * @param {string} sName - * @param {Function} fCallback - */ - Plugins.prototype.addHook = function (sName, fCallback) - { - if (Utils.isFunc(fCallback)) - { - if (!Utils.isArray(this.oSimpleHooks[sName])) - { - this.oSimpleHooks[sName] = []; - } - - this.oSimpleHooks[sName].push(fCallback); - } - }; - - /** - * @param {string} sName - * @param {Array=} aArguments - */ - Plugins.prototype.runHook = function (sName, aArguments) - { - if (Utils.isArray(this.oSimpleHooks[sName])) - { - aArguments = aArguments || []; - - _.each(this.oSimpleHooks[sName], function (fCallback) { - fCallback.apply(null, aArguments); - }); - } - }; - - /** - * @param {string} sName - * @return {?} - */ - Plugins.prototype.mainSettingsGet = function (sName) - { - return this.oSettings.settingsGet(sName); - }; - - /** - * @param {Function} fCallback - * @param {string} sAction - * @param {Object=} oParameters - * @param {?number=} iTimeout - * @param {string=} sGetAdd = '' - * @param {Array=} aAbortActions = [] - */ - Plugins.prototype.remoteRequest = function (fCallback, sAction, oParameters, iTimeout, sGetAdd, aAbortActions) - { - if (this.__remote) - { - this.__remote.defaultRequest(fCallback, sAction, oParameters, iTimeout, sGetAdd, aAbortActions); - } - }; - - /** - * @param {string} sPluginSection - * @param {string} sName - * @return {?} - */ - Plugins.prototype.settingsGet = function (sPluginSection, sName) - { - var oPlugin = this.oSettings.settingsGet('Plugins'); - oPlugin = oPlugin && !Utils.isUnd(oPlugin[sPluginSection]) ? oPlugin[sPluginSection] : null; - return oPlugin ? (Utils.isUnd(oPlugin[sName]) ? null : oPlugin[sName]) : null; - }; - - module.exports = new Plugins(); - - }()); - -/***/ }, - -/***/ 31: -/*!*****************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsAskViewModel.js ***! - \*****************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - key = __webpack_require__(/*! key */ 19), - - Enums = __webpack_require__(/*! Common/Enums */ 6), - Utils = __webpack_require__(/*! Common/Utils */ 1), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsAskViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsAsk'); - - this.askDesc = ko.observable(''); - this.yesButton = ko.observable(''); - this.noButton = ko.observable(''); - - this.yesFocus = ko.observable(false); - this.noFocus = ko.observable(false); - - this.fYesAction = null; - this.fNoAction = null; - - this.bDisabeCloseOnEsc = true; - this.sDefaultKeyScope = Enums.KeyState.PopupAsk; - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:Ask', 'PopupsAskViewModel'], PopupsAskViewModel); - _.extend(PopupsAskViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsAskViewModel.prototype.clearPopup = function () - { - this.askDesc(''); - this.yesButton(Utils.i18n('POPUPS_ASK/BUTTON_YES')); - this.noButton(Utils.i18n('POPUPS_ASK/BUTTON_NO')); - - this.yesFocus(false); - this.noFocus(false); - - this.fYesAction = null; - this.fNoAction = null; - }; - - PopupsAskViewModel.prototype.yesClick = function () - { - this.cancelCommand(); - - if (Utils.isFunc(this.fYesAction)) - { - this.fYesAction.call(null); - } - }; - - PopupsAskViewModel.prototype.noClick = function () - { - this.cancelCommand(); - - if (Utils.isFunc(this.fNoAction)) - { - this.fNoAction.call(null); - } - }; - - /** - * @param {string} sAskDesc - * @param {Function=} fYesFunc - * @param {Function=} fNoFunc - * @param {string=} sYesButton - * @param {string=} sNoButton - */ - PopupsAskViewModel.prototype.onShow = function (sAskDesc, fYesFunc, fNoFunc, sYesButton, sNoButton) - { - this.clearPopup(); - - this.fYesAction = fYesFunc || null; - this.fNoAction = fNoFunc || null; - - this.askDesc(sAskDesc || ''); - if (sYesButton) - { - this.yesButton(sYesButton); - } - - if (sYesButton) - { - this.yesButton(sNoButton); - } - }; - - PopupsAskViewModel.prototype.onFocus = function () - { - this.yesFocus(true); - }; - - PopupsAskViewModel.prototype.onBuild = function () - { - key('tab, shift+tab, right, left', Enums.KeyState.PopupAsk, _.bind(function () { - if (this.yesFocus()) - { - this.noFocus(true); - } - else - { - this.yesFocus(true); - } - return false; - }, this)); - - key('esc', Enums.KeyState.PopupAsk, _.bind(function () { - this.noClick(); - return false; - }, this)); - }; - - module.exports = PopupsAskViewModel; - - }()); - -/***/ }, - -/***/ 32: -/*!***********************************************************!*\ - !*** ./dev/ViewModels/Popups/PopupsLanguagesViewModel.js ***! - \***********************************************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - _ = __webpack_require__(/*! _ */ 2), - ko = __webpack_require__(/*! ko */ 3), - - Utils = __webpack_require__(/*! Common/Utils */ 1), - Globals = __webpack_require__(/*! Common/Globals */ 7), - - kn = __webpack_require__(/*! App:Knoin */ 5), - KnoinAbstractViewModel = __webpack_require__(/*! Knoin:AbstractViewModel */ 9) - ; - - /** - * @constructor - * @extends KnoinAbstractViewModel - */ - function PopupsLanguagesViewModel() - { - KnoinAbstractViewModel.call(this, 'Popups', 'PopupsLanguages'); - - this.Data = Globals.__APP.data(); // TODO - - this.exp = ko.observable(false); - - this.languages = ko.computed(function () { - return _.map(this.Data.languages(), function (sLanguage) { - return { - 'key': sLanguage, - 'selected': ko.observable(false), - 'fullName': Utils.convertLangName(sLanguage) - }; - }); - }, this); - - this.Data.mainLanguage.subscribe(function () { - this.resetMainLanguage(); - }, this); - - kn.constructorEnd(this); - } - - kn.extendAsViewModel(['View:Popup:Languages', 'PopupsLanguagesViewModel'], PopupsLanguagesViewModel); - _.extend(PopupsLanguagesViewModel.prototype, KnoinAbstractViewModel.prototype); - - PopupsLanguagesViewModel.prototype.languageEnName = function (sLanguage) - { - return Utils.convertLangName(sLanguage, true); - }; - - PopupsLanguagesViewModel.prototype.resetMainLanguage = function () - { - var sCurrent = this.Data.mainLanguage(); - _.each(this.languages(), function (oItem) { - oItem['selected'](oItem['key'] === sCurrent); - }); - }; - - PopupsLanguagesViewModel.prototype.onShow = function () - { - this.exp(true); - - this.resetMainLanguage(); - }; - - PopupsLanguagesViewModel.prototype.onHide = function () - { - this.exp(false); - }; - - PopupsLanguagesViewModel.prototype.changeLanguage = function (sLang) - { - this.Data.mainLanguage(sLang); - this.cancelCommand(); - }; - - module.exports = PopupsLanguagesViewModel; - - }()); - -/***/ }, - -/***/ 34: -/*!*********************************!*\ - !*** ./dev/Apps/AbstractApp.js ***! - \*********************************/ -/***/ function(module, exports, __webpack_require__) { - - - (function () { - - 'use strict'; - - var - window = __webpack_require__(/*! window */ 12), - _ = __webpack_require__(/*! _ */ 2), - $ = __webpack_require__(/*! $ */ 14), - - Globals = __webpack_require__(/*! Common/Globals */ 7), - Utils = __webpack_require__(/*! Common/Utils */ 1), - LinkBuilder = __webpack_require__(/*! Common/LinkBuilder */ 11), - Events = __webpack_require__(/*! Common/Events */ 22), - - Settings = __webpack_require__(/*! Storage:Settings */ 10), - - KnoinAbstractBoot = __webpack_require__(/*! Knoin:AbstractBoot */ 50) - ; - - /** - * @constructor - * @param {RemoteStorage|AdminRemoteStorage} Remote - * @extends KnoinAbstractBoot - */ - function AbstractApp(Remote) - { - KnoinAbstractBoot.call(this); - - this.isLocalAutocomplete = true; - - this.iframe = $('
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){t.types.push(q),x("BeforeChange",function(e,t,i){t!==i&&(t===q?K():i===q&&K(!0))}),x(l+"."+q,function(){K()})},getIframe:function(i,n){var o=i.src,r=t.st.iframe;e.each(r.patterns,function(){return o.indexOf(this.index)>-1?(this.id&&(o="string"==typeof this.id?o.substr(o.lastIndexOf(this.id)+this.id.length,o.length):this.id.call(this,o)),o=this.src.replace("%id%",o),!1):void 0});var a={};return r.srcAction&&(a[r.srcAction]=o),t._parseMarkup(n,a,i),t.updateStatus("ready"),n}}});var Y=function(e){var i=t.items.length;return e>i-1?e-i:0>e?i+e:e},U=function(e,t,i){return e.replace(/%curr%/gi,t+1).replace(/%total%/gi,i)};e.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var i=t.st.gallery,n=".mfp-gallery",r=Boolean(e.fn.mfpFastClick);return t.direction=!0,i&&i.enabled?(a+=" mfp-gallery",x(f+n,function(){i.navigateByImgClick&&t.wrap.on("click"+n,".mfp-img",function(){return t.items.length>1?(t.next(),!1):void 0}),o.on("keydown"+n,function(e){37===e.keyCode?t.prev():39===e.keyCode&&t.next()})}),x("UpdateStatus"+n,function(e,i){i.text&&(i.text=U(i.text,t.currItem.index,t.items.length))}),x(p+n,function(e,n,o,r){var a=t.items.length;o.counter=a>1?U(i.tCounter,r.index,a):""}),x("BuildControls"+n,function(){if(t.items.length>1&&i.arrows&&!t.arrowLeft){var n=i.arrowMarkup,o=t.arrowLeft=e(n.replace(/%title%/gi,i.tPrev).replace(/%dir%/gi,"left")).addClass(y),a=t.arrowRight=e(n.replace(/%title%/gi,i.tNext).replace(/%dir%/gi,"right")).addClass(y),s=r?"mfpFastClick":"click";o[s](function(){t.prev()}),a[s](function(){t.next()}),t.isIE7&&(k("b",o[0],!1,!0),k("a",o[0],!1,!0),k("b",a[0],!1,!0),k("a",a[0],!1,!0)),t.container.append(o.add(a))}}),x(m+n,function(){t._preloadTimeout&&clearTimeout(t._preloadTimeout),t._preloadTimeout=setTimeout(function(){t.preloadNearbyImages(),t._preloadTimeout=null},16)}),x(l+n,function(){o.off(n),t.wrap.off("click"+n),t.arrowLeft&&r&&t.arrowLeft.add(t.arrowRight).destroyMfpFastClick(),t.arrowRight=t.arrowLeft=null}),void 0):!1},next:function(){t.direction=!0,t.index=Y(t.index+1),t.updateItemHTML()},prev:function(){t.direction=!1,t.index=Y(t.index-1),t.updateItemHTML()},goTo:function(e){t.direction=e>=t.index,t.index=e,t.updateItemHTML()},preloadNearbyImages:function(){var e,i=t.st.gallery.preload,n=Math.min(i[0],t.items.length),o=Math.min(i[1],t.items.length);for(e=1;(t.direction?o:n)>=e;e++)t._preloadItem(t.index+e);for(e=1;(t.direction?n:o)>=e;e++)t._preloadItem(t.index-e)},_preloadItem:function(i){if(i=Y(i),!t.items[i].preloaded){var n=t.items[i];n.parsed||(n=t.parseEl(i)),T("LazyLoad",n),"image"===n.type&&(n.img=e('').on("load.mfploader",function(){n.hasSize=!0}).on("error.mfploader",function(){n.hasSize=!0,n.loadError=!0,T("LazyLoadError",n)}).attr("src",n.src)),n.preloaded=!0}}}});var G="retina";e.magnificPopup.registerModule(G,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var e=t.st.retina,i=e.ratio;i=isNaN(i)?i():i,i>1&&(x("ImageHasSize."+G,function(e,t){t.img.css({"max-width":t.img[0].naturalWidth/i,width:"100%"})}),x("ElementParse."+G,function(t,n){n.src=e.replaceSrc(n,i)}))}}}}),function(){var t=1e3,i="ontouchstart"in window,n=function(){I.off("touchmove"+r+" touchend"+r)},o="mfpFastClick",r="."+o;e.fn.mfpFastClick=function(o){return e(this).each(function(){var a,s=e(this);if(i){var l,c,d,u,p,f;s.on("touchstart"+r,function(e){u=!1,f=1,p=e.originalEvent?e.originalEvent.touches[0]:e.touches[0],c=p.clientX,d=p.clientY,I.on("touchmove"+r,function(e){p=e.originalEvent?e.originalEvent.touches:e.touches,f=p.length,p=p[0],(Math.abs(p.clientX-c)>10||Math.abs(p.clientY-d)>10)&&(u=!0,n())}).on("touchend"+r,function(e){n(),u||f>1||(a=!0,e.preventDefault(),clearTimeout(l),l=setTimeout(function(){a=!1},t),o())})})}s.on("click"+r,function(){a||o()})})},e.fn.destroyMfpFastClick=function(){e(this).off("touchstart"+r+" click"+r),i&&I.off("touchmove"+r+" touchend"+r)}}()})(window.jQuery||window.Zepto); -/*! -* Bootstrap.js by @fat & @mdo -* Copyright 2013 Twitter, Inc. -* http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(".dropdown-backdrop").remove(),e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||("ontouchstart"in document.documentElement&&e('