From 75f0d3c093de01365f85e8e3035291d9a9a8c889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?= Date: Tue, 10 Jul 2018 18:40:59 +0200 Subject: Vue cleanup and init MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: John Molakvoæ (skjnldsv) --- .babelrc | 12 + .bowerrc | 3 - .editorconfig | 15 +- .eslintrc.js | 53 + .eslintrc.json | 36 - .gitignore | 22 +- .npmignore | 1 + .prettierrc.js | 1 + .stylelintrc | 40 +- .travis.yml | 90 - Makefile | 200 +- README.md | 81 +- appinfo/routes.php | 39 +- coverage/clover.xml | 7 + coverage/coverage-final.json | 1 + coverage/lcov-report/base.css | 223 + coverage/lcov-report/block-navigation.js | 63 + coverage/lcov-report/index.html | 84 + coverage/lcov-report/prettify.css | 1 + coverage/lcov-report/prettify.js | 1 + coverage/lcov-report/sort-arrow-sprite.png | Bin 0 -> 209 bytes coverage/lcov-report/sorter.js | 158 + coverage/lcov.info | 0 css/_animations.scss | 11 - css/_contactlist.scss | 90 - css/_details.scss | 464 - css/_navigation.scss | 19 - css/_settings.scss | 322 - css/style.scss | 5 - gulpfile.js | 85 - .../addressBook/addressBook_controller.js | 202 - js/components/addressBook/addressBook_directive.js | 14 - .../addressBookList/addressBookList_controller.js | 39 - .../addressBookList/addressBookList_directive.js | 11 - js/components/avatar/avatar_controller.js | 66 - js/components/avatar/avatar_directive.js | 36 - js/components/contact/contact_controller.js | 35 - js/components/contact/contact_directive.js | 12 - .../contactDetails/contactDetails_controller.js | 118 - .../contactDetails/contactDetails_directive.js | 11 - .../contactFilter/contactFilter_controller.js | 5 - .../contactFilter/contactFilter_directive.js | 13 - .../contactImport/contactImport_controller.js | 42 - .../contactImport/contactImport_directive.js | 60 - .../contactList/contactList_controller.js | 283 - js/components/contactList/contactList_directive.js | 13 - js/components/datepicker_directive.js | 32 - .../detailsItem/detailsItem_controller.js | 134 - js/components/detailsItem/detailsItem_directive.js | 21 - js/components/focus_directive.js | 23 - js/components/group/group_controller.js | 5 - js/components/group/group_directive.js | 13 - js/components/groupList/groupList_controller.js | 40 - js/components/groupList/groupList_directive.js | 11 - .../importScreen/importScreen_controller.js | 18 - .../importScreen/importScreen_directive.js | 11 - js/components/inputresize_directive.js | 15 - .../newContactButton_controller.js | 23 - .../newContactButton/newContactButton_directive.js | 11 - js/components/parsers/telModel_directive.js | 15 - .../propertyGroup/propertyGroup_controller.js | 29 - .../propertyGroup/propertyGroup_directive.js | 20 - js/components/select_directive.js | 23 - js/components/sortBy/sortBy_controller.js | 16 - js/components/sortBy/sortBy_directive.js | 11 - js/dav/.bower.json | 12 - js/dav/.gitignore | 8 - js/dav/.npmignore | 11 - js/dav/.travis.yml | 12 - js/dav/CONTRIBUTING.md | 57 - js/dav/HISTORY.md | 271 - js/dav/LICENSE | 363 - js/dav/Makefile | 60 - js/dav/README.md | 467 - js/dav/dav.js | 7613 ----------- js/dav/lib/accounts.js | 178 - js/dav/lib/calendars.js | 274 - js/dav/lib/camelize.js | 11 - js/dav/lib/client.js | 125 - js/dav/lib/contacts.js | 350 - js/dav/lib/debug.js | 7 - js/dav/lib/fuzzy_url_equals.js | 11 - js/dav/lib/index.js | 14 - js/dav/lib/model.js | 106 - js/dav/lib/namespace.js | 5 - js/dav/lib/parser.js | 166 - js/dav/lib/polyfill/array_find.js | 25 - js/dav/lib/polyfill/object_assign.js | 35 - js/dav/lib/polyfill/regenerator_runtime.js | 564 - js/dav/lib/request.js | 244 - js/dav/lib/sandbox.js | 34 - js/dav/lib/template/address_book_multiget.js | 15 - js/dav/lib/template/address_book_query.js | 12 - js/dav/lib/template/calendar_query.js | 16 - js/dav/lib/template/filter.js | 20 - js/dav/lib/template/href.js | 0 js/dav/lib/template/index.js | 7 - js/dav/lib/template/mkcol.js | 14 - js/dav/lib/template/prop.js | 75 - js/dav/lib/template/propfind.js | 13 - js/dav/lib/template/proppatch.js | 14 - js/dav/lib/template/sync_collection.js | 13 - js/dav/lib/transport.js | 187 - js/dav/lib/webdav.js | 119 - js/dav/lib/xmlhttprequest.js | 98 - js/dav/package.json | 43 - js/dav/test/integration/accounts_test.js | 177 - js/dav/test/integration/calendars_test.js | 239 - js/dav/test/integration/contacts_test.js | 219 - .../test/integration/data/bastille_day_party.ics | 12 - js/dav/test/integration/data/forrest_gump.vcf | 16 - js/dav/test/integration/data/index.js | 17 - js/dav/test/integration/server/bootstrap.js | 105 - js/dav/test/integration/server/calendarserver.php | 82 - js/dav/test/integration/version_test.js | 10 - js/dav/test/mocha.opts | 5 - js/dav/test/unit/camelize_test.js | 23 - js/dav/test/unit/client_test.js | 265 - js/dav/test/unit/data/address_book_query.xml | 72 - js/dav/test/unit/data/calendar_query.xml | 24 - js/dav/test/unit/data/current_user_principal.xml | 13 - js/dav/test/unit/data/index.js | 24 - js/dav/test/unit/data/propfind.xml | 39 - js/dav/test/unit/data/propfind_oc.xml | 37 - js/dav/test/unit/data/sync_collection.xml | 16 - js/dav/test/unit/nock_wrapper.js | 47 - js/dav/test/unit/parser_test.js | 93 - .../test/unit/request/address_book_query_test.js | 69 - js/dav/test/unit/request/basic_test.js | 63 - js/dav/test/unit/request/calendar_query_test.js | 107 - js/dav/test/unit/request/propfind_test.js | 84 - js/dav/test/unit/request/sync_collection_test.js | 65 - js/dav/test/unit/sandbox_test.js | 72 - js/dav/test/unit/template_test.js | 69 - js/dav/test/unit/transport_test.js | 256 - js/dav/test/unit/xmlhttprequest_test.js | 81 - js/filters/JSON2vCard_filter.js | 6 - js/filters/contactColor_filter.js | 20 - js/filters/contactGroup_filter.js | 27 - js/filters/counterFormatter_filter.js | 15 - js/filters/counterTooltipDisplay_filter.js | 12 - js/filters/field_filter.js | 25 - js/filters/firstCharacter_filter.js | 6 - js/filters/localeOrderBy_filter.js | 49 - js/filters/newContact_filter.js | 6 - js/filters/orderDetailItems_filter.js | 28 - js/filters/toArray_filter.js | 9 - js/filters/vCard2JSON_filter.js | 6 - js/main.js | 30 - js/models/addressBook_model.js | 55 - js/models/contactFilter_model.js | 12 - js/models/contact_model.js | 456 - js/models/group_model.js | 12 - js/services/addressBook_service.js | 274 - js/services/contact_service.js | 394 - js/services/davClient_service.js | 7 - js/services/dav_service.js | 8 - js/services/import_service.js | 14 - js/services/mime_service.js | 15 - js/services/search_service.js | 51 - js/services/settings_service.js | 20 - js/services/sortBy_service.js | 51 - js/services/vCardProperties.js | 270 - js/tests/filters/counterFormatter_filter.js | 21 - js/tests/filters/counterTooltipDisplay_filter.js | 20 - js/tests/filters/firstCharacter_filter.js | 17 - js/tests/filters/localeOrderBy_filter.js | 101 - js/tests/models/addressbook_model.js | 104 - js/tests/models/contactFilter_model.js | 16 - js/tests/models/contact_model.js | 58 - js/tests/models/group_model.js | 16 - js/tests/services/sortBy_service.js | 20 - js/tests/stubs.js | 9 - karma.conf.js | 105 - l10n/.gitkeep | 0 l10n/af.js | 70 - l10n/af.json | 68 - l10n/ar.js | 80 - l10n/ar.json | 78 - l10n/ast.js | 80 - l10n/ast.json | 78 - l10n/bg.js | 110 - l10n/bg.json | 108 - l10n/bn_BD.js | 35 - l10n/bn_BD.json | 33 - l10n/bs.js | 34 - l10n/bs.json | 32 - l10n/ca.js | 100 - l10n/ca.json | 98 - l10n/cs.js | 114 - l10n/cs.json | 112 - l10n/da.js | 107 - l10n/da.json | 105 - l10n/de.js | 121 - l10n/de.json | 119 - l10n/de_DE.js | 121 - l10n/de_DE.json | 119 - l10n/el.js | 114 - l10n/el.json | 112 - l10n/en_GB.js | 121 - l10n/en_GB.json | 119 - l10n/eo.js | 36 - l10n/eo.json | 34 - l10n/es.js | 121 - l10n/es.json | 119 - l10n/es_419.js | 111 - l10n/es_419.json | 109 - l10n/es_AR.js | 70 - l10n/es_AR.json | 68 - l10n/es_CL.js | 119 - l10n/es_CL.json | 117 - l10n/es_CO.js | 119 - l10n/es_CO.json | 117 - l10n/es_CR.js | 119 - l10n/es_CR.json | 117 - l10n/es_DO.js | 119 - l10n/es_DO.json | 117 - l10n/es_EC.js | 119 - l10n/es_EC.json | 117 - l10n/es_GT.js | 119 - l10n/es_GT.json | 117 - l10n/es_HN.js | 111 - l10n/es_HN.json | 109 - l10n/es_MX.js | 121 - l10n/es_MX.json | 119 - l10n/es_NI.js | 111 - l10n/es_NI.json | 109 - l10n/es_PA.js | 111 - l10n/es_PA.json | 109 - l10n/es_PE.js | 111 - l10n/es_PE.json | 109 - l10n/es_PR.js | 111 - l10n/es_PR.json | 109 - l10n/es_PY.js | 111 - l10n/es_PY.json | 109 - l10n/es_SV.js | 119 - l10n/es_SV.json | 117 - l10n/es_UY.js | 111 - l10n/es_UY.json | 109 - l10n/et_EE.js | 111 - l10n/et_EE.json | 109 - l10n/eu.js | 106 - l10n/eu.json | 104 - l10n/fa.js | 96 - l10n/fa.json | 94 - l10n/fi.js | 114 - l10n/fi.json | 112 - l10n/fr.js | 121 - l10n/fr.json | 119 - l10n/gl.js | 75 - l10n/gl.json | 73 - l10n/he.js | 121 - l10n/he.json | 119 - l10n/hr.js | 35 - l10n/hr.json | 33 - l10n/hu.js | 115 - l10n/hu.json | 113 - l10n/ia.js | 66 - l10n/ia.json | 64 - l10n/id.js | 61 - l10n/id.json | 59 - l10n/is.js | 119 - l10n/is.json | 117 - l10n/it.js | 121 - l10n/it.json | 119 - l10n/ja.js | 110 - l10n/ja.json | 108 - l10n/ka_GE.js | 111 - l10n/ka_GE.json | 109 - l10n/ko.js | 111 - l10n/ko.json | 109 - l10n/lt_LT.js | 113 - l10n/lt_LT.json | 111 - l10n/lv.js | 62 - l10n/lv.json | 60 - l10n/mk.js | 44 - l10n/mk.json | 42 - l10n/mn.js | 60 - l10n/mn.json | 58 - l10n/nb.js | 111 - l10n/nb.json | 109 - l10n/nl.js | 119 - l10n/nl.json | 117 - l10n/no-php | 0 l10n/oc.js | 38 - l10n/oc.json | 36 - l10n/pl.js | 119 - l10n/pl.json | 117 - l10n/pt_BR.js | 121 - l10n/pt_BR.json | 119 - l10n/pt_PT.js | 111 - l10n/pt_PT.json | 109 - l10n/ro.js | 111 - l10n/ro.json | 109 - l10n/ru.js | 121 - l10n/ru.json | 119 - l10n/sk.js | 120 - l10n/sk.json | 118 - l10n/sl.js | 112 - l10n/sl.json | 110 - l10n/sq.js | 109 - l10n/sq.json | 107 - l10n/sr.js | 121 - l10n/sr.json | 119 - l10n/sv.js | 111 - l10n/sv.json | 109 - l10n/th.js | 53 - l10n/th.json | 51 - l10n/tr.js | 121 - l10n/tr.json | 119 - l10n/uk.js | 102 - l10n/uk.json | 100 - l10n/vi.js | 100 - l10n/vi.json | 98 - l10n/zh_CN.js | 111 - l10n/zh_CN.json | 109 - l10n/zh_TW.js | 111 - l10n/zh_TW.json | 109 - lib/Controller/PageController.php | 62 +- package-lock.json | 13187 +++++++++++++++++++ package.json | 143 +- src/App.vue | 32 + src/components/appNavigation.vue | 55 + src/components/appNavigation/navigationItem.vue | 157 + src/components/popoverMenu.vue | 39 + src/components/popoverMenu/popoverItem.vue | 51 + src/main.js | 42 + src/router/index.js | 55 + src/store/addressbooks.js | 28 + src/store/contacts.js | 28 + src/store/index.js | 42 + src/views/Contacts.vue | 30 + templates/addressBook.html | 120 - templates/addressBookList.html | 15 - templates/avatar.html | 12 - templates/contact.html | 5 - templates/contactDetails.html | 79 - templates/contactFilter.html | 9 - templates/contactImport.html | 15 - templates/contactList.html | 12 - templates/detailItems/adr.html | 36 - templates/detailItems/date.html | 8 - templates/detailItems/email.html | 14 - templates/detailItems/groups.html | 10 - templates/detailItems/hidden.html | 1 - templates/detailItems/n.html | 32 - templates/detailItems/select.html | 7 - templates/detailItems/tel.html | 14 - templates/detailItems/text.html | 12 - templates/detailItems/textarea.html | 9 - templates/detailItems/url.html | 12 - templates/detailItems/username.html | 12 - templates/group.html | 8 - templates/groupList.html | 3 - templates/importScreen.html | 7 - templates/main.php | 59 +- templates/newContactButton.html | 2 - templates/propertyGroup.html | 7 - templates/sortBy.html | 4 - tests/unit/specs/Contacts.spec.js | 31 + vendorScripts.json | 47 - webpack.common.js | 52 + webpack.dev.js | 12 + webpack.prod.js | 7 + 364 files changed, 14682 insertions(+), 34133 deletions(-) create mode 100644 .babelrc delete mode 100644 .bowerrc create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.json create mode 100644 .npmignore create mode 100644 .prettierrc.js delete mode 100644 .travis.yml create mode 100644 coverage/clover.xml create mode 100644 coverage/coverage-final.json create mode 100644 coverage/lcov-report/base.css create mode 100644 coverage/lcov-report/block-navigation.js create mode 100644 coverage/lcov-report/index.html create mode 100644 coverage/lcov-report/prettify.css create mode 100644 coverage/lcov-report/prettify.js create mode 100644 coverage/lcov-report/sort-arrow-sprite.png create mode 100644 coverage/lcov-report/sorter.js create mode 100644 coverage/lcov.info delete mode 100644 css/_animations.scss delete mode 100644 css/_contactlist.scss delete mode 100644 css/_details.scss delete mode 100644 css/_navigation.scss delete mode 100644 css/_settings.scss delete mode 100644 css/style.scss delete mode 100644 gulpfile.js delete mode 100644 js/components/addressBook/addressBook_controller.js delete mode 100644 js/components/addressBook/addressBook_directive.js delete mode 100644 js/components/addressBookList/addressBookList_controller.js delete mode 100644 js/components/addressBookList/addressBookList_directive.js delete mode 100644 js/components/avatar/avatar_controller.js delete mode 100644 js/components/avatar/avatar_directive.js delete mode 100644 js/components/contact/contact_controller.js delete mode 100644 js/components/contact/contact_directive.js delete mode 100644 js/components/contactDetails/contactDetails_controller.js delete mode 100644 js/components/contactDetails/contactDetails_directive.js delete mode 100644 js/components/contactFilter/contactFilter_controller.js delete mode 100644 js/components/contactFilter/contactFilter_directive.js delete mode 100644 js/components/contactImport/contactImport_controller.js delete mode 100644 js/components/contactImport/contactImport_directive.js delete mode 100644 js/components/contactList/contactList_controller.js delete mode 100644 js/components/contactList/contactList_directive.js delete mode 100644 js/components/datepicker_directive.js delete mode 100644 js/components/detailsItem/detailsItem_controller.js delete mode 100644 js/components/detailsItem/detailsItem_directive.js delete mode 100644 js/components/focus_directive.js delete mode 100644 js/components/group/group_controller.js delete mode 100644 js/components/group/group_directive.js delete mode 100644 js/components/groupList/groupList_controller.js delete mode 100644 js/components/groupList/groupList_directive.js delete mode 100644 js/components/importScreen/importScreen_controller.js delete mode 100644 js/components/importScreen/importScreen_directive.js delete mode 100644 js/components/inputresize_directive.js delete mode 100644 js/components/newContactButton/newContactButton_controller.js delete mode 100644 js/components/newContactButton/newContactButton_directive.js delete mode 100644 js/components/parsers/telModel_directive.js delete mode 100644 js/components/propertyGroup/propertyGroup_controller.js delete mode 100644 js/components/propertyGroup/propertyGroup_directive.js delete mode 100644 js/components/select_directive.js delete mode 100644 js/components/sortBy/sortBy_controller.js delete mode 100644 js/components/sortBy/sortBy_directive.js delete mode 100644 js/dav/.bower.json delete mode 100644 js/dav/.gitignore delete mode 100644 js/dav/.npmignore delete mode 100644 js/dav/.travis.yml delete mode 100644 js/dav/CONTRIBUTING.md delete mode 100644 js/dav/HISTORY.md delete mode 100644 js/dav/LICENSE delete mode 100644 js/dav/Makefile delete mode 100644 js/dav/README.md delete mode 100644 js/dav/dav.js delete mode 100644 js/dav/lib/accounts.js delete mode 100644 js/dav/lib/calendars.js delete mode 100644 js/dav/lib/camelize.js delete mode 100644 js/dav/lib/client.js delete mode 100644 js/dav/lib/contacts.js delete mode 100644 js/dav/lib/debug.js delete mode 100644 js/dav/lib/fuzzy_url_equals.js delete mode 100644 js/dav/lib/index.js delete mode 100644 js/dav/lib/model.js delete mode 100644 js/dav/lib/namespace.js delete mode 100644 js/dav/lib/parser.js delete mode 100644 js/dav/lib/polyfill/array_find.js delete mode 100644 js/dav/lib/polyfill/object_assign.js delete mode 100644 js/dav/lib/polyfill/regenerator_runtime.js delete mode 100644 js/dav/lib/request.js delete mode 100644 js/dav/lib/sandbox.js delete mode 100644 js/dav/lib/template/address_book_multiget.js delete mode 100644 js/dav/lib/template/address_book_query.js delete mode 100644 js/dav/lib/template/calendar_query.js delete mode 100644 js/dav/lib/template/filter.js delete mode 100644 js/dav/lib/template/href.js delete mode 100644 js/dav/lib/template/index.js delete mode 100644 js/dav/lib/template/mkcol.js delete mode 100644 js/dav/lib/template/prop.js delete mode 100644 js/dav/lib/template/propfind.js delete mode 100644 js/dav/lib/template/proppatch.js delete mode 100644 js/dav/lib/template/sync_collection.js delete mode 100644 js/dav/lib/transport.js delete mode 100644 js/dav/lib/webdav.js delete mode 100644 js/dav/lib/xmlhttprequest.js delete mode 100644 js/dav/package.json delete mode 100644 js/dav/test/integration/accounts_test.js delete mode 100644 js/dav/test/integration/calendars_test.js delete mode 100644 js/dav/test/integration/contacts_test.js delete mode 100644 js/dav/test/integration/data/bastille_day_party.ics delete mode 100644 js/dav/test/integration/data/forrest_gump.vcf delete mode 100644 js/dav/test/integration/data/index.js delete mode 100644 js/dav/test/integration/server/bootstrap.js delete mode 100644 js/dav/test/integration/server/calendarserver.php delete mode 100644 js/dav/test/integration/version_test.js delete mode 100644 js/dav/test/mocha.opts delete mode 100644 js/dav/test/unit/camelize_test.js delete mode 100644 js/dav/test/unit/client_test.js delete mode 100644 js/dav/test/unit/data/address_book_query.xml delete mode 100644 js/dav/test/unit/data/calendar_query.xml delete mode 100644 js/dav/test/unit/data/current_user_principal.xml delete mode 100644 js/dav/test/unit/data/index.js delete mode 100644 js/dav/test/unit/data/propfind.xml delete mode 100644 js/dav/test/unit/data/propfind_oc.xml delete mode 100644 js/dav/test/unit/data/sync_collection.xml delete mode 100644 js/dav/test/unit/nock_wrapper.js delete mode 100644 js/dav/test/unit/parser_test.js delete mode 100644 js/dav/test/unit/request/address_book_query_test.js delete mode 100644 js/dav/test/unit/request/basic_test.js delete mode 100644 js/dav/test/unit/request/calendar_query_test.js delete mode 100644 js/dav/test/unit/request/propfind_test.js delete mode 100644 js/dav/test/unit/request/sync_collection_test.js delete mode 100644 js/dav/test/unit/sandbox_test.js delete mode 100644 js/dav/test/unit/template_test.js delete mode 100644 js/dav/test/unit/transport_test.js delete mode 100644 js/dav/test/unit/xmlhttprequest_test.js delete mode 100644 js/filters/JSON2vCard_filter.js delete mode 100644 js/filters/contactColor_filter.js delete mode 100644 js/filters/contactGroup_filter.js delete mode 100644 js/filters/counterFormatter_filter.js delete mode 100644 js/filters/counterTooltipDisplay_filter.js delete mode 100644 js/filters/field_filter.js delete mode 100644 js/filters/firstCharacter_filter.js delete mode 100644 js/filters/localeOrderBy_filter.js delete mode 100644 js/filters/newContact_filter.js delete mode 100644 js/filters/orderDetailItems_filter.js delete mode 100644 js/filters/toArray_filter.js delete mode 100644 js/filters/vCard2JSON_filter.js delete mode 100644 js/main.js delete mode 100644 js/models/addressBook_model.js delete mode 100644 js/models/contactFilter_model.js delete mode 100644 js/models/contact_model.js delete mode 100644 js/models/group_model.js delete mode 100644 js/services/addressBook_service.js delete mode 100644 js/services/contact_service.js delete mode 100644 js/services/davClient_service.js delete mode 100644 js/services/dav_service.js delete mode 100644 js/services/import_service.js delete mode 100644 js/services/mime_service.js delete mode 100644 js/services/search_service.js delete mode 100644 js/services/settings_service.js delete mode 100644 js/services/sortBy_service.js delete mode 100644 js/services/vCardProperties.js delete mode 100644 js/tests/filters/counterFormatter_filter.js delete mode 100644 js/tests/filters/counterTooltipDisplay_filter.js delete mode 100644 js/tests/filters/firstCharacter_filter.js delete mode 100644 js/tests/filters/localeOrderBy_filter.js delete mode 100644 js/tests/models/addressbook_model.js delete mode 100644 js/tests/models/contactFilter_model.js delete mode 100644 js/tests/models/contact_model.js delete mode 100644 js/tests/models/group_model.js delete mode 100644 js/tests/services/sortBy_service.js delete mode 100644 js/tests/stubs.js delete mode 100644 karma.conf.js delete mode 100644 l10n/.gitkeep delete mode 100644 l10n/af.js delete mode 100644 l10n/af.json delete mode 100644 l10n/ar.js delete mode 100644 l10n/ar.json delete mode 100644 l10n/ast.js delete mode 100644 l10n/ast.json delete mode 100644 l10n/bg.js delete mode 100644 l10n/bg.json delete mode 100644 l10n/bn_BD.js delete mode 100644 l10n/bn_BD.json delete mode 100644 l10n/bs.js delete mode 100644 l10n/bs.json delete mode 100644 l10n/ca.js delete mode 100644 l10n/ca.json delete mode 100644 l10n/cs.js delete mode 100644 l10n/cs.json delete mode 100644 l10n/da.js delete mode 100644 l10n/da.json delete mode 100644 l10n/de.js delete mode 100644 l10n/de.json delete mode 100644 l10n/de_DE.js delete mode 100644 l10n/de_DE.json delete mode 100644 l10n/el.js delete mode 100644 l10n/el.json delete mode 100644 l10n/en_GB.js delete mode 100644 l10n/en_GB.json delete mode 100644 l10n/eo.js delete mode 100644 l10n/eo.json delete mode 100644 l10n/es.js delete mode 100644 l10n/es.json delete mode 100644 l10n/es_419.js delete mode 100644 l10n/es_419.json delete mode 100644 l10n/es_AR.js delete mode 100644 l10n/es_AR.json delete mode 100644 l10n/es_CL.js delete mode 100644 l10n/es_CL.json delete mode 100644 l10n/es_CO.js delete mode 100644 l10n/es_CO.json delete mode 100644 l10n/es_CR.js delete mode 100644 l10n/es_CR.json delete mode 100644 l10n/es_DO.js delete mode 100644 l10n/es_DO.json delete mode 100644 l10n/es_EC.js delete mode 100644 l10n/es_EC.json delete mode 100644 l10n/es_GT.js delete mode 100644 l10n/es_GT.json delete mode 100644 l10n/es_HN.js delete mode 100644 l10n/es_HN.json delete mode 100644 l10n/es_MX.js delete mode 100644 l10n/es_MX.json delete mode 100644 l10n/es_NI.js delete mode 100644 l10n/es_NI.json delete mode 100644 l10n/es_PA.js delete mode 100644 l10n/es_PA.json delete mode 100644 l10n/es_PE.js delete mode 100644 l10n/es_PE.json delete mode 100644 l10n/es_PR.js delete mode 100644 l10n/es_PR.json delete mode 100644 l10n/es_PY.js delete mode 100644 l10n/es_PY.json delete mode 100644 l10n/es_SV.js delete mode 100644 l10n/es_SV.json delete mode 100644 l10n/es_UY.js delete mode 100644 l10n/es_UY.json delete mode 100644 l10n/et_EE.js delete mode 100644 l10n/et_EE.json delete mode 100644 l10n/eu.js delete mode 100644 l10n/eu.json delete mode 100644 l10n/fa.js delete mode 100644 l10n/fa.json delete mode 100644 l10n/fi.js delete mode 100644 l10n/fi.json delete mode 100644 l10n/fr.js delete mode 100644 l10n/fr.json delete mode 100644 l10n/gl.js delete mode 100644 l10n/gl.json delete mode 100644 l10n/he.js delete mode 100644 l10n/he.json delete mode 100644 l10n/hr.js delete mode 100644 l10n/hr.json delete mode 100644 l10n/hu.js delete mode 100644 l10n/hu.json delete mode 100644 l10n/ia.js delete mode 100644 l10n/ia.json delete mode 100644 l10n/id.js delete mode 100644 l10n/id.json delete mode 100644 l10n/is.js delete mode 100644 l10n/is.json delete mode 100644 l10n/it.js delete mode 100644 l10n/it.json delete mode 100644 l10n/ja.js delete mode 100644 l10n/ja.json delete mode 100644 l10n/ka_GE.js delete mode 100644 l10n/ka_GE.json delete mode 100644 l10n/ko.js delete mode 100644 l10n/ko.json delete mode 100644 l10n/lt_LT.js delete mode 100644 l10n/lt_LT.json delete mode 100644 l10n/lv.js delete mode 100644 l10n/lv.json delete mode 100644 l10n/mk.js delete mode 100644 l10n/mk.json delete mode 100644 l10n/mn.js delete mode 100644 l10n/mn.json delete mode 100644 l10n/nb.js delete mode 100644 l10n/nb.json delete mode 100644 l10n/nl.js delete mode 100644 l10n/nl.json delete mode 100644 l10n/no-php delete mode 100644 l10n/oc.js delete mode 100644 l10n/oc.json delete mode 100644 l10n/pl.js delete mode 100644 l10n/pl.json delete mode 100644 l10n/pt_BR.js delete mode 100644 l10n/pt_BR.json delete mode 100644 l10n/pt_PT.js delete mode 100644 l10n/pt_PT.json delete mode 100644 l10n/ro.js delete mode 100644 l10n/ro.json delete mode 100644 l10n/ru.js delete mode 100644 l10n/ru.json delete mode 100644 l10n/sk.js delete mode 100644 l10n/sk.json delete mode 100644 l10n/sl.js delete mode 100644 l10n/sl.json delete mode 100644 l10n/sq.js delete mode 100644 l10n/sq.json delete mode 100644 l10n/sr.js delete mode 100644 l10n/sr.json delete mode 100644 l10n/sv.js delete mode 100644 l10n/sv.json delete mode 100644 l10n/th.js delete mode 100644 l10n/th.json delete mode 100644 l10n/tr.js delete mode 100644 l10n/tr.json delete mode 100644 l10n/uk.js delete mode 100644 l10n/uk.json delete mode 100644 l10n/vi.js delete mode 100644 l10n/vi.json delete mode 100644 l10n/zh_CN.js delete mode 100644 l10n/zh_CN.json delete mode 100644 l10n/zh_TW.js delete mode 100644 l10n/zh_TW.json create mode 100644 package-lock.json create mode 100644 src/App.vue create mode 100644 src/components/appNavigation.vue create mode 100644 src/components/appNavigation/navigationItem.vue create mode 100644 src/components/popoverMenu.vue create mode 100644 src/components/popoverMenu/popoverItem.vue create mode 100644 src/main.js create mode 100644 src/router/index.js create mode 100644 src/store/addressbooks.js create mode 100644 src/store/contacts.js create mode 100644 src/store/index.js create mode 100644 src/views/Contacts.vue delete mode 100644 templates/addressBook.html delete mode 100644 templates/addressBookList.html delete mode 100644 templates/avatar.html delete mode 100644 templates/contact.html delete mode 100644 templates/contactDetails.html delete mode 100644 templates/contactFilter.html delete mode 100644 templates/contactImport.html delete mode 100644 templates/contactList.html delete mode 100644 templates/detailItems/adr.html delete mode 100644 templates/detailItems/date.html delete mode 100644 templates/detailItems/email.html delete mode 100644 templates/detailItems/groups.html delete mode 100644 templates/detailItems/hidden.html delete mode 100644 templates/detailItems/n.html delete mode 100644 templates/detailItems/select.html delete mode 100644 templates/detailItems/tel.html delete mode 100644 templates/detailItems/text.html delete mode 100644 templates/detailItems/textarea.html delete mode 100644 templates/detailItems/url.html delete mode 100644 templates/detailItems/username.html delete mode 100644 templates/group.html delete mode 100644 templates/groupList.html delete mode 100644 templates/importScreen.html delete mode 100644 templates/newContactButton.html delete mode 100644 templates/propertyGroup.html delete mode 100644 templates/sortBy.html create mode 100644 tests/unit/specs/Contacts.spec.js delete mode 100644 vendorScripts.json create mode 100644 webpack.common.js create mode 100644 webpack.dev.js create mode 100644 webpack.prod.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..d431ef8f --- /dev/null +++ b/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "env", + { + "targets": { + "browsers": ["> 1%", "last 2 versions", "not ie <= 11"] + } + } + ] + ] +} diff --git a/.bowerrc b/.bowerrc deleted file mode 100644 index cbc6fdd1..00000000 --- a/.bowerrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "directory": "js/vendor" -} diff --git a/.editorconfig b/.editorconfig index b6205c3e..198996b9 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,16 +1,9 @@ -# EditorConfig is awesome: http://EditorConfig.org - -# top-most EditorConfig file root = true -# Unix-style newlines with a newline ending every file [*] -end_of_line = lf -insert_final_newline = true charset = utf-8 - -# Matches multiple files with brace expansion notation -# Set default charset -[*.{html,js,css}] indent_style = tab - +indent_size = 4 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..31213019 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,53 @@ +module.exports = { + root: true, + env: { + browser: true, + es6: true, + node: true, + jest: true + }, + globals: { + t: false, + n: false, + OC: false, + OCA: false + }, + parserOptions: { + parser: 'babel-eslint' + }, + extends: [ + 'eslint:recommended', + 'plugin:node/recommended', + 'plugin:vue/recommended', + 'standard' + ], + plugins: ['vue', 'node'], + rules: { + // space before function () + 'space-before-function-paren': ['error', 'never'], + // curly braces always space + 'object-curly-spacing': ['error', 'always'], + // stay consistent with array brackets + 'array-bracket-newline': ['error', 'consistent'], + // 1tbs brace style + 'brace-style': 'error', + // tabs only + indent: ['error', 'tab'], + 'no-tabs': 0, + // es6 import/export and require + 'node/no-unpublished-require': ['off'], + 'node/no-unsupported-features': ['off'], + // vue format + 'vue/html-indent': ['error', 'tab'], + 'vue/max-attributes-per-line': [ + 'error', + { + singleline: 3, + multiline: { + max: 3, + allowFirstLine: true + } + } + ] + } +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index de86bdae..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": "eslint:recommended", - "rules": { - "eqeqeq": ["warn", "smart"], - "no-console": "warn", - "no-loop-func": "warn", - "no-unused-vars": "warn", - - "block-spacing": "error", - "camelcase": "error", - "comma-spacing": "error", - "comma-style": "error", - "curly": ["error", "multi-line", "consistent"], - "indent": ["error", "tab"], - "no-alert": "error", - "no-mixed-spaces-and-tabs": ["error", "smart-tabs"], - "no-trailing-spaces": "error", - "quotes": ["error", "single", "avoid-escape"], - "semi": "error", - "space-before-blocks": "error" - }, - "env": { - "browser": true, - "jquery": true - }, - "globals": { - "angular": false, - "vCard": false, - "_": false, - "OC": false, - "t": false, - "n": false, - "dav": false, - "OCA": false - } -} diff --git a/.gitignore b/.gitignore index 890455ec..0322ebfc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,13 @@ -node_modules -build -js/public -js/vendor -css/vendor -css/style.css -coverage -npm-debug.log -package-lock.json +.DS_Store +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln \ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..b512c09d --- /dev/null +++ b/.npmignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..f053ebf7 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1 @@ +module.exports = {}; diff --git a/.stylelintrc b/.stylelintrc index ce743ad9..3d88cf73 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -1,22 +1,22 @@ { - "extends": "stylelint-config-recommended-scss", - "rules": { - "indentation": "tab", - "selector-type-no-unknown": null, - "number-leading-zero": null, - "rule-empty-line-before": ["always", { - "ignore": ["after-comment", "inside-block"] - }], - "declaration-empty-line-before": ["never", { - "ignore": ["after-declaration"] - }], - "comment-empty-line-before": null, - "selector-type-case": null, - "selector-list-comma-newline-after": null, - "no-descending-specificity": null, - "string-quotes": "single", - }, - "plugins": [ - "stylelint-scss" - ] + "extends": "stylelint-config-recommended-scss", + "rules": { + "indentation": "tab", + "selector-type-no-unknown": null, + "number-leading-zero": null, + "rule-empty-line-before": ["always", { + "ignore": ["after-comment", "inside-block"] + }], + "declaration-empty-line-before": ["never", { + "ignore": ["after-declaration"] + }], + "comment-empty-line-before": null, + "selector-type-case": null, + "selector-list-comma-newline-after": null, + "no-descending-specificity": null, + "string-quotes": "single" + }, + "plugins": [ + "stylelint-scss" + ] } diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e111d2b4..00000000 --- a/.travis.yml +++ /dev/null @@ -1,90 +0,0 @@ -sudo: false -dist: trusty -language: php -php: - - 7.0 - - 7.1 -# - 7.2 -env: - global: - - CORE_BRANCH=master - - NIGHTLY=FALSE - matrix: - - DB=pgsql - -branches: - only: - - master - - /^stable\d+(\.\d+)?$/ - - /^v\d++(\.\d+)?+(\.\d+)?+(\.\d+)?$/ - -matrix: - include: - - php: 7.0 - env: DB=pgsql CORE_BRANCH=stable12 - - php: 7.1 - env: DB=pgsql CORE_BRANCH=stable12 - - php: 7.0 - env: DB=pgsql CORE_BRANCH=stable13 - - php: 7.1 - env: DB=pgsql CORE_BRANCH=stable13 -# - php: 7.2 -# env: DB=pgsql CORE_BRANCH=stable13 - fast_finish: true - -before_install: - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - - nvm install 7.6 - - npm install -g npm@latest - - make - - make appstore - # install nextcloud - - cd ../ - - git clone https://github.com/nextcloud/server.git --recursive --depth 1 -b $CORE_BRANCH core - - mv contacts core/apps/ - -before_script: - - if [[ "$DB" == 'pgsql' ]]; then createuser -U travis -s oc_autotest; fi - - if [[ "$DB" == 'mysql' ]]; then mysql -u root -e 'create database oc_autotest;'; fi - - if [[ "$DB" == 'mysql' ]]; then mysql -u root -e "CREATE USER 'oc_autotest'@'localhost' IDENTIFIED BY '';"; fi - - if [[ "$DB" == 'mysql' ]]; then mysql -u root -e "grant all on oc_autotest.* to 'oc_autotest'@'localhost';"; fi - # fill nextcloud with default configs and enable contacts - - cd core - - mkdir data - - ./occ maintenance:install --database-name oc_autotest --database-user oc_autotest --admin-user admin --admin-pass admin --database $DB --database-pass='' - - ./occ app:enable contacts - - ./occ background:cron # enable default cron - - php -S localhost:8080 & - - cd apps/contacts - -script: - - make test - - # Upload the nightly to ftp server - - if [[ "$NIGHTLY" = "TRUE" ]]; then curl --ftp-create-dirs -T /home/travis/build/nextcloud/core/apps/contacts/build/artifacts/appstore/contacts.tar.gz -u $FTP_LOGIN:$FTP_PW ftp://upload.portknox.de/htdocs/contacts/nextcloud_contacts_nightly_build_$(date +%Y-%m-%d).tar.gz; fi - -after_failure: - - cat ../../data/nextcloud.log - -after_success: - # codecov has issues when not run exactly in the cloned folder on travis, so - # revert everything - - cd ../../../ - - mv core/apps/contacts . - - cd contacts - - node_modules/codecov/bin/codecov - -deploy: - provider: releases - api_key: - secure: IBNQc4MsBqOc6bj2fD1PnMFfELFpP2GqpZjmBsqP43dWixo8vZzafg7JwlsfnuC0rfcOE/2NwHQl43d+37sXMbMl+ZXgz2ax/wOyLAS2PK/EQEDkzYOdI0E/8u2D7V7m9LlCQ8MOGSGmjYwFcDLzcmgU8AOWg4N85ktpOkaiVF1287Rr+wcRZ0o4/VTVvykYzfKDIBaACAX+EaXtpBtD0cTr1lFN4vKuUma2+iX+MyPVZcvIbCWv2bTzqXzfkT3NagZuFXcooXhvPGFoOb8AisxRSoVP48Vpt8ziG+7wDFlIrNe+fjNJxOEMDEP8cYljoUU6MaOxcm012s/CqHjWBuTI5MRAWlH4w9YJ/1BhFoSJOUb21401zp255puPZJ+Vq8i720F21xm7g7Vc/1NsEAwmTzLgaG8cnV98SonITVDuR4qIaMWpHwTMhap6sHMW7UfH4QnCKypo1mgITFdjM9ANYbcfF8GBfrK4MZtuw75AcLoytFia+KnAOO7OpC93eo6Czcqu6ILOBz1XNWZcFQJTrkLKkFslZLhSSrgPrTL4Py0zVmBurxdOmoZkDcxyKmk/1ggQmZKhh7OS1TGW/7tckscwMhukLwnQiXBCQJ7VWAJ/2eaolym1+fDbqJ4z8t9q2KEfZyqlYAL4VxPqQzxwO9O19ej1WtncvpFHlQw= - file: build/artifacts/appstore/contacts.tar.gz - skip_cleanup: true - on: - repo: nextcloud/contacts - tags: true - php: 7.0 - -addons: - firefox: "latest" diff --git a/Makefile b/Makefile index a9f79072..274f50a7 100644 --- a/Makefile +++ b/Makefile @@ -1,182 +1,46 @@ -# This file is licensed under the Affero General Public License version 3 or -# later. See the COPYING file. -# @author Bernhard Posselt -# @copyright Bernhard Posselt 2016 +all: dev-setup lint build-js-production test -# Generic Makefile for building and packaging an Nextcloud app which uses npm and -# Composer. -# -# Dependencies: -# * make -# * which -# * curl: used if phpunit and composer are not installed to fetch them from the web -# * tar: for building the archive -# * npm: for building and testing everything JS -# -# If no composer.json is in the app root directory, the Composer step -# will be skipped. The same goes for the package.json which can be located in -# the app root or the js/ directory. -# -# The npm command by launches the npm build script: -# -# npm run build -# -# The npm test command launches the npm test script: -# -# npm run test -# -# The idea behind this is to be completely testing and build tool agnostic. All -# build tools and additional package managers should be installed locally in -# your project, since this won't pollute people's global namespace. -# -# The following npm scripts in your package.json install and update the bower -# and npm dependencies and use gulp as build system (notice how everything is -# run from the node_modules folder): -# -# "scripts": { -# "test": "node node_modules/gulp-cli/bin/gulp.js karma", -# "prebuild": "npm install && node_modules/bower/bin/bower install && node_modules/bower/bin/bower update", -# "build": "node node_modules/gulp-cli/bin/gulp.js" -# }, +# Dev env management +dev-setup: clean clean-dev npm-init -app_name=$(notdir $(CURDIR)) -project_directory=$(CURDIR)/../$(app_name) -build_tools_directory=$(CURDIR)/build/tools -source_build_directory=$(CURDIR)/build/artifacts/source -source_package_name=$(source_build_directory)/$(app_name) -appstore_build_directory=$(CURDIR)/build/artifacts/appstore -appstore_package_name=$(appstore_build_directory)/$(app_name) -npm=$(shell which npm 2> /dev/null) -composer=$(shell which composer 2> /dev/null) +npm-init: + npm install -all: build +npm-update: + npm update -# Fetches the PHP and JS dependencies and compiles the JS. If no composer.json -# is present, the composer step is skipped, if no package.json or js/package.json -# is present, the npm step is skipped -.PHONY: build -build: -ifneq (,$(wildcard $(CURDIR)/composer.json)) - make composer -endif -ifneq (,$(wildcard $(CURDIR)/package.json)) - make npm -endif -ifneq (,$(wildcard $(CURDIR)/js/package.json)) - make npm -endif +# Building +build-js: + npm run dev -# Installs and updates the composer dependencies. If composer is not installed -# a copy is fetched from the web -.PHONY: composer -composer: -ifeq (, $(composer)) - @echo "No composer command available, downloading a copy from the web" - mkdir -p $(build_tools_directory) - curl -sS https://getcomposer.org/installer | php - mv composer.phar $(build_tools_directory) - php $(build_tools_directory)/composer.phar install --prefer-dist - php $(build_tools_directory)/composer.phar update --prefer-dist -else - composer install --prefer-dist - composer update --prefer-dist -endif +build-js-production: + npm run build -# We need to build css files for Nextcloud 11 -# variables.scss is necessary and not provided by stable11 => download it -.PHONY: css -css: -ifeq (,$(wildcard $(CURDIR)/build/css/variables.scss)) - curl --silent --create-dirs -o $(CURDIR)/build/css/variables.scss https://raw.githubusercontent.com/nextcloud/server/master/core/css/variables.scss - npm run scss-compile -else - npm run scss-compile -endif +watch-js: + npm run watch -# Installs npm dependencies -.PHONY: npm -npm: -ifeq (,$(wildcard $(CURDIR)/package.json)) - cd js && $(npm) run build -else - npm run build - make css -endif +# Testing +test: + npm run test -# Removes the appstore build -.PHONY: clean -clean: - rm -rf ./build +test-watch: + npm run test:watch -# Same as clean but also removes dependencies installed by composer, bower and -# npm -.PHONY: distclean -distclean: clean - rm -rf vendor - rm -rf node_modules - rm -rf js/vendor - rm -rf js/node_modules +test-coverage: + npm run test:coverage -# Builds the source and appstore package -.PHONY: dist -dist: - make source - make appstore +# Linting +lint: + npm run lint -# Builds the source package -.PHONY: source -source: - rm -rf $(source_build_directory) - mkdir -p $(source_build_directory) - tar cvzf $(source_package_name).tar.gz ../$(app_name) \ - --exclude-vcs \ - --exclude="../$(app_name)/build" \ - --exclude="../$(app_name)/js/node_modules" \ - --exclude="../$(app_name)/node_modules" \ - --exclude="../$(app_name)/*.log" \ - --exclude="../$(app_name)/js/*.log" \ +lint-fix: + npm run lint:fix -# Builds the source package for the app store, ignores php and js tests -.PHONY: appstore -appstore: - rm -rf $(appstore_build_directory) - mkdir -p $(appstore_build_directory) - tar cvzf $(appstore_package_name).tar.gz \ - --exclude-vcs \ - $(project_directory)/appinfo \ - $(project_directory)/css \ - $(project_directory)/img \ - $(project_directory)/l10n \ - $(project_directory)/lib \ - $(project_directory)/templates \ - $(project_directory)/js/public \ - $(project_directory)/js/vendor \ - $(project_directory)/js/dav/dav.js +# Cleaning +clean: + rm -f js/contacts.js + rm -f js/contacts.js.map -# Command for running JS and PHP tests. Works for package.json files in the js/ -# and root directory. If phpunit is not installed systemwide, a copy is fetched -# from the internet -.PHONY: test -test: -ifneq (,$(wildcard $(CURDIR)/js/package.json)) - cd js && $(npm) run test -endif -ifneq (,$(wildcard $(CURDIR)/package.json)) - $(npm) run test -endif -# hotfix to prevent travis from using phpunix 6.x - @echo "No phpunit command available, downloading a copy from the web" - mkdir -p $(build_tools_directory) - curl -sSL https://phar.phpunit.de/phpunit-5.7.9.phar -o $(build_tools_directory)/phpunit.phar - php $(build_tools_directory)/phpunit.phar -c phpunit.xml --coverage-clover build/php-unit.clover - php $(build_tools_directory)/phpunit.phar -c phpunit.integration.xml --coverage-clover build/php-integration.clover +clean-dev: + rm -rf node_modules -# watch out for changes and rebuild -.PHONY: watch -watch: -ifneq (,$(wildcard $(CURDIR)/js/package.json)) - cd js && $(npm) run watch -endif -ifneq (,$(wildcard $(CURDIR)/package.json)) - $(npm) run watch -endif diff --git a/README.md b/README.md index f795bce4..62cd4009 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,23 @@ -# Nextcloud Contacts +# contacts -![Downloads](https://img.shields.io/github/downloads/nextcloud/contacts/total.svg) -[![irc](https://img.shields.io/badge/IRC-%23nextcloud--contacts%20on%20freenode-blue.svg)](https://webchat.freenode.net/?channels=nextcloud-contacts) -[![Build Status](https://travis-ci.org/nextcloud/contacts.svg?branch=master)](https://travis-ci.org/nextcloud/contacts) -[![Code coverage](https://img.shields.io/codecov/c/github/nextcloud/contacts.svg?maxAge=2592000)](https://codecov.io/gh/nextcloud/contacts/) +> A contacts app for Nextcloud. Easily sync contacts from various devices, share and edit them online. -**A contacts app for [Nextcloud](https://nextcloud.com). Easily sync contacts from various devices with your Nextcloud and edit them online.** +## Build Setup -![](https://raw.githubusercontent.com/nextcloud/screenshots/master/apps/Contacts/contacts.png) +``` bash +# set up and build for production +make -## Why is this so awesome? +# install dependencies +make dev-setup -* :rocket: **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come. -* :tada: **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar. -* :busts_in_silhouette: **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem! -* :see_no_evil: **We’re not reinventing the wheel!** Based on the great and open SabreDAV library. +# build for dev and watch changes +make watch-js -## Installation +# build for dev +make build-js -In your Nextcloud, simply navigate to »Apps«, choose the category »Organization«, find the Contacts app and enable it. -Then open the Contacts app from the app menu. +# build for production with minification +make build-js-production +``` -## Support - -If you need assistance or want to ask a question about Contacts, you are welcome to [ask for support](https://help.nextcloud.com) in our Forums or the [IRC-Channel](https://webchat.freenode.net/?channels=nextcloud-contacts). If you have found a bug, feel free to open a new Issue on GitHub. Keep in mind, that this repository only manages the frontend. If you find bugs or have problems with the CardDAV-Backend, you should ask the guys at [Nextcloud server](https://github.com/nextcloud/server) for help! - -## Maintainers: - -- [Hendrik Leppelsack](https://github.com/Henni) -- [Jan-Christoph Borchardt](https://github.com/jancborchardt) -- [John Molakvoæ](https://github.com/skjnldsv) - -If you'd like to join, just go through the [issue list](https://github.com/nextcloud/contacts/issues) and fix some. :) - -### Nightly builds - -Instead of setting everything up manually, you can just [download the nightly builds](https://nightly.portknox.net/contacts/?C=M;O=D) instead. These builds are updated every 24 hours, and are pre-configured with all the needed dependencies. - -1. Download -2. Extract the tar archive to 'path-to-nextcloud/apps' -3. Navigate to »Apps«, choose the category »Productivity«, find the Contacts app and enable it. - -The nightly builds are provided by [Portknox.net](https://portknox.net) - -## Building the app - -The app can be built by using the provided Makefile by running: - - make - -This requires the following things to be present: -* make -* which -* tar: for building the archive -* curl: used if phpunit and composer are not installed to fetch them from the web -* npm: for building and testing everything JS - -## Running tests -You can use the provided Makefile to run all tests by using: - - make test - -This will run the PHP unit and integration tests and if a package.json is present in the **js/** folder will execute **npm run test** - -Of course you can also install [PHPUnit](http://phpunit.de/getting-started.html) and use the configurations directly: - - phpunit -c phpunit.xml - -or: - - phpunit -c phpunit.integration.xml - -for integration tests diff --git a/appinfo/routes.php b/appinfo/routes.php index 7baabeb0..afbdb045 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -1,25 +1,30 @@ * - * This file is licensed under the Affero General Public License version 3 or - * later. See the COPYING file. + * @author John Molakvoæ * - * @author Hendrik Leppelsack - * @copyright Hendrik Leppelsack 2015 - */ - -/** - * Create your routes in here. The name is the lowercase name of the controller - * without the controller part, the stuff after the hash is the method. - * e.g. page#index -> OCA\Contacts\Controller\PageController->index() + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . * - * The controller class has to be registered in the application.php file since - * it's instantiated in there */ + return [ - 'routes' => [ - ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], - ['name' => 'page#do_echo', 'url' => '/echo', 'verb' => 'POST'], - ] + 'routes' => [ + ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], + ['name' => 'page#indexGroup', 'url' => '/{group}', 'verb' => 'GET'], + ['name' => 'page#indexContact', 'url' => '/{group}/{contact}', 'verb' => 'GET'] + ] ]; diff --git a/coverage/clover.xml b/coverage/clover.xml new file mode 100644 index 00000000..ba6f4ea8 --- /dev/null +++ b/coverage/clover.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1 @@ +{} diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css new file mode 100644 index 00000000..7090209c --- /dev/null +++ b/coverage/lcov-report/base.css @@ -0,0 +1,223 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* y