Skip to content

Commit

Permalink
v2.7.3
Browse files Browse the repository at this point in the history
  • Loading branch information
djmaze committed Oct 11, 2021
1 parent 21a9e24 commit dfa448c
Show file tree
Hide file tree
Showing 8 changed files with 108 additions and 111 deletions.
2 changes: 1 addition & 1 deletion .docker/release/files/usr/local/include/application.ini
Original file line number Diff line number Diff line change
Expand Up @@ -292,5 +292,5 @@ dev_email = ""
dev_password = ""

[version]
current = "2.7.2"
current = "2.7.3"
saved = "Mon, 23 Aug 2021 07:55:13 +0000"
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,23 +129,23 @@ RainLoop 1.15 vs SnappyMail

|js/* |RainLoop |Snappy |
|--------------- |--------: |--------: |
|admin.js |2.158.025 | 86.143 |
|app.js |4.215.733 | 435.037 |
|admin.js |2.158.025 | 86.179 |
|app.js |4.215.733 | 435.073 |
|boot.js | 672.433 | 2.707 |
|libs.js | 647.679 | 213.208 |
|libs.js | 647.679 | 211.161 |
|polyfills.js | 325.908 | 0 |
|serviceworker.js | 0 | 285 |
|TOTAL |8.019.778 | 737.380 |
|TOTAL |8.019.778 | 735.405 |

|js/min/* |RainLoop |Snappy |RL gzip |SM gzip |RL brotli |SM brotli |
|--------------- |--------: |--------: |------: |------: |--------: |--------: |
|admin.min.js | 255.514 | 43.930 | 73.899 | 13.591 | 60.674 | 12.162 |
|app.min.js | 516.000 | 222.420 |140.430 | 66.268 |110.657 | 56.207 |
|admin.min.js | 255.514 | 43.957 | 73.899 | 13.590 | 60.674 | 12.174 |
|app.min.js | 516.000 | 222.447 |140.430 | 66.271 |110.657 | 56.274 |
|boot.min.js | 66.456 | 1.621 | 22.553 | 983 | 20.043 | 805 |
|libs.min.js | 574.626 | 102.959 |177.280 | 37.514 |151.855 | 33.617 |
|libs.min.js | 574.626 | 101.006 |177.280 | 36.780 |151.855 | 32.955 |
|polyfills.min.js | 32.608 | 0 | 11.315 | 0 | 10.072 | 0 |
|TOTAL |1.445.204 | 370.930 |425.477 |118.356 |353.301 |102.791 |
|TOTAL (no admin) |1.189.690 | 327.000 |351.061 |104.765 |292.627 | 90.629 |
|TOTAL |1.445.204 | 369.031 |425.477 |117.624 |353.301 |102.208 |
|TOTAL (no admin) |1.189.690 | 325.074 |351.061 |104.034 |292.627 | 90.034 |

For a user its around 68% smaller and faster than traditional RainLoop.

Expand Down
2 changes: 1 addition & 1 deletion integrations/nextcloud/snappymail/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.7.2
2.7.3
2 changes: 1 addition & 1 deletion integrations/nextcloud/snappymail/appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<name>SnappyMail</name>
<summary>SnappyMail Webmail</summary>
<description>Simple, modern and fast web-based email client. After enabling in Nextcloud, go to Nextcloud admin panel, "Additionnal settings" and you will see a "SnappyMail webmail" section. There, click on the link to go to the SnappyMail admin panel. The default user/password is admin/12345. This version is based on SnappyMail 2.6.0 (2021-07).</description>
<version>2.7.2</version>
<version>2.7.3</version>
<licence>agpl</licence>
<author>SnappyMail Team, Nextgen-Networks, Tab Fitts, Nathan Kinkade, Pierre-Alain Bandinelli</author>
<namespace>SnappyMail</namespace>
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"title": "SnappyMail",
"description": "Simple, modern & fast web-based email client",
"private": true,
"version": "2.7.2",
"version": "2.7.3",
"homepage": "https://snappymail.eu",
"author": {
"name": "DJ Maze",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,9 @@
</li>
</ul>
</div>
<div class="btn-group pull-right">&nbsp;</div>
<div class="btn-group pull-right">
<a class="btn fontastic" data-bind="visible: allowContacts, command: contactsCommand" data-i18n="[title]GLOBAL/CONTACTS">📇</a>
</div>
<div class="btn-group pull-right">&nbsp;</div>
</div>
<span class="pull-right">
<span class="g-ui-link" data-i18n="GLOBAL/CC"
Expand Down
111 changes: 55 additions & 56 deletions vendors/knockout/build/output/knockout-latest.debug.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ ko.exportSymbol = (koPath, object) => {

// In the future, "ko" may become distinct from "koExports" (so that non-exported objects are not reachable)
// At that point, "target" would be set to: (typeof koExports !== "undefined" ? koExports : ko)
var target = ko;
var target = ko, i = 0, l = tokens.length - 1;

for (var i = 0; i < tokens.length - 1; i++)
for (; i < l; i++)
target = target[tokens[i]];
target[tokens[tokens.length - 1]] = object;
target[tokens[l]] = object;
};
ko.exportProperty = (owner, publicName, object) => owner[publicName] = object;
ko.exportSymbol('version', "3.5.1-sm");
Expand Down Expand Up @@ -105,7 +105,7 @@ ko.utils = {
string.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g, ''),

domNodeIsAttachedToDocument: node =>
node.ownerDocument.documentElement.contains(node.nodeType !== 1 ? node.parentNode : node),
node.ownerDocument.documentElement.contains(node.nodeType !== 1 ? node.parentNode : node),

triggerEvent: (element, eventType) => {
if (!(element && element.nodeType))
Expand Down Expand Up @@ -366,7 +366,6 @@ class koSubscription
this._node = null;
this._domNodeDisposalCallback = null;
ko.exportProperty(this, 'dispose', this.dispose);
ko.exportProperty(this, 'disposeWhenNodeIsRemoved', this.disposeWhenNodeIsRemoved);
}

dispose() {
Expand Down Expand Up @@ -2350,17 +2349,17 @@ ko.expressionRewriting = (() => {
clearCachedDefinition: componentName =>
delete loadedDefinitionsCache[componentName],

register: (componentName, config) => {
if (!config) {
throw new Error('Invalid configuration for ' + componentName);
}
register: (componentName, config) => {
if (!config) {
throw new Error('Invalid configuration for ' + componentName);
}

if (defaultConfigRegistry[componentName]) {
throw new Error('Component ' + componentName + ' is already registered');
}
if (defaultConfigRegistry[componentName]) {
throw new Error('Component ' + componentName + ' is already registered');
}

defaultConfigRegistry[componentName] = config;
}
defaultConfigRegistry[componentName] = config;
}
};

// The default loader is responsible for two things:
Expand All @@ -2376,49 +2375,49 @@ ko.expressionRewriting = (() => {
var defaultConfigRegistry = Object.create(null);
var createViewModelKey = 'createViewModel';

// Takes a config object of the form { template: ..., viewModel: ... }, and asynchronously convert it
// into the standard component definition format:
// { template: <ArrayOfDomNodes>, createViewModel: function(params, componentInfo) { ... } }.
// Since both template and viewModel may need to be resolved asynchronously, both tasks are performed
// in parallel, and the results joined when both are ready. We don't depend on any promises infrastructure,
// so this is implemented manually below.
// Takes a config object of the form { template: ..., viewModel: ... }, and asynchronously convert it
// into the standard component definition format:
// { template: <ArrayOfDomNodes>, createViewModel: function(params, componentInfo) { ... } }.
// Since both template and viewModel may need to be resolved asynchronously, both tasks are performed
// in parallel, and the results joined when both are ready. We don't depend on any promises infrastructure,
// so this is implemented manually below.
function loadComponent(componentName, callback) {
var result = {},
config = defaultConfigRegistry[componentName] || {},
templateConfig = config['template'],
viewModelConfig = config['viewModel'];

if (templateConfig) {
if (!templateConfig['element']) {
throwError(componentName, 'Unknown template value: ' + templateConfig);
}
// Element ID - find it, then copy its child nodes
var element = templateConfig['element'];
var elemInstance = document.getElementById(element);
if (!elemInstance) {
throwError(componentName, 'Cannot find element with ID ' + element);
}
if (!elemInstance.matches('TEMPLATE')) {
throwError(componentName, 'Template Source Element not a <template>');
}
// For browsers with proper <template> element support (i.e., where the .content property
// gives a document fragment), use that document fragment.
result['template'] = ko.utils.cloneNodes(elemInstance.content.childNodes);
}

if (viewModelConfig) {
if (typeof viewModelConfig[createViewModelKey] !== 'function') {
throwError(componentName, 'Unknown viewModel value: ' + viewModelConfig);
}
// Already a factory function - use it as-is
result[createViewModelKey] = viewModelConfig[createViewModelKey];
}

if (result['template'] && result[createViewModelKey]) {
callback(result);
} else {
callback(null);
}
var result = {},
config = defaultConfigRegistry[componentName] || {},
templateConfig = config['template'],
viewModelConfig = config['viewModel'];

if (templateConfig) {
if (!templateConfig['element']) {
throwError(componentName, 'Unknown template value: ' + templateConfig);
}
// Element ID - find it, then copy its child nodes
var element = templateConfig['element'];
var elemInstance = document.getElementById(element);
if (!elemInstance) {
throwError(componentName, 'Cannot find element with ID ' + element);
}
if (!elemInstance.matches('TEMPLATE')) {
throwError(componentName, 'Template Source Element not a <template>');
}
// For browsers with proper <template> element support (i.e., where the .content property
// gives a document fragment), use that document fragment.
result['template'] = ko.utils.cloneNodes(elemInstance.content.childNodes);
}

if (viewModelConfig) {
if (typeof viewModelConfig[createViewModelKey] !== 'function') {
throwError(componentName, 'Unknown viewModel value: ' + viewModelConfig);
}
// Already a factory function - use it as-is
result[createViewModelKey] = viewModelConfig[createViewModelKey];
}

if (result['template'] && result[createViewModelKey]) {
callback(result);
} else {
callback(null);
}
}

function throwError(componentName, message) {
Expand Down
Loading

0 comments on commit dfa448c

Please sign in to comment.