From 3f3ad0eeb8e01fe725a89ad196d23f22ad33de41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?= Date: Tue, 10 Jul 2018 15:20:48 +0200 Subject: 2.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: John Molakvoæ (skjnldsv) --- appinfo/info.xml | 5 +- css/_contactlist.scss | 190 ++++-------------------------------------- css/_navigation.scss | 3 - js/services/search_service.js | 8 +- package.json | 8 +- 5 files changed, 25 insertions(+), 189 deletions(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index d6f50b5d..dd81995d 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -11,11 +11,12 @@ * 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem! * 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library. - 2.1.5 + 2.2.0 AGPL Alexander Weidinger Jan-Christoph Borchardt Hendrik Leppelsack + John Molakvoæ https://docs.nextcloud.com/server/11/user_manual/pim/contacts.html https://docs.nextcloud.com/server/11/admin_manual/configuration_server/occ_command.html?highlight=occ%20commands#dav-label @@ -29,7 +30,7 @@ https://github.com/nextcloud/contacts.git https://raw.githubusercontent.com/nextcloud/screenshots/master/apps/Contacts/contacts.png - + OCA\Contacts\ContactsMenu\Providers\DetailsProvider diff --git a/css/_contactlist.scss b/css/_contactlist.scss index 42159e0a..6880da30 100644 --- a/css/_contactlist.scss +++ b/css/_contactlist.scss @@ -51,8 +51,25 @@ contactlist .tooltip { display: none; } + #app-content-wrapper { + .app-content-list { + display: block; + } + .app-content-detail { + display: none; + } + } + #app-navigation-toggle.showdetails { transform: translate(-50px, 0); + + #app-content-wrapper { + .app-content-list { + display: none; + } + .app-content-detail { + display: block; + } + } } #app-navigation-toggle-back { @@ -71,176 +88,3 @@ contactlist .tooltip { /* end of media query */ } - -/* STABLE12 FIXES. TO BE DROPPED FOR MIN VERSION 13 */ -#app-content-wrapper { - display: flex; - position: relative; - align-items: start; - height: 100%; - width: 100%; - .app-content-list, - .app-content-detail { - min-height: 100%; - max-height: 100%; - overflow-x: hidden; - overflow-y: auto; - } -} - -.app-content-list { - border-right: 1px solid nc-darken($color-main-background, 8%); - display: flex; - flex-direction: column; - transition: transform 250ms ease-in-out; - min-width: 250px; - max-width: 350px; - flex: 2 2 300px; - - /* Default item */ - .app-content-list-item { - position: relative; - height: 68px; - border-top: 1px solid nc-darken($color-main-background, 8%); - cursor: pointer; - padding: 10px 7px; - display: flex; - flex-wrap: wrap; - align-items: center; - flex: 0 0 auto; - - /* Icon fixes */ - &, - > .app-content-list-item-menu { - > [class^='icon-'], - > [class*=' icon-'] { - order: 4; - width: 24px; - height: 24px; - margin: -10px; - padding: 22px; - opacity: .3; - cursor: pointer; - &:hover, &:focus { - opacity: .7; - } - &[class^='icon-star'], - &[class*=' icon-star'] { - opacity: .7; - &:hover, &:focus { - opacity: 1; - } - } - &.icon-starred { - opacity: 1; - } - } - } - - &:hover, &:focus, - &.active { - background-color: nc-darken($color-main-background, 6%); - } - - .app-content-list-item-checkbox.checkbox + label, - .app-content-list-item-star { - position: absolute; - height: 40px; - width: 40px; - display: flex; - z-index: 50; - + .app-content-list-item-icon { - opacity: .7; - } - } - - .app-content-list-item-checkbox.checkbox + label { - top: 14px; - left: 7px; - &::before { - margin: 0; - } - /* Hide the star, priority to the checkbox */ - ~ .app-content-list-item-star { - display: none; - } - } - - .app-content-list-item-star { - top: 10px; - left: 32px; - background-size: 16px; - height: 20px; - width: 20px; - margin: 0; - padding: 0; - } - - .app-content-list-item-icon { - position: absolute; - display: inline-block; - height: 40px; - width: 40px; - line-height: 40px; - border-radius: 50%; - vertical-align: middle; - margin-right: 10px; - color: #fff; - text-align: center; - font-size: 1.5em; - text-transform: capitalize; - object-fit: cover; - user-select: none; - cursor: pointer; - } - - .app-content-list-item-line-one, - .app-content-list-item-line-two { - display: block; - padding-left: 50px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - order: 1; - flex: 1 1 0; - padding-right: 10px; - cursor: pointer; - } - - .app-content-list-item-line-two { - opacity: .5; - order: 3; - flex: 1 0 calc(100% - 24px); - } - - .app-content-list-item-details { - order: 2; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 100px; - opacity: .5; - font-size: 80%; - user-select: none; - } - - .app-content-list-item-menu { - order: 4; - position: relative; - .popovermenu { - margin: 0; - right: -5px; - } - } - } -} - -/* App content */ -.app-content-detail { - /* grow full width */ - flex-grow: 1; - - #app-navigation-toggle-back { - display: none; - } -} diff --git a/css/_navigation.scss b/css/_navigation.scss index 4b95ba95..b3019f2d 100644 --- a/css/_navigation.scss +++ b/css/_navigation.scss @@ -1,6 +1,3 @@ -#app-navigation { - position: relative; -} #app-navigation > ul { height: calc(100% - 68px); diff --git a/js/services/search_service.js b/js/services/search_service.js index f12dd8a1..5d602b30 100644 --- a/js/services/search_service.js +++ b/js/services/search_service.js @@ -39,13 +39,7 @@ angular.module('contactsApp') searchTerm = ''; }; - if (!_.isUndefined(OC.Plugins)) { - OC.Plugins.register('OCA.Search', SearchProxy); - if (!_.isUndefined(OCA.Search)) { - OC.Search = new OCA.Search($('#searchbox'), $('#searchresults')); - $('#searchbox').show(); - } - } + if (!_.isUndefined($('.searchbox'))) { $('.searchbox')[0].addEventListener('keypress', function(e) { diff --git a/package.json b/package.json index 4af42659..702ccc77 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "contacts", - "version": "2.1.5", + "version": "2.2.0", "description": "Place this app in **nextcloud/apps/**", "author": { "name": "Hendrik Leppelsack", @@ -34,7 +34,7 @@ "gulp-ng-annotate": "^2.0.0", "gulp-sourcemaps": "^1.6.0", "gulp-stylelint": "^5.0.0", - "karma": "^2.0.2", + "karma": "^2.0.4", "karma-chai": "^0.1.0", "karma-coverage": "^1.1.1", "karma-firefox-launcher": "^1.0.0", @@ -43,9 +43,9 @@ "karma-sinon": "^1.0.5", "merge-stream": "^1.0.1", "mocha": "^5.2.0", - "node-sass": "^4.9.0", + "node-sass": "^4.9.2", "sinon": "^1.17.5", - "stylelint": "^9.1.1", + "stylelint": "^9.3.0", "stylelint-config-recommended-scss": "^3.1.0", "stylelint-scss": "^2.4.0", "underscore": "^1.8.3" -- cgit v1.2.3 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