From 412da87e6583375f98ef1bdd755c56caab14b8ac Mon Sep 17 00:00:00 2001
From: Vincent Petry
Date: Tue, 9 Sep 2014 15:45:56 +0200
Subject: [PATCH 1/8] Move select2 from files_external to core
---
apps/files_external/settings.php | 4 ++--
.../css}/select2/select2-spinner.gif | Bin
.../3rdparty => core/css}/select2/select2.css | 0
.../3rdparty => core/css}/select2/select2.png | Bin
.../3rdparty => core/css}/select2/select2x2.png | Bin
.../3rdparty => core/js}/select2/LICENSE | 0
.../3rdparty => core/js}/select2/README.md | 0
.../3rdparty => core/js}/select2/bower.json | 0
.../3rdparty => core/js}/select2/component.json | 0
.../3rdparty => core/js}/select2/composer.json | 0
.../3rdparty => core/js}/select2/package.json | 0
.../3rdparty => core/js}/select2/release.sh | 0
.../js}/select2/select2-bootstrap.css | 0
.../js}/select2/select2.jquery.json | 0
.../3rdparty => core/js}/select2/select2.js | 0
.../js}/select2/select2_locale_ar.js | 0
.../js}/select2/select2_locale_bg.js | 0
.../js}/select2/select2_locale_ca.js | 0
.../js}/select2/select2_locale_cs.js | 0
.../js}/select2/select2_locale_da.js | 0
.../js}/select2/select2_locale_de.js | 0
.../js}/select2/select2_locale_el.js | 0
.../js}/select2/select2_locale_en.js.template | 0
.../js}/select2/select2_locale_es.js | 0
.../js}/select2/select2_locale_et.js | 0
.../js}/select2/select2_locale_eu.js | 0
.../js}/select2/select2_locale_fa.js | 0
.../js}/select2/select2_locale_fi.js | 0
.../js}/select2/select2_locale_fr.js | 0
.../js}/select2/select2_locale_gl.js | 0
.../js}/select2/select2_locale_he.js | 0
.../js}/select2/select2_locale_hr.js | 0
.../js}/select2/select2_locale_hu.js | 0
.../js}/select2/select2_locale_id.js | 0
.../js}/select2/select2_locale_is.js | 0
.../js}/select2/select2_locale_it.js | 0
.../js}/select2/select2_locale_ja.js | 0
.../js}/select2/select2_locale_ka.js | 0
.../js}/select2/select2_locale_ko.js | 0
.../js}/select2/select2_locale_lt.js | 0
.../js}/select2/select2_locale_lv.js | 0
.../js}/select2/select2_locale_mk.js | 0
.../js}/select2/select2_locale_ms.js | 0
.../js}/select2/select2_locale_nl.js | 0
.../js}/select2/select2_locale_no.js | 0
.../js}/select2/select2_locale_pl.js | 0
.../js}/select2/select2_locale_pt-BR.js | 0
.../js}/select2/select2_locale_pt-PT.js | 0
.../js}/select2/select2_locale_ro.js | 0
.../js}/select2/select2_locale_rs.js | 0
.../js}/select2/select2_locale_ru.js | 0
.../js}/select2/select2_locale_sk.js | 0
.../js}/select2/select2_locale_sv.js | 0
.../js}/select2/select2_locale_th.js | 0
.../js}/select2/select2_locale_tr.js | 0
.../js}/select2/select2_locale_uk.js | 0
.../js}/select2/select2_locale_vi.js | 0
.../js}/select2/select2_locale_zh-CN.js | 0
.../js}/select2/select2_locale_zh-TW.js | 0
59 files changed, 2 insertions(+), 2 deletions(-)
rename {apps/files_external/3rdparty => core/css}/select2/select2-spinner.gif (100%)
rename {apps/files_external/3rdparty => core/css}/select2/select2.css (100%)
rename {apps/files_external/3rdparty => core/css}/select2/select2.png (100%)
rename {apps/files_external/3rdparty => core/css}/select2/select2x2.png (100%)
rename {apps/files_external/3rdparty => core/js}/select2/LICENSE (100%)
rename {apps/files_external/3rdparty => core/js}/select2/README.md (100%)
rename {apps/files_external/3rdparty => core/js}/select2/bower.json (100%)
rename {apps/files_external/3rdparty => core/js}/select2/component.json (100%)
rename {apps/files_external/3rdparty => core/js}/select2/composer.json (100%)
rename {apps/files_external/3rdparty => core/js}/select2/package.json (100%)
rename {apps/files_external/3rdparty => core/js}/select2/release.sh (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2-bootstrap.css (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2.jquery.json (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_ar.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_bg.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_ca.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_cs.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_da.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_de.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_el.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_en.js.template (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_es.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_et.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_eu.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_fa.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_fi.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_fr.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_gl.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_he.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_hr.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_hu.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_id.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_is.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_it.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_ja.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_ka.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_ko.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_lt.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_lv.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_mk.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_ms.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_nl.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_no.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_pl.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_pt-BR.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_pt-PT.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_ro.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_rs.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_ru.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_sk.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_sv.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_th.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_tr.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_uk.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_vi.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_zh-CN.js (100%)
rename {apps/files_external/3rdparty => core/js}/select2/select2_locale_zh-TW.js (100%)
diff --git a/apps/files_external/settings.php b/apps/files_external/settings.php
index 4c87360486a7..e49eba06731b 100644
--- a/apps/files_external/settings.php
+++ b/apps/files_external/settings.php
@@ -25,8 +25,8 @@
OCP\Util::addScript('files_external', 'settings');
OCP\Util::addStyle('files_external', 'settings');
-OCP\Util::addScript('files_external', '../3rdparty/select2/select2');
-OCP\Util::addStyle('files_external', '../3rdparty/select2/select2');
+OCP\Util::addScript('core', 'select2/select2');
+OCP\Util::addStyle('core', 'select2/select2');
$backends = OC_Mount_Config::getBackends();
$personal_backends = array();
diff --git a/apps/files_external/3rdparty/select2/select2-spinner.gif b/core/css/select2/select2-spinner.gif
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2-spinner.gif
rename to core/css/select2/select2-spinner.gif
diff --git a/apps/files_external/3rdparty/select2/select2.css b/core/css/select2/select2.css
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2.css
rename to core/css/select2/select2.css
diff --git a/apps/files_external/3rdparty/select2/select2.png b/core/css/select2/select2.png
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2.png
rename to core/css/select2/select2.png
diff --git a/apps/files_external/3rdparty/select2/select2x2.png b/core/css/select2/select2x2.png
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2x2.png
rename to core/css/select2/select2x2.png
diff --git a/apps/files_external/3rdparty/select2/LICENSE b/core/js/select2/LICENSE
similarity index 100%
rename from apps/files_external/3rdparty/select2/LICENSE
rename to core/js/select2/LICENSE
diff --git a/apps/files_external/3rdparty/select2/README.md b/core/js/select2/README.md
similarity index 100%
rename from apps/files_external/3rdparty/select2/README.md
rename to core/js/select2/README.md
diff --git a/apps/files_external/3rdparty/select2/bower.json b/core/js/select2/bower.json
similarity index 100%
rename from apps/files_external/3rdparty/select2/bower.json
rename to core/js/select2/bower.json
diff --git a/apps/files_external/3rdparty/select2/component.json b/core/js/select2/component.json
similarity index 100%
rename from apps/files_external/3rdparty/select2/component.json
rename to core/js/select2/component.json
diff --git a/apps/files_external/3rdparty/select2/composer.json b/core/js/select2/composer.json
similarity index 100%
rename from apps/files_external/3rdparty/select2/composer.json
rename to core/js/select2/composer.json
diff --git a/apps/files_external/3rdparty/select2/package.json b/core/js/select2/package.json
similarity index 100%
rename from apps/files_external/3rdparty/select2/package.json
rename to core/js/select2/package.json
diff --git a/apps/files_external/3rdparty/select2/release.sh b/core/js/select2/release.sh
similarity index 100%
rename from apps/files_external/3rdparty/select2/release.sh
rename to core/js/select2/release.sh
diff --git a/apps/files_external/3rdparty/select2/select2-bootstrap.css b/core/js/select2/select2-bootstrap.css
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2-bootstrap.css
rename to core/js/select2/select2-bootstrap.css
diff --git a/apps/files_external/3rdparty/select2/select2.jquery.json b/core/js/select2/select2.jquery.json
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2.jquery.json
rename to core/js/select2/select2.jquery.json
diff --git a/apps/files_external/3rdparty/select2/select2.js b/core/js/select2/select2.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2.js
rename to core/js/select2/select2.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_ar.js b/core/js/select2/select2_locale_ar.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_ar.js
rename to core/js/select2/select2_locale_ar.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_bg.js b/core/js/select2/select2_locale_bg.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_bg.js
rename to core/js/select2/select2_locale_bg.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_ca.js b/core/js/select2/select2_locale_ca.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_ca.js
rename to core/js/select2/select2_locale_ca.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_cs.js b/core/js/select2/select2_locale_cs.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_cs.js
rename to core/js/select2/select2_locale_cs.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_da.js b/core/js/select2/select2_locale_da.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_da.js
rename to core/js/select2/select2_locale_da.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_de.js b/core/js/select2/select2_locale_de.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_de.js
rename to core/js/select2/select2_locale_de.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_el.js b/core/js/select2/select2_locale_el.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_el.js
rename to core/js/select2/select2_locale_el.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_en.js.template b/core/js/select2/select2_locale_en.js.template
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_en.js.template
rename to core/js/select2/select2_locale_en.js.template
diff --git a/apps/files_external/3rdparty/select2/select2_locale_es.js b/core/js/select2/select2_locale_es.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_es.js
rename to core/js/select2/select2_locale_es.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_et.js b/core/js/select2/select2_locale_et.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_et.js
rename to core/js/select2/select2_locale_et.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_eu.js b/core/js/select2/select2_locale_eu.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_eu.js
rename to core/js/select2/select2_locale_eu.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_fa.js b/core/js/select2/select2_locale_fa.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_fa.js
rename to core/js/select2/select2_locale_fa.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_fi.js b/core/js/select2/select2_locale_fi.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_fi.js
rename to core/js/select2/select2_locale_fi.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_fr.js b/core/js/select2/select2_locale_fr.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_fr.js
rename to core/js/select2/select2_locale_fr.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_gl.js b/core/js/select2/select2_locale_gl.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_gl.js
rename to core/js/select2/select2_locale_gl.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_he.js b/core/js/select2/select2_locale_he.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_he.js
rename to core/js/select2/select2_locale_he.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_hr.js b/core/js/select2/select2_locale_hr.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_hr.js
rename to core/js/select2/select2_locale_hr.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_hu.js b/core/js/select2/select2_locale_hu.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_hu.js
rename to core/js/select2/select2_locale_hu.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_id.js b/core/js/select2/select2_locale_id.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_id.js
rename to core/js/select2/select2_locale_id.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_is.js b/core/js/select2/select2_locale_is.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_is.js
rename to core/js/select2/select2_locale_is.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_it.js b/core/js/select2/select2_locale_it.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_it.js
rename to core/js/select2/select2_locale_it.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_ja.js b/core/js/select2/select2_locale_ja.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_ja.js
rename to core/js/select2/select2_locale_ja.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_ka.js b/core/js/select2/select2_locale_ka.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_ka.js
rename to core/js/select2/select2_locale_ka.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_ko.js b/core/js/select2/select2_locale_ko.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_ko.js
rename to core/js/select2/select2_locale_ko.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_lt.js b/core/js/select2/select2_locale_lt.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_lt.js
rename to core/js/select2/select2_locale_lt.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_lv.js b/core/js/select2/select2_locale_lv.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_lv.js
rename to core/js/select2/select2_locale_lv.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_mk.js b/core/js/select2/select2_locale_mk.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_mk.js
rename to core/js/select2/select2_locale_mk.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_ms.js b/core/js/select2/select2_locale_ms.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_ms.js
rename to core/js/select2/select2_locale_ms.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_nl.js b/core/js/select2/select2_locale_nl.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_nl.js
rename to core/js/select2/select2_locale_nl.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_no.js b/core/js/select2/select2_locale_no.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_no.js
rename to core/js/select2/select2_locale_no.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_pl.js b/core/js/select2/select2_locale_pl.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_pl.js
rename to core/js/select2/select2_locale_pl.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_pt-BR.js b/core/js/select2/select2_locale_pt-BR.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_pt-BR.js
rename to core/js/select2/select2_locale_pt-BR.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_pt-PT.js b/core/js/select2/select2_locale_pt-PT.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_pt-PT.js
rename to core/js/select2/select2_locale_pt-PT.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_ro.js b/core/js/select2/select2_locale_ro.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_ro.js
rename to core/js/select2/select2_locale_ro.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_rs.js b/core/js/select2/select2_locale_rs.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_rs.js
rename to core/js/select2/select2_locale_rs.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_ru.js b/core/js/select2/select2_locale_ru.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_ru.js
rename to core/js/select2/select2_locale_ru.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_sk.js b/core/js/select2/select2_locale_sk.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_sk.js
rename to core/js/select2/select2_locale_sk.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_sv.js b/core/js/select2/select2_locale_sv.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_sv.js
rename to core/js/select2/select2_locale_sv.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_th.js b/core/js/select2/select2_locale_th.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_th.js
rename to core/js/select2/select2_locale_th.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_tr.js b/core/js/select2/select2_locale_tr.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_tr.js
rename to core/js/select2/select2_locale_tr.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_uk.js b/core/js/select2/select2_locale_uk.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_uk.js
rename to core/js/select2/select2_locale_uk.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_vi.js b/core/js/select2/select2_locale_vi.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_vi.js
rename to core/js/select2/select2_locale_vi.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_zh-CN.js b/core/js/select2/select2_locale_zh-CN.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_zh-CN.js
rename to core/js/select2/select2_locale_zh-CN.js
diff --git a/apps/files_external/3rdparty/select2/select2_locale_zh-TW.js b/core/js/select2/select2_locale_zh-TW.js
similarity index 100%
rename from apps/files_external/3rdparty/select2/select2_locale_zh-TW.js
rename to core/js/select2/select2_locale_zh-TW.js
From d23621536c23f89785f6beea13cdc53ec2b9392f Mon Sep 17 00:00:00 2001
From: Vincent Petry
Date: Tue, 9 Sep 2014 17:06:50 +0200
Subject: [PATCH 2/8] Now using select2 for the groups excluded from sharing
---
settings/admin.php | 16 +------
settings/js/admin.js | 90 ++++++++++++++++++++++--------------
settings/templates/admin.php | 9 +---
3 files changed, 58 insertions(+), 57 deletions(-)
diff --git a/settings/admin.php b/settings/admin.php
index 65deed6b8835..b4064c3345e1 100755
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -54,22 +54,8 @@
$tmpl->assign('shareEnforceExpireDate', OC_Appconfig::getValue('core', 'shareapi_enforce_expire_date', 'no'));
$excludeGroups = OC_Appconfig::getValue('core', 'shareapi_exclude_groups', 'no') === 'yes' ? true : false;
$tmpl->assign('shareExcludeGroups', $excludeGroups);
-$allGroups = OC_Group::getGroups();
$excludedGroupsList = OC_Appconfig::getValue('core', 'shareapi_exclude_groups_list', '');
-$excludedGroups = $excludedGroupsList !== '' ? explode(',', $excludedGroupsList) : array();
-$groups = array();
-foreach ($allGroups as $group) {
- if (in_array($group, $excludedGroups)) {
- $groups[$group] = array('gid' => $group,
- 'excluded' => true);
- } else {
- $groups[$group] = array('gid' => $group,
- 'excluded' => false);
- }
-}
-ksort($groups);
-$tmpl->assign('groups', $groups);
-
+$tmpl->assign('shareExcludedGroupsList', $excludedGroupsList);
// Check if connected using HTTPS
$tmpl->assign('isConnectedViaHTTPS', OC_Request::serverProtocol() === 'https');
diff --git a/settings/js/admin.js b/settings/js/admin.js
index 56dc1b987166..d38c770a28ab 100644
--- a/settings/js/admin.js
+++ b/settings/js/admin.js
@@ -1,38 +1,60 @@
var SharingGroupList = {
- applyMultipleSelect: function(element) {
- var checked = [];
- if ($(element).hasClass('groupsselect')) {
- if (element.data('userGroups')) {
- checked = element.data('userGroups');
- }
- var checkHandeler = function(group) {
- $.post(OC.filePath('settings', 'ajax', 'excludegroups.php'),
- {changedGroup: group, selectedGroups: JSON.stringify(checked)},
- function() {});
- };
-
-
- var addGroup = function(select, group) {
- $(this).each(function(index, element) {
- if ($(element).find('option[value="' + group + '"]').length === 0 &&
- select.data('msid') !== $(element).data('msid')) {
- $(element).append('');
+ setupGroupsSelect: function($elements) {
+ if ($elements.length > 0) {
+ // note: settings are saved through a "change" event registered
+ // on all input fields
+ $elements.select2({
+ placeholder: t('core', 'Groups'),
+ allowClear: true,
+ multiple: true,
+ ajax: {
+ url: OC.generateUrl('/settings/ajax/grouplist'),
+ dataType: 'json',
+ quietMillis: 100,
+ data: function (term) {
+ return {
+ pattern: term, //search term
+ };
+ },
+ results: function (data) {
+ if (data.status === "success") {
+ var results = [];
+
+ // add groups
+ $.each(data.data.adminGroups, function(i, group) {
+ results.push({id:group.id, displayname:group.name});
+ });
+ $.each(data.data.groups, function(i, group) {
+ results.push({id:group.id, displayname:group.name});
+ });
+
+ return {results: results};
+ } else {
+ //FIXME add error handling
+ }
}
- });
- };
-
- var label = null;
- element.multiSelect({
- createCallback: addGroup,
- createText: label,
- selectedFirst: true,
- checked: checked,
- oncheck: checkHandeler,
- onuncheck: checkHandeler,
- minWidth: 100
+ },
+ id: function(element) {
+ return element.id;
+ },
+ initSelection: function(element, callback) {
+ var selection =
+ _.map(($(element).val() || []).split(',').sort(),
+ function(groupName) {
+ return {
+ id: groupName,
+ displayname: groupName
+ };
+ });
+ callback(selection);
+ },
+ formatResult: function (element) {
+ return element.displayname;
+ },
+ formatSelection: function (element) {
+ return element.displayname;
+ }
});
-
}
}
};
@@ -57,8 +79,8 @@ $(document).ready(function(){
}
- $('select#excludedGroups[multiple]').each(function (index, element) {
- SharingGroupList.applyMultipleSelect($(element));
+ $('#excludedGroups').each(function (index, element) {
+ SharingGroupList.setupGroupsSelect($(element));
});
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index 0e6cb14bcef0..9ceebad4ee14 100644
--- a/settings/templates/admin.php
+++ b/settings/templates/admin.php
@@ -317,14 +317,7 @@
-
+
t('These groups will still be able to receive shares, but not to initiate them.')); ?>
From 4a27f4b8b55ef2f388a9998b74b8d1b8ed337bb6 Mon Sep 17 00:00:00 2001
From: Vincent Petry
Date: Tue, 9 Sep 2014 17:18:12 +0200
Subject: [PATCH 3/8] Load select2 on admin page
---
settings/admin.php | 2 ++
1 file changed, 2 insertions(+)
diff --git a/settings/admin.php b/settings/admin.php
index b4064c3345e1..1d56a3521cfc 100755
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -11,6 +11,8 @@
OC_Util::addScript( "settings", "admin" );
OC_Util::addScript( "settings", "log" );
OC_Util::addScript( 'core', 'multiselect' );
+OCP\Util::addScript('core', 'select2/select2');
+OCP\Util::addStyle('core', 'select2/select2');
OC_App::setActiveNavigationEntry( "admin" );
$tmpl = new OC_Template( 'settings', 'admin', 'user');
From 39f5580cdf154256a7586fa57c8e7f094a9721a9 Mon Sep 17 00:00:00 2001
From: Vincent Petry
Date: Tue, 9 Sep 2014 17:18:24 +0200
Subject: [PATCH 4/8] Remove excludegroup.php
The ajax call is now using ajax/appconfig.php instead
---
settings/ajax/excludegroups.php | 18 ------------------
1 file changed, 18 deletions(-)
delete mode 100644 settings/ajax/excludegroups.php
diff --git a/settings/ajax/excludegroups.php b/settings/ajax/excludegroups.php
deleted file mode 100644
index c3488c5bae7e..000000000000
--- a/settings/ajax/excludegroups.php
+++ /dev/null
@@ -1,18 +0,0 @@
-
Date: Tue, 9 Sep 2014 18:00:53 +0200
Subject: [PATCH 5/8] Added select2 on the apps page
Moved setupGroupsSelect() from admin.js to a common settings.js
as OC.Settings.setupGoupsSelect().
Now using select2 as well on the apps page.
---
settings/admin.php | 3 +-
settings/apps.php | 8 ++---
settings/js/admin.js | 63 +-------------------------------
settings/js/apps.js | 35 +++++++++---------
settings/js/settings.js | 72 +++++++++++++++++++++++++++++++++++++
settings/templates/apps.php | 6 +---
6 files changed, 99 insertions(+), 88 deletions(-)
create mode 100644 settings/js/settings.js
diff --git a/settings/admin.php b/settings/admin.php
index 1d56a3521cfc..03befdba66fc 100755
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -7,7 +7,8 @@
OC_Util::checkAdminUser();
-OC_Util::addStyle( "settings", "settings" );
+OCP\Util::addStyle('settings', 'settings');
+OCP\Util::addScript('settings', 'settings');
OC_Util::addScript( "settings", "admin" );
OC_Util::addScript( "settings", "log" );
OC_Util::addScript( 'core', 'multiselect' );
diff --git a/settings/apps.php b/settings/apps.php
index 7573c8b573f7..6021574cbb35 100644
--- a/settings/apps.php
+++ b/settings/apps.php
@@ -24,17 +24,17 @@
OC_Util::checkAdminUser();
// Load the files we need
-OC_Util::addStyle( "settings", "settings" );
-OC_Util::addScript("core", "multiselect");
+OCP\Util::addStyle('settings', 'settings' );
+OCP\Util::addScript('settings', 'settings');
+OCP\Util::addScript('core', 'select2/select2');
+OCP\Util::addStyle('core', 'select2/select2');
OC_App::setActiveNavigationEntry( "core_apps" );
$combinedApps = OC_App::listAllApps();
-$groups = \OC_Group::getGroups();
$tmpl = new OC_Template( "settings", "apps", "user" );
$tmpl->assign('apps', $combinedApps);
-$tmpl->assign('groups', $groups);
$appid = (isset($_GET['appid'])?strip_tags($_GET['appid']):'');
diff --git a/settings/js/admin.js b/settings/js/admin.js
index d38c770a28ab..943bf78e024a 100644
--- a/settings/js/admin.js
+++ b/settings/js/admin.js
@@ -1,64 +1,3 @@
-var SharingGroupList = {
- setupGroupsSelect: function($elements) {
- if ($elements.length > 0) {
- // note: settings are saved through a "change" event registered
- // on all input fields
- $elements.select2({
- placeholder: t('core', 'Groups'),
- allowClear: true,
- multiple: true,
- ajax: {
- url: OC.generateUrl('/settings/ajax/grouplist'),
- dataType: 'json',
- quietMillis: 100,
- data: function (term) {
- return {
- pattern: term, //search term
- };
- },
- results: function (data) {
- if (data.status === "success") {
- var results = [];
-
- // add groups
- $.each(data.data.adminGroups, function(i, group) {
- results.push({id:group.id, displayname:group.name});
- });
- $.each(data.data.groups, function(i, group) {
- results.push({id:group.id, displayname:group.name});
- });
-
- return {results: results};
- } else {
- //FIXME add error handling
- }
- }
- },
- id: function(element) {
- return element.id;
- },
- initSelection: function(element, callback) {
- var selection =
- _.map(($(element).val() || []).split(',').sort(),
- function(groupName) {
- return {
- id: groupName,
- displayname: groupName
- };
- });
- callback(selection);
- },
- formatResult: function (element) {
- return element.displayname;
- },
- formatSelection: function (element) {
- return element.displayname;
- }
- });
- }
- }
-};
-
$(document).ready(function(){
var params = OC.Util.History.parseUrlQuery();
@@ -80,7 +19,7 @@ $(document).ready(function(){
$('#excludedGroups').each(function (index, element) {
- SharingGroupList.setupGroupsSelect($(element));
+ OC.Settings.setupGroupsSelect($(element));
});
diff --git a/settings/js/apps.js b/settings/js/apps.js
index e808e51e936d..20b0c5ce18fe 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -7,6 +7,11 @@
OC.Settings = OC.Settings || {};
OC.Settings.Apps = OC.Settings.Apps || {
+ setupGroupsSelect: function() {
+ OC.Settings.setupGroupsSelect($('#group_select'), {
+ placeholder: t('core', 'All')
+ });
+ },
loadApp:function(app) {
var page = $('#app-content');
page.find('p.license').show();
@@ -112,23 +117,16 @@ OC.Settings.Apps = OC.Settings.Apps || {
page.find(".warning").hide();
}
- page.find("div.multiselect").parent().remove();
if(OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') ||
OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) {
page.find("#groups_enable").hide();
page.find("label[for='groups_enable']").hide();
page.find("#groups_enable").attr('checked', null);
} else {
- $('#group_select > option').each(function (i, el) {
- if (app.groups.length === 0 || app.groups.indexOf(el.value) >= 0) {
- $(el).attr('selected', 'selected');
- } else {
- $(el).attr('selected', null);
- }
- });
+ $('#group_select').val((app.groups || []).join(','));
if (app.active) {
if (app.groups.length) {
- $('#group_select').multiSelect();
+ OC.Settings.Apps.setupGroupsSelect();
page.find("#groups_enable").attr('checked','checked');
} else {
page.find("#groups_enable").attr('checked', null);
@@ -383,6 +381,11 @@ $(document).ready(function(){
$('#group_select').change(function() {
var element = $('#app-content input.enable');
var groups = $(this).val();
+ if (groups && groups !== '') {
+ groups = groups.split(',');
+ } else {
+ groups = [];
+ }
var appid = element.data('appid');
if (appid) {
OC.Settings.Apps.enableApp(appid, false, element, groups);
@@ -404,14 +407,14 @@ $(document).ready(function(){
}
$("#groups_enable").change(function() {
+ var $select = $('#group_select');
+ $select.val('');
if (this.checked) {
- $("div.multiselect").parent().remove();
- $('#group_select').multiSelect();
- } else {
- $('#group_select').hide().val(null);
- $("div.multiselect").parent().remove();
+ OC.Settings.Apps.setupGroupsSelect();
}
-
- $('#group_select').change();
+ else {
+ $select.select2('destroy');
+ }
+ $select.change();
});
});
diff --git a/settings/js/settings.js b/settings/js/settings.js
new file mode 100644
index 000000000000..85e8996ae7fd
--- /dev/null
+++ b/settings/js/settings.js
@@ -0,0 +1,72 @@
+/**
+ * Copyright (c) 2014, Vincent Petry
+ * This file is licensed under the Affero General Public License version 3 or later.
+ * See the COPYING-README file.
+ */
+OC.Settings = OC.Settings || {};
+OC.Settings = _.extend(OC.Settings, {
+ /**
+ * Setup selection box for group selection.
+ * @param $elements jQuery element (hidden input) to setup select2 on
+ * @param [extraOptions] extra options hash to pass to select2
+ */
+ setupGroupsSelect: function($elements, extraOptions) {
+ if ($elements.length > 0) {
+ // note: settings are saved through a "change" event registered
+ // on all input fields
+ $elements.select2(_.extend({
+ placeholder: t('core', 'Groups'),
+ allowClear: true,
+ multiple: true,
+ ajax: {
+ url: OC.generateUrl('/settings/ajax/grouplist'),
+ dataType: 'json',
+ quietMillis: 100,
+ data: function (term) {
+ return {
+ pattern: term, //search term
+ };
+ },
+ results: function (data) {
+ if (data.status === "success") {
+ var results = [];
+
+ // add groups
+ $.each(data.data.adminGroups, function(i, group) {
+ results.push({id:group.id, displayname:group.name});
+ });
+ $.each(data.data.groups, function(i, group) {
+ results.push({id:group.id, displayname:group.name});
+ });
+
+ return {results: results};
+ } else {
+ //FIXME add error handling
+ }
+ }
+ },
+ id: function(element) {
+ return element.id;
+ },
+ initSelection: function(element, callback) {
+ var selection =
+ _.map(($(element).val() || []).split(',').sort(),
+ function(groupName) {
+ return {
+ id: groupName,
+ displayname: groupName
+ };
+ });
+ callback(selection);
+ },
+ formatResult: function (element) {
+ return element.displayname;
+ },
+ formatSelection: function (element) {
+ return element.displayname;
+ }
+ }, extraOptions || {}));
+ }
+ }
+});
+
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index 29fda0ed243c..5199d3fd7c78 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -58,11 +58,7 @@ class="version">
-
+
From a064536ec13c8effb5e97b152e1949bc6dab6612 Mon Sep 17 00:00:00 2001
From: Vincent Petry
Date: Wed, 10 Sep 2014 14:30:02 +0200
Subject: [PATCH 6/8] Fixed select2 for admin and apps page
Added explicit escaping.
Now internally using a pipe symbol as separator for select2, to make it
possible to use group names containing commas.
---
settings/admin.php | 3 ++-
settings/js/admin.js | 11 ++++++++++-
settings/js/apps.js | 12 ++++--------
settings/js/settings.js | 16 +++++++++++++---
4 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/settings/admin.php b/settings/admin.php
index 03befdba66fc..6b93e6e3f03c 100755
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -58,7 +58,8 @@
$excludeGroups = OC_Appconfig::getValue('core', 'shareapi_exclude_groups', 'no') === 'yes' ? true : false;
$tmpl->assign('shareExcludeGroups', $excludeGroups);
$excludedGroupsList = OC_Appconfig::getValue('core', 'shareapi_exclude_groups_list', '');
-$tmpl->assign('shareExcludedGroupsList', $excludedGroupsList);
+$excludedGroupsList = explode(',', $excludedGroupsList); // FIXME: this should be JSON!
+$tmpl->assign('shareExcludedGroupsList', implode('|', $excludedGroupsList));
// Check if connected using HTTPS
$tmpl->assign('isConnectedViaHTTPS', OC_Request::serverProtocol() === 'https');
diff --git a/settings/js/admin.js b/settings/js/admin.js
index 943bf78e024a..95be13d22886 100644
--- a/settings/js/admin.js
+++ b/settings/js/admin.js
@@ -20,6 +20,15 @@ $(document).ready(function(){
$('#excludedGroups').each(function (index, element) {
OC.Settings.setupGroupsSelect($(element));
+ $(element).change(function(ev) {
+ var groups = ev.val || [];
+ if (groups.length > 0) {
+ groups = ev.val.join(','); // FIXME: make this JSON
+ } else {
+ groups = '';
+ }
+ OC.AppConfig.setValue('core', $(this).attr('name'), groups);
+ });
});
@@ -42,7 +51,7 @@ $(document).ready(function(){
$('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked);
});
- $('#shareAPI input').change(function() {
+ $('#shareAPI input:not(#excludedGroups)').change(function() {
if ($(this).attr('type') === 'checkbox') {
if (this.checked) {
var value = 'yes';
diff --git a/settings/js/apps.js b/settings/js/apps.js
index 20b0c5ce18fe..22bac1eaf3eb 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -123,10 +123,10 @@ OC.Settings.Apps = OC.Settings.Apps || {
page.find("label[for='groups_enable']").hide();
page.find("#groups_enable").attr('checked', null);
} else {
- $('#group_select').val((app.groups || []).join(','));
if (app.active) {
if (app.groups.length) {
OC.Settings.Apps.setupGroupsSelect();
+ $('#group_select').select2('val', app.groups || []);
page.find("#groups_enable").attr('checked','checked');
} else {
page.find("#groups_enable").attr('checked', null);
@@ -378,14 +378,10 @@ $(document).ready(function(){
}
});
- $('#group_select').change(function() {
+ $('#group_select').change(function(ev) {
var element = $('#app-content input.enable');
- var groups = $(this).val();
- if (groups && groups !== '') {
- groups = groups.split(',');
- } else {
- groups = [];
- }
+ // getting an array of values from select2
+ var groups = ev.val || [];
var appid = element.data('appid');
if (appid) {
OC.Settings.Apps.enableApp(appid, false, element, groups);
diff --git a/settings/js/settings.js b/settings/js/settings.js
index 85e8996ae7fd..6e44c473185a 100644
--- a/settings/js/settings.js
+++ b/settings/js/settings.js
@@ -7,6 +7,11 @@ OC.Settings = OC.Settings || {};
OC.Settings = _.extend(OC.Settings, {
/**
* Setup selection box for group selection.
+ *
+ * Values need to be separated by a pipe "|" character.
+ * (mostly because a comma is more likely to be used
+ * for groups)
+ *
* @param $elements jQuery element (hidden input) to setup select2 on
* @param [extraOptions] extra options hash to pass to select2
*/
@@ -18,6 +23,7 @@ OC.Settings = _.extend(OC.Settings, {
placeholder: t('core', 'Groups'),
allowClear: true,
multiple: true,
+ separator: '|',
ajax: {
url: OC.generateUrl('/settings/ajax/grouplist'),
dataType: 'json',
@@ -50,7 +56,7 @@ OC.Settings = _.extend(OC.Settings, {
},
initSelection: function(element, callback) {
var selection =
- _.map(($(element).val() || []).split(',').sort(),
+ _.map(($(element).val() || []).split('|').sort(),
function(groupName) {
return {
id: groupName,
@@ -60,10 +66,14 @@ OC.Settings = _.extend(OC.Settings, {
callback(selection);
},
formatResult: function (element) {
- return element.displayname;
+ return escapeHTML(element.displayname);
},
formatSelection: function (element) {
- return element.displayname;
+ return escapeHTML(element.displayname);
+ },
+ escapeMarkup: function(m) {
+ // prevent double markup escape
+ return m;
}
}, extraOptions || {}));
}
From 8d0d336e038de256f86135d64c82155d85cbad6f Mon Sep 17 00:00:00 2001
From: Jan-Christoph Borchardt
Date: Wed, 10 Sep 2014 18:09:22 +0200
Subject: [PATCH 7/8] fit select2 to ownCloud input style
---
core/css/styles.css | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/core/css/styles.css b/core/css/styles.css
index 64b37c89b0b2..952e935ec465 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -139,6 +139,18 @@ input[type="time"] {
-moz-box-sizing: border-box; box-sizing: border-box;
}
+.select2-choices {
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ color: #333;
+ background-image: none;
+}
+.select2-dropdown-open .select2-choices {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ border: 1px solid #3875d7;
+}
+
/* correctly align images inside of buttons */
input img, button img, .button img {
vertical-align: text-bottom;
From 71776e307f16a43d806ee0fe3142ed1a1c0d7d6f Mon Sep 17 00:00:00 2001
From: Vincent Petry
Date: Thu, 11 Sep 2014 11:12:44 +0200
Subject: [PATCH 8/8] Add select2 cache for complete group list
To avoid making a server request every time the dropdown opens, the
whole list of groups are cached (from the last request):
Whenever the user types in a search term it will still send server
requests.
---
settings/js/settings.js | 62 ++++++++++++++++++++++++++---------------
1 file changed, 39 insertions(+), 23 deletions(-)
diff --git a/settings/js/settings.js b/settings/js/settings.js
index 6e44c473185a..13c56a8f53aa 100644
--- a/settings/js/settings.js
+++ b/settings/js/settings.js
@@ -5,6 +5,9 @@
*/
OC.Settings = OC.Settings || {};
OC.Settings = _.extend(OC.Settings, {
+
+ _cachedGroups: null,
+
/**
* Setup selection box for group selection.
*
@@ -16,6 +19,7 @@ OC.Settings = _.extend(OC.Settings, {
* @param [extraOptions] extra options hash to pass to select2
*/
setupGroupsSelect: function($elements, extraOptions) {
+ var self = this;
if ($elements.length > 0) {
// note: settings are saved through a "change" event registered
// on all input fields
@@ -24,33 +28,45 @@ OC.Settings = _.extend(OC.Settings, {
allowClear: true,
multiple: true,
separator: '|',
- ajax: {
- url: OC.generateUrl('/settings/ajax/grouplist'),
- dataType: 'json',
- quietMillis: 100,
- data: function (term) {
- return {
- pattern: term, //search term
+ query: _.debounce(function(query) {
+ var queryData = {};
+ if (self._cachedGroups && query.term === '') {
+ query.callback({results: self._cachedGroups});
+ return;
+ }
+ if (query.term !== '') {
+ queryData = {
+ pattern: query.term,
+ filterGroups: 1
};
- },
- results: function (data) {
- if (data.status === "success") {
- var results = [];
+ }
+ $.ajax({
+ url: OC.generateUrl('/settings/ajax/grouplist'),
+ data: queryData,
+ dataType: 'json',
+ success: function(data) {
+ if (data.status === "success") {
+ var results = [];
- // add groups
- $.each(data.data.adminGroups, function(i, group) {
- results.push({id:group.id, displayname:group.name});
- });
- $.each(data.data.groups, function(i, group) {
- results.push({id:group.id, displayname:group.name});
- });
+ // add groups
+ $.each(data.data.adminGroups, function(i, group) {
+ results.push({id:group.id, displayname:group.name});
+ });
+ $.each(data.data.groups, function(i, group) {
+ results.push({id:group.id, displayname:group.name});
+ });
- return {results: results};
- } else {
- //FIXME add error handling
+ if (query.term === '') {
+ // cache full list
+ self._cachedGroups = results;
+ }
+ query.callback({results: results});
+ } else {
+ //FIXME add error handling
+ }
}
- }
- },
+ });
+ }, 100, true),
id: function(element) {
return element.id;
},