Select the devices to share this folder with.
-
@@ -1259,9 +1263,12 @@
+
+
+
diff --git a/gui/scripts/syncthing/core/filters/groupFilter.js b/gui/scripts/syncthing/core/filters/groupFilter.js
new file mode 100644
index 000000000..d960651df
--- /dev/null
+++ b/gui/scripts/syncthing/core/filters/groupFilter.js
@@ -0,0 +1,25 @@
+/**
+ * Groups input in chunks of the specified size
+ *
+ * E.g. [1, 2, 3, 4, 5] with groupSize = 3 => [[1, 2, 3], [4, 5]]
+ * Uses pmkr.memoize to avoid infdig, see 'Johnny Hauser's "Filter Stablize" Solution'
+ * here: http://sobrepere.com/blog/2014/10/14/creating-groupby-filter-angularjs/
+ */
+angular.module('syncthing.core')
+ .filter('group', [
+ 'pmkr.filterStabilize',
+ function (stabilize) {
+ return stabilize(function(items, groupSize) {
+ var groups = [];
+ var inner;
+ for (var i = 0; i < items.length; i++) {
+ if (i % groupSize === 0) {
+ inner = [];
+ groups.push(inner);
+ }
+ inner.push(items[i]);
+ }
+ return groups;
+ });
+ }
+ ]);
diff --git a/gui/scripts/syncthing/core/services/filterStabilize.js b/gui/scripts/syncthing/core/services/filterStabilize.js
new file mode 100644
index 000000000..7eb31f75e
--- /dev/null
+++ b/gui/scripts/syncthing/core/services/filterStabilize.js
@@ -0,0 +1,27 @@
+/**
+ * m59peacemaker's filterStabilize
+ *
+ * See https://github.com/m59peacemaker/angular-pmkr-components/tree/master/src/services/filterStabilize
+ * Released under the MIT license
+ */
+angular.module('syncthing.core')
+ .factory('pmkr.filterStabilize', [
+ 'pmkr.memoize',
+ function(memoize) {
+ function service(fn) {
+ function filter() {
+ var args = [].slice.call(arguments);
+ // always pass a copy of the args so that the original input can't be modified
+ args = angular.copy(args);
+ // return the `fn` return value or input reference (makes `fn` return optional)
+ var filtered = fn.apply(this, args) || args[0];
+ return filtered;
+ }
+
+ var memoized = memoize(filter);
+ return memoized;
+
+ }
+ return service;
+ }
+ ]);
diff --git a/gui/scripts/syncthing/core/services/memoize.js b/gui/scripts/syncthing/core/services/memoize.js
new file mode 100644
index 000000000..db72e5c0a
--- /dev/null
+++ b/gui/scripts/syncthing/core/services/memoize.js
@@ -0,0 +1,28 @@
+/**
+ * m59peacemaker's memoize
+ *
+ * See https://github.com/m59peacemaker/angular-pmkr-components/tree/master/src/services/memoize
+ * Released under the MIT license
+ */
+angular.module('syncthing.core')
+ .factory('pmkr.memoize', [
+ function() {
+ function service() {
+ return memoizeFactory.apply(this, arguments);
+ }
+ function memoizeFactory(fn) {
+ var cache = {};
+ function memoized() {
+ var args = [].slice.call(arguments);
+ var key = JSON.stringify(args);
+ if (cache.hasOwnProperty(key)) {
+ return cache[key];
+ }
+ cache[key] = fn.apply(this, arguments);
+ return cache[key];
+ }
+ return memoized;
+ }
+ return service;
+ }
+ ]);