├── l10n ├── .gitkeep ├── an.json ├── fo.json ├── hi_IN.json ├── an.js ├── fo.js ├── lo.json ├── ps.json ├── hi_IN.js ├── kab.json ├── si.json ├── ta.json ├── ur_PK.json ├── tk.json ├── lo.js ├── ps.js ├── kab.js ├── si.js ├── ta.js ├── ur_PK.js ├── af.json ├── ka.json ├── ms_MY.json ├── sq.json ├── tk.js ├── uz.json ├── az.json ├── ca.json ├── hy.json ├── km.json ├── mn.json ├── nn_NO.json ├── th.json ├── eo.json ├── et_EE.json ├── ka_GE.json ├── kn.json ├── bn_BD.json ├── ia.json ├── lb.json ├── af.js ├── ka.js ├── ms_MY.js ├── sq.js ├── uz.js ├── az.js ├── ca.js ├── hy.js ├── is.json ├── km.js ├── mn.js ├── nn_NO.js ├── th.js ├── eo.js ├── et_EE.js ├── ka_GE.js ├── kn.js ├── bn_BD.js ├── ia.js ├── lb.js ├── mk.json ├── gd.json ├── is.js ├── lv.json ├── ro.json ├── es_419.json ├── es_CL.json ├── es_CO.json ├── es_CR.json ├── es_DO.json ├── es_GT.json ├── es_HN.json ├── es_MX.json ├── es_NI.json ├── es_PA.json ├── es_PE.json ├── es_PR.json ├── es_PY.json ├── es_SV.json ├── es_UY.json ├── he.json ├── cy_GB.json ├── mk.js ├── sr@latin.json ├── gd.js ├── lv.js ├── ro.js ├── es_419.js ├── es_CL.js ├── es_CO.js ├── es_CR.js ├── es_DO.js ├── es_GT.js ├── es_HN.js ├── es_MX.js ├── es_NI.js ├── es_PA.js ├── es_PE.js ├── es_PR.js ├── es_PY.js ├── es_SV.js ├── es_UY.js ├── he.js ├── cy_GB.js ├── sr@latin.js ├── bs.json ├── bs.js ├── lt_LT.json ├── be.json ├── lt_LT.js ├── be.js ├── pt_PT.json ├── pt_PT.js ├── br.json ├── br.js ├── oc.json ├── oc.js ├── ja.json ├── ja.js ├── vi.json ├── vi.js ├── zh_CN.json ├── zh_CN.js ├── fi.json ├── sv.json ├── ast.json ├── ko.json ├── fi.js ├── sv.js ├── ast.js ├── ko.js ├── sl.json ├── sl.js ├── hr.json ├── it.json ├── hr.js ├── it.js ├── sc.json ├── sc.js ├── id.json ├── id.js ├── es_AR.json ├── es_AR.js ├── zh_HK.json └── zh_HK.js ├── .gitignore ├── screenshot.png ├── .prettierrc ├── img └── theme-breeze-dark.png ├── .vscode ├── settings.json ├── extensions.json ├── launch.json └── tasks.json ├── .github ├── ISSUE_TEMPLATE │ ├── other.md │ ├── feature_request.md │ ├── styling_request.md │ └── bug_report.md ├── FUNDING.yml └── workflows │ ├── lint.yml │ └── release.yml ├── .prettierignore ├── .stylelintignore ├── AUTHORS.md ├── composer.json ├── .tx └── config ├── .php_cs.dist ├── css ├── apps │ ├── official │ │ ├── _retention.scss │ │ ├── _external-sites.scss │ │ ├── _notes.scss │ │ ├── _announcement-center.scss │ │ ├── _richdocuments.scss │ │ ├── _contacts.scss │ │ ├── _circles.scss │ │ ├── _spreed.scss │ │ ├── _forms.scss │ │ ├── _ldap.scss │ │ ├── _deck.scss │ │ ├── _news.scss │ │ ├── _files-texteditor.scss │ │ ├── _mail.scss │ │ ├── _groupfolders.scss │ │ ├── _tasks.scss │ │ ├── _calendar.scss │ │ └── _maps.scss │ ├── thirdparty │ │ ├── _snappymail.scss │ │ ├── _electronicsignatures.scss │ │ ├── _terms-of-service.scss │ │ ├── _bbb.scss │ │ ├── _quicknotes.scss │ │ ├── _gpxpod.scss │ │ ├── _user-account-deletion.scss │ │ ├── _phonetrack.scss │ │ ├── _bookmarks.scss │ │ ├── _cookbook.scss │ │ ├── _phone-sync.scss │ │ ├── _weather.scss │ │ ├── _timemanager.scss │ │ ├── _files-markdown.scss │ │ ├── _collectives.scss │ │ ├── _analytics.scss │ │ ├── _fulltextsearch.scss │ │ ├── _files-markdown-syntax.scss │ │ ├── _polls.scss │ │ ├── _audio-player.scss │ │ └── _music.scss │ └── core │ │ ├── _firstrunwizard.scss │ │ ├── _activity.scss │ │ ├── _notifications.scss │ │ ├── _photos.scss │ │ ├── _dashboard.scss │ │ ├── _text.scss │ │ └── _files.scss ├── settings.css ├── server-automatic.scss ├── server │ └── _icons.scss └── server.scss ├── .stylelintrc.json ├── package.json ├── appinfo ├── routes.php └── info.xml ├── js ├── breezedark.js └── settings-personal.js ├── Makefile ├── lib ├── Controller │ └── ThemingController.php ├── Migration │ ├── InstallRestoreSettings.php │ ├── UninstallCleanup.php │ └── MigrateUserThemeSettings.php ├── Settings │ ├── Admin.php │ └── Personal.php └── Listener │ └── BeforeTemplateRenderedListener.php ├── templates ├── personal.php └── admin.php └── README.md /l10n/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /node_modules 3 | /vendor 4 | /.php_cs.cache 5 | css/*.map 6 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mwalbeck/nextcloud-breeze-dark/HEAD/screenshot.png -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 4, 3 | "singleQuote": false, 4 | "printWidth": 100 5 | } 6 | -------------------------------------------------------------------------------- /img/theme-breeze-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mwalbeck/nextcloud-breeze-dark/HEAD/img/theme-breeze-dark.png -------------------------------------------------------------------------------- /l10n/an.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error" : "Error" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/fo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Goymt" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/hi_IN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "सहेजा गया" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.tabSize": 4, 4 | "git.alwaysSignOff": true 5 | } 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/other.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Other 3 | about: Everything else 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | -------------------------------------------------------------------------------- /l10n/an.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Error" : "Error" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/fo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Goymt" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/lo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error" : "ຜິດພາດ", 3 | "Save" : "ບັນທຶກ" 4 | },"pluralForm" :"nplurals=1; plural=0;" 5 | } -------------------------------------------------------------------------------- /l10n/ps.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error" : "شسیب", 3 | "Save" : "ساتل" 4 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 5 | } -------------------------------------------------------------------------------- /l10n/hi_IN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "सहेजा गया" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/kab.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error" : "Erreur", 3 | "Save" : "Sekles" 4 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 5 | } -------------------------------------------------------------------------------- /l10n/si.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error" : "දෝෂය", 3 | "Save" : "සුරකින්න" 4 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 5 | } -------------------------------------------------------------------------------- /l10n/ta.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error" : "வழு", 3 | "Save" : "சேமிக்க " 4 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 5 | } -------------------------------------------------------------------------------- /l10n/ur_PK.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error" : "ایرر", 3 | "Save" : "حفظ" 4 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 5 | } -------------------------------------------------------------------------------- /l10n/tk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error" : "ýalňyşlyk", 3 | "Save" : "Saklamak" 4 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 5 | } -------------------------------------------------------------------------------- /l10n/lo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Error" : "ຜິດພາດ", 5 | "Save" : "ບັນທຶກ" 6 | }, 7 | "nplurals=1; plural=0;"); 8 | -------------------------------------------------------------------------------- /l10n/ps.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Error" : "شسیب", 5 | "Save" : "ساتل" 6 | }, 7 | "nplurals=2; plural=(n != 1);"); 8 | -------------------------------------------------------------------------------- /l10n/kab.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Error" : "Erreur", 5 | "Save" : "Sekles" 6 | }, 7 | "nplurals=2; plural=(n != 1);"); 8 | -------------------------------------------------------------------------------- /l10n/si.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Error" : "දෝෂය", 5 | "Save" : "සුරකින්න" 6 | }, 7 | "nplurals=2; plural=(n != 1);"); 8 | -------------------------------------------------------------------------------- /l10n/ta.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Error" : "வழு", 5 | "Save" : "சேமிக்க " 6 | }, 7 | "nplurals=2; plural=(n != 1);"); 8 | -------------------------------------------------------------------------------- /l10n/ur_PK.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Error" : "ایرر", 5 | "Save" : "حفظ" 6 | }, 7 | "nplurals=2; plural=(n != 1);"); 8 | -------------------------------------------------------------------------------- /l10n/af.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Bewaar", 3 | "Error" : "Fout", 4 | "Save" : "Bewaar" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/ka.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Saved", 3 | "Error" : "Error", 4 | "Save" : "Save" 5 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 6 | } -------------------------------------------------------------------------------- /l10n/ms_MY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Disimpan", 3 | "Error" : "Ralat", 4 | "Save" : "Simpan" 5 | },"pluralForm" :"nplurals=1; plural=0;" 6 | } -------------------------------------------------------------------------------- /l10n/sq.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Ruajtur", 3 | "Error" : "Gabim", 4 | "Save" : "Ruaj" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/tk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Error" : "ýalňyşlyk", 5 | "Save" : "Saklamak" 6 | }, 7 | "nplurals=2; plural=(n != 1);"); 8 | -------------------------------------------------------------------------------- /l10n/uz.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Saved", 3 | "Error" : "Xatolik", 4 | "Save" : "Saqlash" 5 | },"pluralForm" :"nplurals=1; plural=0;" 6 | } -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | css/apps/thirdparty/_files-markdown-syntax.scss 2 | css/server-automatic.css 3 | css/server.css 4 | css/server-automatic.css.map 5 | css/server.css.map 6 | -------------------------------------------------------------------------------- /.stylelintignore: -------------------------------------------------------------------------------- 1 | css/apps/thirdparty/_files-markdown-syntax.scss 2 | css/server-automatic.css 3 | css/server.css 4 | css/server-automatic.css.map 5 | css/server.css.map 6 | -------------------------------------------------------------------------------- /l10n/az.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Saxlanıldı", 3 | "Error" : "Səhv", 4 | "Save" : "Saxla" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/ca.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardat", 3 | "Error" : "Error", 4 | "Save" : "Desar" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/hy.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Պահված", 3 | "Error" : "Սխալ", 4 | "Save" : "Պահպանել" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/km.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "បាន​រក្សាទុក", 3 | "Error" : "កំហុស", 4 | "Save" : "រក្សាទុក" 5 | },"pluralForm" :"nplurals=1; plural=0;" 6 | } -------------------------------------------------------------------------------- /l10n/mn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Хадгалах", 3 | "Error" : "Алдаа", 4 | "Save" : "Хадгалах" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/nn_NO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Lagra", 3 | "Error" : "Feil", 4 | "Save" : "Lagre" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/th.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "บันทึกแล้ว", 3 | "Error" : "ข้อผิดพลาด", 4 | "Save" : "บันทึก" 5 | },"pluralForm" :"nplurals=1; plural=0;" 6 | } -------------------------------------------------------------------------------- /l10n/eo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Konservita", 3 | "Error" : "Eraro", 4 | "Save" : "Konservi" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/et_EE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Salvestatud", 3 | "Error" : "Viga", 4 | "Save" : "Salvesta" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/ka_GE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "შენახულია", 3 | "Error" : "შეცდომა", 4 | "Save" : "შენახვა" 5 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 6 | } -------------------------------------------------------------------------------- /l10n/kn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "ಉಳಿಸಿದ", 3 | "Error" : "ತಪ್ಪಾಗಿದೆ", 4 | "Save" : "ಉಳಿಸಿ" 5 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 6 | } -------------------------------------------------------------------------------- /l10n/bn_BD.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "সংরক্ষণ করা হলো", 3 | "Error" : "সমস্যা", 4 | "Save" : "সংরক্ষণ" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/ia.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Salveguardate", 3 | "Error" : "Error", 4 | "Save" : "Salveguardar" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/lb.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Gespäichert", 3 | "Error" : "Fehler", 4 | "Save" : "Späicheren" 5 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 6 | } -------------------------------------------------------------------------------- /l10n/af.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Bewaar", 5 | "Error" : "Fout", 6 | "Save" : "Bewaar" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/ka.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Saved", 5 | "Error" : "Error", 6 | "Save" : "Save" 7 | }, 8 | "nplurals=2; plural=(n!=1);"); 9 | -------------------------------------------------------------------------------- /l10n/ms_MY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Disimpan", 5 | "Error" : "Ralat", 6 | "Save" : "Simpan" 7 | }, 8 | "nplurals=1; plural=0;"); 9 | -------------------------------------------------------------------------------- /l10n/sq.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Ruajtur", 5 | "Error" : "Gabim", 6 | "Save" : "Ruaj" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/uz.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Saved", 5 | "Error" : "Xatolik", 6 | "Save" : "Saqlash" 7 | }, 8 | "nplurals=1; plural=0;"); 9 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: mwalbeck 4 | liberapay: mwalbeck 5 | ko_fi: mwalbeck 6 | custom: "https://www.paypal.me/magnuswalbeck" 7 | -------------------------------------------------------------------------------- /l10n/az.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Saxlanıldı", 5 | "Error" : "Səhv", 6 | "Save" : "Saxla" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/ca.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardat", 5 | "Error" : "Error", 6 | "Save" : "Desar" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/hy.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Պահված", 5 | "Error" : "Սխալ", 6 | "Save" : "Պահպանել" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/is.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Vistað", 3 | "Error" : "Villa", 4 | "Save" : "Vista" 5 | },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" 6 | } -------------------------------------------------------------------------------- /l10n/km.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "បាន​រក្សាទុក", 5 | "Error" : "កំហុស", 6 | "Save" : "រក្សាទុក" 7 | }, 8 | "nplurals=1; plural=0;"); 9 | -------------------------------------------------------------------------------- /l10n/mn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Хадгалах", 5 | "Error" : "Алдаа", 6 | "Save" : "Хадгалах" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/nn_NO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Lagra", 5 | "Error" : "Feil", 6 | "Save" : "Lagre" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/th.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "บันทึกแล้ว", 5 | "Error" : "ข้อผิดพลาด", 6 | "Save" : "บันทึก" 7 | }, 8 | "nplurals=1; plural=0;"); 9 | -------------------------------------------------------------------------------- /l10n/eo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Konservita", 5 | "Error" : "Eraro", 6 | "Save" : "Konservi" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/et_EE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Salvestatud", 5 | "Error" : "Viga", 6 | "Save" : "Salvesta" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/ka_GE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "შენახულია", 5 | "Error" : "შეცდომა", 6 | "Save" : "შენახვა" 7 | }, 8 | "nplurals=2; plural=(n!=1);"); 9 | -------------------------------------------------------------------------------- /l10n/kn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "ಉಳಿಸಿದ", 5 | "Error" : "ತಪ್ಪಾಗಿದೆ", 6 | "Save" : "ಉಳಿಸಿ" 7 | }, 8 | "nplurals=2; plural=(n > 1);"); 9 | -------------------------------------------------------------------------------- /l10n/bn_BD.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "সংরক্ষণ করা হলো", 5 | "Error" : "সমস্যা", 6 | "Save" : "সংরক্ষণ" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/ia.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Salveguardate", 5 | "Error" : "Error", 6 | "Save" : "Salveguardar" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/lb.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Gespäichert", 5 | "Error" : "Fehler", 6 | "Save" : "Späicheren" 7 | }, 8 | "nplurals=2; plural=(n != 1);"); 9 | -------------------------------------------------------------------------------- /l10n/mk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Зачувано", 3 | "Error" : "Грешка", 4 | "Save" : "Зачувај" 5 | },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" 6 | } -------------------------------------------------------------------------------- /l10n/gd.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error" : "Mearachd", 3 | "Save" : "Sàbhail" 4 | },"pluralForm" :"nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;" 5 | } -------------------------------------------------------------------------------- /l10n/is.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Vistað", 5 | "Error" : "Villa", 6 | "Save" : "Vista" 7 | }, 8 | "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); 9 | -------------------------------------------------------------------------------- /l10n/lv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Saglabāts", 3 | "Error" : "Kļūda", 4 | "Save" : "Saglabāt" 5 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" 6 | } -------------------------------------------------------------------------------- /l10n/ro.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Salvat", 3 | "Error" : "Eroare", 4 | "Save" : "Salvează" 5 | },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" 6 | } -------------------------------------------------------------------------------- /l10n/es_419.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_CL.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_CO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_CR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_DO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_GT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_HN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_MX.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_NI.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_PA.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_PE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_PR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_PY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_SV.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/es_UY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "Save" : "Guardar" 5 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 6 | } -------------------------------------------------------------------------------- /l10n/he.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "נשמרה", 3 | "Error" : "שגיאה", 4 | "Save" : "שמירה" 5 | },"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" 6 | } -------------------------------------------------------------------------------- /l10n/cy_GB.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Wedi'u cadw", 3 | "Error" : "Gwall", 4 | "Save" : "Cadw" 5 | },"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" 6 | } -------------------------------------------------------------------------------- /l10n/mk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Зачувано", 5 | "Error" : "Грешка", 6 | "Save" : "Зачувај" 7 | }, 8 | "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); 9 | -------------------------------------------------------------------------------- /l10n/sr@latin.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Error" : "Error", 3 | "Save" : "Sačuvaj" 4 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 5 | } -------------------------------------------------------------------------------- /l10n/gd.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Error" : "Mearachd", 5 | "Save" : "Sàbhail" 6 | }, 7 | "nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;"); 8 | -------------------------------------------------------------------------------- /l10n/lv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Saglabāts", 5 | "Error" : "Kļūda", 6 | "Save" : "Saglabāt" 7 | }, 8 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); 9 | -------------------------------------------------------------------------------- /l10n/ro.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Salvat", 5 | "Error" : "Eroare", 6 | "Save" : "Salvează" 7 | }, 8 | "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); 9 | -------------------------------------------------------------------------------- /l10n/es_419.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_CL.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_CO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_CR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_DO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_GT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_HN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_MX.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_NI.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_PA.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_PE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_PR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_PY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_SV.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/es_UY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "Save" : "Guardar" 7 | }, 8 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 9 | -------------------------------------------------------------------------------- /l10n/he.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "נשמרה", 5 | "Error" : "שגיאה", 6 | "Save" : "שמירה" 7 | }, 8 | "nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); 9 | -------------------------------------------------------------------------------- /l10n/cy_GB.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Wedi'u cadw", 5 | "Error" : "Gwall", 6 | "Save" : "Cadw" 7 | }, 8 | "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"); 9 | -------------------------------------------------------------------------------- /l10n/sr@latin.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Error" : "Error", 5 | "Save" : "Sačuvaj" 6 | }, 7 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 8 | -------------------------------------------------------------------------------- /l10n/bs.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Spremljeno", 3 | "Error" : "Greška", 4 | "Save" : "Spremi" 5 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 6 | } -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | - Magnus Walbeck 2 | - georgeto 3 | - cyrosy 4 | - Esteban Flores 5 | - Valdnet <47037905+Valdnet@users.noreply.github.com> 6 | - untbu -------------------------------------------------------------------------------- /l10n/bs.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Spremljeno", 5 | "Error" : "Greška", 6 | "Save" : "Spremi" 7 | }, 8 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 9 | -------------------------------------------------------------------------------- /l10n/lt_LT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Įrašyta", 3 | "Error" : "Klaida", 4 | "Save" : "Įrašyti" 5 | },"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" 6 | } -------------------------------------------------------------------------------- /l10n/be.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Захавана", 3 | "Error" : "Памылка", 4 | "Save" : "Захаваць" 5 | },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" 6 | } -------------------------------------------------------------------------------- /l10n/lt_LT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Įrašyta", 5 | "Error" : "Klaida", 6 | "Save" : "Įrašyti" 7 | }, 8 | "nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); 9 | -------------------------------------------------------------------------------- /l10n/be.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Захавана", 5 | "Error" : "Памылка", 6 | "Save" : "Захаваць" 7 | }, 8 | "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); 9 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "autoload-dev": { 3 | "psr-4": { 4 | "OCP\\": "vendor/christophwurst/nextcloud/OCP", 5 | "OCA\\BreezeDark\\": "lib/" 6 | } 7 | }, 8 | "require": {}, 9 | "require-dev": { 10 | "nextcloud/coding-standard": "^0.5.0", 11 | "nextcloud/ocp": "^28" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb 4 | 5 | [o:nextcloud:p:nextcloud:r:breezedark] 6 | file_filter = translationfiles//breezedark.po 7 | source_file = translationfiles/templates/breezedark.pot 8 | source_lang = en 9 | type = PO 10 | 11 | -------------------------------------------------------------------------------- /.php_cs.dist: -------------------------------------------------------------------------------- 1 | getFinder() 12 | ->ignoreVCSIgnored(true) 13 | ->notPath('build') 14 | ->notPath('l10n') 15 | ->notPath('src') 16 | ->notPath('vendor') 17 | ->in(__DIR__); 18 | return $config; 19 | -------------------------------------------------------------------------------- /l10n/pt_PT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Erro", 4 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Tema Breeze Dark para a Nextcloud, baseado no mesmo tema do KDE", 5 | "Save" : "Guardar", 6 | "Breeze Dark theme" : "Tema Breeze Dark" 7 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 8 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest a new feature you would like to see in the theme. 4 | title: "" 5 | labels: feature request 6 | assignees: "" 7 | --- 8 | 9 | **What feature would you like to see added to the theme?**: 10 | 11 | 12 | **Your setup (please complete the following information):** 13 | 14 | - Nextcloud version: [e.g. 17.0.3] 15 | -------------------------------------------------------------------------------- /css/apps/official/_retention.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Retention ---------------------------------------------------------------- */ 8 | 9 | #retention #retention-list td { 10 | border-color: var(--color-border) !important; 11 | } 12 | -------------------------------------------------------------------------------- /css/apps/official/_external-sites.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2018, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* External sites ----------------------------------------------------------- */ 8 | 9 | #external ul.icon-list .img { 10 | background-color: var(--color-main-background) !important; 11 | } 12 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_snappymail.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2023, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Radio -------------------------------------------------------------------- */ 8 | 9 | #rl-app input { 10 | background-color: var(--input-bg-clr, #fff); 11 | color: var(--input-clr, #555); 12 | } 13 | -------------------------------------------------------------------------------- /l10n/pt_PT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Erro", 6 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Tema Breeze Dark para a Nextcloud, baseado no mesmo tema do KDE", 7 | "Save" : "Guardar", 8 | "Breeze Dark theme" : "Tema Breeze Dark" 9 | }, 10 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 11 | -------------------------------------------------------------------------------- /l10n/br.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Enrollet", 3 | "Error" : "Fazi", 4 | "Save" : "Enrollañ" 5 | },"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);" 6 | } -------------------------------------------------------------------------------- /css/apps/official/_notes.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2020, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Notes -------------------------------------------------------------------- */ 8 | 9 | .app-notes .app-navigation { 10 | button.icon-confirm, 11 | button.icon-close { 12 | background-image: none !important; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /l10n/br.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Enrollet", 5 | "Error" : "Fazi", 6 | "Save" : "Enrollañ" 7 | }, 8 | "nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"); 9 | -------------------------------------------------------------------------------- /l10n/oc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Enregistrat", 3 | "Error" : "Error", 4 | "Breeze Dark" : "Breeze Dark", 5 | "Custom Styling" : "Estil personalizat", 6 | "Save" : "Enregistrar", 7 | "A Breeze Dark theme for Nextcloud." : "Un tèma Breeze Dark per Nextcloud.", 8 | "Breeze Dark theme" : "Tèma Breeze Dark", 9 | "Enable Breeze Dark theme" : "Activar lo tèma Breeze Dark" 10 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 11 | } -------------------------------------------------------------------------------- /l10n/oc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Enregistrat", 5 | "Error" : "Error", 6 | "Breeze Dark" : "Breeze Dark", 7 | "Custom Styling" : "Estil personalizat", 8 | "Save" : "Enregistrar", 9 | "A Breeze Dark theme for Nextcloud." : "Un tèma Breeze Dark per Nextcloud.", 10 | "Breeze Dark theme" : "Tèma Breeze Dark", 11 | "Enable Breeze Dark theme" : "Activar lo tèma Breeze Dark" 12 | }, 13 | "nplurals=2; plural=(n > 1);"); 14 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: pull_request 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v2 10 | - name: Install dependencies 11 | run: npm install 12 | - name: Run prettier 13 | if: ${{ always() }} 14 | run: npm run prettier 15 | # - name: Run stylelint 16 | # continue-on-error: true 17 | # if: ${{ always() }} 18 | # run: npm run stylelint 19 | -------------------------------------------------------------------------------- /css/apps/core/_firstrunwizard.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2021, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* First Run Wizard --------------------------------------------------------- */ 8 | 9 | #firstrunwizard button.primary { 10 | background-color: var(--color-primary-element) !important; 11 | border-color: var(--color-primary-element) !important; 12 | color: var(--color-primary-text) !important; 13 | } 14 | -------------------------------------------------------------------------------- /css/apps/core/_activity.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Activity ----------------------------------------------------------------- */ 8 | 9 | #no_more_activities, 10 | .activity-icon { 11 | opacity: 0.7; 12 | } 13 | 14 | .activitysubject strong.systemtag { 15 | background-color: var(--color-main-background) !important; 16 | border: 1px solid var(--color-border); 17 | } 18 | -------------------------------------------------------------------------------- /l10n/ja.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "保存しました。", 3 | "Error" : "エラー", 4 | "Breeze Dark" : "Breeze Dark", 5 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "ダークテーマはKDEプロジェクトのブリーズダークです。変更反映のためページをリフレッシュして下さい。", 6 | "Save" : "保存", 7 | "A Breeze Dark theme for Nextcloud." : "NextcloudのBreeze Darkテーマ。", 8 | "Breeze Dark theme" : "Breeze Dark テーマ", 9 | "Enable Breeze Dark theme" : "Breeze Darkテーマを有効化" 10 | },"pluralForm" :"nplurals=1; plural=0;" 11 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/styling_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Styling request 3 | about: Suggest a new app to be styled. Please check the wiki for a list of already 4 | styled apps. If an app is on the list please open up a bug report with the issue. 5 | title: "" 6 | labels: styling request 7 | assignees: "" 8 | --- 9 | 10 | **Which app would you like to have styled**: 11 | The name of the app and a link to the Nextcloud app store 12 | 13 | **Your setup (please complete the following information):** 14 | 15 | - Nextcloud version: [e.g. 17.0.3] 16 | -------------------------------------------------------------------------------- /css/apps/official/_announcement-center.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Announcement Center ------------------------------------------------------ */ 8 | 9 | .app-announcementcenter { 10 | #announcement_submit_msg.success { 11 | background-color: var(--color-success) !important; 12 | } 13 | 14 | .section > span { 15 | color: var(--color-text-maxcontrast); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /l10n/ja.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "保存しました。", 5 | "Error" : "エラー", 6 | "Breeze Dark" : "Breeze Dark", 7 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "ダークテーマはKDEプロジェクトのブリーズダークです。変更反映のためページをリフレッシュして下さい。", 8 | "Save" : "保存", 9 | "A Breeze Dark theme for Nextcloud." : "NextcloudのBreeze Darkテーマ。", 10 | "Breeze Dark theme" : "Breeze Dark テーマ", 11 | "Enable Breeze Dark theme" : "Breeze Darkテーマを有効化" 12 | }, 13 | "nplurals=1; plural=0;"); 14 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations. 3 | // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp 4 | 5 | // List of extensions which should be recommended for users of this workspace. 6 | "recommendations": [ 7 | "esbenp.prettier-vscode", 8 | "stylelint.vscode-stylelint" 9 | ], 10 | // List of extensions recommended by VS Code that should not be recommended for users of this workspace. 11 | "unwantedRecommendations": [] 12 | } 13 | -------------------------------------------------------------------------------- /css/apps/official/_richdocuments.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2022, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Nextcloud Office --------------------------------------------------------- */ 8 | 9 | #richdocuments-wrapper #cool-loading-overlay .empty-content__title { 10 | color: var(--color-background-darker); 11 | 12 | p { 13 | color: var(--color-background-dark); 14 | } 15 | } 16 | 17 | // TODO: Fix theming on popup for inserting images from Nextcloud; 18 | // TODO: Fix Nextcloud sidebar 19 | -------------------------------------------------------------------------------- /.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["stylelint-config-sass-guidelines", "stylelint-prettier/recommended"], 3 | "rules": { 4 | "prettier/prettier": [ 5 | true, 6 | { 7 | "tabWidth": 4, 8 | "singleQuote": false, 9 | "printWidth": 100 10 | } 11 | ], 12 | "string-quotes": "double", 13 | "max-nesting-depth": 2, 14 | "selector-no-qualifying-type": null, 15 | "selector-max-compound-selectors": null, 16 | "selector-class-pattern": null, 17 | "selector-max-id": null 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /css/settings.css: -------------------------------------------------------------------------------- 1 | .preview-list { 2 | display: flex; 3 | flex-direction: column; 4 | max-width: 800px; 5 | } 6 | 7 | .preview { 8 | display: flex; 9 | justify-content: flex-start; 10 | margin-top: 3em; 11 | position: relative; 12 | } 13 | 14 | .preview .preview-image { 15 | background-position: top left; 16 | background-repeat: no-repeat; 17 | background-size: cover; 18 | border-radius: var(--border-radius); 19 | flex-basis: 200px; 20 | flex-shrink: 0; 21 | margin-right: 1em; 22 | } 23 | 24 | .preview .preview-description { 25 | display: flex; 26 | flex-direction: column; 27 | } 28 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_electronicsignatures.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2021, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Electronic Signatures ---------------------------------------------------- */ 8 | 9 | // Overlay colour when the modal use to sent a signing request is loading 10 | .modal-mask .loader { 11 | background-color: rgba(0, 0, 0, 0.3) !important; 12 | } 13 | 14 | /* Icons -------------------------------------------------------------------- */ 15 | .custom-icon-signature { 16 | color: var(--color-icon) !important; 17 | } 18 | -------------------------------------------------------------------------------- /css/apps/core/_notifications.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Notifications ------------------------------------------------------------ */ 8 | 9 | .toastify.toast { 10 | border: 1px solid var(--color-border); 11 | box-shadow: none; 12 | } 13 | 14 | .notification-container.menu { 15 | li:hover { 16 | background-color: inherit; 17 | } 18 | 19 | .notification:hover, 20 | .dismiss-all:hover { 21 | background-color: var(--color-background-hover); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /css/apps/core/_photos.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2023, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Notifications ------------------------------------------------------------ */ 8 | 9 | .app-photos#content-vue { 10 | .files-list-viewer__placeholder { 11 | background: var(--color-background-hover) !important; 12 | } 13 | 14 | .file-container { 15 | background: var(--color-background-hover) !important; 16 | } 17 | 18 | .file-container .selection-checkbox .checkbox-radio-switch__label::after { 19 | background: var(--color-background-darker); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Listen for Xdebug", 9 | "type": "php", 10 | "request": "launch", 11 | "port": 9003, 12 | "pathMappings": { 13 | "/var/www/html/lib/public": "${workspaceFolder}/vendor/nextcloud/ocp/OCP", 14 | "/var/www/html/custom_apps/breezedark": "${workspaceFolder}/../breezedark" 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /l10n/vi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Đã lưu", 3 | "Error" : "Lỗi", 4 | "Breeze Dark" : "Breeze Dark", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Chủ đề Breeze Dark cho Nextcloud, dựa trên chủ đề bởi KDE", 6 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Một chủ đề tối dựa trên Breeze Dark bởi dự án KDE. Hãy tải lại trang để áp dụng thay đổi.", 7 | "Save" : "Lưu", 8 | "A Breeze Dark theme for Nextcloud." : "Chủ đề Breeze Dark cho Nextcloud.", 9 | "Breeze Dark theme" : "Chủ đề Breeze Dark", 10 | "Enable Breeze Dark theme" : "Bật chủ đề Breeze Dark" 11 | },"pluralForm" :"nplurals=1; plural=0;" 12 | } -------------------------------------------------------------------------------- /l10n/vi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Đã lưu", 5 | "Error" : "Lỗi", 6 | "Breeze Dark" : "Breeze Dark", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Chủ đề Breeze Dark cho Nextcloud, dựa trên chủ đề bởi KDE", 8 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Một chủ đề tối dựa trên Breeze Dark bởi dự án KDE. Hãy tải lại trang để áp dụng thay đổi.", 9 | "Save" : "Lưu", 10 | "A Breeze Dark theme for Nextcloud." : "Chủ đề Breeze Dark cho Nextcloud.", 11 | "Breeze Dark theme" : "Chủ đề Breeze Dark", 12 | "Enable Breeze Dark theme" : "Bật chủ đề Breeze Dark" 13 | }, 14 | "nplurals=1; plural=0;"); 15 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_terms-of-service.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2020, Magnus Walbeck (mw@mwalbeck.org) 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Terms of service --------------------------------------------------------- */ 8 | 9 | #terms_of_service_confirm .v--modal-overlay .v--modal-background-click { 10 | background-color: rgba(0, 0, 0, 0.5); 11 | 12 | .v--modal.v--modal-box { 13 | background-color: var(--color-main-background); 14 | border: 1px solid var(--color-border); 15 | box-shadow: none; 16 | padding: 1em; 17 | 18 | #tos-overlay button.primary { 19 | margin: 1em auto; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_bbb.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2020, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* BigBlueButton ------------------------------------------------------------ */ 8 | 9 | #bbb-react-root th { 10 | border-bottom-color: var(--color-border) !important; 11 | } 12 | 13 | #bbb-warning { 14 | background-color: var(--color-warning) !important; 15 | } 16 | 17 | .bbb-selection { 18 | background-color: var(--color-main-background) !important; 19 | } 20 | 21 | /* Icons -------------------------------------------------------------------- */ 22 | 23 | .fileActionsMenu img[src$="/bbb/img/app-dark.svg"] { 24 | filter: invert(95%); 25 | } 26 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_quicknotes.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2018, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Quick Notes -------------------------------------------------------------- */ 8 | 9 | .app-quicknotes #app-navigation { 10 | #new-note-fixed { 11 | background-color: var(--color-main-background); 12 | } 13 | 14 | #colors-folder { 15 | .circle-toolbar.any-color { 16 | background-color: var(--color-background-alternate); 17 | } 18 | } 19 | } 20 | 21 | .app-quicknotes .quicknote { 22 | box-shadow: none; 23 | color: #000; 24 | 25 | &:hover { 26 | box-shadow: none; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_gpxpod.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2021, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* GpxPod ------------------------------------------------------------------- */ 8 | 9 | .app-gpxpod { 10 | #stattable td.statnamecol { 11 | background-color: unset; 12 | } 13 | 14 | .popuptable tr:nth-child(2n + 1) { 15 | background-color: var(--color-background-darker); 16 | } 17 | 18 | .popuptable tr:hover { 19 | background-color: var(--color-background-hover); 20 | } 21 | } 22 | 23 | /* Icons -------------------------------------------------------------------- */ 24 | 25 | .icon-gpxpod-black { 26 | filter: invert(95%); 27 | } 28 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_user-account-deletion.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* User account deletion ---------------------------------------------------- */ 8 | 9 | #delete-account-settings .warnings { 10 | color: var(--color-error); 11 | } 12 | 13 | button#deleteaccount { 14 | border-color: var(--color-error); 15 | 16 | &:hover:not(:disabled):not(.primary):not(#quota) { 17 | background-color: var(--color-error); 18 | border-color: var(--color-error); 19 | } 20 | 21 | &:disabled { 22 | background-color: var(--color-background-alternate); 23 | border-color: var(--color-border); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /l10n/zh_CN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "已保存", 3 | "Error" : "错误", 4 | "Breeze Dark" : "Breeze Dark ", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Nextcloud 的 Breeze Dark 主题,基于 KDE 主题", 6 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "基于 KDE 项目 Breeze Dark 的深色主题。请刷新页面以使更改生效", 7 | "Custom Styling" : "自定义样式", 8 | "Insert custom styling here …" : "在此处插入自定义样式 …", 9 | "Save" : "保存", 10 | "A Breeze Dark theme for Nextcloud." : "Nextcloud 的 Breeze Dark 主题", 11 | "Breeze Dark theme" : "Breeze Dark 主题", 12 | "Enable Breeze Dark theme" : "启用 Breeze Dark 主题", 13 | "Enable Breeze Dark automated activation by clients system settings" : "允许通过客户端系统设置自动激活 Breeze 深色主题" 14 | },"pluralForm" :"nplurals=1; plural=0;" 15 | } -------------------------------------------------------------------------------- /css/apps/official/_contacts.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Contacts ----------------------------------------------------------------- */ 8 | 9 | .app-contacts .app-content-list-item { 10 | &:hover { 11 | background-color: var(--color-background-hover); 12 | } 13 | 14 | &:active, 15 | &.active, 16 | &:focus { 17 | background-color: var(--color-primary); 18 | color: var(--color-primary-text); 19 | } 20 | } 21 | 22 | .app-contacts .contact-header__infos input { 23 | background-color: var(--color-main-background) !important; 24 | 25 | &:active, 26 | &:focus { 27 | background-color: var(--color-background-darker) !important; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /l10n/zh_CN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "已保存", 5 | "Error" : "错误", 6 | "Breeze Dark" : "Breeze Dark ", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Nextcloud 的 Breeze Dark 主题,基于 KDE 主题", 8 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "基于 KDE 项目 Breeze Dark 的深色主题。请刷新页面以使更改生效", 9 | "Custom Styling" : "自定义样式", 10 | "Insert custom styling here …" : "在此处插入自定义样式 …", 11 | "Save" : "保存", 12 | "A Breeze Dark theme for Nextcloud." : "Nextcloud 的 Breeze Dark 主题", 13 | "Breeze Dark theme" : "Breeze Dark 主题", 14 | "Enable Breeze Dark theme" : "启用 Breeze Dark 主题", 15 | "Enable Breeze Dark automated activation by clients system settings" : "允许通过客户端系统设置自动激活 Breeze 深色主题" 16 | }, 17 | "nplurals=1; plural=0;"); 18 | -------------------------------------------------------------------------------- /l10n/fi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Tallennettu", 3 | "Error" : "Virhe", 4 | "Breeze Dark" : "Breeze Dark", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Breeze Dark-teema Nextcloudille. Perustuu KDE:n teemaan.", 6 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "KDE-projektin Breeze Dark-teemaan perustuva teema. Päivitä sivu, jotta muutokset tulevat voimaan.", 7 | "Custom Styling" : "Mukautettu tyyli", 8 | "Insert custom styling here …" : "Syötä mukautettu tyyli tähän...", 9 | "Save" : "Tallenna", 10 | "A Breeze Dark theme for Nextcloud." : "Breeze Dark-teema Nextcloudille", 11 | "Breeze Dark theme" : "Breeze Dark-teema", 12 | "Enable Breeze Dark theme" : "Ota Breeze Dark-teema käyttöön" 13 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 14 | } -------------------------------------------------------------------------------- /l10n/sv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Sparad", 3 | "Error" : "Fel", 4 | "Breeze Dark" : "Breeze Dark", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Breeze Dark-tema för Nextcloud, baserat på temat från KDE.", 6 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Ett mörkt tema baserat på Breeze Dark av KDE-projektet. Vänligen ladda om sidan för att ändringarna skall träda i kraft.", 7 | "Custom Styling" : "Anpassad stil", 8 | "Insert custom styling here …" : "Infoga anpassad stil här …", 9 | "Save" : "Spara", 10 | "A Breeze Dark theme for Nextcloud." : "Ett Breeze Dark-tema för Nextcloud.", 11 | "Breeze Dark theme" : "Breeze Dark-tema", 12 | "Enable Breeze Dark theme" : "Aktivera Breeze Dark-tema" 13 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 14 | } -------------------------------------------------------------------------------- /css/apps/official/_circles.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Circles ------------------------------------------------------------------ */ 8 | 9 | .app-contacts { 10 | .checkbox-radio-switch__icon { 11 | color: var(--color-primary-text) !important; 12 | 13 | &.checkbox-marked-icon { 14 | color: var(--color-primary-element) !important; 15 | } 16 | } 17 | 18 | .checkbox-radio-switch:not(.checkbox-radio-switch--disabled) { 19 | .checkbox-radio-switch__input:hover + .checkbox-radio-switch__label, 20 | .checkbox-radio-switch__input:focus + .checkbox-radio-switch__label { 21 | background-color: var(--color-background-hover) !important; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /l10n/ast.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardóse", 3 | "Error" : "Error", 4 | "Breeze Dark" : "Breeze Dark", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "L'estilu Breeze Dark pa Nextcloud, basáu nel estilu de KDE", 6 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Un estilu escuru que se basa nel Breeze Dark del proyeutu KDE. Anueva la páxina pa que los cambeos faigan efeutu.", 7 | "Enable Breeze Dark theme for the login page" : "Activar l'estilu Breeze Dark na páxina d'aniciu de la sesión", 8 | "Save" : "Guardar", 9 | "A Breeze Dark theme for Nextcloud." : "L'estilu Breeze Dark pa Nextcloud.", 10 | "Breeze Dark theme" : "Estilu Breeze Dark", 11 | "Enable Breeze Dark theme" : "Activar l'estilu Breeze Dark" 12 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 13 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "lint:scss", 9 | "problemMatcher": [], 10 | "label": "npm: lint:scss", 11 | "detail": "stylelint css/" 12 | }, 13 | { 14 | "type": "npm", 15 | "script": "prettier", 16 | "problemMatcher": [], 17 | "label": "npm: prettier", 18 | "detail": "prettier -c css/ js/" 19 | }, 20 | { 21 | "type": "npm", 22 | "script": "install", 23 | "problemMatcher": [], 24 | "label": "npm: install", 25 | "detail": "install dependencies from package" 26 | } 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /l10n/ko.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "저장됨", 3 | "Error" : "오류", 4 | "Breeze Dark" : "Breeze Dark", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "KDE의 테마를 기반으로 한 Nextcloud의 Breeze Dark 테마", 6 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "KDE 프로젝트의 Breeze Dark를 기반으로 한 Dark 테마입니다. 변경 내용을 적용하려면 페이지를 새로 고치십시오.", 7 | "Custom Styling" : "사용자 지정 스타일", 8 | "Insert custom styling here …" : "여기에 사용자 지정 스타일 삽입 ...", 9 | "Save" : "저장", 10 | "A Breeze Dark theme for Nextcloud." : "Nextcloud의 Breeze Dark 테마", 11 | "Breeze Dark theme" : "Breeze Dark 테마", 12 | "Enable Breeze Dark theme" : "Breeze Dark 테마 활성화", 13 | "Enable Breeze Dark automated activation by clients system settings" : "클라이언트 시스템 설정에 의한 Breeze Dark 자동 활성화 사용" 14 | },"pluralForm" :"nplurals=1; plural=0;" 15 | } -------------------------------------------------------------------------------- /l10n/fi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Tallennettu", 5 | "Error" : "Virhe", 6 | "Breeze Dark" : "Breeze Dark", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Breeze Dark-teema Nextcloudille. Perustuu KDE:n teemaan.", 8 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "KDE-projektin Breeze Dark-teemaan perustuva teema. Päivitä sivu, jotta muutokset tulevat voimaan.", 9 | "Custom Styling" : "Mukautettu tyyli", 10 | "Insert custom styling here …" : "Syötä mukautettu tyyli tähän...", 11 | "Save" : "Tallenna", 12 | "A Breeze Dark theme for Nextcloud." : "Breeze Dark-teema Nextcloudille", 13 | "Breeze Dark theme" : "Breeze Dark-teema", 14 | "Enable Breeze Dark theme" : "Ota Breeze Dark-teema käyttöön" 15 | }, 16 | "nplurals=2; plural=(n != 1);"); 17 | -------------------------------------------------------------------------------- /l10n/sv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Sparad", 5 | "Error" : "Fel", 6 | "Breeze Dark" : "Breeze Dark", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Breeze Dark-tema för Nextcloud, baserat på temat från KDE.", 8 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Ett mörkt tema baserat på Breeze Dark av KDE-projektet. Vänligen ladda om sidan för att ändringarna skall träda i kraft.", 9 | "Custom Styling" : "Anpassad stil", 10 | "Insert custom styling here …" : "Infoga anpassad stil här …", 11 | "Save" : "Spara", 12 | "A Breeze Dark theme for Nextcloud." : "Ett Breeze Dark-tema för Nextcloud.", 13 | "Breeze Dark theme" : "Breeze Dark-tema", 14 | "Enable Breeze Dark theme" : "Aktivera Breeze Dark-tema" 15 | }, 16 | "nplurals=2; plural=(n != 1);"); 17 | -------------------------------------------------------------------------------- /l10n/ast.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardóse", 5 | "Error" : "Error", 6 | "Breeze Dark" : "Breeze Dark", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "L'estilu Breeze Dark pa Nextcloud, basáu nel estilu de KDE", 8 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Un estilu escuru que se basa nel Breeze Dark del proyeutu KDE. Anueva la páxina pa que los cambeos faigan efeutu.", 9 | "Enable Breeze Dark theme for the login page" : "Activar l'estilu Breeze Dark na páxina d'aniciu de la sesión", 10 | "Save" : "Guardar", 11 | "A Breeze Dark theme for Nextcloud." : "L'estilu Breeze Dark pa Nextcloud.", 12 | "Breeze Dark theme" : "Estilu Breeze Dark", 13 | "Enable Breeze Dark theme" : "Activar l'estilu Breeze Dark" 14 | }, 15 | "nplurals=2; plural=(n != 1);"); 16 | -------------------------------------------------------------------------------- /l10n/ko.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "저장됨", 5 | "Error" : "오류", 6 | "Breeze Dark" : "Breeze Dark", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "KDE의 테마를 기반으로 한 Nextcloud의 Breeze Dark 테마", 8 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "KDE 프로젝트의 Breeze Dark를 기반으로 한 Dark 테마입니다. 변경 내용을 적용하려면 페이지를 새로 고치십시오.", 9 | "Custom Styling" : "사용자 지정 스타일", 10 | "Insert custom styling here …" : "여기에 사용자 지정 스타일 삽입 ...", 11 | "Save" : "저장", 12 | "A Breeze Dark theme for Nextcloud." : "Nextcloud의 Breeze Dark 테마", 13 | "Breeze Dark theme" : "Breeze Dark 테마", 14 | "Enable Breeze Dark theme" : "Breeze Dark 테마 활성화", 15 | "Enable Breeze Dark automated activation by clients system settings" : "클라이언트 시스템 설정에 의한 Breeze Dark 자동 활성화 사용" 16 | }, 17 | "nplurals=1; plural=0;"); 18 | -------------------------------------------------------------------------------- /l10n/sl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Shranjeno", 3 | "Error" : "Napaka", 4 | "Breeze Dark" : "Temna tema Breeze", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Temna tema Breeze za Nextcloud, zasnovana po predlogi teme KDE.", 6 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Temna tema, zasnovana na temi Breeze Dark, projekta KDE. Za uveljavitev sprememb je treba stran osvežiti.", 7 | "Custom Styling" : "Slog po meri", 8 | "Insert custom styling here …" : "Vpišite slog po meri ...", 9 | "Save" : "Shrani", 10 | "A Breeze Dark theme for Nextcloud." : "Temna tema Breeze za Nextcloud", 11 | "Breeze Dark theme" : "Temna tema Breeze", 12 | "Enable Breeze Dark theme" : "Omogoči temno temo Breeze" 13 | },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" 14 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "breezedark", 3 | "version": "1.0.0", 4 | "description": "Breeze Dark theme for Nextcloud", 5 | "author": "Magnus Walbeck", 6 | "devDependencies": { 7 | "prettier": "^2.5.1", 8 | "stylelint": "^13.13.1", 9 | "stylelint-config-prettier": "^8.0.2", 10 | "stylelint-config-sass-guidelines": "^7.1.0", 11 | "stylelint-prettier": "^1.2.0", 12 | "sass": "^1.54.9" 13 | }, 14 | "scripts": { 15 | "watch": "sass --poll --watch css/server.scss:css/server.css css/server-automatic.scss:css/server-automatic.css", 16 | "build": "sass css/server.scss:css/server.css css/server-automatic.scss:css/server-automatic.css", 17 | "prettier": "prettier --check css js", 18 | "prettier:fix": "prettier --write css js", 19 | "stylelint": "stylelint css", 20 | "stylelint:fix": "stylelint css --fix" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /l10n/sl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Shranjeno", 5 | "Error" : "Napaka", 6 | "Breeze Dark" : "Temna tema Breeze", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Temna tema Breeze za Nextcloud, zasnovana po predlogi teme KDE.", 8 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Temna tema, zasnovana na temi Breeze Dark, projekta KDE. Za uveljavitev sprememb je treba stran osvežiti.", 9 | "Custom Styling" : "Slog po meri", 10 | "Insert custom styling here …" : "Vpišite slog po meri ...", 11 | "Save" : "Shrani", 12 | "A Breeze Dark theme for Nextcloud." : "Temna tema Breeze za Nextcloud", 13 | "Breeze Dark theme" : "Temna tema Breeze", 14 | "Enable Breeze Dark theme" : "Omogoči temno temo Breeze" 15 | }, 16 | "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); 17 | -------------------------------------------------------------------------------- /css/apps/official/_spreed.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2020, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Spreed ------------------------------------------------------------------- */ 8 | 9 | .app-talk, 10 | .talkChatTab { 11 | .file-preview:hover, 12 | .file-preview:focus { 13 | background-color: inherit !important; 14 | } 15 | } 16 | 17 | .app-talk .app-settings .app-settings-section:last-child button { 18 | border: 1px solid var(--color-border); 19 | 20 | &:hover { 21 | border: 1px solid var(--color-primary-element); 22 | } 23 | } 24 | 25 | .messages .message { 26 | .message-buttons-bar { 27 | border: 1px solid var(--color-border); 28 | box-shadow: unset; 29 | } 30 | 31 | .reaction-button__has-reacted, 32 | .reaction-button:hover { 33 | background-color: var(--color-background-hover); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_phonetrack.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2021, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Phonetrack --------------------------------------------------------------- */ 8 | 9 | .app-phonetrack { 10 | hr { 11 | background-color: var(--color-border); 12 | } 13 | 14 | .dropdown-content { 15 | border: 1px solid var(--color-border); 16 | filter: unset; 17 | } 18 | 19 | .session { 20 | border-color: var(--color-border); 21 | } 22 | 23 | button, 24 | .leaflet-control-measure { 25 | background-color: var(--color-main-background); 26 | } 27 | 28 | .leaflet-control-measure h3, 29 | .leaflet-measure-resultpopup h3 { 30 | border-bottom-color: var(--color-border); 31 | } 32 | 33 | .toplink:link, 34 | .toplink:visited { 35 | color: var(--color-text-link); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: For any issues related to the theme in general, or styling issues with already 4 | styled apps. Have a look at the wiki for a list of styled apps. 5 | title: "" 6 | labels: bug 7 | assignees: "" 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 16 | 1. Go to '...' 17 | 2. Click on '...' 18 | 3. Scroll down to '...' 19 | 4. See error 20 | 21 | **Expected behavior** 22 | A clear and concise description of what you expected to happen. 23 | 24 | **Screenshots** 25 | If applicable, add screenshots to help explain your problem. 26 | 27 | **Setup (please complete the following information):** 28 | 29 | - Nextcloud version: [e.g. 17.0.3] 30 | - Theme version: [e.g. 17.0.6] 31 | - Browser and browser version: [e.g. Firefox 70, Chrome 72] 32 | 33 | **Additional context** 34 | Add any other context about the problem here. 35 | -------------------------------------------------------------------------------- /l10n/hr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Spremljeno", 3 | "Error" : "Pogreška", 4 | "Breeze Dark" : "Breeze Dark", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Tema Breeze Dark za Nextcloud, temeljena na temi KDE-a", 6 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Tamna tema temeljena na temi Breeze Dark KDE Projecta. Osvježite stranicu za prikaz promjena.", 7 | "Custom Styling" : "Prilagođeni stil", 8 | "Insert custom styling here …" : "Umetni prilagođeni stil ovdje…", 9 | "Save" : "Spremi", 10 | "A Breeze Dark theme for Nextcloud." : "Tema Breeze Dark za Nextcloud.", 11 | "Breeze Dark theme" : "Tema Breeze Dark", 12 | "Enable Breeze Dark theme" : "Omogući temu Breeze Dark", 13 | "Enable Breeze Dark automated activation by clients system settings" : "Omogućite automatsku aktivaciju za Breeze Dark u postavkama sustava klijenta" 14 | },"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/it.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Salvato", 3 | "Error" : "Errore", 4 | "Breeze Dark" : "Brezza scuro", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Tema Brezza scuro per Nextcloud, basato sul tema di KDE", 6 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Un tema scuro basato su Brezza scuro del progetto KDE. Ricarica la pagina per applicare le modifiche.", 7 | "Custom Styling" : "Stile personalizzato", 8 | "Insert custom styling here …" : "Inserisci lo stile personalizzato qui…", 9 | "Save" : "Salva", 10 | "A Breeze Dark theme for Nextcloud." : "Un tema Brezza scuro per Nextcloud.", 11 | "Breeze Dark theme" : "Tema Brezza scuro", 12 | "Enable Breeze Dark theme" : "Attiva tema Brezza scuro", 13 | "Enable Breeze Dark automated activation by clients system settings" : "Abilita l'attivazione automatica di Brezza scuro in base alle impostazioni di sistema dei client" 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /css/apps/thirdparty/_bookmarks.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Bookmarks ---------------------------------------------------------------- */ 8 | 9 | .app-bookmarks #app-content { 10 | .folder--gridview, 11 | .bookmark--gridview, 12 | .bookmarkslist--gridview > .create-folder, 13 | .bookmarkslist--gridview > .create-bookmark { 14 | background: var(--color-main-background); 15 | box-shadow: none; 16 | } 17 | 18 | .bookmark--gridview .bookmark__checkbox { 19 | background-color: var(--color-main-background); 20 | 21 | input.checkbox + label::before { 22 | margin: 0 3px 3px; 23 | } 24 | } 25 | 26 | .bookmarkslist > :first-child:not(.bookmarkslist__loading):not(.bookmarkslist__empty).active { 27 | border-top-color: var(--color-primary-element); 28 | } 29 | 30 | .breadcrumbs .breadcrumbs__path a { 31 | color: var(--color-main-text); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /l10n/hr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Spremljeno", 5 | "Error" : "Pogreška", 6 | "Breeze Dark" : "Breeze Dark", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Tema Breeze Dark za Nextcloud, temeljena na temi KDE-a", 8 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Tamna tema temeljena na temi Breeze Dark KDE Projecta. Osvježite stranicu za prikaz promjena.", 9 | "Custom Styling" : "Prilagođeni stil", 10 | "Insert custom styling here …" : "Umetni prilagođeni stil ovdje…", 11 | "Save" : "Spremi", 12 | "A Breeze Dark theme for Nextcloud." : "Tema Breeze Dark za Nextcloud.", 13 | "Breeze Dark theme" : "Tema Breeze Dark", 14 | "Enable Breeze Dark theme" : "Omogući temu Breeze Dark", 15 | "Enable Breeze Dark automated activation by clients system settings" : "Omogućite automatsku aktivaciju za Breeze Dark u postavkama sustava klijenta" 16 | }, 17 | "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/it.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Salvato", 5 | "Error" : "Errore", 6 | "Breeze Dark" : "Brezza scuro", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Tema Brezza scuro per Nextcloud, basato sul tema di KDE", 8 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Un tema scuro basato su Brezza scuro del progetto KDE. Ricarica la pagina per applicare le modifiche.", 9 | "Custom Styling" : "Stile personalizzato", 10 | "Insert custom styling here …" : "Inserisci lo stile personalizzato qui…", 11 | "Save" : "Salva", 12 | "A Breeze Dark theme for Nextcloud." : "Un tema Brezza scuro per Nextcloud.", 13 | "Breeze Dark theme" : "Tema Brezza scuro", 14 | "Enable Breeze Dark theme" : "Attiva tema Brezza scuro", 15 | "Enable Breeze Dark automated activation by clients system settings" : "Abilita l'attivazione automatica di Brezza scuro in base alle impostazioni di sistema dei client" 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /css/apps/official/_forms.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2020, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Forms -------------------------------------------------------------------- */ 8 | 9 | .app-forms { 10 | input:not([type="range"]):not([type="button"]):not([type="submit"]) { 11 | background-color: var(--color-main-background); 12 | } 13 | 14 | .question-summary__statistic li meter { 15 | background: var(--color-loading-dark) !important; 16 | } 17 | 18 | .response-actions__radio__item { 19 | border: 1px solid var(--color-border) !important; 20 | } 21 | 22 | .response-actions__radio__item--active { 23 | border-color: var(--color-primary-element) !important; 24 | } 25 | 26 | .action-item__menutoggle--primary { 27 | background-color: var(--color-main-background) !important; 28 | border: 1px solid var(--color-border) !important; 29 | 30 | &:hover, 31 | &:active, 32 | &:focus { 33 | border-color: var(--color-primary-element) !important; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_cookbook.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2020, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Cookbook ----------------------------------------------------------------- */ 8 | 9 | .app-cookbook #app-navigation { 10 | .download .action-input { 11 | opacity: 1; 12 | } 13 | 14 | #app-settings { 15 | .action-button { 16 | opacity: 1; 17 | } 18 | } 19 | } 20 | 21 | .app-cookbook #app-content { 22 | ul li a { 23 | box-shadow: inset 0 0 0 1px var(--color-border); 24 | color: var(--color-main-text); 25 | 26 | &:hover, 27 | &:focus, 28 | &:active { 29 | box-shadow: inset 0 0 0 1px var(--color-primary-element); 30 | } 31 | } 32 | 33 | .times .time h4 { 34 | background-color: var(--color-background-darker); 35 | } 36 | 37 | section { 38 | h3 { 39 | font-weight: 600; 40 | } 41 | 42 | main .instructions li::before { 43 | background-color: var(--color-background-darker); 44 | } 45 | } 46 | 47 | button > span[class^="icon-"] { 48 | opacity: 1; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_phone-sync.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Phone Sync --------------------------------------------------------------- */ 8 | 9 | .app-ocsms #app-navigation { 10 | border-left: unset; 11 | 12 | .ocsms-plname { 13 | color: var(--color-main-text); 14 | } 15 | 16 | #app-mailbox-peers li { 17 | border-top: 1px solid var(--color-border); 18 | 19 | &:hover { 20 | background-color: var(--color-background-hover); 21 | } 22 | 23 | &:hover a { 24 | background: unset; 25 | } 26 | } 27 | } 28 | 29 | .app-ocsms #app-content { 30 | #app-content-header { 31 | box-shadow: unset; 32 | } 33 | 34 | .msg-recv { 35 | background-color: var(--color-background-darker); 36 | border-color: var(--color-border); 37 | box-shadow: none; 38 | } 39 | 40 | .msg-sent { 41 | background-color: var(--color-background-darker); 42 | border-color: var(--color-success); 43 | box-shadow: none; 44 | } 45 | 46 | .msg-date { 47 | color: var(--color-text-maxcontrast); 48 | opacity: 1; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /l10n/sc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Sarvadu", 3 | "Error" : "Errore", 4 | "Breeze Dark" : "Breeze Dark", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Tema Breeze Dark pro Nextcloud, basadu subra de su tema de KDE", 6 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Tema iscuru basadu subra de Breeze Dark dae su progetu KDE. Atualiza sa pàgina pro chi is modìficas tèngiant efetu.", 7 | "Enforce Breeze Dark theme use globally" : "Fortza s'impreu globale de su tema Breeze Dark", 8 | "Enable Breeze Dark theme automated activation by the clients' system settings by default" : "Permite s'ativatzione in automàticu de su tema Breeze Dark dae sa cunfiguratzione de sistema predefinida de is clientes", 9 | "Enable Breeze Dark theme for the login page" : "Ativa su tema Breeze Dark pro sa pàgina de atzessu", 10 | "Custom Styling" : "Istile personalizadu", 11 | "Insert custom styling here …" : "Inserta s'istile personalizadu inoghe...", 12 | "Save" : "Sarva", 13 | "A Breeze Dark theme for Nextcloud." : "Tema Breeze Dark pro Nextcloud.", 14 | "Breeze Dark theme" : "Tema Breeze Dark", 15 | "Enable Breeze Dark theme" : "Ativa su tema Breeze Dark" 16 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 17 | } -------------------------------------------------------------------------------- /l10n/sc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Sarvadu", 5 | "Error" : "Errore", 6 | "Breeze Dark" : "Breeze Dark", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "Tema Breeze Dark pro Nextcloud, basadu subra de su tema de KDE", 8 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "Tema iscuru basadu subra de Breeze Dark dae su progetu KDE. Atualiza sa pàgina pro chi is modìficas tèngiant efetu.", 9 | "Enforce Breeze Dark theme use globally" : "Fortza s'impreu globale de su tema Breeze Dark", 10 | "Enable Breeze Dark theme automated activation by the clients' system settings by default" : "Permite s'ativatzione in automàticu de su tema Breeze Dark dae sa cunfiguratzione de sistema predefinida de is clientes", 11 | "Enable Breeze Dark theme for the login page" : "Ativa su tema Breeze Dark pro sa pàgina de atzessu", 12 | "Custom Styling" : "Istile personalizadu", 13 | "Insert custom styling here …" : "Inserta s'istile personalizadu inoghe...", 14 | "Save" : "Sarva", 15 | "A Breeze Dark theme for Nextcloud." : "Tema Breeze Dark pro Nextcloud.", 16 | "Breeze Dark theme" : "Tema Breeze Dark", 17 | "Enable Breeze Dark theme" : "Ativa su tema Breeze Dark" 18 | }, 19 | "nplurals=2; plural=(n != 1);"); 20 | -------------------------------------------------------------------------------- /css/apps/official/_ldap.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* LDAP --------------------------------------------------------------------- */ 8 | 9 | #ldapSettings { 10 | background-color: var(--color-main-background) !important; 11 | 12 | > fieldset { 13 | background-color: var(--color-main-background) !important; 14 | } 15 | 16 | ul.ui-tabs-nav .ui-tabs-active, 17 | ul.ui-tabs-nav .ui-tabs-active > a { 18 | background-color: var(--color-background-darker) !important; 19 | color: var(--color-main-text) !important; 20 | } 21 | 22 | div.ui-accordion-content { 23 | background: var(--color-main-background) !important; 24 | } 25 | 26 | .ldap_grey { 27 | color: var(--color-main-text) !important; 28 | } 29 | 30 | .ui-state-default, 31 | .ui-widget-content .ui-state-default, 32 | .ui-widget-header .ui-state-default { 33 | background: var(--color-main-background) !important; 34 | border-color: var(--color-border) !important; 35 | color: var(--color-main-text) !important; 36 | 37 | a, 38 | a:link, 39 | a:visited { 40 | color: var(--color-main-text) !important; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /appinfo/routes.php: -------------------------------------------------------------------------------- 1 | 6 | * 7 | * @author Magnus Walbeck 8 | * 9 | * @license GNU AGPL version 3 or any later version 10 | * 11 | * This program is free software: you can redistribute it and/or modify 12 | * it under the terms of the GNU Affero General Public License as published by 13 | * the Free Software Foundation, either version 3 of the License, or 14 | * (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU Affero General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Affero General Public License 22 | * along with this program. If not, see . 23 | * 24 | */ 25 | 26 | 27 | return [ 28 | 'routes' => [ 29 | ['name' => 'Settings#personal', 'url' => '/settings', 'verb' => 'POST'], 30 | ['name' => 'Settings#admin', 'url' => '/settings/admin', 'verb' => 'POST'], 31 | ['name' => 'Settings#customStyling', 'url' => '/settings/custom-styling', 'verb' => 'POST'], 32 | ['name' => 'Theming#getCustomStyling', 'url' => '/custom-styling', 'verb' => 'GET'], 33 | ], 34 | ]; 35 | -------------------------------------------------------------------------------- /css/server-automatic.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * ============================================================================= 3 | * Breeze Dark for Nextcloud 4 | * Source code: https://github.com/mwalbeck/nextcloud-breeze-dark 5 | * Made with the help of contributors! See AUTHORS.md 6 | * ============================================================================= 7 | * 8 | * @copyright Copyright (C) 2017 Magnus Walbeck 9 | * 10 | * @author Magnus Walbeck 11 | * 12 | * @license GNU AGPL version 3 or any later version 13 | * 14 | * This program is free software: you can redistribute it and/or modify 15 | * it under the terms of the GNU Affero General Public License as published by 16 | * the Free Software Foundation, either version 3 of the License, or 17 | * (at your option) any later version. 18 | * 19 | * This program is distributed in the hope that it will be useful, 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | * GNU Affero General Public License for more details. 23 | * 24 | * You should have received a copy of the GNU Affero General Public License 25 | * along with this program. If not, see . 26 | * 27 | */ 28 | 29 | :root { 30 | --breezedark-automatic-activation-enabled: 1; 31 | } 32 | @media (prefers-color-scheme: dark) { 33 | @import "server"; 34 | } 35 | -------------------------------------------------------------------------------- /css/apps/official/_deck.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2018, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Deck --------------------------------------------------------------------- */ 8 | 9 | .app-deck .app-navigation__list > .app-navigation-entry { 10 | border-right: 1px solid var(--color-border); 11 | } 12 | 13 | .card { 14 | background-color: var(--color-background-darker) !important; 15 | border: 1px solid var(--color-border); 16 | 17 | &:hover, 18 | &.current-card { 19 | border-color: var(--color-primary-element) !important; 20 | } 21 | 22 | .due, 23 | .due.overdue { 24 | opacity: 1 !important; 25 | } 26 | 27 | .due.next { 28 | background-color: var(--color-neutral) !important; 29 | opacity: 1 !important; 30 | 31 | span { 32 | color: var(--color-text-dark); 33 | } 34 | } 35 | 36 | .due.now { 37 | opacity: 1 !important; 38 | 39 | span { 40 | color: var(--color-text-dark); 41 | } 42 | } 43 | } 44 | 45 | .modal-wrapper .modal-container { 46 | box-shadow: unset !important; 47 | } 48 | 49 | /* Icons -------------------------------------------------------------------- */ 50 | 51 | .resource-type-deck { 52 | img[src$="deck-dark.svg"] { 53 | filter: invert(95%); 54 | opacity: 0.7 !important; 55 | } 56 | 57 | &:hover img[src$="deck-dark.svg"] { 58 | opacity: 1 !important; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_weather.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2018, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Weather ------------------------------------------------------------------ */ 8 | 9 | .app-weather #city-list-left { 10 | background-color: var(--color-main-background); 11 | border-left: unset; 12 | border-right-color: var(--color-border); 13 | 14 | .city-list li { 15 | a { 16 | color: var(--color-main-text); 17 | } 18 | 19 | &:hover, 20 | &:hover > a { 21 | background-color: var(--color-background-hover); 22 | box-shadow: inset 4px 0 var(--color-primary); 23 | } 24 | 25 | &.selected, 26 | &.selected a { 27 | background-color: var(--color-primary-element); 28 | box-shadow: inset 4px 0 var(--color-primary); 29 | color: var(--color-main-text); 30 | font-weight: 600; 31 | } 32 | } 33 | 34 | .city-list #create-city { 35 | background-color: var(--color-main-background); 36 | border-bottom-color: var(--color-primary-element); 37 | border-left: unset; 38 | border-right: unset; 39 | border-top-color: var(--color-primary-element); 40 | 41 | h1 { 42 | color: var(--color-main-text); 43 | } 44 | 45 | hr { 46 | background: var(--color-border); 47 | } 48 | } 49 | } 50 | 51 | .app-weather #city-right table tr { 52 | background-color: unset; 53 | } 54 | -------------------------------------------------------------------------------- /css/apps/official/_news.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* News --------------------------------------------------------------------- */ 8 | 9 | .app-news #app-navigation { 10 | .add-new .heading { 11 | &:hover { 12 | background-color: var(--color-background-hover); 13 | } 14 | 15 | button:active, 16 | button:focus { 17 | background-color: transparent; 18 | } 19 | } 20 | 21 | #app-settings-content a { 22 | color: var(--color-text-link); 23 | } 24 | 25 | .collapsible:hover > .icon-folder { 26 | background-color: var(--color-background-hover); 27 | background-image: none !important; 28 | } 29 | 30 | > ul > .with-counter:hover > .app-navigation-entry-utils { 31 | background-color: var(--color-background-hover); 32 | } 33 | } 34 | 35 | .app-news #app-content { 36 | .item.active { 37 | background-image: none; 38 | } 39 | 40 | .body { 41 | font-size: 15px; 42 | 43 | a { 44 | color: var(--color-text-link); 45 | } 46 | 47 | blockquote { 48 | border-color: var(--color-primary-element); 49 | } 50 | 51 | h1, 52 | h2, 53 | h3 { 54 | color: var(--color-primary-element); 55 | } 56 | } 57 | } 58 | 59 | .app-news #explore { 60 | .grid-item { 61 | border-color: var(--color-border); 62 | } 63 | 64 | .explore-footer a { 65 | color: var(--color-text-link); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /css/apps/official/_files-texteditor.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2022, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Text Editor -------------------------------------------------------------- */ 8 | 9 | #app-content-texteditor #editor_container { 10 | background-color: var(--color-main-background); 11 | } 12 | 13 | #app-content-texteditor #editor_controls { 14 | background-color: var(--color-main-background); 15 | 16 | small.filename { 17 | color: var(--color-main-text); 18 | } 19 | 20 | small.saving-message { 21 | color: var(--color-text-maxcontrast); 22 | } 23 | 24 | #editor_close { 25 | opacity: 1; 26 | 27 | &:hover { 28 | background-color: var(--color-background-hover); 29 | } 30 | 31 | &:active, 32 | &:focus { 33 | background-color: var(--color-primary); 34 | } 35 | } 36 | } 37 | 38 | #filestexteditor.ace_editor { 39 | background-color: var(--color-main-background); 40 | color: var(--color-main-text); 41 | 42 | .ace_gutter { 43 | color: var(--color-text-maxcontrast); 44 | opacity: 1; 45 | } 46 | 47 | .ace_gutter-active-line { 48 | background-color: var(--color-background-darker); 49 | } 50 | 51 | .ace_marker-layer { 52 | .ace_active-line { 53 | background: var(--color-background-darker) !important; 54 | } 55 | 56 | .ace_selection { 57 | background: var(--color-primary); 58 | } 59 | } 60 | 61 | .ace_cursor { 62 | color: var(--color-main-text); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /js/breezedark.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Breeze Dark theme for Nextcloud 3 | * 4 | * @copyright Copyright (C) 2021 Magnus Walbeck 5 | * 6 | * @author Magnus Walbeck 7 | * 8 | * @license GNU AGPL version 3 or any later version 9 | * 10 | * This program is free software: you can redistribute it and/or modify 11 | * it under the terms of the GNU Affero General Public License as published by 12 | * the Free Software Foundation, either version 3 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU Affero General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Affero General Public License 21 | * along with this program. If not, see . 22 | * 23 | */ 24 | 25 | const cssMediaDark = window.matchMedia("(prefers-color-scheme: dark)"); 26 | function updateColorSheme() { 27 | if ( 28 | getComputedStyle(document.body).getPropertyValue( 29 | "--breezedark-automatic-activation-enabled" 30 | ) != 1 || 31 | cssMediaDark.matches 32 | ) { 33 | document.body.classList.add("theme--dark", "theme--breezedark"); 34 | document.body.classList.remove("theme--light"); 35 | } else { 36 | document.body.classList.remove("theme--dark", "theme--breezedark"); 37 | document.body.classList.add("theme--light"); 38 | } 39 | } 40 | 41 | cssMediaDark.addEventListener("change", updateColorSheme); 42 | document.addEventListener("DOMContentLoaded", updateColorSheme); 43 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_timemanager.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2021, Magnus Walbeck (mw@mwalbeck.org) 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* TimeManager -------------------------------------------------------------- */ 8 | 9 | .app-timemanager { 10 | --border: 1px solid var(--color-border); 11 | --borderHoverColor: var(--color-primary-element); 12 | --borderFocusColor: var(--color-primary-element); 13 | --itemHoverBG: var(--color-background-hover); 14 | --itemIsActiveBG: var(--color-primary); 15 | --inputColor: var(--color-main-text); 16 | --listEmptyColor: var(--color-text-maxcontrast); 17 | --multiItemBG: var(--color-background-darker); 18 | --multiItemActiveBG: var(--color-background-hover); 19 | --itemFirstBorderRadius: 0; 20 | 21 | .tm_summary { 22 | background-color: var(--color-main-background); 23 | } 24 | 25 | .listContainer { 26 | border: 1px solid var(--color-border); 27 | } 28 | 29 | .selectContainer input:not([type="range"]):not([type="button"]):not([type="submit"]):active { 30 | background-color: transparent; 31 | } 32 | 33 | .tm_item-date { 34 | font-weight: inherit; 35 | } 36 | 37 | .tm_item-row:hover { 38 | background-color: var(--color-background-hover); 39 | } 40 | 41 | .tm_item-row a:hover { 42 | background-color: transparent; 43 | } 44 | 45 | .tm_item-row a:active, 46 | .tm_item-row a:focus { 47 | background-color: var(--color-primary); 48 | } 49 | } 50 | 51 | /* Icons -------------------------------------------------------------------- */ 52 | 53 | .app-timemanager #app-navigation ul li img { 54 | filter: invert(95%); 55 | } 56 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_files-markdown.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2018, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Markdown editor -----------------------------------------------------------*/ 8 | 9 | #app-content-texteditor #editor_container { 10 | #editor_controls #preview_editor_controls button:hover { 11 | background-color: var(--color-main-background); 12 | } 13 | 14 | #editor_controls #preview_editor_controls button.active { 15 | background-color: var(--color-background-hover); 16 | } 17 | 18 | #editor_wrap #preview_wrap #preview { 19 | background-color: var(--color-main-background); 20 | border-left: 1px solid var(--color-border); 21 | color: var(--color-main-text); 22 | } 23 | 24 | #editor_wrap #preview_wrap #preview.text-markdown { 25 | blockquote { 26 | border-left-color: var(--color-primary-element); 27 | color: var(--color-text-maxcontrast); 28 | } 29 | 30 | tt { 31 | background-color: var(--color-main-background); 32 | border-color: var(--color-border); 33 | } 34 | 35 | code, 36 | pre { 37 | background-color: var(--color-background-darker); 38 | border-color: var(--color-border); 39 | } 40 | 41 | table tr { 42 | background-color: var(--color-main-background); 43 | border-top-color: var(--color-border); 44 | } 45 | 46 | table tr th { 47 | border-bottom-color: var(--color-border); 48 | color: var(--color-text-maxcontrast); 49 | } 50 | 51 | a { 52 | color: var(--color-text-link); 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_collectives.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2021, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Collectives -------------------------------------------------------------- */ 8 | 9 | .app-collectives { 10 | #titleform input[type="text"] { 11 | background-color: var(--color-main-background); 12 | opacity: 1; 13 | 14 | &:focus, 15 | &:focus-within { 16 | background-color: var(--color-background-darker); 17 | } 18 | } 19 | 20 | .app-content-list-item .update { 21 | color: var(--color-text-maxcontrast); 22 | opacity: 1; 23 | } 24 | } 25 | 26 | .app-collectives .app-sidebar #versions { 27 | .openVersion, 28 | .size { 29 | color: var(--color-text-maxcontrast); 30 | opacity: 1; 31 | } 32 | 33 | li:hover, 34 | li:focus { 35 | background-color: var(--color-background-hover); 36 | } 37 | 38 | li:hover, 39 | li:focus { 40 | .openVersion, 41 | .size { 42 | color: var(--color-main-text); 43 | } 44 | } 45 | 46 | li.active, 47 | li:active { 48 | background-color: var(--color-primary); 49 | 50 | .icon-container .icon { 51 | filter: brightness(161.5%); 52 | } 53 | } 54 | 55 | li.active, 56 | li:active { 57 | .openVersion, 58 | .size { 59 | color: var(--color-primary-text); 60 | } 61 | } 62 | } 63 | 64 | .popover .action { 65 | margin-top: 0; 66 | } 67 | 68 | /* Icons -------------------------------------------------------------------- */ 69 | 70 | .icon-pages-template-dark-grey { 71 | opacity: 1 !important; 72 | } 73 | 74 | .icon-pages { 75 | filter: invert(95%); 76 | } 77 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # This file is licensed under the Affero General Public License version 3 or 2 | # later. See the COPYING file. 3 | 4 | app_name=breezedark 5 | build_directory=$(CURDIR)/build 6 | sign_directory=$(build_directory)/sign 7 | cert_directory=$(HOME)/.nextcloud/certificates 8 | 9 | all: dev-setup prettier stylelint 10 | 11 | dev-setup: npm-init 12 | 13 | npm-init: 14 | npm ci 15 | 16 | prettier: 17 | npm run prettier 18 | 19 | prettier-fix: 20 | npm run prettier:fix 21 | 22 | stylelint: 23 | npm run stylelint 24 | 25 | stylelint-fix: 26 | npm run stylelint:fix 27 | 28 | watch: 29 | npm run watch 30 | 31 | build: 32 | npm run build 33 | 34 | appstore: 35 | rm -rf $(build_directory) 36 | mkdir -p $(sign_directory) 37 | rsync -a \ 38 | --exclude=".git" \ 39 | --exclude=".github" \ 40 | --exclude=".tx" \ 41 | --exclude=".vscode" \ 42 | --exclude="build" \ 43 | --exclude="node_modules" \ 44 | --exclude="vendor" \ 45 | --exclude=".gitignore" \ 46 | --exclude=".php_cs.cache" \ 47 | --exclude=".php_cs.dist" \ 48 | --exclude=".prettierignore" \ 49 | --exclude=".prettierrc" \ 50 | --exclude=".stylelintignore" \ 51 | --exclude=".stylelintrc.json" \ 52 | --exclude="composer.json" \ 53 | --exclude="composer.lock" \ 54 | --exclude="Makefile" \ 55 | --exclude="package-lock.json" \ 56 | --exclude="package.json" \ 57 | --exclude="screenshot.png" \ 58 | ../$(app_name)/ $(sign_directory)/$(app_name) 59 | @if [ -f $(cert_directory)/$(app_name).key ]; then \ 60 | echo "Signing app files…"; \ 61 | php ../occ integrity:sign-app \ 62 | --privateKey=$(cert_directory)/$(app_name).key\ 63 | --certificate=$(cert_directory)/$(app_name).crt\ 64 | --path=$(sign_directory)/$(app_name); \ 65 | fi 66 | tar czf $(build_directory)/$(app_name).tar.gz \ 67 | -C $(sign_directory) $(app_name) 68 | 69 | sign-package: 70 | openssl dgst -sha512 -sign $(cert_directory)/$(app_name).key $(build_directory)/$(app_name).tar.gz | openssl base64; 71 | -------------------------------------------------------------------------------- /css/apps/core/_dashboard.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2020, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Dashboard ---------------------------------------------------------------- */ 8 | 9 | #app-dashboard { 10 | --color-background-translucent: var(--color-dashboard-grey) !important; 11 | --color-main-background: var(--color-background-darker) !important; 12 | } 13 | 14 | .background-selector .background.color { 15 | background-color: var(--color-background-darker) !important; 16 | } 17 | 18 | .modal__content li label { 19 | background-color: var(--color-main-background) !important; 20 | border-color: var(--color-border) !important; 21 | 22 | &:hover { 23 | border-color: var(--color-primary-element) !important; 24 | } 25 | } 26 | 27 | #app-dashboard .footer .button-vue { 28 | border: unset !important; 29 | } 30 | 31 | #app-dashboard .user-status-menu-item__toggle--inline { 32 | box-shadow: none !important; 33 | } 34 | 35 | #status-weather .button-vue { 36 | background-color: var(--color-main-background-blur) !important; 37 | border: unset !important; 38 | 39 | &:hover { 40 | background-color: var(--color-background-hover) !important; 41 | } 42 | } 43 | 44 | /* Deck */ 45 | .app-dashboard .card { 46 | background-color: inherit !important; 47 | border: unset; 48 | 49 | &:hover { 50 | background-color: var(--color-background-hover) !important; 51 | } 52 | } 53 | 54 | /* Tasks */ 55 | .center-button .button-vue--vue-secondary { 56 | background-color: var(--color-background-darker) !important; 57 | color: var(--color-main-text) !important; 58 | 59 | &:hover { 60 | background-color: var(--color-background-hover) !important; 61 | } 62 | 63 | &:active, 64 | &:focus { 65 | background-color: var(--color-primary-element) !important; 66 | color: var(--color-primary-text) !important; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /css/apps/core/_text.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2019, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Text --------------------------------------------------------------------- */ 8 | 9 | #editor-wrapper div.ProseMirror[contenteditable="true"] { 10 | &:hover, 11 | &:focus, 12 | &:active { 13 | background-color: transparent !important; 14 | } 15 | } 16 | 17 | #editor-wrapper .ProseMirror pre, 18 | #editor-wrapper .ProseMirror code, 19 | #text-wrapper .ProseMirror pre, 20 | #text-wrapper .ProseMirror code { 21 | background-color: var(--color-background-darker) !important; 22 | } 23 | 24 | #editor-wrapper .ProseMirror a, 25 | #text-wrapper .ProseMirror a, 26 | #editor-wrapper:not(.show-color-annotations) .ProseMirror a { 27 | color: var(--color-text-link) !important; 28 | 29 | span.author-annotation { 30 | color: var(--color-text-link) !important; 31 | } 32 | } 33 | 34 | #editor-wrapper .menububble { 35 | border: 1px solid var(--color-border); 36 | 37 | .menububble__form { 38 | .menububble__input, 39 | .menububble__button { 40 | height: 44px; 41 | } 42 | } 43 | } 44 | 45 | #editor-wrapper div.ProseMirror table th { 46 | border-bottom-width: 2px; 47 | } 48 | 49 | #editor-wrapper .menubar { 50 | button { 51 | opacity: 0.7; 52 | 53 | &.is-active { 54 | opacity: 1; 55 | } 56 | } 57 | 58 | button.icon-undo, 59 | button.icon-redo { 60 | opacity: 1; 61 | 62 | &:disabled { 63 | opacity: 0.4; 64 | } 65 | } 66 | } 67 | 68 | .emoji-list { 69 | border: 1px solid var(--color-border); 70 | box-shadow: unset !important; 71 | 72 | .emoji-list__item { 73 | opacity: 1 !important; 74 | } 75 | } 76 | 77 | .text-menubar .entry-action.is-active:not(.entry-action-item) .material-design-icon > svg, 78 | .text-menubar button.entry-action__button.is-active .material-design-icon > svg { 79 | fill: var(--color-primary-text) !important; 80 | } 81 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_analytics.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2020, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Analytics ---------------------------------------------------------------- */ 8 | 9 | .app-analytics #app-content .dataTables_wrapper { 10 | .dataTables_length, 11 | .dataTables_filter, 12 | .dataTables_info, 13 | .dataTables_processing, 14 | .dataTables_paginate { 15 | color: var(--color-main-text); 16 | } 17 | 18 | .dataTable { 19 | thead th { 20 | border-bottom-color: var(--color-border); 21 | } 22 | 23 | &.no-footer { 24 | border-bottom-color: var(--color-border); 25 | } 26 | } 27 | 28 | .dataTables_paginate .paginate_button { 29 | border-color: var(--color-border); 30 | color: var(--color-main-text) !important; 31 | 32 | &:hover { 33 | background: var(--color-main-background); 34 | border-color: var(--color-primary-element); 35 | } 36 | 37 | &.current { 38 | background: var(--color-primary-element); 39 | border-color: var(--color-primary-element); 40 | color: var(--color-main-text) !important; 41 | } 42 | 43 | &.disabled { 44 | background-color: var(--color-background-alternate); 45 | color: var(--color-text-maxcontrast) !important; 46 | } 47 | 48 | &.disabled:hover { 49 | border-color: var(--color-border); 50 | } 51 | } 52 | } 53 | 54 | .app-analytics { 55 | .analyticsWidgetItem { 56 | background-color: var(--color-background-darker) !important; 57 | 58 | &:hover, 59 | &:focus { 60 | background-color: var(--color-background-hover) !important; 61 | } 62 | } 63 | 64 | #app-sidebar .tabHeaders .tabHeader { 65 | &.selected, 66 | &:hover, 67 | &:focus, 68 | &:active { 69 | border-bottom-color: var(--color-primary-element); 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | env: 8 | APP_NAME: breezedark 9 | CERT_DIRECTORY: $HOME/.nextcloud/certificates 10 | 11 | jobs: 12 | release: 13 | runs-on: ubuntu-latest 14 | name: Release new version 15 | steps: 16 | - name: Checkout NC server 17 | uses: actions/checkout@v2 18 | with: 19 | repository: nextcloud/server 20 | ref: "master" 21 | 22 | - name: Checkout NC submodules 23 | shell: bash 24 | run: | 25 | auth_header="$(git config --local --get http.https://github.com/.extraheader)" 26 | git submodule sync --recursive 27 | git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 28 | 29 | - name: Checkout app 30 | uses: actions/checkout@v2 31 | with: 32 | path: ${{ env.APP_NAME }} 33 | 34 | - name: Run build 35 | run: | 36 | mkdir -p ${{ env.CERT_DIRECTORY }} 37 | echo "${{ secrets.APP_PRIVATE_KEY }}" > ${{ env.CERT_DIRECTORY }}/${{ env.APP_NAME }}.key 38 | echo "${{ secrets.APP_CERT }}" > ${{ env.CERT_DIRECTORY }}/${{ env.APP_NAME }}.crt 39 | cd ${{ env.APP_NAME }} 40 | make appstore 41 | rm -rf ${{ env.CERT_DIRECTORY }} 42 | 43 | - name: Upload tarball to release 44 | uses: svenstaro/upload-release-action@v2 45 | id: attach_to_release 46 | with: 47 | repo_token: ${{ secrets.GITHUB_TOKEN }} 48 | file: ${{ env.APP_NAME }}/build/${{ env.APP_NAME }}.tar.gz 49 | asset_name: ${{ env.APP_NAME }}.tar.gz 50 | tag: ${{ github.ref }} 51 | overwrite: true 52 | 53 | - name: Upload app to Nextcloud appstore 54 | uses: R0Wi/nextcloud-appstore-push-action@v1 55 | with: 56 | app_name: ${{ env.APP_NAME }} 57 | appstore_token: ${{ secrets.APPSTORE_TOKEN }} 58 | download_url: ${{ steps.attach_to_release.outputs.browser_download_url }} 59 | app_private_key: ${{ secrets.APP_PRIVATE_KEY }} 60 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_fulltextsearch.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2018, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* FullTextSearch ----------------------------------------------------------- */ 8 | 9 | // Search popup 10 | #fts-popup { 11 | .div-table-col-left { 12 | color: var(--color-main-text); 13 | } 14 | 15 | .fts_options_input { 16 | opacity: 1; 17 | } 18 | } 19 | 20 | // Generic Search 21 | .provider_header { 22 | .provider_navigation { 23 | border-bottom-color: var(--color-border); 24 | color: var(--color-text-maxcontrast); 25 | } 26 | 27 | .provider_result .result_entry { 28 | border-bottom-color: var(--color-border); 29 | 30 | .result_title { 31 | color: var(--color-main-text); 32 | } 33 | 34 | .result_extract { 35 | color: var(--color-text-maxcontrast); 36 | } 37 | } 38 | } 39 | 40 | // Files specific Search 41 | .provider_header { 42 | .files_header { 43 | border-bottom-color: var(--color-border); 44 | 45 | .files_header_div { 46 | color: var(--color-text-maxcontrast); 47 | } 48 | } 49 | 50 | .files_result { 51 | border-bottom-color: var(--color-border); 52 | 53 | .files_result_item { 54 | background: var(--color-main-background); 55 | color: var(--color-text-maxcontrast); 56 | } 57 | } 58 | 59 | .files_result .files_div_name .files_result_file { 60 | .files_result_title { 61 | color: var(--color-main-text); 62 | } 63 | 64 | .files_result_extract { 65 | color: var(--color-text-maxcontrast); 66 | } 67 | } 68 | } 69 | 70 | // Settings 71 | .app-settings #app-content #fns, 72 | .app-settings #app-content #elastic_search, 73 | .app-settings #app-content #files { 74 | .div-table .div-table-row .div-table-col select, 75 | .div-table .div-table-row .div-table-col input { 76 | background-color: var(--color-background-darker) !important; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /css/server/_icons.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Apps that haven't moved to variables for icons ---------------------------- */ 8 | 9 | // OnlyOffice 10 | .icon-onlyoffice-open, 11 | .icon-onlyoffice-convert, 12 | .icon-onlyoffice-download { 13 | filter: invert(95%); 14 | } 15 | 16 | // Collabora 17 | .collabora.action-edit img[src$="/core/img/actions/rename.svg"] { 18 | filter: invert(95%); 19 | } 20 | 21 | /* CSS tricks to change icon color ------------------------------------------- */ 22 | 23 | .icon-collapse { 24 | color: var(--color-icon) !important; 25 | } 26 | 27 | .app-settings { 28 | #apps-list .section .app-image .app-icon[*|href$="circles.svg"], 29 | #app-sidebar #app-details-view image.app-icon[*|href$="circles.svg"] { 30 | filter: invert(1); 31 | } 32 | 33 | .infoicon { 34 | filter: invert(95%); 35 | } 36 | } 37 | 38 | /* Random CSS fixes for icons ----------------------------------------------- */ 39 | 40 | // Fix avatars with dot menu being covered in dots. The dot icon is being handled 41 | // by vue iconfont instead 42 | .avatardiv--with-menu .icon-more { 43 | background-image: none !important; 44 | } 45 | 46 | /* CSS to handle inverting icons when a Theming app colour that has a bad 47 | contrast with white is used ------------------------------------------------*/ 48 | 49 | // Header appmenu icons 50 | body:not([data-dashboard-background]) #appmenu.inverted svg image { 51 | filter: none; 52 | } 53 | 54 | .header-right .notifications-button img[src$="notifications-dark.svg"], 55 | .header-right .notifications-button img[src$="notifications-new-dark.svg"] { 56 | filter: invert(1); 57 | } 58 | 59 | .dashboard--dark .header-right .notifications-button img[src$="notifications-new-dark.svg"] { 60 | filter: invert(1) hue-rotate(180deg); 61 | } 62 | 63 | body.dashboard--inverted .header-right > div:not(#settings) > :first-child { 64 | filter: invert(0) hue-rotate(180deg) !important; 65 | } 66 | 67 | body.dashboard--inverted.dashboard--dark .header-right > div:not(#settings) > :first-child { 68 | filter: invert(1) hue-rotate(180deg) !important; 69 | } 70 | -------------------------------------------------------------------------------- /css/apps/official/_mail.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2018, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Mail --------------------------------------------------------------------- */ 8 | 9 | .app-mail #account-form .tabs-component-tab.is-active { 10 | border-bottom-color: var(--color-primary-element); 11 | } 12 | 13 | .app-mail .app-content-list .list-item__wrapper.active { 14 | .line-one__title { 15 | color: var(--color-primary-text); 16 | } 17 | 18 | .line-one__details, 19 | .line-two__subtitle, 20 | .line-two__counter { 21 | color: var(--color-main-text); 22 | } 23 | } 24 | 25 | .app-mail .html-message-body #message-container { 26 | padding: 1rem; 27 | } 28 | 29 | .app-mail #mail-message .mail-message-body-html { 30 | #mail-message-has-blocked-content { 31 | background-color: var(--color-main-background) !important; 32 | margin: unset; 33 | padding: 5px 1rem; 34 | 35 | .button-vue { 36 | border: 1px solid var(--color-border) !important; 37 | margin-left: 1rem; 38 | padding: unset; 39 | } 40 | 41 | .button-vue__text { 42 | padding-left: 1rem !important; 43 | padding-right: 1rem !important; 44 | text-decoration: none !important; 45 | } 46 | } 47 | } 48 | 49 | .app-mail .attachment-popover button.action-item--single.icon-attachment { 50 | &:hover, 51 | &:focus, 52 | &:active { 53 | background-color: var(--color-background-hover) !important; 54 | } 55 | } 56 | 57 | .app-mail .attachment-popover.open button.action-item--single.icon-attachment { 58 | background-color: var(--color-primary) !important; 59 | opacity: 1; 60 | } 61 | 62 | .mail-message-attachments .attachments .attachment { 63 | .attachment-name:hover { 64 | background-color: unset; 65 | } 66 | 67 | .attachment-size { 68 | opacity: 0.7; 69 | 70 | &:hover { 71 | background-color: unset; 72 | } 73 | } 74 | 75 | button:hover, 76 | .mail-attached-image:hover { 77 | opacity: 1; 78 | } 79 | } 80 | 81 | .popover.open button.action-button { 82 | opacity: 1; 83 | } 84 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_files-markdown-syntax.scss: -------------------------------------------------------------------------------- 1 | /* a11y-dark theme */ 2 | /* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ 3 | /* @author: ericwbailey */ 4 | /* Check the theme out on github https://github.com/highlightjs/highlight.js/blob/master/src/styles/a11y-dark.css */ 5 | 6 | /* Comment */ 7 | .hljs-comment, 8 | .hljs-quote { 9 | color: #d4d0ab !important; 10 | } 11 | 12 | /* Red */ 13 | .hljs-variable, 14 | .hljs-template-variable, 15 | .hljs-tag, 16 | .hljs-name, 17 | .hljs-selector-id, 18 | .hljs-selector-class, 19 | .hljs-regexp, 20 | .hljs-deletion { 21 | color: #ffa07a !important; 22 | } 23 | 24 | /* Orange */ 25 | .hljs-number, 26 | .hljs-built_in, 27 | .hljs-builtin-name, 28 | .hljs-literal, 29 | .hljs-type, 30 | .hljs-params, 31 | .hljs-meta, 32 | .hljs-link { 33 | color: #f5ab35 !important; 34 | } 35 | 36 | /* Yellow */ 37 | .hljs-attribute { 38 | color: #ffd700 !important; 39 | } 40 | 41 | /* Green */ 42 | .hljs-string, 43 | .hljs-symbol, 44 | .hljs-bullet, 45 | .hljs-addition { 46 | color: #abe338 !important; 47 | } 48 | 49 | /* Blue */ 50 | .hljs-title, 51 | .hljs-section { 52 | color: #00e0e0 !important; 53 | } 54 | 55 | /* Purple */ 56 | .hljs-keyword, 57 | .hljs-selector-tag { 58 | color: #dcc6e0 !important; 59 | } 60 | 61 | .hljs { 62 | display: block !important; 63 | overflow-x: auto !important; 64 | background: #2b2b2b !important; 65 | color: #f8f8f2 !important; 66 | padding: 0.5em !important; 67 | } 68 | 69 | .hljs-emphasis { 70 | font-style: italic !important; 71 | } 72 | 73 | .hljs-strong { 74 | font-weight: bold !important; 75 | } 76 | 77 | @media screen and (-ms-high-contrast: active) { 78 | .hljs-addition, 79 | .hljs-attribute, 80 | .hljs-built_in, 81 | .hljs-builtin-name, 82 | .hljs-bullet, 83 | .hljs-comment, 84 | .hljs-link, 85 | .hljs-literal, 86 | .hljs-meta, 87 | .hljs-number, 88 | .hljs-params, 89 | .hljs-string, 90 | .hljs-symbol, 91 | .hljs-type, 92 | .hljs-quote { 93 | color: highlight !important; 94 | } 95 | 96 | .hljs-keyword, 97 | .hljs-selector-tag { 98 | font-weight: bold !important; 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /lib/Controller/ThemingController.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * @author Magnus Walbeck 11 | * 12 | * @license GNU AGPL version 3 or any later version 13 | * 14 | * This program is free software: you can redistribute it and/or modify 15 | * it under the terms of the GNU Affero General Public License as published by 16 | * the Free Software Foundation, either version 3 of the License, or 17 | * (at your option) any later version. 18 | * 19 | * This program is distributed in the hope that it will be useful, 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | * GNU Affero General Public License for more details. 23 | * 24 | * You should have received a copy of the GNU Affero General Public License 25 | * along with this program. If not, see . 26 | * 27 | */ 28 | 29 | namespace OCA\BreezeDark\Controller; 30 | 31 | use OCP\AppFramework\Controller; 32 | use OCP\AppFramework\Http; 33 | use OCP\AppFramework\Http\DataDisplayResponse; 34 | use OCP\IConfig; 35 | use OCP\IRequest; 36 | 37 | class ThemingController extends Controller 38 | { 39 | 40 | /** @var string */ 41 | protected $appName; 42 | 43 | /** @var IConfig */ 44 | private $config; 45 | 46 | /** 47 | * @param string $appName 48 | * @param IConfig $config 49 | * @param IRequest $request 50 | */ 51 | public function __construct( 52 | string $appName, 53 | IConfig $config, 54 | IRequest $request 55 | ) { 56 | parent::__construct($appName, $request); 57 | $this->config = $config; 58 | } 59 | 60 | /** 61 | * @NoCSRFRequired 62 | * @PublicPage 63 | * @NoSameSiteCookieRequired 64 | * 65 | * @return DataDisplayResponse|NotFoundResponse 66 | */ 67 | public function getCustomStyling(): DataDisplayResponse 68 | { 69 | $customStyling = $this->config->getAppValue($this->appName, 'theme_custom_styling', ''); 70 | $response = new DataDisplayResponse($customStyling, Http::STATUS_OK, ['Content-Type' => 'text/css']); 71 | $response->cacheFor(86400); 72 | return $response; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /css/apps/official/_groupfolders.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Group folders ------------------------------------------------------------ */ 8 | 9 | #groupfolders-wrapper #groupfolders-root { 10 | th { 11 | border-bottom-color: var(--color-border); 12 | } 13 | 14 | #groupfolders-react-root td.quota .quotabar { 15 | background-color: var(--color-background-hover); 16 | } 17 | 18 | .groups .group-edit, 19 | .acl { 20 | div[class$="control"] { 21 | border-color: var(--color-border) !important; 22 | } 23 | 24 | span[class$="indicatorSeparator"] { 25 | background-color: var(--color-border) !important; 26 | } 27 | 28 | div[class$="placeholder"] { 29 | color: var(--color-text-maxcontrast) !important; 30 | } 31 | 32 | div[class$="menu"] { 33 | background-color: var(--color-main-background) !important; 34 | border: 1px solid var(--color-border); 35 | } 36 | 37 | div[class$="option"] { 38 | background-color: var(--color-main-background) !important; 39 | } 40 | 41 | div[class$="option"]:hover { 42 | background-color: var(--color-background-hover) !important; 43 | } 44 | } 45 | 46 | .acl { 47 | div[class$="control"] { 48 | background-color: var(--color-main-background) !important; 49 | } 50 | 51 | div[class$="multiValue"] { 52 | background-color: var(--color-background-darker) !important; 53 | } 54 | 55 | div[class$="multiValue"], 56 | div[class$="multiValue"] > div:first-child, 57 | div[class$="multiValue"] > div:last-child { 58 | color: var(--color-main-text) !important; 59 | } 60 | 61 | div[class$="multiValue"] > div:last-child:hover { 62 | background-color: var(--color-error) !important; 63 | } 64 | } 65 | } 66 | 67 | /* Icons -------------------------------------------------------------------- */ 68 | 69 | #groupfolders-wrapper #groupfolders-root { 70 | td .action-rename::after { 71 | filter: invert(95%); 72 | } 73 | 74 | .groups .group-edit a > img[src$="/core/img/actions/close.svg"] { 75 | filter: invert(95%); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /lib/Migration/InstallRestoreSettings.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * @author Magnus Walbeck 11 | * 12 | * @license GNU AGPL version 3 or any later version 13 | * 14 | * This program is free software: you can redistribute it and/or modify 15 | * it under the terms of the GNU Affero General Public License as published by 16 | * the Free Software Foundation, either version 3 of the License, or 17 | * (at your option) any later version. 18 | * 19 | * This program is distributed in the hope that it will be useful, 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | * GNU Affero General Public License for more details. 23 | * 24 | * You should have received a copy of the GNU Affero General Public License 25 | * along with this program. If not, see . 26 | * 27 | */ 28 | 29 | namespace OCA\BreezeDark\Migration; 30 | 31 | use OCP\IConfig; 32 | use OCP\IDBConnection; 33 | use OCP\Migration\IOutput; 34 | use OCP\Migration\IRepairStep; 35 | 36 | class InstallRestoreSettings implements IRepairStep 37 | { 38 | /** @var IDBConnection */ 39 | private $db; 40 | 41 | /** @var IConfig */ 42 | private $config; 43 | 44 | public function __construct(IDBConnection $db, IConfig $config) 45 | { 46 | $this->db = $db; 47 | $this->config = $config; 48 | } 49 | 50 | public function getName(): string 51 | { 52 | return "Restore enabled-themes and enforce_theme settings that where removed during an uninstall"; 53 | } 54 | 55 | public function run(IOutput $output): void 56 | { 57 | $themeEnforced = $this->config->getAppValue("breezedark", "theme_enforced", "0"); 58 | $currentEnforcedTheme = $this->config->getSystemValue("enforce_theme", ""); 59 | 60 | if ($themeEnforced && $currentEnforcedTheme === "") { 61 | // Re-enable enforcement of the theme if no enforced theme is currently set 62 | $this->config->setSystemValue("enforce_theme", "dark"); 63 | } elseif ($themeEnforced && $currentEnforcedTheme !== "dark") { 64 | // Disable theme enforcement of breezedark if a theme other than 65 | // the one breezedark set is currently being enforced 66 | $this->config->setAppValue("breezedark", "theme_enforced", "0"); 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /lib/Migration/UninstallCleanup.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * @author Magnus Walbeck 11 | * 12 | * @license GNU AGPL version 3 or any later version 13 | * 14 | * This program is free software: you can redistribute it and/or modify 15 | * it under the terms of the GNU Affero General Public License as published by 16 | * the Free Software Foundation, either version 3 of the License, or 17 | * (at your option) any later version. 18 | * 19 | * This program is distributed in the hope that it will be useful, 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | * GNU Affero General Public License for more details. 23 | * 24 | * You should have received a copy of the GNU Affero General Public License 25 | * along with this program. If not, see . 26 | * 27 | */ 28 | 29 | namespace OCA\BreezeDark\Migration; 30 | 31 | use OCP\IConfig; 32 | use OCP\IDBConnection; 33 | use OCP\Migration\IOutput; 34 | use OCP\Migration\IRepairStep; 35 | 36 | class UninstallCleanup implements IRepairStep 37 | { 38 | /** @var IDBConnection */ 39 | private $db; 40 | 41 | /** @var IConfig */ 42 | private $config; 43 | 44 | public function __construct(IDBConnection $db, IConfig $config) 45 | { 46 | $this->db = $db; 47 | $this->config = $config; 48 | } 49 | 50 | public function getName(): string 51 | { 52 | return "Cleanup enabled-themes and enforce_theme settings to prevent issues after an uninstall."; 53 | } 54 | 55 | public function run(IOutput $output): void 56 | { 57 | $themeEnforced = $this->config->getAppValue("breezedark", "theme_enforced", "0"); 58 | $currentEnforcedTheme = $this->config->getSystemValue("enforce_theme", ""); 59 | 60 | // Disable enforcement of the theme if the current enforced theme 61 | // is the one set by breezedark 62 | if ($themeEnforced && $currentEnforcedTheme === "dark") { 63 | $this->config->setSystemValue("enforce_theme", ""); 64 | } elseif ($themeEnforced && $currentEnforcedTheme !== "dark") { 65 | // Disable theme enforcement of breezedark if a theme other than 66 | // the one breezedark set is currently being enforced 67 | $this->config->setAppValue("breezedark", "theme_enforced", "0"); 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /css/apps/core/_files.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Files -------------------------------------------------------------------- */ 8 | 9 | .recommendation { 10 | &:hover, 11 | &:focus { 12 | background: var(--color-background-hover) !important; 13 | } 14 | } 15 | 16 | .filesize { 17 | color: var(--color-text-maxcontrast) !important; 18 | } 19 | 20 | .date > span { 21 | color: var(--color-text-maxcontrast) !important; 22 | } 23 | 24 | table tr[data-has-preview="true"] .thumbnail { 25 | border: unset !important; 26 | } 27 | 28 | #filestable .filename .favorite-mark .icon-star { 29 | background-image: none !important; 30 | } 31 | 32 | #filestable.view-grid:not(.hidden) tbody tr:not(.hidden) { 33 | background-color: unset !important; 34 | 35 | &:hover .thumbnail-wrapper, 36 | &:hover .nametext, 37 | &:hover .fileactions, 38 | &:focus .thumbnail-wrapper, 39 | &:focus .nametext, 40 | &:focus .fileactions, 41 | &:active .thumbnail-wrapper, 42 | &:active .nametext, 43 | &:active .fileactions, 44 | &.selected .thumbnail-wrapper, 45 | &.selected .nametext, 46 | &.selected .fileactions, 47 | &.highlighted .thumbnail-wrapper, 48 | &.highlighted .nametext, 49 | &.highlighted .fileactions, 50 | &.searchresult .thumbnail-wrapper, 51 | &.searchresult .nametext, 52 | &.searchresult .fileactions, 53 | .name:focus .thumbnail-wrapper, 54 | .name:focus .nametext, 55 | .name:focus .fileactions { 56 | background-color: unset !important; 57 | } 58 | 59 | &:hover, 60 | &:focus, 61 | &:active, 62 | &.selected, 63 | &.highlighted, 64 | &.searchresult { 65 | background-color: var(--color-background-hover) !important; 66 | } 67 | } 68 | 69 | #filestable .summary { 70 | opacity: 1; 71 | } 72 | 73 | #filestable tbody tr.highlighted, 74 | #filestable tbody tr.highlighted .name:focus, 75 | #filestable tbody tr.selected, 76 | #filestable tbody tr.searchresult { 77 | background-color: var(--color-selected-blue) !important; 78 | } 79 | 80 | #filestable tbody tr:hover, 81 | #filestable tbody tr:focus, 82 | #filestable tbody tr:active, 83 | table tr.mouseOver { 84 | background-color: var(--color-background-hover) !important; 85 | } 86 | 87 | #filestable tbody .name:focus, 88 | #filestable tbody tr:hover .filename form, 89 | table tr.mouseOver td { 90 | background-color: unset !important; 91 | } 92 | -------------------------------------------------------------------------------- /templates/personal.php: -------------------------------------------------------------------------------- 1 | 6 | * 7 | * @author Magnus Walbeck 8 | * 9 | * @license GNU AGPL version 3 or any later version 10 | * 11 | * This program is free software: you can redistribute it and/or modify 12 | * it under the terms of the GNU Affero General Public License as published by 13 | * the Free Software Foundation, either version 3 of the License, or 14 | * (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU Affero General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Affero General Public License 22 | * along with this program. If not, see . 23 | * 24 | */ 25 | 26 | 27 | script('breezedark', 'settings-personal'); 28 | style('breezedark', 'settings'); 29 | ?> 30 | 31 |
32 |

t("Breeze Dark")); ?>

33 |

t("A Breeze Dark theme for Nextcloud.")); ?>

34 |
35 |
36 |
37 |
38 |

t("Breeze Dark theme")); ?>

39 |

t("A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect.")); ?>

40 | 41 | 42 | 43 | > 44 | 45 | 46 | > 47 | 48 |
49 |
50 |
51 |
52 | -------------------------------------------------------------------------------- /lib/Settings/Admin.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * @author Magnus Walbeck 11 | * 12 | * @license GNU AGPL version 3 or any later version 13 | * 14 | * This program is free software: you can redistribute it and/or modify 15 | * it under the terms of the GNU Affero General Public License as published by 16 | * the Free Software Foundation, either version 3 of the License, or 17 | * (at your option) any later version. 18 | * 19 | * This program is distributed in the hope that it will be useful, 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | * GNU Affero General Public License for more details. 23 | * 24 | * You should have received a copy of the GNU Affero General Public License 25 | * along with this program. If not, see . 26 | * 27 | */ 28 | 29 | namespace OCA\BreezeDark\Settings; 30 | 31 | use OCP\AppFramework\Http\TemplateResponse; 32 | use OCP\IConfig; 33 | use OCP\Settings\ISettings; 34 | 35 | class Admin implements ISettings 36 | { 37 | 38 | /** @var string */ 39 | protected $appName; 40 | 41 | /** @var IConfig */ 42 | private $config; 43 | 44 | /** 45 | * @param string $appName 46 | * @param IConfig $config 47 | */ 48 | public function __construct( 49 | string $appName, 50 | IConfig $config 51 | ) 52 | { 53 | $this->appName = $appName; 54 | $this->config = $config; 55 | } 56 | 57 | /** 58 | * @return TemplateResponse 59 | */ 60 | public function getForm(): TemplateResponse 61 | { 62 | $themeEnforced = $this->config->getAppValue($this->appName, 'theme_enforced', "0"); 63 | $themeLoginPage = $this->config->getAppValue($this->appName, 'theme_login_page', "1"); 64 | $themeAutomaticActivation = $this->config->getAppValue($this->appName, 'theme_automatic_activation_enabled', "0"); 65 | $themeCustomStyling = $this->config->getAppValue($this->appName, 'theme_custom_styling', ""); 66 | return new TemplateResponse('breezedark', 'admin', [ 67 | "themeEnforced" => $themeEnforced, 68 | "themeLoginPage" => $themeLoginPage, 69 | "themeAutomaticActivation" => $themeAutomaticActivation, 70 | "themeCustomStyling" => $themeCustomStyling 71 | ]); 72 | } 73 | 74 | /** 75 | * @return string 76 | */ 77 | public function getSection(): string 78 | { 79 | return 'theming'; 80 | } 81 | 82 | /** 83 | * @return int 84 | */ 85 | public function getPriority(): int 86 | { 87 | return 50; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /lib/Listener/BeforeTemplateRenderedListener.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * @author Magnus Walbeck 11 | * 12 | * @license GNU AGPL version 3 or any later version 13 | * 14 | * This program is free software: you can redistribute it and/or modify 15 | * it under the terms of the GNU Affero General Public License as published by 16 | * the Free Software Foundation, either version 3 of the License, or 17 | * (at your option) any later version. 18 | * 19 | * This program is distributed in the hope that it will be useful, 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | * GNU Affero General Public License for more details. 23 | * 24 | * You should have received a copy of the GNU Affero General Public License 25 | * along with this program. If not, see . 26 | * 27 | */ 28 | 29 | namespace OCA\BreezeDark\Listener; 30 | 31 | use OCP\AppFramework\Http\TemplateResponse; 32 | use OCP\EventDispatcher\Event; 33 | use OCP\EventDispatcher\IEventListener; 34 | use OCP\IConfig; 35 | use OCP\IUserSession; 36 | 37 | class BeforeTemplateRenderedListener implements IEventListener { 38 | 39 | protected $appName; 40 | private IUserSession $userSession; 41 | private IConfig $config; 42 | 43 | public function __construct( 44 | IUserSession $userSession, 45 | IConfig $config 46 | ) { 47 | $this->appName = "breezedark"; 48 | $this->userSession = $userSession; 49 | $this->config = $config; 50 | } 51 | 52 | public function handle(Event $event): void { 53 | $response = $event->getResponse(); 54 | $themeEnforced = $this->config->getAppValue($this->appName, 'theme_enforced', "0"); 55 | $params = $response->getParams(); 56 | 57 | if ($themeEnforced) { 58 | $params = array_merge(["enabledThemes" => ["breezedark", "dark"]], $params); 59 | $response->setParams($params); 60 | return; 61 | } 62 | 63 | if ($response->getRenderAs() === TemplateResponse::RENDER_AS_USER) { 64 | $userId = $this->userSession->getUser()->getUID(); 65 | $themeEnabled = $this->config->getUserValue($userId, $this->appName, "theme_enabled", "0"); 66 | 67 | if ($themeEnabled) { 68 | $enabledThemes = json_decode($this->config->getUserValue($userId, "theming", "enabled-themes", "[]")); 69 | $enabledThemes = array_merge(["breezedark"], $enabledThemes); 70 | $params = array_merge(["enabledThemes" => $enabledThemes], $params); 71 | $response->setParams($params); 72 | } 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_polls.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2018, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Polls -------------------------------------------------------------------- */ 8 | 9 | .app-polls #app-content { 10 | .table-row.table-header { 11 | opacity: 1; 12 | } 13 | 14 | .table .pollListItem a { 15 | color: var(--color-main-text); 16 | } 17 | 18 | .toggle-cell { 19 | &.yes, 20 | &.maybe, 21 | &.no { 22 | background-color: var(--color-main-background); 23 | } 24 | } 25 | 26 | .poll-cell { 27 | &.yes { 28 | color: var(--color-success); 29 | } 30 | 31 | &.maybe { 32 | color: var(--color-warning); 33 | } 34 | 35 | &.no { 36 | color: var(--color-error); 37 | } 38 | } 39 | 40 | input.success, 41 | input.icon-confirn.success { 42 | background-color: var(--color-main-background) !important; 43 | border-color: var(--color-success) !important; 44 | } 45 | 46 | input.error { 47 | background-color: var(--color-main-background) !important; 48 | border-color: var(--color-error) !important; 49 | } 50 | 51 | .vote-row .counter { 52 | .yes { 53 | background-color: var(--color-success); 54 | } 55 | 56 | .no { 57 | background-color: var(--color-error); 58 | } 59 | } 60 | } 61 | 62 | .app-polls #app-sidebar { 63 | &.detailsView .pollInformation .cloud .open { 64 | background-color: var(--color-success); 65 | } 66 | 67 | &.detailsView .pollInformation .cloud .information { 68 | background-color: var(--color-warning); 69 | } 70 | 71 | .pollActions li a { 72 | opacity: 0.7; 73 | 74 | &:hover { 75 | opacity: 1; 76 | } 77 | } 78 | } 79 | 80 | .app-polls .tabHeaders .tabHeader { 81 | &.selected, 82 | &:hover, 83 | &:focus { 84 | border-bottom-color: var(--color-border); 85 | } 86 | } 87 | 88 | /* Datepicker */ 89 | .app-polls .mx-datepicker .mx-datepicker-popup { 90 | background-color: var(--color-main-background) !important; 91 | border-color: var(--color-border) !important; 92 | } 93 | 94 | // Shift dates 95 | .app-polls .modal-dialog { 96 | border: 1px solid var(--color-border) !important; 97 | box-shadow: none !important; 98 | } 99 | 100 | .app-settings .app-settings__content .checkbox-radio-switch:not(.checkbox-radio-switch--disabled) { 101 | .checkbox-radio-switch__input:hover + .checkbox-radio-switch__label, 102 | .checkbox-radio-switch__input:focus + .checkbox-radio-switch__label { 103 | background-color: var(--color-background-hover); 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_audio-player.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Audio Player ------------------------------------------------------------- */ 8 | 9 | .app-audioplayer #app-navigation { 10 | #myCategory li { 11 | opacity: 1; 12 | 13 | &:hover { 14 | background-color: var(--color-background-hover); 15 | } 16 | 17 | &.active span { 18 | color: var(--color-main-text); 19 | } 20 | 21 | i.ioc { 22 | color: var(--color-main-text); 23 | opacity: 0.7; 24 | 25 | &.ioc-sort:hover { 26 | color: var(--color-success); 27 | opacity: 1; 28 | } 29 | 30 | &.ioc-delete:hover { 31 | color: var(--color-error); 32 | opacity: 1; 33 | } 34 | } 35 | 36 | i.icon-rename { 37 | opacity: 0.7; 38 | 39 | &:hover { 40 | opacity: 1; 41 | } 42 | } 43 | 44 | &.activeHover { 45 | border-color: var(--color-primary-element); 46 | } 47 | 48 | &.dropHover { 49 | background-color: var(--color-background-hover); 50 | } 51 | } 52 | 53 | #app-settings #audio-settings li.audio-settings-item { 54 | opacity: 1; 55 | } 56 | } 57 | 58 | .app-audioplayer #app-content { 59 | #loading { 60 | color: var(--color-icon); 61 | } 62 | 63 | .sm2-bar-ui { 64 | .sm2-progress { 65 | .sm2-progress-track { 66 | background-color: var(--color-background-darker); 67 | } 68 | 69 | .sm2-progress-bar { 70 | background-color: var(--color-primary-element); 71 | } 72 | 73 | .sm2-progress-ball { 74 | background-color: var(--color-icon); 75 | } 76 | } 77 | } 78 | 79 | #playlist-container { 80 | .coverrow .album .albumcover { 81 | box-shadow: none; 82 | } 83 | 84 | .songcontainer { 85 | background-color: var(--color-background-darker); 86 | border: 1px solid var(--color-border); 87 | box-shadow: none; 88 | color: var(--color-main-text); 89 | 90 | .open-arrow::before { 91 | border-bottom-color: var(--color-border); 92 | } 93 | 94 | .songcontainer-cover { 95 | box-shadow: none; 96 | } 97 | } 98 | 99 | #individual-playlist-header .header-indi { 100 | border-bottom-color: var(--color-border); 101 | } 102 | } 103 | } 104 | 105 | .app-audioplayer #app-sidebar { 106 | #ID3EditorTabView .icon-info { 107 | opacity: 1; 108 | } 109 | } 110 | 111 | #audios_import .ui-progressbar .ui-progressbar-value { 112 | background-color: var(--color-primary); 113 | } 114 | -------------------------------------------------------------------------------- /templates/admin.php: -------------------------------------------------------------------------------- 1 | 6 | * 7 | * @author Magnus Walbeck 8 | * 9 | * @license GNU AGPL version 3 or any later version 10 | * 11 | * This program is free software: you can redistribute it and/or modify 12 | * it under the terms of the GNU Affero General Public License as published by 13 | * the Free Software Foundation, either version 3 of the License, or 14 | * (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU Affero General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Affero General Public License 22 | * along with this program. If not, see . 23 | * 24 | */ 25 | 26 | 27 | script('breezedark', 'settings-admin'); 28 | ?> 29 | 30 |
31 |

t("Breeze Dark")); ?>

32 |

t("A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect.")); ?>

33 | 34 |

t("This setting enforces the usage of this theme for all users. Please note, this prevents users from disabling it or choosing a different theme.")); ?>

35 | > 36 | 37 | 38 |

t("This setting enables the automated activation by the clients' system settings by default, for unauthenticated users and users who have not set a preference.")); ?>

39 | > 40 | 41 | 42 |

t("This setting enables use of the theme for the login page. This only takes effect on the login page itself if the theme is globally enforced, or during login for a user who has the theme enabled.")); ?>

43 | > 44 | 45 | 46 |

t("Custom Styling")); ?>

47 | 48 | 49 |
50 | -------------------------------------------------------------------------------- /css/apps/official/_tasks.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Tasks -------------------------------------------------------------------- */ 8 | 9 | .app-tasks .app-navigation .app-navigation-entry-edit input.action { 10 | background-color: var(--color-background-darker); 11 | } 12 | 13 | .app-tasks .app-content { 14 | .sortorder-dropdown-button { 15 | background-color: var(--color-main-background); 16 | } 17 | 18 | .categories-list span { 19 | background-color: var(--color-main-background); 20 | } 21 | 22 | .task-body { 23 | background-color: var(--color-background-darker); 24 | 25 | &:hover { 26 | background-color: var(--color-background-hover); 27 | } 28 | 29 | &.active .title { 30 | font-weight: 600; 31 | } 32 | 33 | .duedate.overdue { 34 | color: var(--color-error); 35 | } 36 | 37 | .percentdone { 38 | background-color: var(--color-primary) !important; 39 | } 40 | } 41 | 42 | .task-list .loadmore span, 43 | .task-list .loadmore button { 44 | background-color: var(--color-background-darker) !important; 45 | color: var(--color-text-maxcontrast) !important; 46 | } 47 | } 48 | 49 | .app-tasks #app-sidebar div.content-wrapper { 50 | .title { 51 | background-color: var(--color-primary-element); 52 | 53 | .expandable-container { 54 | background: var(--color-main-background); 55 | border-color: var(--color-border); 56 | } 57 | } 58 | 59 | .body .section { 60 | border-bottom: 1px dashed var(--color-border); 61 | 62 | .detail-categories-container .multiselect.multiselect-vue .multiselect__tag, 63 | .detail-calendar-container .multiselect.multiselect-vue .multiselect__tag { 64 | background-color: var(--color-main-background); 65 | } 66 | 67 | input[type="number"] { 68 | background-color: var(--color-background-darker); 69 | } 70 | } 71 | 72 | input[type="checkbox"].checkbox:checked + label::before { 73 | background-color: var(--color-primary-element); 74 | border-color: var(--color-primary-element); 75 | } 76 | 77 | .title .detail-checkbox label:hover::before { 78 | border-color: var(--color-primary); 79 | } 80 | 81 | .footer { 82 | border-top: unset; 83 | } 84 | } 85 | 86 | /* Icons -------------------------------------------------------------------- */ 87 | 88 | .app-tasks { 89 | .sprt-startdate, 90 | .sprt-duedate, 91 | .sprt-current, 92 | .sprt-task-star, 93 | .sprt-percent, 94 | .sprt-tag, 95 | .sprt-trash, 96 | .sprt-hide, 97 | .sprt-pinned, 98 | .sprt-pinned-off, 99 | .sprt-all, 100 | .sprt-checkmark, 101 | .sprt-add, 102 | .sprt-calendar, 103 | .sprt-note, 104 | .sprt-subtasks-hidden { 105 | filter: invert(95%); 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /lib/Migration/MigrateUserThemeSettings.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * @author Magnus Walbeck 11 | * 12 | * @license GNU AGPL version 3 or any later version 13 | * 14 | * This program is free software: you can redistribute it and/or modify 15 | * it under the terms of the GNU Affero General Public License as published by 16 | * the Free Software Foundation, either version 3 of the License, or 17 | * (at your option) any later version. 18 | * 19 | * This program is distributed in the hope that it will be useful, 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | * GNU Affero General Public License for more details. 23 | * 24 | * You should have received a copy of the GNU Affero General Public License 25 | * along with this program. If not, see . 26 | * 27 | */ 28 | 29 | namespace OCA\BreezeDark\Migration; 30 | 31 | use OCP\IConfig; 32 | use OCP\IDBConnection; 33 | use OCP\DB\QueryBuilder\IQueryBuilder; 34 | use OCP\Migration\IOutput; 35 | use OCP\Migration\IRepairStep; 36 | 37 | class MigrateUserThemeSettings implements IRepairStep 38 | { 39 | /** @var IDBConnection */ 40 | private $db; 41 | 42 | /** @var IConfig */ 43 | private $config; 44 | 45 | public function __construct(IDBConnection $db, IConfig $config) 46 | { 47 | $this->db = $db; 48 | $this->config = $config; 49 | } 50 | 51 | public function getName(): string 52 | { 53 | return "Migrate user theme settings"; 54 | } 55 | 56 | public function run(IOutput $output): void 57 | { 58 | $settingsVersion = $this->config->getAppValue("breezedark", "theme_settings_version", "0"); 59 | 60 | if ($settingsVersion >= "3") { 61 | return; 62 | } 63 | 64 | $userQb = $this->db->getQueryBuilder(); 65 | $userQb->select('userid')->from('preferences')->where( 66 | $userQb->expr()->eq('appid', $userQb->createNamedParameter('breezedark'), IQueryBuilder::PARAM_STR), 67 | $userQb->expr()->eq('configkey', $userQb->createNamedParameter('theme_enabled')), 68 | $userQb->expr()->eq('configvalue', $userQb->createNamedParameter('1')) 69 | ); 70 | $result = $userQb->executeQuery(); 71 | 72 | $users = $result->fetchAll(); 73 | 74 | foreach($users as $user) { 75 | $enabledThemes = json_decode($this->config->getUserValue($user["userid"], "theming", "enabled-themes", "[]")); 76 | 77 | $key = array_search("breezedark", $enabledThemes); 78 | 79 | if ($key !== false) { 80 | unset($enabledThemes[$key]); 81 | } 82 | 83 | $this->config->setUserValue($user["userid"], "theming", "enabled-themes", json_encode(array_values(array_unique($enabledThemes)))); 84 | } 85 | 86 | $currentEnforcedTheme = $this->config->getSystemValue("enforce_theme", ""); 87 | 88 | if ($currentEnforcedTheme === "breezedark") { 89 | $this->config->setSystemValue("enforce_theme", "dark"); 90 | } 91 | 92 | $this->config->setAppValue("breezedark", "theme_settings_version", "3"); 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /css/server.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * ============================================================================= 3 | * Breeze Dark for Nextcloud 4 | * Source code: https://github.com/mwalbeck/nextcloud-breeze-dark 5 | * Made with the help of contributors! See AUTHORS.md 6 | * ============================================================================= 7 | * 8 | * @copyright Copyright (C) 2017 Magnus Walbeck 9 | * 10 | * @author Magnus Walbeck 11 | * 12 | * @license GNU AGPL version 3 or any later version 13 | * 14 | * This program is free software: you can redistribute it and/or modify 15 | * it under the terms of the GNU Affero General Public License as published by 16 | * the Free Software Foundation, either version 3 of the License, or 17 | * (at your option) any later version. 18 | * 19 | * This program is distributed in the hope that it will be useful, 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | * GNU Affero General Public License for more details. 23 | * 24 | * You should have received a copy of the GNU Affero General Public License 25 | * along with this program. If not, see . 26 | * 27 | */ 28 | 29 | // General and Nextcloud Core 30 | @import "variables/color-variables"; 31 | @import "base/elements"; 32 | @import "server/server"; 33 | @import "apps/apps"; 34 | @import "server/icons"; 35 | // Core Apps 36 | @import "apps/core/activity"; 37 | @import "apps/core/dashboard"; 38 | @import "apps/core/files"; 39 | @import "apps/core/firstrunwizard"; 40 | @import "apps/core/notifications"; 41 | @import "apps/core/photos"; 42 | @import "apps/core/text"; 43 | // Official Apps 44 | @import "apps/official/announcement-center"; 45 | @import "apps/official/calendar"; 46 | @import "apps/official/circles"; 47 | @import "apps/official/contacts"; 48 | @import "apps/official/deck"; 49 | @import "apps/official/external-sites"; 50 | @import "apps/official/files-texteditor"; 51 | @import "apps/official/forms"; 52 | @import "apps/official/groupfolders"; 53 | @import "apps/official/ldap"; 54 | @import "apps/official/mail"; 55 | @import "apps/official/maps"; 56 | @import "apps/official/news"; 57 | @import "apps/official/notes"; 58 | @import "apps/official/retention"; 59 | @import "apps/official/richdocuments"; 60 | @import "apps/official/spreed"; 61 | @import "apps/official/tasks"; 62 | // Third party apps 63 | @import "apps/thirdparty/analytics"; 64 | @import "apps/thirdparty/audio-player"; 65 | @import "apps/thirdparty/bbb"; 66 | @import "apps/thirdparty/bookmarks"; 67 | @import "apps/thirdparty/collectives"; 68 | @import "apps/thirdparty/cookbook"; 69 | @import "apps/thirdparty/electronicsignatures"; 70 | @import "apps/thirdparty/fulltextsearch"; 71 | @import "apps/thirdparty/gpxpod"; 72 | @import "apps/thirdparty/files-markdown"; 73 | @import "apps/thirdparty/files-markdown-syntax"; 74 | @import "apps/thirdparty/music"; 75 | @import "apps/thirdparty/passman"; 76 | @import "apps/thirdparty/passwords"; 77 | @import "apps/thirdparty/phone-sync"; 78 | @import "apps/thirdparty/phonetrack"; 79 | @import "apps/thirdparty/polls"; 80 | @import "apps/thirdparty/quicknotes"; 81 | @import "apps/thirdparty/snappymail"; 82 | @import "apps/thirdparty/terms-of-service"; 83 | @import "apps/thirdparty/timemanager"; 84 | @import "apps/thirdparty/user-account-deletion"; 85 | @import "apps/thirdparty/weather"; 86 | -------------------------------------------------------------------------------- /lib/Settings/Personal.php: -------------------------------------------------------------------------------- 1 | 9 | * 10 | * @author Magnus Walbeck 11 | * 12 | * @license GNU AGPL version 3 or any later version 13 | * 14 | * This program is free software: you can redistribute it and/or modify 15 | * it under the terms of the GNU Affero General Public License as published by 16 | * the Free Software Foundation, either version 3 of the License, or 17 | * (at your option) any later version. 18 | * 19 | * This program is distributed in the hope that it will be useful, 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | * GNU Affero General Public License for more details. 23 | * 24 | * You should have received a copy of the GNU Affero General Public License 25 | * along with this program. If not, see . 26 | * 27 | */ 28 | 29 | namespace OCA\BreezeDark\Settings; 30 | 31 | use OCP\App\IAppManager; 32 | use OCP\AppFramework\Http\TemplateResponse; 33 | use OCP\IConfig; 34 | use OCP\Settings\ISettings; 35 | use OCP\IUserSession; 36 | 37 | class Personal implements ISettings 38 | { 39 | 40 | /** @var string */ 41 | protected $appName; 42 | 43 | /** @var IConfig */ 44 | private $config; 45 | 46 | /** @var string */ 47 | private $userId; 48 | 49 | /** @var string */ 50 | private $appWebPath; 51 | 52 | /** 53 | * @param string $appName 54 | * @param IConfig $config 55 | * @param IUserSession $userSession 56 | * @param IAppManager $appManager 57 | */ 58 | public function __construct( 59 | string $appName, 60 | IConfig $config, 61 | IUserSession $userSession, 62 | IAppManager $appManager 63 | ) { 64 | $this->appName = $appName; 65 | $this->config = $config; 66 | $this->userId = $userSession->getUser()->getUID(); 67 | $this->appWebPath = $appManager->getAppWebPath($appName); 68 | } 69 | 70 | /** 71 | * @return TemplateResponse 72 | */ 73 | public function getForm(): TemplateResponse 74 | { 75 | $themeEnforced = $this->config->getAppValue($this->appName, 'theme_enforced', "0"); 76 | $defaultAutomaticActivation = $this->config->getAppValue($this->appName, 'theme_automatic_activation_enabled', "0"); 77 | $themeEnabled = $this->config->getUserValue($this->userId, $this->appName, 'theme_enabled', "0"); 78 | $themeAutomaticActivation = $this->config->getUserValue($this->userId, $this->appName, 'theme_automatic_activation_enabled', $defaultAutomaticActivation); 79 | return new TemplateResponse('breezedark', 'personal', [ 80 | "themeEnforced" => $themeEnforced, 81 | "themeEnabled" => $themeEnabled, 82 | "themeAutomaticActivation" => $themeAutomaticActivation, 83 | "appWebPath" => $this->appWebPath 84 | ]); 85 | } 86 | 87 | /** 88 | * @return string 89 | */ 90 | public function getSection(): string 91 | { 92 | return 'theming'; 93 | } 94 | 95 | /** 96 | * @return int 97 | */ 98 | public function getPriority(): int 99 | { 100 | return 50; 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /css/apps/official/_calendar.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Calendar ----------------------------------------------------------------- */ 8 | 9 | .app-calendar .app-content { 10 | .fc-highlight { 11 | background: var(--color-background-hover); 12 | opacity: unset; 13 | } 14 | 15 | .fc .fc-cell-shaded { 16 | background-color: var(--color-border); 17 | } 18 | 19 | .fc-daygrid-week-number { 20 | background-color: var(--color-background-darker); 21 | border-bottom: 1px solid var(--color-border); 22 | border-right: 1px solid var(--color-border); 23 | color: var(--color-text-maxcontrast); 24 | } 25 | 26 | .fc .fc-daygrid-day.fc-day-today, 27 | .fc .fc-timegrid-col.fc-day-today, 28 | .fc-day-today.fc-col-header-cell { 29 | background-color: var(--color-background-hover) !important; 30 | } 31 | 32 | .fc-day-today.fc-col-header-cell a, 33 | .fc-day-today.fc-col-header-cell span { 34 | background-color: unset !important; 35 | } 36 | 37 | .fc-daygrid-day.fc-day.fc-day-other, 38 | .fc .fc-daygrid-day.fc-day-today.fc-day-other { 39 | background-color: var(--color-background-darker) !important; 40 | border-color: var(--color-border); 41 | opacity: 0.5; 42 | } 43 | 44 | .fc .fc-timeGridDay-view .fc-daygrid-day.fc-day-today, 45 | .fc .fc-timeGridDay-view .fc-timegrid-col.fc-day-today, 46 | .fc .fc-timeGridDay-view .fc-day-today.fc-col-header-cell { 47 | background-color: inherit !important; 48 | } 49 | } 50 | 51 | .app-calendar .app-sidebar { 52 | .app-sidebar-tabs__nav .app-sidebar-tabs__tab a.active { 53 | border-bottom-color: var(--color-primary-element); 54 | box-shadow: inset 0 -1px 0 var(--color-primary-element); 55 | } 56 | 57 | .repeat-option-set-section-grid-item { 58 | &:active, 59 | &:focus { 60 | background-color: var(--color-main-background); 61 | border-color: var(--color-border); 62 | } 63 | 64 | &:hover { 65 | background-color: var(--color-background-hover); 66 | border-color: var(--color-primary-element); 67 | } 68 | } 69 | 70 | .repeat-option-set-section-grid-item.primary { 71 | background-color: var(--color-primary-element) !important; 72 | border-color: var(--color-primary-element) !important; 73 | 74 | &:hover { 75 | background-color: var(--color-background-hover) !important; 76 | } 77 | } 78 | } 79 | 80 | .modal--scheduler .fc .fc-button-primary { 81 | background-color: var(--color-main-background); 82 | border-color: var(--color-border); 83 | color: var(--color-main-text); 84 | 85 | &:hover { 86 | background-color: var(--color-main-background); 87 | border-color: var(--color-primary-element); 88 | } 89 | 90 | &:focus { 91 | box-shadow: none; 92 | } 93 | } 94 | 95 | // New styling for vue 96 | 97 | #content-vue 98 | .app-navigation-entry__counter-wrapper 99 | .action-item.sharing 100 | .material-design-icon.share { 101 | opacity: 1; 102 | } 103 | 104 | .popover.open .action-link { 105 | opacity: 1; 106 | } 107 | -------------------------------------------------------------------------------- /appinfo/info.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | breezedark 5 | Breeze Dark 6 | 7 | Administration > Theming > Breeze Dark 27 | ``` 28 | 29 | ### Personal 30 | 31 | The personal option allows each user to enable / disable the theme unless it's being enforced by the global options. They can though choose whether the theme should follow the theming choice reported by the browser. This option is also available when the theme is being enforced globally. If the user hasn't set a preference they will follow the global default. You can find the personal option here: 32 | 33 | ``` 34 | Settings > Personal > Appearance and accessibility > Breeze Dark 35 | ``` 36 | 37 | ### Custom styling 38 | 39 | Under the Theming section in the admin settings you can add your own custom styling to the theme. Only standard CSS can be used. This custom styling will be applied whenever the theme is enabled and only affects the Breeze Dark theme. 40 | ]]> 41 | 29.0.0 42 | agpl 43 | Magnus Walbeck 44 | BreezeDark 45 | customization 46 | https://github.com/mwalbeck/nextcloud-breeze-dark 47 | https://github.com/mwalbeck/nextcloud-breeze-dark/issues 48 | https://raw.githubusercontent.com/mwalbeck/nextcloud-breeze-dark/master/screenshot.png 49 | 50 | 51 | 52 | 53 | 54 | OCA\BreezeDark\Migration\MigrateUserThemeSettings 55 | 56 | 57 | OCA\BreezeDark\Migration\InstallRestoreSettings 58 | 59 | 60 | OCA\BreezeDark\Migration\UninstallCleanup 61 | 62 | 63 | 64 | OCA\BreezeDark\Settings\Personal 65 | OCA\BreezeDark\Settings\Admin 66 | 67 | 68 | -------------------------------------------------------------------------------- /js/settings-personal.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Breeze Dark theme for Nextcloud 3 | * 4 | * @copyright Copyright (C) 2020 Magnus Walbeck 5 | * 6 | * @author Magnus Walbeck 7 | * 8 | * @license GNU AGPL version 3 or any later version 9 | * 10 | * This program is free software: you can redistribute it and/or modify 11 | * it under the terms of the GNU Affero General Public License as published by 12 | * the Free Software Foundation, either version 3 of the License, or 13 | * (at your option) any later version. 14 | * 15 | * This program is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | * GNU Affero General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Affero General Public License 21 | * along with this program. If not, see . 22 | * 23 | */ 24 | 25 | window.addEventListener("DOMContentLoaded", function () { 26 | $("#breezedark-enabled").change(function () { 27 | $.post(OC.generateUrl("apps/breezedark/settings"), { 28 | theme_enabled: this.checked ? 1 : 0, 29 | theme_automatic_activation_enabled: $("#breezedark-automatic-activation-enabled").prop( 30 | "checked" 31 | ) 32 | ? 1 33 | : 0, 34 | }) 35 | .done(function () { 36 | $("label[for='breezedark-enabled']").append( 37 | " " + 38 | t("breezedark", "Saved") + 39 | "" 40 | ); 41 | setTimeout(function () { 42 | $("#breezedark-enabled-msg").remove(); 43 | }, 3000); 44 | }) 45 | .fail(function () { 46 | $("label[for='breezedark-enabled']").append( 47 | " " + 48 | t("breezedark", "Error") + 49 | "" 50 | ); 51 | setTimeout(function () { 52 | $("#breezedark-enabled-msg").remove(); 53 | }, 3000); 54 | }); 55 | }); 56 | 57 | $("#breezedark-automatic-activation-enabled").change(function () { 58 | $.post(OC.generateUrl("apps/breezedark/settings"), { 59 | theme_enabled: $("#breezedark-enabled").prop("checked") ? 1 : 0, 60 | theme_automatic_activation_enabled: this.checked ? 1 : 0, 61 | }) 62 | .done(function () { 63 | $("label[for='breezedark-automatic-activation-enabled']").append( 64 | " " + 65 | t("breezedark", "Saved") + 66 | "" 67 | ); 68 | setTimeout(function () { 69 | $("#breezedark-automatic-activation-enabled-msg").remove(); 70 | }, 3000); 71 | }) 72 | .fail(function () { 73 | $("label[for='breezedark-automatic-activation-enabled']").append( 74 | " " + 75 | t("breezedark", "Error") + 76 | "" 77 | ); 78 | setTimeout(function () { 79 | $("#breezedark-automatic-activation-enabled-msg").remove(); 80 | }, 3000); 81 | }); 82 | }); 83 | }); 84 | -------------------------------------------------------------------------------- /l10n/id.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Disimpan", 3 | "Error" : "Galat", 4 | "# Breeze Dark\nThis is a breeze dark theme for Nextcloud, based on the Breeze Dark theme made by the KDE Project.\n\n## Usage\n\nAfter you install the theme, you need to enable it. There are two options for this, a global and a personal one.\n\n### Global\n\nWith the global options you can enforce the use of the theme for all users as well as unauthenticated visits. Please note that when the theme is enforced for all users it isn't possible for them to disable the theme or choose a different theme.\n\nThere is also an option to let the theme be enabled / disabled based on the theming preferences reported by browser. When the theme is deactivated using this method, Nextcloud will revert to using the default light theme. This setting only sets the default for when the theme is globally enforced and can be overridden by the user.\n\nYou can also choose whether the login page should be themed. Though this only has an effect if the theme is enforced globally, or during the login phase of a user that has the theme enabled.\n\nYou can find the global options here:\n\n```\nSettings > Administration > Theming > Breeze Dark\n```\n\n### Personal\n\nThe personal option allows each user to enable / disable the theme unless it's being enforced by the global options. They can though choose whether the theme should follow the theming choice reported by the browser. This option is also available when the theme is being enforced globally. If the user hasn't set a preference they will follow the global default. You can find the personal option here:\n\n```\nSettings > Personal > Appearance and accessibility > Breeze Dark\n```\n\n### Custom styling\n\nUnder the Theming section in the admin settings you can add your own custom styling to the theme. Only standard CSS can be used. This custom styling will be applied whenever the theme is enabled and only affects the Breeze Dark theme." : "# Angin Gelap\nIni adalah tema Breeze untuk Nextcloud, berdasarkan tema Breeze Dark yang dibuat oleh proyek KDE.\n\n## Penggunaan\n\nSetelah Anda menginstal tema, Anda harus mengaktifkannya. Ada dua opsi untuk ini, global dan pribadi.\n\n### Global\n\nDengan opsi global, Anda dapat menerapkan penggunaan tema untuk semua pengguna serta kunjungan yang tidak diautentikasi. Perhatikan bahwa ketika tema diterapkan untuk semua pengguna, mereka tidak dapat menonaktifkan tema atau memilih tema lain.\n\nAda juga opsi untuk mengaktifkan/menonaktifkan tema berdasarkan preferensi tema yang dilaporkan oleh browser. Saat tema dinonaktifkan menggunakan metode ini, Nextcloud akan kembali menggunakan tema terang bawaan. Setelan ini hanya menyetel bawaan saat tema diterapkan secara global dan dapat diganti oleh pengguna.\n\nAnda juga dapat memilih apakah halaman masuk harus bertema. Meskipun ini hanya berpengaruh jika tema diterapkan secara global, atau selama fase masuk pengguna yang temanya diaktifkan.\n\nAnda dapat menemukan opsi global di sini:\n\n```\nSetelan > Administrasi > Tema > Breeze Dark\n```\n\n### Pribadi\n\nOpsi pribadi memungkinkan setiap pengguna untuk mengaktifkan/menonaktifkan tema kecuali jika diterapkan oleh opsi global. Namun mereka dapat memilih apakah tema harus mengikuti pilihan tema yang dilaporkan oleh browser. Opsi ini juga tersedia saat tema diterapkan secara global. Jika pengguna belum menetapkan preferensi, mereka akan mengikuti bawaan global. Anda dapat menemukan opsi pribadi di sini:\n\n```\nSetelan > Pribadi > Tampilan dan aksesibilitas > Breeze Dark\n```\n\n### Gaya kustom\n\nDi bawah bagian Theming di pengaturan admin Anda dapat menambahkan gaya kustom Anda sendiri ke tema. Hanya CSS standar yang dapat digunakan. Penataan gaya khusus ini akan diterapkan setiap kali tema diaktifkan dan hanya memengaruhi tema Breeze Dark.", 5 | "Save" : "Simpan" 6 | },"pluralForm" :"nplurals=1; plural=0;" 7 | } -------------------------------------------------------------------------------- /l10n/id.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Disimpan", 5 | "Error" : "Galat", 6 | "# Breeze Dark\nThis is a breeze dark theme for Nextcloud, based on the Breeze Dark theme made by the KDE Project.\n\n## Usage\n\nAfter you install the theme, you need to enable it. There are two options for this, a global and a personal one.\n\n### Global\n\nWith the global options you can enforce the use of the theme for all users as well as unauthenticated visits. Please note that when the theme is enforced for all users it isn't possible for them to disable the theme or choose a different theme.\n\nThere is also an option to let the theme be enabled / disabled based on the theming preferences reported by browser. When the theme is deactivated using this method, Nextcloud will revert to using the default light theme. This setting only sets the default for when the theme is globally enforced and can be overridden by the user.\n\nYou can also choose whether the login page should be themed. Though this only has an effect if the theme is enforced globally, or during the login phase of a user that has the theme enabled.\n\nYou can find the global options here:\n\n```\nSettings > Administration > Theming > Breeze Dark\n```\n\n### Personal\n\nThe personal option allows each user to enable / disable the theme unless it's being enforced by the global options. They can though choose whether the theme should follow the theming choice reported by the browser. This option is also available when the theme is being enforced globally. If the user hasn't set a preference they will follow the global default. You can find the personal option here:\n\n```\nSettings > Personal > Appearance and accessibility > Breeze Dark\n```\n\n### Custom styling\n\nUnder the Theming section in the admin settings you can add your own custom styling to the theme. Only standard CSS can be used. This custom styling will be applied whenever the theme is enabled and only affects the Breeze Dark theme." : "# Angin Gelap\nIni adalah tema Breeze untuk Nextcloud, berdasarkan tema Breeze Dark yang dibuat oleh proyek KDE.\n\n## Penggunaan\n\nSetelah Anda menginstal tema, Anda harus mengaktifkannya. Ada dua opsi untuk ini, global dan pribadi.\n\n### Global\n\nDengan opsi global, Anda dapat menerapkan penggunaan tema untuk semua pengguna serta kunjungan yang tidak diautentikasi. Perhatikan bahwa ketika tema diterapkan untuk semua pengguna, mereka tidak dapat menonaktifkan tema atau memilih tema lain.\n\nAda juga opsi untuk mengaktifkan/menonaktifkan tema berdasarkan preferensi tema yang dilaporkan oleh browser. Saat tema dinonaktifkan menggunakan metode ini, Nextcloud akan kembali menggunakan tema terang bawaan. Setelan ini hanya menyetel bawaan saat tema diterapkan secara global dan dapat diganti oleh pengguna.\n\nAnda juga dapat memilih apakah halaman masuk harus bertema. Meskipun ini hanya berpengaruh jika tema diterapkan secara global, atau selama fase masuk pengguna yang temanya diaktifkan.\n\nAnda dapat menemukan opsi global di sini:\n\n```\nSetelan > Administrasi > Tema > Breeze Dark\n```\n\n### Pribadi\n\nOpsi pribadi memungkinkan setiap pengguna untuk mengaktifkan/menonaktifkan tema kecuali jika diterapkan oleh opsi global. Namun mereka dapat memilih apakah tema harus mengikuti pilihan tema yang dilaporkan oleh browser. Opsi ini juga tersedia saat tema diterapkan secara global. Jika pengguna belum menetapkan preferensi, mereka akan mengikuti bawaan global. Anda dapat menemukan opsi pribadi di sini:\n\n```\nSetelan > Pribadi > Tampilan dan aksesibilitas > Breeze Dark\n```\n\n### Gaya kustom\n\nDi bawah bagian Theming di pengaturan admin Anda dapat menambahkan gaya kustom Anda sendiri ke tema. Hanya CSS standar yang dapat digunakan. Penataan gaya khusus ini akan diterapkan setiap kali tema diaktifkan dan hanya memengaruhi tema Breeze Dark.", 7 | "Save" : "Simpan" 8 | }, 9 | "nplurals=1; plural=0;"); 10 | -------------------------------------------------------------------------------- /css/apps/thirdparty/_music.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2017, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Music -------------------------------------------------------------------- */ 8 | 9 | .app-music #app-navigation { 10 | .app-navigation-separator { 11 | border-bottom-color: var(--color-border); 12 | } 13 | 14 | li.drag-hover { 15 | background-color: var(--color-background-hover); 16 | } 17 | } 18 | 19 | .app-music #app-content { 20 | #emptycontent, 21 | .emptycontent { 22 | background-color: var(--color-main-background); 23 | } 24 | 25 | #toScan:hover * { 26 | color: var(--color-main-text); 27 | } 28 | 29 | .alphabet-navigation a { 30 | opacity: 0.2; 31 | 32 | &.available { 33 | opacity: 0.7; 34 | } 35 | 36 | &.available:hover { 37 | opacity: 1; 38 | } 39 | } 40 | 41 | #controls { 42 | background-color: var(--color-main-background); 43 | border-bottom: 1px solid var(--color-border); 44 | 45 | .progress, 46 | .seek-bar { 47 | background-color: var(--color-background-darker); 48 | } 49 | 50 | .buffer-bar { 51 | background-color: var(--color-background-hover); 52 | opacity: 1; 53 | } 54 | 55 | .play-bar { 56 | background-color: var(--color-primary-element); 57 | } 58 | } 59 | 60 | #app-sidebar { 61 | .close, 62 | #follow-playback { 63 | background-color: unset; 64 | } 65 | } 66 | 67 | #music-user .warning a { 68 | color: var(--color-text-link) !important; 69 | } 70 | } 71 | 72 | #music-controls { 73 | background-color: var(--color-main-background) !important; 74 | border-top: 1px solid var(--color-border); 75 | 76 | #albumart { 77 | border: unset !important; 78 | } 79 | 80 | .seek-bar { 81 | background-color: var(--color-background-darker) !important; 82 | } 83 | 84 | .buffer-bar { 85 | background-color: var(--color-background-hover) !important; 86 | opacity: 1 !important; 87 | } 88 | 89 | .play-bar { 90 | background-color: var(--color-primary-element) !important; 91 | } 92 | } 93 | 94 | /* Icons -------------------------------------------------------------------- */ 95 | 96 | .app-music { 97 | //follow-playback icon 98 | #app-sidebar #follow-playback { 99 | filter: invert(95%); 100 | } 101 | 102 | // Play button on album covers 103 | img.play.svg { 104 | filter: invert(95%); 105 | } 106 | 107 | // Settings icon 108 | .music-nav-settings img.svg { 109 | filter: invert(95%); 110 | } 111 | 112 | #app-content .play-pause { 113 | filter: invert(95%); 114 | } 115 | 116 | #app-navigation .play-pause { 117 | filter: unset; 118 | } 119 | 120 | .icon-album, 121 | .icon-folder-nav, 122 | .icon-audiotrack, 123 | .icon-library-music, 124 | .icon-radio, 125 | .icon-podcast, 126 | .icon-play-big, 127 | .icon-pause-big { 128 | filter: invert(95%); 129 | } 130 | } 131 | 132 | // Music app: icons for Music player controls in files and in app 133 | #music-controls img.control, 134 | .app-music img.control { 135 | filter: invert(95%); 136 | } 137 | 138 | // Music App: Mini play button 139 | .current.playing .play-pause, 140 | .current:not(.playing) .play-pause, 141 | #app-view :hover > .play-pause, 142 | #app-view .current.playing div:hover .play-pause { 143 | filter: invert(95%); 144 | } 145 | 146 | // Music app: Play option in file action menu in Files App 147 | .fileActionsMenu .action-music-play img.icon { 148 | filter: invert(95%); 149 | } 150 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Breeze Dark Theme 2 | 3 | This is a Breeze Dark Theme for [Nextcloud](https://nextcloud.com) based on the Breeze Dark theme made by the KDE Project. 4 | 5 | ![screenshot of theme](screenshot.png) 6 | 7 | If you have any questions, problems or anything else you're welcome to come hangout in the dedicated matrix room: #nextcloud-breeze-dark:mwalbeck.org 8 | 9 | ## Supported versions 10 | 11 | The currently supported and maintained Nextcloud releases are: 12 | 13 | - Nextcloud 29 14 | - Nextcloud 28 15 | 16 | I try my best to maintain 2 Nextcloud releases at once, to allow for smoother transitions, but for various reason I might decide to drop support for older releases early. 17 | 18 | Previous unmaintained releases: 19 | 20 | - Nextcloud 17-27 (App) 21 | - Nextcloud 11-16 (Theme folder) 22 | 23 | ## Version numbering 24 | 25 | This project follows semantic versioning. The major version number also follows the Nextcloud version the specific release is intended for to make it easier to know what Nextcloud version the release works with. 26 | 27 | ## Installation 28 | 29 | It's available in the [Nextcloud app store](https://apps.nextcloud.com/apps/breezedark), just search for Breeze Dark, or look under customizations. 30 | 31 | Or you can clone this repo into your app folder and enable it in the app menu in Nextcloud. 32 | 33 | ## Usage 34 | 35 | After you install the theme, you need to enable it. There are two options for this, a global and a personal one. 36 | 37 | ### Global 38 | 39 | With the global options you can enforce the use of the theme for all users as well as unauthenticated visits. Please note that when the theme is enforced for all users it isn't possible for them to disable the theme or choose a different theme. 40 | 41 | There is also an option to let the theme be enabled / disabled based on the theming preferences reported by browser. When the theme is deactivated using this method, Nextcloud will revert to using the default light theme. This setting only sets the default for when the theme is globally enforced and can be overridden by the user. 42 | 43 | You can also choose whether the login page should be themed. Though this only has an effect if the theme is enforced globally, or during the login phase of a user that has the theme enabled. 44 | 45 | You can find the global options here: 46 | 47 | ``` 48 | Settings > Administration > Theming > Breeze Dark 49 | ``` 50 | 51 | ### Personal 52 | 53 | The personal option allows each user to enable / disable the theme unless it's being enforced by the global options. They can though choose whether the theme should follow the theming choice reported by the browser. This option is also available when the theme is being enforced globally. If the user hasn't set a preference they will follow the global default. You can find the personal option here: 54 | 55 | ``` 56 | Settings > Personal > Appearance and accessibility > Breeze Dark 57 | ``` 58 | 59 | ### Custom styling 60 | 61 | Under the Theming section in the admin settings you can add your own custom styling to the theme. Only standard CSS can be used. This custom styling will be applied whenever the theme is enabled and only affects the Breeze Dark theme. 62 | 63 | ## Contributions 64 | 65 | ### Issues 66 | 67 | If you find an issue with the theme I would greatly appreciate it if you opened a bug report, so it can be fixed. 68 | 69 | You're also very welcome to open a styling request, if there is an app you would like to see supported by this theme. 70 | 71 | A full list of supported apps can be found on the [wiki](https://github.com/mwalbeck/nextcloud-breeze-dark/wiki/Styled-apps). 72 | 73 | ## Donations 74 | 75 | If you like the theme and would like to donate you can use the following ways: 76 | 77 | **Liberapay:** 78 | https://liberapay.com/mwalbeck/ 79 | 80 | **Ko-fi:** 81 | https://ko-fi.com/mwalbeck 82 | 83 | **PayPal:** 84 | https://www.paypal.me/magnuswalbeck 85 | 86 | **Crypto:** 87 | BTC: bc1ql59kgyrhx0l252d8xan2rrvrtz64j2zr8zucmf 88 | LTC: ltc1qzn9appss8ecadz9yts46u4vacm9ehwhc29uq4d 89 | XMR: 84eXmuNS5RKWnn3YqAmk71U8EkHi2dqLRZN87si5UUdoQp9YPCwL4WFVz84j5hcDmZPkHzFVwM1aGDTfpdaFqQ64PuuLUj2 90 | 91 | Thank you! 92 | -------------------------------------------------------------------------------- /css/apps/official/_maps.scss: -------------------------------------------------------------------------------- 1 | /*** 2 | * @copyright Copyright (c) 2020, Magnus Walbeck 3 | * 4 | * @license GNU AGPL version 3 or any later version, see COPYING file for more. 5 | */ 6 | 7 | /* Maps --------------------------------------------------------------------- */ 8 | 9 | .app-maps #app-navigation { 10 | #navigation-favorites:not(.active), 11 | #navigation-routing:not(.active), 12 | #navigation-photos:not(.active), 13 | #navigation-contacts:not(.active), 14 | #navigation-tracks:not(.active), 15 | #navigation-devices:not(.active) { 16 | > a, 17 | > .app-navigation-entry-utils { 18 | opacity: 0.57 !important; 19 | } 20 | 21 | > .app-navigation-entry-menu { 22 | opacity: 1 !important; 23 | } 24 | 25 | > .app-navigation-entry-menu > * { 26 | opacity: 0.57 !important; 27 | } 28 | } 29 | } 30 | 31 | .app-maps #app-content { 32 | #search-form #search-submit { 33 | background-color: transparent !important; 34 | border: unset !important; 35 | } 36 | 37 | .leaflet-container { 38 | background-color: var(--color-main-background); 39 | } 40 | 41 | .leaflet-control-container .leaflet-routing-container { 42 | background-color: var(--color-main-background); 43 | border: 1px solid var(--color-border); 44 | 45 | .leaflet-routing-geocoders { 46 | border-bottom: unset; 47 | } 48 | 49 | .leaflet-routing-geocoders input { 50 | border-color: var(--color-border); 51 | } 52 | 53 | .leaflet-routing-geocoders button { 54 | background-color: var(--color-main-background); 55 | border-color: var(--color-border); 56 | } 57 | 58 | .leaflet-routing-geocoders .exportCurrentRoute { 59 | border-bottom: 1px solid var(--color-border); 60 | } 61 | 62 | &.leaflet-bar button { 63 | background-color: var(--color-main-background) !important; 64 | color: var(--color-main-text) !important; 65 | } 66 | 67 | &.leaflet-bar button:hover { 68 | background-color: var(--color-background-hover) !important; 69 | } 70 | } 71 | 72 | .leaflet-contextmenu { 73 | background-color: var(--color-main-background); 74 | border: 1px solid var(--color-border); 75 | box-shadow: none; 76 | 77 | .leaflet-contextmenu-item.over { 78 | background-color: var(--color-background-hover); 79 | border-color: var(--color-background-hover); 80 | } 81 | 82 | .leaflet-contextmenu-separator { 83 | border-bottom-color: var(--color-border); 84 | } 85 | } 86 | 87 | .leaflet-routing-alt { 88 | tr:hover { 89 | background-color: var(--color-background-hover); 90 | } 91 | 92 | tr:nth-child(2n + 1) { 93 | background-color: var(--color-background-darker); 94 | } 95 | } 96 | 97 | .leaflet-routing-alt, 98 | .leaflet-routing-error { 99 | border-bottom-color: var(--color-border); 100 | } 101 | } 102 | 103 | .leaflet-routing-geocoder-result table { 104 | background-color: var(--color-main-background) !important; 105 | border-color: var(--color-border) !important; 106 | 107 | tr:hover, 108 | .leaflet-routing-geocoder-selected { 109 | background-color: var(--color-background-hover); 110 | } 111 | } 112 | 113 | /* Icons -------------------------------------------------------------------- */ 114 | 115 | // Filtered images 116 | 117 | .app-maps #app-content { 118 | img[src$="star-dark?color=000000"], 119 | img[src$="picture?color=000000"], 120 | img[src$="user?color=000000"], 121 | img[src$="share?color=000000"], 122 | img[src$="recent.svg"], 123 | img[src$="triangle-s.svg"], 124 | img[src$="triangle-e.svg"], 125 | img[src$="poi_place_town.p.20.png"], 126 | img[src$="poi_place_village.p.20.png"], 127 | .leaflet-routing-icon { 128 | filter: invert(95%); 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /l10n/es_AR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Guardado", 3 | "Error" : "Error", 4 | "# Breeze Dark\nThis is a breeze dark theme for Nextcloud, based on the Breeze Dark theme made by the KDE Project.\n\n## Usage\n\nAfter you install the theme, you need to enable it. There are two options for this, a global and a personal one.\n\n### Global\n\nWith the global options you can enforce the use of the theme for all users as well as unauthenticated visits. Please note that when the theme is enforced for all users it isn't possible for them to disable the theme or choose a different theme.\n\nThere is also an option to let the theme be enabled / disabled based on the theming preferences reported by browser. When the theme is deactivated using this method, Nextcloud will revert to using the default light theme. This setting only sets the default for when the theme is globally enforced and can be overridden by the user.\n\nYou can also choose whether the login page should be themed. Though this only has an effect if the theme is enforced globally, or during the login phase of a user that has the theme enabled.\n\nYou can find the global options here:\n\n```\nSettings > Administration > Theming > Breeze Dark\n```\n\n### Personal\n\nThe personal option allows each user to enable / disable the theme unless it's being enforced by the global options. They can though choose whether the theme should follow the theming choice reported by the browser. This option is also available when the theme is being enforced globally. If the user hasn't set a preference they will follow the global default. You can find the personal option here:\n\n```\nSettings > Personal > Appearance and accessibility > Breeze Dark\n```\n\n### Custom styling\n\nUnder the Theming section in the admin settings you can add your own custom styling to the theme. Only standard CSS can be used. This custom styling will be applied whenever the theme is enabled and only affects the Breeze Dark theme." : "# Breeze Dark\nEste es un tema breeze dark para Nextcloud, basado en el tema Breeze Dark realizado por el Proyecto KDE.\n\n## Uso\n\nLuego de instalar el tema, debe habilitarlo. Existen dos opciones para hacerlo, una es global, y la otra personal.\n\n### Global\n\nCon las opciones globales puede hacer que el tema sea obligatorio para todos los usuarios, así como para las visitas no autenticadas. Tenga en cuenta que cuando el tema está establecido como obligatorio para todos los usuarios, no les será posible cambiarlo por otro tema o deshabilitarlo.\n\nExiste también una opción para permitir que el tema sea habilitado/deshabilitado basándose en las preferencias de tematización reportadas por el navegador. Cuando el tema es deshabilitado mediante este método, Nextcloud revertirá al tema claro por defecto. Este ajuste solo establece la opción por defecto cuando el tema es establecido como obligatorio de manera global y sigue siendo posible para el usuario cambiarlo.\n\nTambién puede decidir si la página de ingreso deberá estar tematizada. Aunque esto solo tendrá efecto si el tema está establecido como obligatorio globalmente, o, durante la etapa de ingreso de un usuario que tenga el tema habilitado.\n\nPuede encontrar las opciones globales aquí:\n\n```\nAjustes de administración > Tema > Breeze Dark\n```\n\n### Personal\n\nLa opción personal permite a cada usuario decidir si habilitará/deshabilitará el tema a menos de que este haya sido establecido como obligatorio en las opciones globales. Sin embargo, pueden decidir si el tema debe seguir las preferencias de tematización reportadas por el navegador. Esta opción también está disponible cuando el tema ha sido establecido como obligatorio globalmente. Si el usuario no ha establecido una preferencia entonces, estas seguirán los valores por defectos globales. Puede encontrar las opciones personales aquí:\n\n```\nAjustes personales > Apariencia y accesibilidad > Breeze Dark\n```\n\n### Estilos personalizados\n\nBajo la sección de temas en los ajustes de administración puede añadir sus propios estilos personalizados al tema. Sólo puede usarse CSS estándar. Este estilo personalizado será aplicado siempre que el tema esté habilitado y sólo afecta al tema Breeze Dark.", 5 | "Save" : "Guardar" 6 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 7 | } -------------------------------------------------------------------------------- /l10n/es_AR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "Guardado", 5 | "Error" : "Error", 6 | "# Breeze Dark\nThis is a breeze dark theme for Nextcloud, based on the Breeze Dark theme made by the KDE Project.\n\n## Usage\n\nAfter you install the theme, you need to enable it. There are two options for this, a global and a personal one.\n\n### Global\n\nWith the global options you can enforce the use of the theme for all users as well as unauthenticated visits. Please note that when the theme is enforced for all users it isn't possible for them to disable the theme or choose a different theme.\n\nThere is also an option to let the theme be enabled / disabled based on the theming preferences reported by browser. When the theme is deactivated using this method, Nextcloud will revert to using the default light theme. This setting only sets the default for when the theme is globally enforced and can be overridden by the user.\n\nYou can also choose whether the login page should be themed. Though this only has an effect if the theme is enforced globally, or during the login phase of a user that has the theme enabled.\n\nYou can find the global options here:\n\n```\nSettings > Administration > Theming > Breeze Dark\n```\n\n### Personal\n\nThe personal option allows each user to enable / disable the theme unless it's being enforced by the global options. They can though choose whether the theme should follow the theming choice reported by the browser. This option is also available when the theme is being enforced globally. If the user hasn't set a preference they will follow the global default. You can find the personal option here:\n\n```\nSettings > Personal > Appearance and accessibility > Breeze Dark\n```\n\n### Custom styling\n\nUnder the Theming section in the admin settings you can add your own custom styling to the theme. Only standard CSS can be used. This custom styling will be applied whenever the theme is enabled and only affects the Breeze Dark theme." : "# Breeze Dark\nEste es un tema breeze dark para Nextcloud, basado en el tema Breeze Dark realizado por el Proyecto KDE.\n\n## Uso\n\nLuego de instalar el tema, debe habilitarlo. Existen dos opciones para hacerlo, una es global, y la otra personal.\n\n### Global\n\nCon las opciones globales puede hacer que el tema sea obligatorio para todos los usuarios, así como para las visitas no autenticadas. Tenga en cuenta que cuando el tema está establecido como obligatorio para todos los usuarios, no les será posible cambiarlo por otro tema o deshabilitarlo.\n\nExiste también una opción para permitir que el tema sea habilitado/deshabilitado basándose en las preferencias de tematización reportadas por el navegador. Cuando el tema es deshabilitado mediante este método, Nextcloud revertirá al tema claro por defecto. Este ajuste solo establece la opción por defecto cuando el tema es establecido como obligatorio de manera global y sigue siendo posible para el usuario cambiarlo.\n\nTambién puede decidir si la página de ingreso deberá estar tematizada. Aunque esto solo tendrá efecto si el tema está establecido como obligatorio globalmente, o, durante la etapa de ingreso de un usuario que tenga el tema habilitado.\n\nPuede encontrar las opciones globales aquí:\n\n```\nAjustes de administración > Tema > Breeze Dark\n```\n\n### Personal\n\nLa opción personal permite a cada usuario decidir si habilitará/deshabilitará el tema a menos de que este haya sido establecido como obligatorio en las opciones globales. Sin embargo, pueden decidir si el tema debe seguir las preferencias de tematización reportadas por el navegador. Esta opción también está disponible cuando el tema ha sido establecido como obligatorio globalmente. Si el usuario no ha establecido una preferencia entonces, estas seguirán los valores por defectos globales. Puede encontrar las opciones personales aquí:\n\n```\nAjustes personales > Apariencia y accesibilidad > Breeze Dark\n```\n\n### Estilos personalizados\n\nBajo la sección de temas en los ajustes de administración puede añadir sus propios estilos personalizados al tema. Sólo puede usarse CSS estándar. Este estilo personalizado será aplicado siempre que el tema esté habilitado y sólo afecta al tema Breeze Dark.", 7 | "Save" : "Guardar" 8 | }, 9 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 10 | -------------------------------------------------------------------------------- /l10n/zh_HK.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "已保存", 3 | "Error" : "錯誤", 4 | "Breeze Dark" : "Breeze Dark", 5 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "以 KDE 佈景主題為基礎,供 Nextcloud 使用的 Breeze Dark 佈景主題", 6 | "# Breeze Dark\nThis is a breeze dark theme for Nextcloud, based on the Breeze Dark theme made by the KDE Project.\n\n## Usage\n\nAfter you install the theme, you need to enable it. There are two options for this, a global and a personal one.\n\n### Global\n\nWith the global options you can enforce the use of the theme for all users as well as unauthenticated visits. Please note that when the theme is enforced for all users it isn't possible for them to disable the theme or choose a different theme.\n\nThere is also an option to let the theme be enabled / disabled based on the theming preferences reported by browser. When the theme is deactivated using this method, Nextcloud will revert to using the default light theme. This setting only sets the default for when the theme is globally enforced and can be overridden by the user.\n\nYou can also choose whether the login page should be themed. Though this only has an effect if the theme is enforced globally, or during the login phase of a user that has the theme enabled.\n\nYou can find the global options here:\n\n```\nSettings > Administration > Theming > Breeze Dark\n```\n\n### Personal\n\nThe personal option allows each user to enable / disable the theme unless it's being enforced by the global options. They can though choose whether the theme should follow the theming choice reported by the browser. This option is also available when the theme is being enforced globally. If the user hasn't set a preference they will follow the global default. You can find the personal option here:\n\n```\nSettings > Personal > Appearance and accessibility > Breeze Dark\n```\n\n### Custom styling\n\nUnder the Theming section in the admin settings you can add your own custom styling to the theme. Only standard CSS can be used. This custom styling will be applied whenever the theme is enabled and only affects the Breeze Dark theme." : "# Breeze Dark\n這是 Nextcloud 的 breeze dark 主題,基於 KDE Project 製作的 Breeze Dark 主題。\n\n## 用法\n\n安裝主題後,您需要啟用它。有兩種選擇,一種是全局的,一種是個人的。\n\n### 全局的\n\n使用全局選項,您可以為所有用戶以及未經身份驗證的訪問強制使用主題。請注意,當為所有用戶強制執行主題時,他們無法禁用主題或選擇不同的主題。\n\n還有一個選項可以根據瀏覽器報告的主題首選項啟用/禁用主題。當使用此方法停用主題時,Nextcloud 將恢復使用默認的淺色主題。此設置僅設置主題在全局強制執行時的默認值,並且可以由用戶覆蓋。\n\n您還可以選擇登錄頁面是否應為主題。儘管這僅在全局強制執行主題或在啟用主題的用戶登錄階段有效。\n\n您可以在此處找到全局選項:\n\n```\n設置 > 管理 > 主題 > Breeze Dark\n```\n\n### 個人的\n\n個人選項允許每個用戶啟用/禁用主題,除非它被全局選項強制執行。 他們可以選擇主題是否應該遵循瀏覽器報告的主題選擇。 當主題在全球範圍內實施時,此選項也可用。 如果用戶沒有設置首選項,他們將遵循全局默認設置。 您可以在此處找到個人選項:\n\n```\n設置 > 個人 > 外觀和輔助功能 > Breeze Dark\n```\n\n### 自定義樣式\n\n在管理設置的主題部分下,您可以將自己的自定義樣式添加到主題中。只能使用標準 CSS。只要啟用主題,就會應用此自定義樣式,並且只會影響 Breeze Dark 主題。", 7 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "以 KDE project 製作的 Breeze Dark 為基礎的深色佈景主題。請刷新頁面以使更改生效。", 8 | "This setting enforces the usage of this theme for all users. Please note, this prevents users from disabling it or choosing a different theme." : "此設置強制所有用戶使用此主題。請注意,這會阻止用戶禁用此主題或選擇其他主題。", 9 | "Enforce Breeze Dark theme use globally" : "強制 Breeze Dark 主題為全局默認主題", 10 | "This setting enables the automated activation by the clients' system settings by default, for unauthenticated users and users who have not set a preference." : "對於未經身份驗證的用戶和未設置首選項的用戶,此設置默認啟用客戶端系統設置的自動激活。", 11 | "Enable Breeze Dark theme automated activation by the clients' system settings by default" : "默認情況下通過客戶端系統設置啟用 Breeze Dark 主題自動激活", 12 | "This setting enables use of the theme for the login page. This only takes effect on the login page itself if the theme is globally enforced, or during login for a user who has the theme enabled." : "此設置啟用登錄頁面的主題。如果主題是全局強制的,或者在啟用主題的用戶登錄期間,這僅對登錄頁面本身生效。", 13 | "Enable Breeze Dark theme for the login page" : "為登錄頁面啟用 Breeze Dark 主題", 14 | "Custom Styling" : "自定義樣式", 15 | "Insert custom styling here …" : "在此處插入自定義樣式...", 16 | "Save" : "儲存", 17 | "A Breeze Dark theme for Nextcloud." : "Nextcloud 的 Breeze Dark 主題", 18 | "Breeze Dark theme" : "Breeze Dark 主題", 19 | "Enable Breeze Dark theme" : "啟用 Breeze Dark 主題", 20 | "Enable Breeze Dark automated activation by clients system settings" : "通過客戶端系統設置啟用 Breeze Dark 自動激活" 21 | },"pluralForm" :"nplurals=1; plural=0;" 22 | } -------------------------------------------------------------------------------- /l10n/zh_HK.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "breezedark", 3 | { 4 | "Saved" : "已保存", 5 | "Error" : "錯誤", 6 | "Breeze Dark" : "Breeze Dark", 7 | "Breeze Dark theme for Nextcloud, based on the theme by KDE" : "以 KDE 佈景主題為基礎,供 Nextcloud 使用的 Breeze Dark 佈景主題", 8 | "# Breeze Dark\nThis is a breeze dark theme for Nextcloud, based on the Breeze Dark theme made by the KDE Project.\n\n## Usage\n\nAfter you install the theme, you need to enable it. There are two options for this, a global and a personal one.\n\n### Global\n\nWith the global options you can enforce the use of the theme for all users as well as unauthenticated visits. Please note that when the theme is enforced for all users it isn't possible for them to disable the theme or choose a different theme.\n\nThere is also an option to let the theme be enabled / disabled based on the theming preferences reported by browser. When the theme is deactivated using this method, Nextcloud will revert to using the default light theme. This setting only sets the default for when the theme is globally enforced and can be overridden by the user.\n\nYou can also choose whether the login page should be themed. Though this only has an effect if the theme is enforced globally, or during the login phase of a user that has the theme enabled.\n\nYou can find the global options here:\n\n```\nSettings > Administration > Theming > Breeze Dark\n```\n\n### Personal\n\nThe personal option allows each user to enable / disable the theme unless it's being enforced by the global options. They can though choose whether the theme should follow the theming choice reported by the browser. This option is also available when the theme is being enforced globally. If the user hasn't set a preference they will follow the global default. You can find the personal option here:\n\n```\nSettings > Personal > Appearance and accessibility > Breeze Dark\n```\n\n### Custom styling\n\nUnder the Theming section in the admin settings you can add your own custom styling to the theme. Only standard CSS can be used. This custom styling will be applied whenever the theme is enabled and only affects the Breeze Dark theme." : "# Breeze Dark\n這是 Nextcloud 的 breeze dark 主題,基於 KDE Project 製作的 Breeze Dark 主題。\n\n## 用法\n\n安裝主題後,您需要啟用它。有兩種選擇,一種是全局的,一種是個人的。\n\n### 全局的\n\n使用全局選項,您可以為所有用戶以及未經身份驗證的訪問強制使用主題。請注意,當為所有用戶強制執行主題時,他們無法禁用主題或選擇不同的主題。\n\n還有一個選項可以根據瀏覽器報告的主題首選項啟用/禁用主題。當使用此方法停用主題時,Nextcloud 將恢復使用默認的淺色主題。此設置僅設置主題在全局強制執行時的默認值,並且可以由用戶覆蓋。\n\n您還可以選擇登錄頁面是否應為主題。儘管這僅在全局強制執行主題或在啟用主題的用戶登錄階段有效。\n\n您可以在此處找到全局選項:\n\n```\n設置 > 管理 > 主題 > Breeze Dark\n```\n\n### 個人的\n\n個人選項允許每個用戶啟用/禁用主題,除非它被全局選項強制執行。 他們可以選擇主題是否應該遵循瀏覽器報告的主題選擇。 當主題在全球範圍內實施時,此選項也可用。 如果用戶沒有設置首選項,他們將遵循全局默認設置。 您可以在此處找到個人選項:\n\n```\n設置 > 個人 > 外觀和輔助功能 > Breeze Dark\n```\n\n### 自定義樣式\n\n在管理設置的主題部分下,您可以將自己的自定義樣式添加到主題中。只能使用標準 CSS。只要啟用主題,就會應用此自定義樣式,並且只會影響 Breeze Dark 主題。", 9 | "A Dark theme based on Breeze Dark by the KDE project. Please refresh the page for changes to take effect." : "以 KDE project 製作的 Breeze Dark 為基礎的深色佈景主題。請刷新頁面以使更改生效。", 10 | "This setting enforces the usage of this theme for all users. Please note, this prevents users from disabling it or choosing a different theme." : "此設置強制所有用戶使用此主題。請注意,這會阻止用戶禁用此主題或選擇其他主題。", 11 | "Enforce Breeze Dark theme use globally" : "強制 Breeze Dark 主題為全局默認主題", 12 | "This setting enables the automated activation by the clients' system settings by default, for unauthenticated users and users who have not set a preference." : "對於未經身份驗證的用戶和未設置首選項的用戶,此設置默認啟用客戶端系統設置的自動激活。", 13 | "Enable Breeze Dark theme automated activation by the clients' system settings by default" : "默認情況下通過客戶端系統設置啟用 Breeze Dark 主題自動激活", 14 | "This setting enables use of the theme for the login page. This only takes effect on the login page itself if the theme is globally enforced, or during login for a user who has the theme enabled." : "此設置啟用登錄頁面的主題。如果主題是全局強制的,或者在啟用主題的用戶登錄期間,這僅對登錄頁面本身生效。", 15 | "Enable Breeze Dark theme for the login page" : "為登錄頁面啟用 Breeze Dark 主題", 16 | "Custom Styling" : "自定義樣式", 17 | "Insert custom styling here …" : "在此處插入自定義樣式...", 18 | "Save" : "儲存", 19 | "A Breeze Dark theme for Nextcloud." : "Nextcloud 的 Breeze Dark 主題", 20 | "Breeze Dark theme" : "Breeze Dark 主題", 21 | "Enable Breeze Dark theme" : "啟用 Breeze Dark 主題", 22 | "Enable Breeze Dark automated activation by clients system settings" : "通過客戶端系統設置啟用 Breeze Dark 自動激活" 23 | }, 24 | "nplurals=1; plural=0;"); 25 | --------------------------------------------------------------------------------