From 7b2502b7acd5575c326703def40192255d174da3 Mon Sep 17 00:00:00 2001 From: Mikael Korpela Date: Fri, 8 Apr 2016 00:07:43 +0300 Subject: [PATCH] Add tags and tribes feature. #208 At database level everything is basically "tags", and "tribes" are essentially just tags on steroids. They're promoted from tags by setting `tribe:true`. At initial phase, we will have fixed number of tags which are all promoted to be Tribes right away. Eventually users will be able to create their own tags and enough of members per tag will create a tribe out of it. Also search functionaility around tribes is still missing. Purpose of this initial feature set is to help promoting TR to new audiences beyond our initial hitchhikers community. --- .gitignore | 1 + CHANGELOG.md | 10 + bower.json | 3 +- config/assets/default.js | 3 +- config/env/default.js | 6 + modules/core/client/app/config.js | 3 +- .../directives/tr-boards.client.directive.js | 8 + .../core/client/fonts/fontello/config.json | 114 ++++---- .../fonts/fontello/css/tricons-codes.css | 97 ++++--- .../fonts/fontello/css/tricons-embedded.css | 109 +++---- .../fonts/fontello/css/tricons-ie7-codes.css | 97 ++++--- .../client/fonts/fontello/css/tricons-ie7.css | 97 ++++--- .../client/fonts/fontello/css/tricons.css | 111 +++---- .../client/fonts/fontello/font/tricons.eot | Bin 26964 -> 27612 bytes .../client/fonts/fontello/font/tricons.svg | 100 ++++--- .../client/fonts/fontello/font/tricons.ttf | Bin 26800 -> 27448 bytes .../client/fonts/fontello/font/tricons.woff | Bin 15384 -> 15748 bytes .../client/fonts/fontello/font/tricons.woff2 | Bin 12976 -> 13312 bytes modules/core/client/img/board/tribes-1.jpg | Bin 0 -> 35509 bytes .../core/client/less/global-variables.less | 1 + modules/core/client/less/layout/helpers.less | 2 +- modules/core/client/less/layout/layout.less | 2 +- .../controllers/core.server.controller.js | 17 +- .../controllers/errors.server.controller.js | 2 + .../views/partials/header.server.view.html | 5 + .../client/config/pages.client.routes.js | 2 +- .../controllers/home.client.controller.js | 6 +- modules/pages/client/less/home.less | 80 +++++- .../pages/client/views/home.client.view.html | 38 +++ .../tags/client/config/tags.client.config.js | 51 ++++ .../controllers/tribe.client.controller.js | 34 +++ .../tribes-list.client.controller.js | 19 ++ .../tr-tags-list.client.directive.js | 23 ++ .../tr-tribe-join-button.client.directive.js | 78 +++++ .../tr-tribe-join.client.directive.js | 196 +++++++++++++ .../tr-tribe-styles.client.directive.js | 39 +++ .../tr-tribes-list.client.directive.js | 23 ++ modules/tags/client/less/tags.less | 17 ++ modules/tags/client/less/tribe.less | 73 +++++ modules/tags/client/less/tribes-grid.less | 53 ++++ modules/tags/client/less/tribes-list.less | 54 ++++ modules/tags/client/less/tribes.less | 51 ++++ .../client/services/tribe.client.service.js | 88 ++++++ .../client/services/tribes.client.service.js | 15 + modules/tags/client/tags.client.module.js | 5 + .../directives/tr-tags-list.client.view.html | 5 + .../tr-tribes-list.client.view.html | 22 ++ .../tags/client/views/tribe.client.view.html | 72 +++++ .../client/views/tribes-list.client.view.html | 61 ++++ .../controllers/tags.server.controller.js | 94 ++++++ .../controllers/tribes.server.controller.js | 96 +++++++ .../tags/server/models/tag.server.model.js | 146 ++++++++++ .../server/policies/tags.server.policy.js | 100 +++++++ .../tags/server/routes/tags.server.routes.js | 30 ++ .../tests/server/tags.server.model.tests.js | 254 ++++++++++++++++ .../tests/server/tags.server.routes.test.js | 229 +++++++++++++++ .../client/config/users.client.routes.js | 9 +- .../authentication.client.controller.js | 2 +- .../profile-edit-tags.client.controller.js | 41 +++ .../controllers/profile.client.controller.js | 31 ++ .../controllers/signup.client.controller.js | 133 +++++++-- .../client/less/signup-tribe-suggestions.less | 65 +++++ modules/users/client/less/signup.less | 72 +++++ .../services/users-tags.client.service.js | 23 ++ .../rules-modal.client.view.html | 8 + .../authentication/signup.client.view.html | 191 ++++++++---- .../profile/profile-edit.client.view.html | 1 + .../profile-view-about.client.view.html | 18 +- .../profile-view-tribes.client.view.html | 27 ++ .../profile/profile-view.client.view.html | 1 - .../users.authentication.server.controller.js | 9 +- .../users/users.profile.server.controller.js | 272 +++++++++++++++--- .../users/server/models/user.server.model.js | 43 ++- .../server/policies/users.server.policy.js | 6 + .../server/routes/users.server.routes.js | 3 + .../tests/server/user.server.model.tests.js | 18 +- .../tests/server/user.server.routes.tests.js | 30 ++ package.json | 6 +- 78 files changed, 3353 insertions(+), 498 deletions(-) mode change 100644 => 100755 modules/core/client/fonts/fontello/config.json create mode 100644 modules/core/client/img/board/tribes-1.jpg create mode 100644 modules/tags/client/config/tags.client.config.js create mode 100644 modules/tags/client/controllers/tribe.client.controller.js create mode 100644 modules/tags/client/controllers/tribes-list.client.controller.js create mode 100644 modules/tags/client/directives/tr-tags-list.client.directive.js create mode 100644 modules/tags/client/directives/tr-tribe-join-button.client.directive.js create mode 100644 modules/tags/client/directives/tr-tribe-join.client.directive.js create mode 100644 modules/tags/client/directives/tr-tribe-styles.client.directive.js create mode 100644 modules/tags/client/directives/tr-tribes-list.client.directive.js create mode 100644 modules/tags/client/less/tags.less create mode 100644 modules/tags/client/less/tribe.less create mode 100644 modules/tags/client/less/tribes-grid.less create mode 100644 modules/tags/client/less/tribes-list.less create mode 100644 modules/tags/client/less/tribes.less create mode 100644 modules/tags/client/services/tribe.client.service.js create mode 100644 modules/tags/client/services/tribes.client.service.js create mode 100644 modules/tags/client/tags.client.module.js create mode 100644 modules/tags/client/views/directives/tr-tags-list.client.view.html create mode 100644 modules/tags/client/views/directives/tr-tribes-list.client.view.html create mode 100644 modules/tags/client/views/tribe.client.view.html create mode 100644 modules/tags/client/views/tribes-list.client.view.html create mode 100644 modules/tags/server/controllers/tags.server.controller.js create mode 100644 modules/tags/server/controllers/tribes.server.controller.js create mode 100644 modules/tags/server/models/tag.server.model.js create mode 100644 modules/tags/server/policies/tags.server.policy.js create mode 100644 modules/tags/server/routes/tags.server.routes.js create mode 100644 modules/tags/tests/server/tags.server.model.tests.js create mode 100644 modules/tags/tests/server/tags.server.routes.test.js create mode 100644 modules/users/client/controllers/profile-edit-tags.client.controller.js create mode 100644 modules/users/client/less/signup-tribe-suggestions.less create mode 100644 modules/users/client/less/signup.less create mode 100644 modules/users/client/services/users-tags.client.service.js create mode 100644 modules/users/client/views/authentication/rules-modal.client.view.html create mode 100644 modules/users/client/views/profile/profile-view-tribes.client.view.html diff --git a/.gitignore b/.gitignore index 25a7828c8f..813edb771c 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,4 @@ migrations/.migrate # User uploads uploads modules/users/client/img/profile/uploads +modules/tags/client/img/tribe diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d7934ea53..c3ccce8b2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,16 @@ Versions at `package.json` describe API version. See [API docs](http://developers.trustroots.org/docs/api/) +#### 0.3.2 +- Add endpoints for tags and tribes: + - GET `/api/tribes` + - GET `/api/tags` + - GET `/api/tags/:tagSlug` + - GET `/api/tribes/:tribeSlug` + - POST/PUT/DELETE `/api/users/tags` + - GET `/api/users/:username` now returns array tags and tribes by `member` object and array of id's by `memberIds` key. + - GET `/api/users/:username` doesn't return `public` key anymore for other than authenticated user's profile. + #### 0.3.1 - Add endpoints for message thread references: - GET `/api/references/threads/:userToId` diff --git a/bower.json b/bower.json index d98ee85261..65aaf1fbbe 100644 --- a/bower.json +++ b/bower.json @@ -27,7 +27,8 @@ "angular-locker": "~2.0.4", "medium-editor": "~5.15.0", "angular-confirm-modal": "~1.2.3", - "angulartics-google-analytics": "^0.1.4" + "angulartics-google-analytics": "~0.1.4", + "angulargrid": "~0.5.4" }, "resolutions": { "angular": "1.5.3" diff --git a/config/assets/default.js b/config/assets/default.js index 2d9f73486a..279d850e1f 100644 --- a/config/assets/default.js +++ b/config/assets/default.js @@ -63,7 +63,8 @@ module.exports = { 'public/lib/mailcheck/src/mailcheck.js', 'public/lib/angular-mailcheck/angular-mailcheck.js', 'public/lib/angular-locker/dist/angular-locker.js', - 'public/lib/angular-confirm-modal/angular-confirm.js' + 'public/lib/angular-confirm-modal/angular-confirm.js', + 'public/lib/angulargrid/angulargrid.js' ], less: [ 'public/lib/angular-trustpass/src/tr-trustpass.less', diff --git a/config/env/default.js b/config/env/default.js index 3d251eed65..9a21bf5b55 100644 --- a/config/env/default.js +++ b/config/env/default.js @@ -26,6 +26,12 @@ module.exports = { domain: process.env.DOMAIN || 'localhost:3000', supportEmail: 'support@trustroots.org', // TO-address for support requests profileMinimumLength: 140, // Require User.profile.description to be >=140 chars to send messages + // Strings not allowed as usernames and tag/tribe labels + illegalStrings: ['trustroots', 'trust', 'roots', 're', 're:', 'fwd', 'fwd:', 'reply', 'admin', 'administrator', 'password', + 'username', 'unknown', 'anonymous', 'null', 'undefined', 'home', 'signup', 'signin', 'login', 'user', + 'edit', 'settings', 'username', 'user', ' demo', 'test', 'support', 'networks', 'profile', 'avatar', 'mini', + 'photo', 'account', 'api', 'modify', 'feedback', 'security', 'accounts', 'tribe', 'tag', 'community' + ], mailer: { from: process.env.MAILER_FROM || 'hello@trustroots.org', options: { diff --git a/modules/core/client/app/config.js b/modules/core/client/app/config.js index 323ab92f29..9e2f983e84 100644 --- a/modules/core/client/app/config.js +++ b/modules/core/client/app/config.js @@ -34,7 +34,8 @@ var AppConfig = (function() { 'trTrustpass', 'angular-mailcheck', 'angular-locker', - 'angular-confirm' + 'angular-confirm', + 'angularGrid' ]; // Load different service dependency for Angulartics depending on environment diff --git a/modules/core/client/directives/tr-boards.client.directive.js b/modules/core/client/directives/tr-boards.client.directive.js index 7e03a9378a..9f987e8520 100644 --- a/modules/core/client/directives/tr-boards.client.directive.js +++ b/modules/core/client/directives/tr-boards.client.directive.js @@ -124,6 +124,14 @@ 'file': 'ss-mountainforest.jpg', 'license': 'CC', 'license_url': 'https://creativecommons.org/publicdomain/zero/1.0/', // https://unsplash.com/license + }, + 'tribes-1': { + // Permission granted for Trustroots (asked by Mikael Korpela) + 'name': 'Antonio Fulghieri', + 'url': 'https://aaoutthere.wordpress.com/', + 'license': 'CC', + 'license_url': 'https://creativecommons.org/licenses/by-nc-nd/4.0/', + 'file': 'tribes-1.jpg' } }; diff --git a/modules/core/client/fonts/fontello/config.json b/modules/core/client/fonts/fontello/config.json old mode 100644 new mode 100755 index efe7e0da59..ee172d901e --- a/modules/core/client/fonts/fontello/config.json +++ b/modules/core/client/fonts/fontello/config.json @@ -9,7 +9,7 @@ { "uid": "d41847131ae0b773450fb61438341264", "css": "tree", - "code": 59427, + "code": 59392, "src": "custom_icons", "selected": true, "svg": { @@ -23,7 +23,7 @@ { "uid": "1e1f9b5e56d126487827cc669ce37dcd", "css": "eye", - "code": 59438, + "code": 59393, "src": "custom_icons", "selected": true, "svg": { @@ -37,7 +37,7 @@ { "uid": "af4798ee115104a09b2466e8ae5cc47e", "css": "eye-off", - "code": 59439, + "code": 59394, "src": "custom_icons", "selected": true, "svg": { @@ -51,266 +51,284 @@ { "uid": "9dd9e835aebe1060ba7190ad2b2ed951", "css": "search", - "code": 59396, + "code": 59395, "src": "fontawesome" }, { "uid": "d73eceadda1f594cec0536087539afbf", "css": "heart", - "code": 59407, + "code": 59396, "src": "fontawesome" }, { "uid": "f3dc2d6d8fe9cf9ebff84dc260888cdf", "css": "heart-alt", - "code": 59402, + "code": 59397, "src": "fontawesome" }, { "uid": "12f4ece88e46abd864e40b35e05b11cd", "css": "ok", - "code": 59417, + "code": 59398, "src": "fontawesome" }, { "uid": "5211af474d3a9848f67f945e2ccaf143", "css": "close", - "code": 59435, + "code": 59399, "src": "fontawesome" }, { "uid": "2d3be3e856fc1e4ac067590d2ded1b07", "css": "plus-squared-alt", - "code": 59413, + "code": 59400, "src": "fontawesome" }, { "uid": "18ef25350258541e8e54148ed79845c0", "css": "minus-squared-alt", - "code": 59414, + "code": 59401, "src": "fontawesome" }, { "uid": "e15f0d620a7897e2035c18c80142f6d9", "css": "link-ext", - "code": 59398, + "code": 59402, "src": "fontawesome" }, { "uid": "c6be5a58ee4e63a5ec399c2b0d15cf2c", "css": "reply", - "code": 59418, + "code": 59403, "src": "fontawesome" }, { "uid": "41087bc74d4b20b55059c60a33bf4008", "css": "edit", - "code": 59406, + "code": 59404, "src": "fontawesome" }, { "uid": "dcedf50ab1ede3283d7a6c70e2fe32f3", "css": "messages", - "code": 59392, + "code": 59405, "src": "fontawesome" }, { "uid": "9c1376672bb4f1ed616fdd78a23667e9", "css": "message-alt", - "code": 59415, + "code": 59406, "src": "fontawesome" }, { "uid": "31951fbb9820ed0690f675b3d495c8da", "css": "messages-alt", - "code": 59426, + "code": 59407, "src": "fontawesome" }, { "uid": "ead4c82d04d7758db0f076584893a8c1", "css": "calendar", - "code": 59410, + "code": 59408, "src": "fontawesome" }, { "uid": "3a00327e61b997b58518bd43ed83c3df", "css": "sign-in", - "code": 59401, + "code": 59409, "src": "fontawesome" }, { "uid": "0d20938846444af8deb1920dc85a29fb", "css": "sign-out", - "code": 59409, + "code": 59410, "src": "fontawesome" }, { "uid": "128d63150a41800e0beff55235269542", "css": "sign-up", - "code": 59399, + "code": 59411, "src": "fontawesome" }, { "uid": "f3f90c8c89795da30f7444634476ea4f", "css": "left", - "code": 59422, + "code": 59412, "src": "fontawesome" }, { "uid": "7bf14281af5633a597f85b061ef1cfb9", "css": "right", - "code": 59421, + "code": 59413, "src": "fontawesome" }, { "uid": "e4dde1992f787163e2e2b534b8c8067d", "css": "down", - "code": 59436, + "code": 59414, "src": "fontawesome" }, { "uid": "a73c5deb486c8d66249811642e5d719a", "css": "refresh", - "code": 59394, + "code": 59415, "src": "fontawesome" }, { "uid": "6020aff067fc3c119cdd75daa5249220", "css": "exchange", - "code": 59393, + "code": 59416, "src": "fontawesome" }, { "uid": "3212f42c65d41ed91cb435d0490e29ed", "css": "bolt", - "code": 59395, + "code": 59417, "src": "fontawesome" }, { "uid": "38575a803c4da31ce20d77e1e1236bcb", "css": "send", - "code": 59419, + "code": 59418, "src": "fontawesome" }, { "uid": "02cca871bb69da75e8ee286b7055832c", "css": "bold", - "code": 59428, + "code": 59419, "src": "fontawesome" }, { "uid": "a8cb1c217f02b073db3670c061cc54d2", "css": "italic", - "code": 59430, + "code": 59420, "src": "fontawesome" }, { "uid": "a2a74f5e7b7d9ba054897d8c795a326a", "css": "list", - "code": 59432, + "code": 59421, "src": "fontawesome" }, { "uid": "d4a4a38a40b728f46dad1de4ac950231", "css": "underline", - "code": 59431, + "code": 59422, "src": "fontawesome" }, { "uid": "ede2ea0a583f662b79fbb181b428c20d", "css": "building", - "code": 59412, + "code": 59423, "src": "fontawesome" }, { "uid": "ebffa4e734c8379ffee4fbfe49264d94", "css": "lifebuoy", - "code": 59400, + "code": 59424, "src": "fontawesome" }, { "uid": "4743b088aa95d6f3b6b990e770d3b647", "css": "facebook", - "code": 59405, + "code": 59425, "src": "fontawesome" }, { "uid": "0ece9a12de796b8411f868d582bee678", "css": "github", - "code": 59397, + "code": 59426, "src": "fontawesome" }, { "uid": "f0cf7db1b03cb65adc450aa3bdaf8c4d", "css": "google", - "code": 59408, + "code": 59427, "src": "fontawesome" }, { "uid": "1145676a91138011729fa2909997af66", "css": "linkedin", - "code": 59403, + "code": 59428, "src": "fontawesome" }, { "uid": "906348dc798a0d42715cc97c875e3ac6", "css": "twitter", - "code": 59404, + "code": 59429, "src": "fontawesome" }, { "uid": "bbd66ef66bb8fa9edde54d9a90b89150", "css": "user", - "code": 59424, + "code": 59430, "src": "entypo" }, { "uid": "ecf8edb95c3f45eb433b4cce7ba9f740", "css": "users", - "code": 59425, + "code": 59431, "src": "entypo" }, { "uid": "3def559c3c39b8500882e02892b7daa8", "css": "picture-change", - "code": 59416, + "code": 59432, "src": "entypo" }, { "uid": "de9a631a7d18106aea1c89ba51b1990a", "css": "help", - "code": 59423, + "code": 59433, "src": "entypo" }, { "uid": "513ac180ff85bd275f2b736720cbbf5e", "css": "home", - "code": 59411, + "code": 59434, "src": "entypo" }, { "uid": "815503841e980c848f55e0271deacead", "css": "link", - "code": 59433, + "code": 59435, "src": "entypo" }, { "uid": "c3e5dafba1739ef33cc574c7484febf7", "css": "quote", - "code": 59434, + "code": 59436, "src": "entypo" }, { "uid": "a66a6e088038a1881d532b6675bf8412", "css": "info", - "code": 59429, + "code": 59437, "src": "modernpics" }, { "uid": "2e3c51fc718aeb8b01604c8d039bcaeb", "css": "invalid", - "code": 59420, + "code": 59438, + "src": "elusive" + }, + { + "uid": "44e04715aecbca7f266a17d5a7863c68", + "css": "plus", + "code": 59439, + "src": "fontawesome" + }, + { + "uid": "7ad4d2306ebda8452e5e3eff3cd8241c", + "css": "thumbs-up", + "code": 59440, + "src": "entypo" + }, + { + "uid": "e36d581e4f2844db345bddc205d15dda", + "css": "tribes", + "code": 59441, "src": "elusive" } ] -} \ No newline at end of file +} diff --git a/modules/core/client/fonts/fontello/css/tricons-codes.css b/modules/core/client/fonts/fontello/css/tricons-codes.css index db11d3b21c..c933227b3f 100644 --- a/modules/core/client/fonts/fontello/css/tricons-codes.css +++ b/modules/core/client/fonts/fontello/css/tricons-codes.css @@ -1,48 +1,51 @@ -.icon-messages:before { content: '\e800'; } /* '' */ -.icon-exchange:before { content: '\e801'; } /* '' */ -.icon-refresh:before { content: '\e802'; } /* '' */ -.icon-bolt:before { content: '\e803'; } /* '' */ -.icon-search:before { content: '\e804'; } /* '' */ -.icon-github:before { content: '\e805'; } /* '' */ -.icon-link-ext:before { content: '\e806'; } /* '' */ -.icon-sign-up:before { content: '\e807'; } /* '' */ -.icon-lifebuoy:before { content: '\e808'; } /* '' */ -.icon-sign-in:before { content: '\e809'; } /* '' */ -.icon-heart-alt:before { content: '\e80a'; } /* '' */ -.icon-linkedin:before { content: '\e80b'; } /* '' */ -.icon-twitter:before { content: '\e80c'; } /* '' */ -.icon-facebook:before { content: '\e80d'; } /* '' */ -.icon-edit:before { content: '\e80e'; } /* '' */ -.icon-heart:before { content: '\e80f'; } /* '' */ -.icon-google:before { content: '\e810'; } /* '' */ -.icon-sign-out:before { content: '\e811'; } /* '' */ -.icon-calendar:before { content: '\e812'; } /* '' */ -.icon-home:before { content: '\e813'; } /* '' */ -.icon-building:before { content: '\e814'; } /* '' */ -.icon-plus-squared-alt:before { content: '\e815'; } /* '' */ -.icon-minus-squared-alt:before { content: '\e816'; } /* '' */ -.icon-message-alt:before { content: '\e817'; } /* '' */ -.icon-picture-change:before { content: '\e818'; } /* '' */ -.icon-ok:before { content: '\e819'; } /* '' */ -.icon-reply:before { content: '\e81a'; } /* '' */ -.icon-send:before { content: '\e81b'; } /* '' */ -.icon-invalid:before { content: '\e81c'; } /* '' */ -.icon-right:before { content: '\e81d'; } /* '' */ -.icon-left:before { content: '\e81e'; } /* '' */ -.icon-help:before { content: '\e81f'; } /* '' */ -.icon-user:before { content: '\e820'; } /* '' */ -.icon-users:before { content: '\e821'; } /* '' */ -.icon-messages-alt:before { content: '\e822'; } /* '' */ -.icon-tree:before { content: '\e823'; } /* '' */ -.icon-bold:before { content: '\e824'; } /* '' */ -.icon-info:before { content: '\e825'; } /* '' */ -.icon-italic:before { content: '\e826'; } /* '' */ -.icon-underline:before { content: '\e827'; } /* '' */ -.icon-list:before { content: '\e828'; } /* '' */ -.icon-link:before { content: '\e829'; } /* '' */ -.icon-quote:before { content: '\e82a'; } /* '' */ -.icon-close:before { content: '\e82b'; } /* '' */ -.icon-down:before { content: '\e82c'; } /* '' */ -.icon-eye:before { content: '\e82e'; } /* '' */ -.icon-eye-off:before { content: '\e82f'; } /* '' */ \ No newline at end of file +.icon-tree:before { content: '\e800'; } /* '' */ +.icon-eye:before { content: '\e801'; } /* '' */ +.icon-eye-off:before { content: '\e802'; } /* '' */ +.icon-search:before { content: '\e803'; } /* '' */ +.icon-heart:before { content: '\e804'; } /* '' */ +.icon-heart-alt:before { content: '\e805'; } /* '' */ +.icon-ok:before { content: '\e806'; } /* '' */ +.icon-close:before { content: '\e807'; } /* '' */ +.icon-plus-squared-alt:before { content: '\e808'; } /* '' */ +.icon-minus-squared-alt:before { content: '\e809'; } /* '' */ +.icon-link-ext:before { content: '\e80a'; } /* '' */ +.icon-reply:before { content: '\e80b'; } /* '' */ +.icon-edit:before { content: '\e80c'; } /* '' */ +.icon-messages:before { content: '\e80d'; } /* '' */ +.icon-message-alt:before { content: '\e80e'; } /* '' */ +.icon-messages-alt:before { content: '\e80f'; } /* '' */ +.icon-calendar:before { content: '\e810'; } /* '' */ +.icon-sign-in:before { content: '\e811'; } /* '' */ +.icon-sign-out:before { content: '\e812'; } /* '' */ +.icon-sign-up:before { content: '\e813'; } /* '' */ +.icon-left:before { content: '\e814'; } /* '' */ +.icon-right:before { content: '\e815'; } /* '' */ +.icon-down:before { content: '\e816'; } /* '' */ +.icon-refresh:before { content: '\e817'; } /* '' */ +.icon-exchange:before { content: '\e818'; } /* '' */ +.icon-bolt:before { content: '\e819'; } /* '' */ +.icon-send:before { content: '\e81a'; } /* '' */ +.icon-bold:before { content: '\e81b'; } /* '' */ +.icon-italic:before { content: '\e81c'; } /* '' */ +.icon-list:before { content: '\e81d'; } /* '' */ +.icon-underline:before { content: '\e81e'; } /* '' */ +.icon-building:before { content: '\e81f'; } /* '' */ +.icon-lifebuoy:before { content: '\e820'; } /* '' */ +.icon-facebook:before { content: '\e821'; } /* '' */ +.icon-github:before { content: '\e822'; } /* '' */ +.icon-google:before { content: '\e823'; } /* '' */ +.icon-linkedin:before { content: '\e824'; } /* '' */ +.icon-twitter:before { content: '\e825'; } /* '' */ +.icon-user:before { content: '\e826'; } /* '' */ +.icon-users:before { content: '\e827'; } /* '' */ +.icon-picture-change:before { content: '\e828'; } /* '' */ +.icon-help:before { content: '\e829'; } /* '' */ +.icon-home:before { content: '\e82a'; } /* '' */ +.icon-link:before { content: '\e82b'; } /* '' */ +.icon-quote:before { content: '\e82c'; } /* '' */ +.icon-info:before { content: '\e82d'; } /* '' */ +.icon-invalid:before { content: '\e82e'; } /* '' */ +.icon-plus:before { content: '\e82f'; } /* '' */ +.icon-thumbs-up:before { content: '\e830'; } /* '' */ +.icon-tribes:before { content: '\e831'; } /* '' */ \ No newline at end of file diff --git a/modules/core/client/fonts/fontello/css/tricons-embedded.css b/modules/core/client/fonts/fontello/css/tricons-embedded.css index 5daeb3a73f..340b3d771e 100644 --- a/modules/core/client/fonts/fontello/css/tricons-embedded.css +++ b/modules/core/client/fonts/fontello/css/tricons-embedded.css @@ -1,15 +1,15 @@ @font-face { font-family: 'tricons'; - src: url('../font/tricons.eot?17979865'); - src: url('../font/tricons.eot?17979865#iefix') format('embedded-opentype'), - url('../font/tricons.svg?17979865#tricons') format('svg'); + src: url('../font/tricons.eot?18459008'); + src: url('../font/tricons.eot?18459008#iefix') format('embedded-opentype'), + url('../font/tricons.svg?18459008#tricons') format('svg'); font-weight: normal; font-style: normal; } @font-face { font-family: 'tricons'; - src: url('data:application/octet-stream;base64,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') format('woff'), - url('data:application/octet-stream;base64,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VLQBZWdjZVSjP6I9oTsGOgBVaTpVYbYBaV9qaVQAX1deX1StAVYAV1lWV2CvWq4DWFsBWWtYWWCwAVwAXXFcXWCyYLEDXmQBYWNeYWC1AWdoZgJjdGdjYABxAHJ9cXJgtwFrbAFqbWtqYLgBbgBtem5tYAB6f3V6VLkBbwBwdm9wYLx5d7sEdXgBdnN1dmC6AXQAc4N0c2DAAUA8g3yEg1S9AXsAfIV7fGC+AX0AfoB9fmAAfwCAgn+AYL8BgQCChoGCYMEBhQCGhIWGYMABg4OEWACEg4RMWVlZWVlB/wNGA0UDOgM3AysDKgMTAxIDBgMFAvkC+ALhAuAC1ALUAsACvwK0ArQCqgKnApsCmgKOAo0CgQKAAl8CXgJSAlECRgJFAjwCOwIwAi8CJQIkAhsCGgHuAe0B4gHhAdgB1wHMAcsBwQHAAbYBtQGpAagBnQGcAZMBkgGHAYYBewF6AW8BbgFXAVYBTAFLAT8BPgEpASgBGwEaAREBEAEFAQIA6wDqANMA0gDEAMMAugC5AKwAqwCfAJ4AkgCRAIgAhwB9AHwAZABjAFcAVgBJAEgAPAA7AC8ALgAkACMAGQAYAA0ADAABAAADUwNQA0sDSQNFA08DRgNPA0ADPgM3A0QDOgNEAzEDMAMqAzYDKwM2AyQDIwMgAx8DGgMYAxIDHgMTAx4DDAMKAwUDEQMGAxEC/QL8AvgDBAL5AwIC8wLyAu4C7QLoAuYC4ALsAuEC7ALUAt8C1ALfAtsC2gLQAs4CywLKAsQCwwK/AskCwALJArQCvgK0Ar4CuwK6ArACrgKnArMCqgKzAqICoAKaAqYCmwKmApMCkgKNApkCjgKYAocChQKAAowCgQKLAnsCegJjAmICXgJnAl8CZwJYAlYCUQJdAlICXQJLAkkCRQJQAkYCUAJAAj8COwJEAjwCRAI0AjMCLwI6AjACOgIqAigCJAIuAiUCLgIfAh4CGkH8AiMCGwIjAhYCFQILAgoB/wH9AfkB+AHzAfIB7QH3Ae4B9gHoAeYB4QHsAeIB7AHcAdoB1wHgAdgB3wHSAdABywHWAcwB1QHHAcYBwAHKAcEBygG6AbkBtQG/AbYBvwGuAa0BqAG0AakBtAGkAaIBnAGnAZ0BpwGSAZsBkwGbAY4BjAGGAZEBhwGRAYIBgAF6AYUBewGFAXQBcgFuAXkBbwF4AW0B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') format('truetype'); + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,AAEAAAAPAIAAAwBwR1NVQrD+s+0AAAD8AAAAQk9TLzI+lEkpAAABQAAAAFZjbWFwm6vw4QAAAZgAAAQeY3Z0IAbV/hwAAF8gAAAAIGZwZ22KkZBZAABfQAAAC3BnYXNwAAAAEAAAXxgAAAAIZ2x5ZkDu+toAAAW4AABS4GhlYWQJcl+/AABYmAAAADZoaGVhB0IDbAAAWNAAAAAkaG10eK3x/+MAAFj0AAAAzGxvY2HHdNXaAABZwAAAAGhtYXhwB0QasAAAWigAAAAgbmFtZY/yAq8AAFpIAAACwXBvc3S/h9CXAABdDAAAAglwcmVw5UErvAAAarAAAACGAAEAAAAKAB4ALAABREZMVAAIAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAAAAQNpAZAABQAAAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoMQNS/2oAWgNSAQoAAAABAAAAAAAAAAAABQAAAAMAAAAsAAAABAAAAbYAAQAAAAAAsAADAAEAAAAsAAMACgAAAbYABACEAAAABAAEAAEAAOgx//8AAOgA//8AAAABAAQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAmgAAAAAAAAAMgAA6AAAAOgAAAAAAQAA6AEAAOgBAAAAAgAA6AIAAOgCAAAAAwAA6AMAAOgDAAAABAAA6AQAAOgEAAAABQAA6AUAAOgFAAAABgAA6AYAAOgGAAAABwAA6AcAAOgHAAAACAAA6AgAAOgIAAAACQAA6AkAAOgJAAAACgAA6AoAAOgKAAAACwAA6AsAAOgLAAAADAAA6AwAAOgMAAAADQAA6A0AAOgNAAAADgAA6A4AAOgOAAAADwAA6A8AAOgPAAAAEAAA6BAAAOgQAAAAEQAA6BEAAOgRAAAAEgAA6BIAAOgSAAAAEwAA6BMAAOgTAAAAFAAA6BQAAOgUAAAAFQAA6BUAAOgVAAAAFgAA6BYAAOgWAAAAFwAA6BcAAOgXAAAAGAAA6BgAAOgYAAAAGQAA6BkAAOgZAAAAGgAA6BoAAOgaAAAAGwAA6BsAAOgbAAAAHAAA6BwAAOgcAAAAHQAA6B0AAOgdAAAAHgAA6B4AAOgeAAAAHwAA6B8AAOgfAAAAIAAA6CAAAOggAAAAIQAA6CEAAOghAAAAIgAA6CIAAOgiAAAAIwAA6CMAAOgjAAAAJAAA6CQAAOgkAAAAJQAA6CUAAOglAAAAJgAA6CYAAOgmAAAAJwAA6CcAAOgnAAAAKAAA6CgAAOgoAAAAKQAA6CkAAOgpAAAAKgAA6CoAAOgqAAAAKwAA6CsAAOgrAAAALAAA6CwAAOgsAAAALQAA6C0AAOgtAAAALgAA6C4AAOguAAAALwAA6C8AAOgvAAAAMAAA6DAAAOgwAAAAMQAA6DEAAOgxAAAAMgAAAEgAAP72A5gC2QALABcAIgAtADoARwBVAGIAbwB7AIYAkACdAKoAuADCANEA3gDpAPUBAQEPARkBJwExAT0BSgFVAWABbQF5AYUBkQGbAacBtAG/AcoB1gHgAewB9wIDAg8CGQIjAi4COgJEAlACXQJnAnMCfwKMApkCpgKzAr4CyQLTAt8C7AL3AwQDEQMeAykDNgNEA08DkRWIS7AJUFhBfAAVAAEACAAGAH8AAQAaAAsAjgABAA0AGgDzAM0AAgAbABkBCAABADEAHwEkAAEAOgA3AToBNAACACoAOgFBAAEAQQAqAXAAAQAuADABmAGJAAIASgBIAaAAAQA4ADYBqwABADkAUAHOAckAAgBAADkB9QABAEUAQwJ/AhwAAgBlAFQCTQABAGcAZQI9AAEAaQBVAokAAQBrAFkC0QABAHUAdAK9AAEAewB1AuQAAQBtAGoDJwABAHwAgwM0AAEAhwCFA1cAAQCAAH4AGABHAD0AAQAHAYMAAQAyAeQAAQBDAw4DCAACAH8ABABGA4sDbgNnAAMAhABEG0uwClBYQXwAFQABAAgABgB/AAEAGgALAI4AAQANABwA8wDNAAIAGwAZAQgAAQAxAB8BJAABADoANwE6ATQAAgAqADoBQQABAEEAPwFwAAEALgAwAZgBiQACAEoASAGgAAEAOAA2AasAAQA5AFABzgHJAAIAQAA5AfUAAQBFAEMCfwIcAAIAZQBUAk0AAQBnAGUCPQABAGkAVQKJAAEAawBZAtEAAQB1AHQCvQABAHsAeQLkAAEAbQBsAycAAQB8AIMDNAABAIcAhQNXAAEAgAB+ABgARwA9AAEABwGDAAEAMgHkAAEAQwMOAwgAAgB/AAQARgOLA24DZwADAIQARBtLsAtQWEF9ABUAAQAIAAYAfwABABoACwCOAAEADQAaAPMAzQACABsAGQEIAAEAMQAfASQAAQA6ADcBOgE0AAIAKgA6AUEAAQBBACoBcAABAC4AMAGDAAEARAAuAZgBiQACAEoANAGgAAEAOAA2AasAAQA5AFABzgHJAAIAQAA5AfUAAQBFAEMCfwIcAAIAZQBUAk0AAQBnAGUCPQABAGkAVQKJAAEAawBZAtEAAQB1AHQCvQABAHsAdQLkAAEAbQBqAycAAQB8AIMDNAABAIcAhQNXAAEAgAB+ABkARwA9AAEABwHkAAEAQwMOAwgAAgB/AAMARgOLA24DZwADAIQARBtBfAAVAAEACAAGAH8AAQAaAAsAjgABAA0AGgDzAM0AAgAbABkBCAABADEAHwEkAAEAOgA3AToBNAACACoAOgFBAAEAQQAqAXAAAQAuADABmAGJAAIASgBIAaAAAQA4ADYBqwABADkAUAHOAckAAgBAADkB9QABAEUAQwJ/AhwAAgBlAFQCTQABAGcAZQI9AAEAaQBVAokAAQBrAFkC0QABAHUAdAK9AAEAewB1AuQAAQBtAGoDJwABAHwAgwM0AAEAhwCFA1cAAQCAAH4AGABHAD0AAQAHAYMAAQAyAeQAAQBDAw4DCAACAH8ABABGA4sDbgNnAAMAhABEWVlZS7AJUFhA/6QBQSpCTEFlAFRiZTlUZQCHhX6Fh35tjgEMAw0MVIkBAgADAQIDYIgBAAABDgABYIsBBgAHEAYHYIoBBAAFCQQFYIwBCAAJFggJYI0BCgALGgoLYI8BDg8BDREODWCQARAAESAQEWCXASAVISBUABUiEhVUkgEWABckFhdgACQmISRUkRQCEgATKBITYJMBGAAZGxgZYAAbHRobVAAdLRodVJYelRyUBRoAHzEaH2CZASYnJQIhIyYhYJgBIgAjNyIjYKABNzo4N1SbK5opBCgsASpBKCpgADAuLTBUnS+cAy0ALjItLmAAMkQxMlSeMwIxADRIMTRgqAFISklIVED/nwE1ADY4NTZgPAE4TDo4VT4BOUA6OVUAQEM6QFWlAUIAQ0VCQ2AARVZERVSpAUpLAUlYSklgAE1cTE1Vq06qA0wAT15MT2FSrAJQUwFRR1BRYKdGpgNEAEdiREdgswFiVGNiVLQBZWdjZVSjP6I9oTsGOgBVaTpVYbYBaV9qaVQAX1deX1StAVYAV1lWV2CvWq4DWFsBWWtYWWCwAVwAXXFcXWCyYLEDXmQBYWNeYWC1AWdoZgJjdGdjYABxAHJ9cXJgtwFrbAFqbWtqYLgBbgBtem5tYAB6f3V6VLkBbwBwdm9wYLx5d7sEdXgBdnN1dmC6AXQAc4N0c2DAAYN8QDqEg1S9AXsAfIV7fGC+AX0AfoB9fmAAfwCAgn+AYL8BgQCChoGCYMEBhQCGhIWGYMABg4OEWACEg4RMG0uwClBYQP+kAUE/QkxBZQBUYmU5VGUAh4V+hYd+bYkBAgADAQIDYIgBAAABDgABYIsBBgAHEAYHYIoBBAAFCQQFYIwBCAAJFggJYI0BCgALGgoLYI4BDAANDwwNYI8BDgAPEQ4PYJABEAARIBARYJcBIBUhIFQAFSISFVSSARYAFyQWF2AAJCYhJFSRFAISABMoEhNgkwEYABkbGBlglAEaABsdGhtgAB0tHB1Ulh6VAxwAHzEcH2CZASYnJQIhIyYhYJgBIgAjNyIjYKABNzo4N1SbK5opBCgsASo/KCpgADAuLTBUnS+cAy0ALjItLmAAMkQxMlSeMwIxADRIMTRgqAFISklA/0hUnwE1ADY4NTZgPAE4TDo4VT4BOUA6OVWjAT8AQEM/QGClAUIAQ0VCQ2AARVZERVSpAUpLAUlYSklgrgFYWllYVKoBTABNXExNYasBTgBPXk5PYFKsAlBTAVFgUFFgp0amA0QAR2JER2CzAWJUY2JUoj2hOwQ6AFVpOlVhsQFeAF9XXl9grQFWAFdZVldgrwFaWwFZa1pZYLABXABdcVxdYLIBYGQBYWNgYWC1AWdoAWNmZ2NgtAFlAGZ0ZWZgAHEAcn1xcmC2AWkAamxpamC3AWsAbG1rbGC4AW4AbXpubWC8AXkAen95emC5AW8AcHZvcGB3uwJ1eAF2c3V2YEBHugF0AHODdHNgwAGDfISDVL0BewB8hXt8YL4BfQB+gH1+YAB/AICCf4BgvwGBAIKGgYJgwQGFAIaEhYZgwAGDg4RYAISDhEwbS7ALUFhA/6QBQSpCTEFlAFRHZTlUZQCHhX6Fh35tjgEMAw0MVAADAQADVIkCiAMAAAEOAAFgiwEGAAcQBgdgigEEAAUJBAVgjAEIAAkWCAlgjQEKAAsaCgtgjwEODwENEQ4NYJABEAARIBARYJcBIBUhIFQAFSISFVSYASIXIyJUkgEWABckFhdgkRQCEgATKBITYJMBGAAZGxgZYAAbHRobVAAdLRodVJYelRyUBRoAHzEaH2AAJCUBISMkIWCZASYnASM3JiNgoAE3Ojg3VJsrmikEKCwBKkEoKmCdL5wDLQAwLi0wYDIBLkQxLlSeMwIxADRKMTRgnwE1ADY4NTZgPAE4TED/OjhVPgE5QDo5VQBAQzpAVaUBQgBDRUJDYKhIp0amBUQARVZERWCtAVZJV1ZUqQFKSwFJWEpJYKtOqgNMAE1cTE1hUwFPYFBPVFKsAlBRAUdUUEdgtAFlZ2NlVKM/oj2hOwY6AFVpOlVhtgFpV2ppVF8BV1lcV1SvWq4DWFsBWWtYWWC4AW5vbW5UsV6wA1wAXXFcXWCzYrIDYABhY2BhYLUBZ2hmZANjdGdjYLoBdHVzdFQAcQByfXFyYLcBa2wBam1ramB6AW1/dW1UuQFvAHBzb3BgvHl3uwR1eHYCc4N1c2DAAYN8hINUvQF7AHyFe3xgwQGFh4SFVL4BfQB+QCGAfX5gAH8AgIJ/gGC/AYEAgoSBgmDBAYWFhFiGAYSFhEwbS7ARUFhA/6QBQSpCTEFlAFRiZTlUZQCHhX6Fh35tjgEMAw0MVIkBAgADAQIDYIgBAAABDgABYIsBBgAHEAYHYIoBBAAFCQQFYIwBCAAJFggJYI0BCgALGgoLYI8BDg8BDREODWCQARAAESAQEWCXASAVISBUABUiEhVUkgEWABckFhdgACQmISRUkRQCEgATKBITYJMBGAAZGxgZYAAbHRobVAAdLRodVJYelRyUBRoAHzEaH2CZASYnJQIhIyYhYJgBIgAjNyIjYKABNzo4N1SbK5opBCgsASpBKCpgADAuLTBUnS+cAy0ALjItLmAAMkQxMlSeMwIxADRIMTRgqAFISklIVED/nwE1ADY4NTZgPAE4TDo4VT4BOUA6OVUAQEM6QFWlAUIAQ0VCQ2AARVZERVSpAUpLAUlYSklgAE1cTE1Vq06qA0wAT15MT2FSrAJQUwFRR1BRYKdGpgNEAEdiREdgswFiVGNiVLQBZWdjZVSjP6I9oTsGOgBVaTpVYbYBaV9qaVQAX1deX1StAVYAV1lWV2CvWq4DWFsBWWtYWWCwAVwAXXFcXWCyYLEDXmQBYWNeYWC1AWdoZgJjdGdjYABxAHJ9cXJgtwFrbAFqbWtqYLgBbgBtem5tYAB6f3V6VLkBbwBwdm9wYLx5d7sEdXgBdnN1dmC6AXQAc4N0c2DAAYN8QDqEg1S9AXsAfIV7fGC+AX0AfoB9fmAAfwCAgn+AYL8BgQCChoGCYMEBhQCGhIWGYMABg4OEWACEg4RMG0uwFFBYQP+kAUEqQkxBZQBUYmViVGVtAIeFfoWHfm2OAQwDDQxUiQECAAMBAgNgiAEAAAEOAAFgiwEGAAcQBgdgigEEAAUJBAVgjAEIAAkWCAlgjQEKAAsaCgtgjwEODwENEQ4NYJABEAARIBARYJcBIBUhIFQAFSISFVSSARYAFyQWF2AAJCYhJFSRFAISABMoEhNgkwEYABkbGBlgABsdGhtUAB0tGh1Ulh6VHJQFGgAfMRofYJkBJiclAiEjJiFgmAEiACM3IiNgoAE3Ojg3VJsrmikEKCwBKkEoKmAAMC4tMFSdL5wDLQAuMi0uYAAyRDEyVJ4zAjEANEgxNGCoAUhKSUhA/1SfATUANjg1NmA8AThMOjhVPgE5QDo5VQBAQzpAVaUBQgBDRUJDYABFVkRFVKkBSksBSVhKSWAATVxMTVWrTqoDTABPXkxPYVKsAlBTAVFHUFFgp0amA0QAR2JER2CzAWJUY2JUtAFlZ2NlVKM/oj2hOwY6AFVpOlVhtgFpX2ppVABfV15fVK0BVgBXWVZXYK9argNYWwFZa1hZYLABXABdcVxdYLJgsQNeZAFhY15hYLUBZ2hmAmN0Z2NgAHEAcn1xcmC3AWtsAWpta2pguAFuAG16bm1gAHp/dXpUuQFvAHB2b3BgvHl3uwR1eAF2c3V2YLoBdABzg3RzYMABg0A7fISDVL0BewB8hXt8YL4BfQB+gH1+YAB/AICCf4BgvwGBAIKGgYJgwQGFAIaEhYZgwAGDg4RYAISDhEwbQP+kAUEqQipBQm0AVGJlYlRlbQCHhX6Fh35tjgEMAw0MVIkBAgADAQIDYIgBAAABDgABYIsBBgAHEAYHYIoBBAAFCQQFYIwBCAAJFggJYI0BCgALGgoLYI8BDg8BDREODWCQARAAESAQEWCXASAVISBUABUiEhVUkgEWABckFhdgACQmISRUkRQCEgATKBITYJMBGAAZGxgZYAAbHRobVAAdLRodVJYelRyUBRoAHzEaH2CZASYnJQIhIyYhYJgBIgAjNyIjYKABNzo4N1SbK5opBCgsASpBKCpgADAuLTBUnS+cAy0ALjItLmAAMkQxMlSeMwIxADRIMTRgqAFISklA/0hUnwE1ADY4NTZgPAE4TDo4VT4BOUA6OVUAQEM6QFWlAUIAQ0VCQ2AARVZERVSpAUpLAUlYSklgAE1cTE1Vq06qA0wAT15MT2FSrAJQUwFRR1BRYKdGpgNEAEdiREdgswFiVGNiVLQBZWdjZVSjP6I9oTsGOgBVaTpVYbYBaV9qaVQAX1deX1StAVYAV1lWV2CvWq4DWFsBWWtYWWCwAVwAXXFcXWCyYLEDXmQBYWNeYWC1AWdoZgJjdGdjYABxAHJ9cXJgtwFrbAFqbWtqYLgBbgBtem5tYAB6f3V6VLkBbwBwdm9wYLx5d7sEdXgBdnN1dmC6AXQAc4N0c2DAAUA8g3yEg1S9AXsAfIV7fGC+AX0AfoB9fmAAfwCAgn+AYL8BgQCChoGCYMEBhQCGhIWGYMABg4OEWACEg4RMWVlZWVlB/wNGA0UDOgM3AysDKgMTAxIDBgMFAvkC+ALhAuAC1ALUAsACvwK0ArQCqgKnApsCmgKOAo0CgQKAAl8CXgJSAlECRgJFAjwCOwIwAi8CJQIkAhsCGgHuAe0B4gHhAdgB1wHMAcsBwQHAAbYBtQGpAagBnQGcAZMBkgGHAYYBewF6AW8BbgFXAVYBTAFLAT8BPgEpASgBGwEaAREBEAEFAQIA6wDqANMA0gDEAMMAugC5AKwAqwCfAJ4AkgCRAIgAhwB9AHwAZABjAFcAVgBJAEgAPAA7AC8ALgAkACMAGQAYAA0ADAABAAADUwNQA0sDSQNFA08DRgNPA0ADPgM3A0QDOgNEAzEDMAMqAzYDKwM2AyQDIwMgAx8DGgMYAxIDHgMTAx4DDAMKAwUDEQMGAxEC/QL8AvgDBAL5AwIC8wLyAu4C7QLoAuYC4ALsAuEC7ALUAt8C1ALfAtsC2gLQAs4CywLKAsQCwwK/AskCwALJArQCvgK0Ar4CuwK6ArACrgKnArMCqgKzAqICoAKaAqYCmwKmApMCkgKNApkCjgKYAocChQKAAowCgQKLAnsCegJjAmICXgJnAl8CZwJYAlYCUQJdAlICXQJLAkkCRQJQAkYCUAJAAj8COwJEAjwCRAI0AjMCLwI6AjACOgIqAigCJAIuAiUCLgIfAh4CGkH8AiMCGwIjAhYCFQILAgoB/wH9AfkB+AHzAfIB7QH3Ae4B9gHoAeYB4QHsAeIB7AHcAdoB1wHgAdgB3wHSAdABywHWAcwB1QHHAcYBwAHKAcEBygG6AbkBtQG/AbYBvwGuAa0BqAG0AakBtAGkAaIBnAGnAZ0BpwGSAZsBkwGbAY4BjAGGAZEBhwGRAYIBgAF6AYUBewGFAXQBcgFuAXkBbwF4AW0BbAFoAWcBXQFcAVYBYAFXAWABUQFPAUsBVQFMAVUBRgFEAT4BSgE/AUoBOAE2ATMBMgEuAS0BKAExASkBMQEiASEBGgEnARsBJgEWARQBEAEZAREBGQEMAQoBAgEPAQUBDwD3APYA8gDwAOoA9QDrAPUA5QDjAOAA3wDaANgA0gDeANMA3gDKAMgAwwDRAMQA0AC/AL0AuQDCALoAwgCyALAAqwC4AKwAtwCmAKQAngCqAJ8AqgCZAJcAkQCdAJIAnQCNAIsAhwCQAIgAkACDAIEAfACGAH0AhgB2AHUAcQBwAGsAaQBjAG8AZABvAF4AXABWAGIAVwBiAE8ATQBIAFUASQBUAEEAPwA7AEcAPABGADYANAAuADoALwA6ACoAKAAjAC0AJAAtAB4AHAAYACIAGQAhABQAEgAMABcADQAXAAgABgAAAAsAAQALAMIABQAUKwEGBwYXHgEzMjYnJhciBwYVHgEzMjc2JhciBwYWFxY1NCYjBwYHBhQWMzI2JyYFIgYXFhcWFzI2NzYmBQYHBhYzMjYn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') format('truetype'); } /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ @@ -17,7 +17,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'tricons'; - src: url('../font/tricons.svg?17979865#tricons') format('svg'); + src: url('../font/tricons.svg?18459008#tricons') format('svg'); } } */ @@ -52,50 +52,53 @@ /* Uncomment for 3D effect */ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } -.icon-messages:before { content: '\e800'; } /* '' */ -.icon-exchange:before { content: '\e801'; } /* '' */ -.icon-refresh:before { content: '\e802'; } /* '' */ -.icon-bolt:before { content: '\e803'; } /* '' */ -.icon-search:before { content: '\e804'; } /* '' */ -.icon-github:before { content: '\e805'; } /* '' */ -.icon-link-ext:before { content: '\e806'; } /* '' */ -.icon-sign-up:before { content: '\e807'; } /* '' */ -.icon-lifebuoy:before { content: '\e808'; } /* '' */ -.icon-sign-in:before { content: '\e809'; } /* '' */ -.icon-heart-alt:before { content: '\e80a'; } /* '' */ -.icon-linkedin:before { content: '\e80b'; } /* '' */ -.icon-twitter:before { content: '\e80c'; } /* '' */ -.icon-facebook:before { content: '\e80d'; } /* '' */ -.icon-edit:before { content: '\e80e'; } /* '' */ -.icon-heart:before { content: '\e80f'; } /* '' */ -.icon-google:before { content: '\e810'; } /* '' */ -.icon-sign-out:before { content: '\e811'; } /* '' */ -.icon-calendar:before { content: '\e812'; } /* '' */ -.icon-home:before { content: '\e813'; } /* '' */ -.icon-building:before { content: '\e814'; } /* '' */ -.icon-plus-squared-alt:before { content: '\e815'; } /* '' */ -.icon-minus-squared-alt:before { content: '\e816'; } /* '' */ -.icon-message-alt:before { content: '\e817'; } /* '' */ -.icon-picture-change:before { content: '\e818'; } /* '' */ -.icon-ok:before { content: '\e819'; } /* '' */ -.icon-reply:before { content: '\e81a'; } /* '' */ -.icon-send:before { content: '\e81b'; } /* '' */ -.icon-invalid:before { content: '\e81c'; } /* '' */ -.icon-right:before { content: '\e81d'; } /* '' */ -.icon-left:before { content: '\e81e'; } /* '' */ -.icon-help:before { content: '\e81f'; } /* '' */ -.icon-user:before { content: '\e820'; } /* '' */ -.icon-users:before { content: '\e821'; } /* '' */ -.icon-messages-alt:before { content: '\e822'; } /* '' */ -.icon-tree:before { content: '\e823'; } /* '' */ -.icon-bold:before { content: '\e824'; } /* '' */ -.icon-info:before { content: '\e825'; } /* '' */ -.icon-italic:before { content: '\e826'; } /* '' */ -.icon-underline:before { content: '\e827'; } /* '' */ -.icon-list:before { content: '\e828'; } /* '' */ -.icon-link:before { content: '\e829'; } /* '' */ -.icon-quote:before { content: '\e82a'; } /* '' */ -.icon-close:before { content: '\e82b'; } /* '' */ -.icon-down:before { content: '\e82c'; } /* '' */ -.icon-eye:before { content: '\e82e'; } /* '' */ -.icon-eye-off:before { content: '\e82f'; } /* '' */ \ No newline at end of file +.icon-tree:before { content: '\e800'; } /* '' */ +.icon-eye:before { content: '\e801'; } /* '' */ +.icon-eye-off:before { content: '\e802'; } /* '' */ +.icon-search:before { content: '\e803'; } /* '' */ +.icon-heart:before { content: '\e804'; } /* '' */ +.icon-heart-alt:before { content: '\e805'; } /* '' */ +.icon-ok:before { content: '\e806'; } /* '' */ +.icon-close:before { content: '\e807'; } /* '' */ +.icon-plus-squared-alt:before { content: '\e808'; } /* '' */ +.icon-minus-squared-alt:before { content: '\e809'; } /* '' */ +.icon-link-ext:before { content: '\e80a'; } /* '' */ +.icon-reply:before { content: '\e80b'; } /* '' */ +.icon-edit:before { content: '\e80c'; } /* '' */ +.icon-messages:before { content: '\e80d'; } /* '' */ +.icon-message-alt:before { content: '\e80e'; } /* '' */ +.icon-messages-alt:before { content: '\e80f'; } /* '' */ +.icon-calendar:before { content: '\e810'; } /* '' */ +.icon-sign-in:before { content: '\e811'; } /* '' */ +.icon-sign-out:before { content: '\e812'; } /* '' */ +.icon-sign-up:before { content: '\e813'; } /* '' */ +.icon-left:before { content: '\e814'; } /* '' */ +.icon-right:before { content: '\e815'; } /* '' */ +.icon-down:before { content: '\e816'; } /* '' */ +.icon-refresh:before { content: '\e817'; } /* '' */ +.icon-exchange:before { content: '\e818'; } /* '' */ +.icon-bolt:before { content: '\e819'; } /* '' */ +.icon-send:before { content: '\e81a'; } /* '' */ +.icon-bold:before { content: '\e81b'; } /* '' */ +.icon-italic:before { content: '\e81c'; } /* '' */ +.icon-list:before { content: '\e81d'; } /* '' */ +.icon-underline:before { content: '\e81e'; } /* '' */ +.icon-building:before { content: '\e81f'; } /* '' */ +.icon-lifebuoy:before { content: '\e820'; } /* '' */ +.icon-facebook:before { content: '\e821'; } /* '' */ +.icon-github:before { content: '\e822'; } /* '' */ +.icon-google:before { content: '\e823'; } /* '' */ +.icon-linkedin:before { content: '\e824'; } /* '' */ +.icon-twitter:before { content: '\e825'; } /* '' */ +.icon-user:before { content: '\e826'; } /* '' */ +.icon-users:before { content: '\e827'; } /* '' */ +.icon-picture-change:before { content: '\e828'; } /* '' */ +.icon-help:before { content: '\e829'; } /* '' */ +.icon-home:before { content: '\e82a'; } /* '' */ +.icon-link:before { content: '\e82b'; } /* '' */ +.icon-quote:before { content: '\e82c'; } /* '' */ +.icon-info:before { content: '\e82d'; } /* '' */ +.icon-invalid:before { content: '\e82e'; } /* '' */ +.icon-plus:before { content: '\e82f'; } /* '' */ +.icon-thumbs-up:before { content: '\e830'; } /* '' */ +.icon-tribes:before { content: '\e831'; } /* '' */ \ No newline at end of file diff --git a/modules/core/client/fonts/fontello/css/tricons-ie7-codes.css b/modules/core/client/fonts/fontello/css/tricons-ie7-codes.css index 8e3045339e..f640f148ab 100644 --- a/modules/core/client/fonts/fontello/css/tricons-ie7-codes.css +++ b/modules/core/client/fonts/fontello/css/tricons-ie7-codes.css @@ -1,48 +1,51 @@ -.icon-messages { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-refresh { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-bolt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-github { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-link-ext { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-sign-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-lifebuoy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-sign-in { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-heart-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-linkedin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-facebook { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-heart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-google { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-sign-out { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-building { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-plus-squared-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-minus-squared-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-message-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-picture-change { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-reply { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-send { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-invalid { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-help { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-messages-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-tree { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-bold { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-info { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-italic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-underline { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-list { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-quote { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-close { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-eye-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file +.icon-tree { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-eye-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-heart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-heart-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-close { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus-squared-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-minus-squared-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-link-ext { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-reply { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-messages { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-message-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-messages-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-sign-in { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-sign-out { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-sign-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-refresh { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-bolt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-send { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-bold { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-italic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-list { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-underline { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-building { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-lifebuoy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-facebook { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-github { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-google { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-linkedin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-picture-change { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-help { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-quote { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-info { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-invalid { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-thumbs-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-tribes { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/modules/core/client/fonts/fontello/css/tricons-ie7.css b/modules/core/client/fonts/fontello/css/tricons-ie7.css index 04945f94f1..268144ba55 100644 --- a/modules/core/client/fonts/fontello/css/tricons-ie7.css +++ b/modules/core/client/fonts/fontello/css/tricons-ie7.css @@ -10,50 +10,53 @@ /* font-size: 120%; */ } -.icon-messages { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-refresh { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-bolt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-github { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-link-ext { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-sign-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-lifebuoy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-sign-in { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-heart-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-linkedin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-facebook { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-heart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-google { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-sign-out { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-building { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-plus-squared-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-minus-squared-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-message-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-picture-change { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-reply { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-send { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-invalid { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-help { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-messages-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-tree { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-bold { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-info { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-italic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-underline { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-list { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-quote { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-close { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-eye-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file +.icon-tree { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-eye-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-heart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-heart-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-close { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus-squared-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-minus-squared-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-link-ext { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-reply { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-messages { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-message-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-messages-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-sign-in { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-sign-out { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-sign-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-refresh { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-bolt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-send { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-bold { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-italic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-list { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-underline { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-building { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-lifebuoy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-facebook { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-github { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-google { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-linkedin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-picture-change { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-help { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-quote { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-info { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-invalid { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-thumbs-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-tribes { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/modules/core/client/fonts/fontello/css/tricons.css b/modules/core/client/fonts/fontello/css/tricons.css index 3306719c6c..9f467ff05e 100644 --- a/modules/core/client/fonts/fontello/css/tricons.css +++ b/modules/core/client/fonts/fontello/css/tricons.css @@ -1,11 +1,11 @@ @font-face { font-family: 'tricons'; - src: url('../font/tricons.eot?63411325'); - src: url('../font/tricons.eot?63411325#iefix') format('embedded-opentype'), - url('../font/tricons.woff2?63411325') format('woff2'), - url('../font/tricons.woff?63411325') format('woff'), - url('../font/tricons.ttf?63411325') format('truetype'), - url('../font/tricons.svg?63411325#tricons') format('svg'); + src: url('../font/tricons.eot?43023849'); + src: url('../font/tricons.eot?43023849#iefix') format('embedded-opentype'), + url('../font/tricons.woff2?43023849') format('woff2'), + url('../font/tricons.woff?43023849') format('woff'), + url('../font/tricons.ttf?43023849') format('truetype'), + url('../font/tricons.svg?43023849#tricons') format('svg'); font-weight: normal; font-style: normal; } @@ -15,7 +15,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'tricons'; - src: url('../font/tricons.svg?63411325#tricons') format('svg'); + src: url('../font/tricons.svg?43023849#tricons') format('svg'); } } */ @@ -55,50 +55,53 @@ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } -.icon-messages:before { content: '\e800'; } /* '' */ -.icon-exchange:before { content: '\e801'; } /* '' */ -.icon-refresh:before { content: '\e802'; } /* '' */ -.icon-bolt:before { content: '\e803'; } /* '' */ -.icon-search:before { content: '\e804'; } /* '' */ -.icon-github:before { content: '\e805'; } /* '' */ -.icon-link-ext:before { content: '\e806'; } /* '' */ -.icon-sign-up:before { content: '\e807'; } /* '' */ -.icon-lifebuoy:before { content: '\e808'; } /* '' */ -.icon-sign-in:before { content: '\e809'; } /* '' */ -.icon-heart-alt:before { content: '\e80a'; } /* '' */ -.icon-linkedin:before { content: '\e80b'; } /* '' */ -.icon-twitter:before { content: '\e80c'; } /* '' */ -.icon-facebook:before { content: '\e80d'; } /* '' */ -.icon-edit:before { content: '\e80e'; } /* '' */ -.icon-heart:before { content: '\e80f'; } /* '' */ -.icon-google:before { content: '\e810'; } /* '' */ -.icon-sign-out:before { content: '\e811'; } /* '' */ -.icon-calendar:before { content: '\e812'; } /* '' */ -.icon-home:before { content: '\e813'; } /* '' */ -.icon-building:before { content: '\e814'; } /* '' */ -.icon-plus-squared-alt:before { content: '\e815'; } /* '' */ -.icon-minus-squared-alt:before { content: '\e816'; } /* '' */ -.icon-message-alt:before { content: '\e817'; } /* '' */ -.icon-picture-change:before { content: '\e818'; } /* '' */ -.icon-ok:before { content: '\e819'; } /* '' */ -.icon-reply:before { content: '\e81a'; } /* '' */ -.icon-send:before { content: '\e81b'; } /* '' */ -.icon-invalid:before { content: '\e81c'; } /* '' */ -.icon-right:before { content: '\e81d'; } /* '' */ -.icon-left:before { content: '\e81e'; } /* '' */ -.icon-help:before { content: '\e81f'; } /* '' */ -.icon-user:before { content: '\e820'; } /* '' */ -.icon-users:before { content: '\e821'; } /* '' */ -.icon-messages-alt:before { content: '\e822'; } /* '' */ -.icon-tree:before { content: '\e823'; } /* '' */ -.icon-bold:before { content: '\e824'; } /* '' */ -.icon-info:before { content: '\e825'; } /* '' */ -.icon-italic:before { content: '\e826'; } /* '' */ -.icon-underline:before { content: '\e827'; } /* '' */ -.icon-list:before { content: '\e828'; } /* '' */ -.icon-link:before { content: '\e829'; } /* '' */ -.icon-quote:before { content: '\e82a'; } /* '' */ -.icon-close:before { content: '\e82b'; } /* '' */ -.icon-down:before { content: '\e82c'; } /* '' */ -.icon-eye:before { content: '\e82e'; } /* '' */ -.icon-eye-off:before { content: '\e82f'; } /* '' */ \ No newline at end of file +.icon-tree:before { content: '\e800'; } /* '' */ +.icon-eye:before { content: '\e801'; } /* '' */ +.icon-eye-off:before { content: '\e802'; } /* '' */ +.icon-search:before { content: '\e803'; } /* '' */ +.icon-heart:before { content: '\e804'; } /* '' */ +.icon-heart-alt:before { content: '\e805'; } /* '' */ +.icon-ok:before { content: '\e806'; } /* '' */ +.icon-close:before { content: '\e807'; } /* '' */ +.icon-plus-squared-alt:before { content: '\e808'; } /* '' */ +.icon-minus-squared-alt:before { content: '\e809'; } /* '' */ +.icon-link-ext:before { content: '\e80a'; } /* '' */ +.icon-reply:before { content: '\e80b'; } /* '' */ +.icon-edit:before { content: '\e80c'; } /* '' */ +.icon-messages:before { content: '\e80d'; } /* '' */ +.icon-message-alt:before { content: '\e80e'; } /* '' */ +.icon-messages-alt:before { content: '\e80f'; } /* '' */ +.icon-calendar:before { content: '\e810'; } /* '' */ +.icon-sign-in:before { content: '\e811'; } /* '' */ +.icon-sign-out:before { content: '\e812'; } /* '' */ +.icon-sign-up:before { content: '\e813'; } /* '' */ +.icon-left:before { content: '\e814'; } /* '' */ +.icon-right:before { content: '\e815'; } /* '' */ +.icon-down:before { content: '\e816'; } /* '' */ +.icon-refresh:before { content: '\e817'; } /* '' */ +.icon-exchange:before { content: '\e818'; } /* '' */ +.icon-bolt:before { content: '\e819'; } /* '' */ +.icon-send:before { content: '\e81a'; } /* '' */ +.icon-bold:before { content: '\e81b'; } /* '' */ +.icon-italic:before { content: '\e81c'; } /* '' */ +.icon-list:before { content: '\e81d'; } /* '' */ +.icon-underline:before { content: '\e81e'; } /* '' */ +.icon-building:before { content: '\e81f'; } /* '' */ +.icon-lifebuoy:before { content: '\e820'; } /* '' */ +.icon-facebook:before { content: '\e821'; } /* '' */ +.icon-github:before { content: '\e822'; } /* '' */ +.icon-google:before { content: '\e823'; } /* '' */ +.icon-linkedin:before { content: '\e824'; } /* '' */ +.icon-twitter:before { content: '\e825'; } /* '' */ +.icon-user:before { content: '\e826'; } /* '' */ +.icon-users:before { content: '\e827'; } /* '' */ +.icon-picture-change:before { content: '\e828'; } /* '' */ +.icon-help:before { content: '\e829'; } /* '' */ +.icon-home:before { content: '\e82a'; } /* '' */ +.icon-link:before { content: '\e82b'; } /* '' */ +.icon-quote:before { content: '\e82c'; } /* '' */ +.icon-info:before { content: '\e82d'; } /* '' */ +.icon-invalid:before { content: '\e82e'; } /* '' */ +.icon-plus:before { content: '\e82f'; } /* '' */ +.icon-thumbs-up:before { content: '\e830'; } /* '' */ +.icon-tribes:before { content: '\e831'; } /* '' */ \ No newline at end of file diff --git a/modules/core/client/fonts/fontello/font/tricons.eot b/modules/core/client/fonts/fontello/font/tricons.eot index 0fe7eb164327154b5c1d111d8ef826cd63d80788..27b49448776be385a63b1ceed9c1000098928420 100644 GIT binary patch delta 1892 zcmYjReQXnD7=Pcp>$TfT*}C?+wa|6F^~i3wvI*rhh=|gOsnR&f^&!M4xr4T}R2qCmFnN7&AoxJuFFkS#4o*N0^$l`5QILUeguDg3DJ||!4gGoRM}!O)5PEnvLlRSU z`K^}_8V5ZT&j4W@rbWmvL*9|eD!WeqwXyOG5I2DMQk0U3&y_16F!2%OnQUU0Y<$3Z z2BA$s$UV74mK?ZFy$AU!gs6{Ysi0iicli~BwwNKWlk-IWZAIrrgtnhikK(mhP|J8Z z?ooqOpzl1wpn=dCL|3Cl;Ok+l=MjVU0?)t~D#|^T3Rt9D$QgA%l`t$uJt(66NzKD` z8C?TD5shKmsQxaf1)wna8c;XHHK4^1*8m!zeiyLZ+1c&Un#L|u>Yci`)B)}p^_|AD zdWBb1`y&Une$Q2W>^U=5AM7}%ZLs};wSKl8AG3O~c09BbYsJ=OSbKSX3qDqC!RmAK zepLm3M#cWD`tBoXt>3f=s}sgqmDC+kZ+5(-ty?<|#JWGUg`-1QTfKe;Yav&oK@%)c z_-gY7?algGtbM?p!`h)HGo{@OoW`n^|5W?h@5Aa@=T2>6!v(CqJ#tQc!S__Da+9{w z4TwjfAwObhMuJIU*??(;=rM3K8mBPKcZ84n_$bdBoSoQiV*@-GBk%S1^@0iX#^QZZ zFiUZSbJ(L1j<$NZvWJ`IJh<#|V@TYNX$Zx-BAA`aHU&d03L&U+obvE@`4 z_r>B7&TccdVQwK@Xb)o?55%ETCmq1qjC^mb8~d#%hbi9I+ve$6WuBK`%;Z}yaYy=n zVZ8a7P3s2^w^00@Uo1BK!voYX9fofEZ3I zy6P);FoBx`sAp?@xl+M5Ds!M;(Y2_hwY3wa{|e@+0=mfmajI5WuKYtEsobXb0z4pa z3wSsU==}h_IpFSY5Kc+1ajxmt5@{X0~~M^L3kI`^x?qH^$944z`3_F0|g? zda8BSX>$&&an8C%T}NHNE;ziIdVJdw9Klf>LyVFqgeJR*5zr;2Qfz@F^2v+=j^w;j zSG8RUQK6)1LsFCqL=`vlC6g%Rrn|^4#Q+DZxSJtUf?~>&LLreRg@#(7FEigG^~97+ zh$J_a$QuhnI@cxSOjR!xmAgbyW<-(#O(C68m?>#z&X^~uJSk*MWLGki$fXH0DTxYG zDu9e0PO*ZL5QQWo3I(OEn42Pb=!}>qi-I^MOP?PoKe{+C<@6l#RAD2bW^a%LQ*N_NmuR886wI|M#>UKTm-u}JW-Ss!U(yP iWE65cpo=L+7K?>Ckk3vQx{5NZM$9)%Roo delta 1258 zcmXw2U1%It6ux(MW_CA!yD2D9imv&u+090*X^pE%st>IOskV)#^e3~kcV{MQ=HYp-Cu#8M<{ShJwapg z)!W+lfDH^&(5-ro7S3H8F8>aOzrbgvtt#xx>2DBv;YHBtoKkRtgZD0i{uFe~ zQgY<&o5Ba6*ANn}IJQT_*Qd@Pba(+a{iov+=a0cIn5%cPcknZKjFoUdPO?s+qkkD; zsDaRjC{P*2fomXZ8Hwm5_%bj?LMdKKmdgm0P^sHzcre6{v6F%Vi88+-2sn!B{DAP3 z|Ar^Y1@V62u5L&JAfJ;}KxqA;X3XwO{mO6j#WCAV&9jjm=Xw6=-!LES7BTx__d1{5 z8^`?P-X_eZ9$e?)XX^xZW#1D2H@N{BJ6_?3hL$k@c9)3x%a5cmyLh0$r=E;T+=#DX z7Jhh>eg51RjC4`9FS*E0KR(B1hbLI9Z;XBNsLH3GZ^L}s{zc5?ofDWJmE$qq_QVm) zem=CsrusMd#ldTs=LQBaZ#%ez+10K&Hr;3PH`>1!TKq!;7-tu(r!mjm#R;J?bZ0}Iu0#UCke21?*Ttg3FOFag>wNMQ7f7O`qDsZ)Mr5!Yb5k7;j z3p)d?feT`j_`bATx+FKti@~~(5ZV*o9)7nbRa2-(^{47L8q9|8B64Ij@?Ipd9&L&a zMSp3GH(uW6HlJ$gZJBA6TW_|_v^TVy?U&m(I#xRmz=`?i*~3>3mj&FzR*sGqQ7A_| zPtk}MA_Y}fER6(Rl68rvi)q`WvPTqG)n(0~dOjU84Qo6>3N+{$nw7{qU}Q-;Z%!@7?ct>lvPxcw(W5dTq;#2cF3A-YbFU*>e+c3QWcX}8O0TK zJ4Zt4ykSBKjg1{^Dc0WEs$adqF;tp&Nus)E!5)|3`k9lW2iZZxI-!_GMsf{Jr=m%+ zRMd&-h&-N5|Xh{s&sJgOvaP diff --git a/modules/core/client/fonts/fontello/font/tricons.svg b/modules/core/client/fonts/fontello/font/tricons.svg index 47a0f38656..ee799e0566 100644 --- a/modules/core/client/fonts/fontello/font/tricons.svg +++ b/modules/core/client/fonts/fontello/font/tricons.svg @@ -6,99 +6,105 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + \ No newline at end of file diff --git a/modules/core/client/fonts/fontello/font/tricons.ttf b/modules/core/client/fonts/fontello/font/tricons.ttf index ab062e707125124f6920f167133c31bbd39144b0..d1218fc990e4db5704be90e2e0d01ffbab920c70 100644 GIT binary patch delta 1887 zcmYjReQXnD7=Pcp>$Tfz*}C?+wa|6F^^4KM+OFes%!L5r)XB$W2!XDrh;tC#Pivfgi4?<`lk%>zm9=&x9_aXJV`DqAyQPM`)u9p1YD#D)Y{s zu|eRFUniyFc?tA-;7#BSDPc6(^Y??R2eD+mGKKC|?KRE(kvgVj}*Xd>IN1ehoaGiEo$mOYGwat@8tSW#buc_Z{MM;L8yr z&PrllKJ)g4_YvA)1YRTMIO&h4+fO63d3?|PXECoV!HaQ+vJ?BdP9Y2>5E@5hC7K1k z7EXE!QD`UV6ucp$)KM;jMVbXpDSzU4%^cK$!a(UmFA~@c4`4UgFRfX4h1E@D3o$PU z>i{SOz6vxO;wsP_h^v5lu+t;J@~tyxyVT683xqOQ^NI3-^>sy8Us5_)S=q93Ox@S= zD?W6s4l5tCC)DGOH?g`;*NP8iTd_(6wqf;R(?YD?HZ|cx7j0O%X8c__?@22gJQ;;v zl~VWVXJO?eJ*k{E>{r&by{CS*Vl4=LH`UP>da(NGbC|#nTW`uF!lFf;MIBg>kltB1WQ*SV!T5lBpm$iIEAXGj;x=252M(xPi;~+66un0OK z!dH`Y*xTIpc1OFH(plTFldxI{*4@_G5bY)w;~0Ewj0x+)dfM7xu`#SWgcspxHzt-6 zQu>w9*wm!6dzL>Gj;(2_o#XAF>Ngcl;b^VVKEJnjA)cg7Zs+o;wW~vTz~m3R94+qN zwAa}8icFirv8i+6SZ)1^?mOLm@DqaZfGH8D5CcDqWhmG)b3w#A-DITnFu!G$hAD`U zsKc0q6Od%m;dM9y0d0cN)MD)QMZ03fuCR@^(bF)kx3X?qXLK1=UzEH^%tn?vQA&oKMvc|v&o>+7Chw6}?1 zA6_?E@Gnb3Eo?`Cefo&mu{E5Xw)rhP-S1mJcXohS-?&4nGj!P&?QTBes9ieUHW29( zgg(C0xwO`C#6uBHcyRNMMxs5?y|SafmU+uX?4IZ7G-!XW3U;)9bZO(Xh4)Y$S<+_m zbHwz_W3Ox)=qg4uo%}(YmWJ{}@?g3AD6VP^;2)!s^Emeje-L80xX6kxKg1kt4j|sB z>ZNiS-z`r;{jyezSWsO%So}X>s!~8J@+6K`6HDd$~Dr71Op)TZ3-3PjJny{E z%sb31{fZZ^;e1oB9U(k`5IU@-Rp)wk`}e@-5EAccr)gOEWpf8Y$AF`7($Ujzp39E| zUqYzT(N)g@y$*ODFsPf;NjW$C5JK`SLN8oM5j7DSey0trW03Dnfe;uH4d4`bb1F@< zAKW-x{0jtsfv-$kQ`tAK|A5eoM}WuEYSsx1KD+?@GVrjarpeoPginFrL`b;e*d7h7 z%$!H)=sawC-EoO?d$1GcrrOWlJ%CTKeYhWYvopA@e+gl*Kw_VmeaBBd+ZKysE9X zeKU!=g!t_yB*RMDib0`T3uUYXaiL=(nTAKD$NlEzmohdbvS!*IkrMWlC6Z|pfQZ`3 KB!BQ^OV$4ZOn-y` diff --git a/modules/core/client/fonts/fontello/font/tricons.woff b/modules/core/client/fonts/fontello/font/tricons.woff index 17fb4aafcc17138c4995985ca0d0bdbf489d418d..d7af42fa885ccd749aca86e606d70cac1a52eacb 100644 GIT binary patch delta 13728 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

ZZx676-rmGg5qHDj1DY&-h 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 K8LxX6@E!n8P2~NC(zp_ zFM!&KLi&>3))0?EIxR?nQIxCE>t+A{e@aprLzAjWDG2DcpCq=BP3)pBYK;dv`aKtw z+v@R*wkGEqH^jH-;pCSUcQgz*%9Gwt+nh5gS@h*?%0Nfzqz{&g(xhOhL2NXdw5S3} zr|Yt-uh5~c_YN`&K3@uKhr7W)@m6IOZ4@evM0$u)=np3fruA*ndgMU7HyH|t?^Oli zcfjFaI29`4cpTk#q)Y!_^pK=z@=)ye{LWr|`bEs+PYRwGB10rpNQ5Sl(1?pQGX!AX z9wLYU@O$R;elnx>qQrop1eX$ln{Ys^)jGhtt$&a8K;ZEnYysJdI8j+@3WB170|5~c zF>T|_%slg(nVq#g&oi3(y|t`t+4k1Z#`0|38qMXvJg3xFLW6w)1oivv?H5BORrH^6FY`+#Oksn-b~h-_ zhuQWhv$AST=Mug!SVicgG7;uC*zVc_8q3Dib-v%SDt5it^8z~Y+i8iOj;It6SByr!E~6PUEK=p1sHtM>Q) zLE%17_=hO-2&D&Y25=>d66Kvc-tIq*Sxga@oKAEE>31ky27a_82a$5n`ZF8Yw0 zB2|@LMfiVzWA(pBAjHi11UT1?5uNMKPz)hBA#=rcI1|5ZVbKRhjxk3a?O}bHlA;V1 z5Yhc(n^{|O=HT-;EzM$5`6kda!z0+Yw4tDm%Ao}8p1GYebzGAwAcW4?U>?gS*s7*@ zAsod=P8Z)<9Ri%IONYx-3l?p(>(89Sdjrpvo)N}wf!T`^%TN(tV%rzxBQJA?9&QDW8_Hy{`AYhI<+Xmxb;^bHJ+Fw!WYNGy@cB%?@1 zlZ+u5OEQjRJjn!-i6oOqCX-AdnMyK^WID+Vl9?p4NM@7FA(=}uk7Pc{0+NL!i%1re zEFoD+vW$!@CufCI=WuAHL!ERS5ia-sZ>WI2f=mQDjwUJe<&`&?9H6OD`ry&+0~<#SocpO`&j2QSJGHb;3NCpB3ER7wWA z5sy;xaM4WgE{8&3Jt8PjQ%Jfs0n@|B(o|W8Rk(t%0%v@MAk*vsZa7>i>TUiORkM|3 z$!;U&^`>m5Xeoe}TX7*a8S)9O%Oiw3qXA*HklJfw6igr%3ivt(e!xT+o_dtP7=?p> ze0#3gVal972lEtdP0Uc=(dk*Z;S@a^DT+F>DF|IvPN{nO+07rHc1&M+^ncP!x~_%%BXMzsXrfx>KRAs

_ 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 diff --git a/modules/core/client/img/board/tribes-1.jpg b/modules/core/client/img/board/tribes-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5766cca1e389892e1c8876cd3aa7889ed072e3c GIT binary patch literal 35509 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 + *

*
...
*
*/ diff --git a/modules/core/client/less/layout/layout.less b/modules/core/client/less/layout/layout.less index 7228422056..f8adc85562 100644 --- a/modules/core/client/less/layout/layout.less +++ b/modules/core/client/less/layout/layout.less @@ -83,7 +83,7 @@ body { overflow: auto; padding-bottom: @article-padding-bottom; @media (max-width: @screen-xs-max) { - padding-bottom: 30px; + padding-bottom: @article-padding-bottom-xs; } } diff --git a/modules/core/server/controllers/core.server.controller.js b/modules/core/server/controllers/core.server.controller.js index 221e38c330..3b9ca91243 100644 --- a/modules/core/server/controllers/core.server.controller.js +++ b/modules/core/server/controllers/core.server.controller.js @@ -1,6 +1,8 @@ 'use strict'; -var errorHandler = require('./errors.server.controller'); +var path = require('path'), + errorHandler = require('./errors.server.controller'), + usersHandler = require(path.resolve('./modules/users/server/controllers/users.server.controller')); /** * Render the main application page @@ -8,16 +10,15 @@ var errorHandler = require('./errors.server.controller'); exports.renderIndex = function(req, res) { var currentUser = null; + console.log('------------------------------------------------------------------------------------------------'); + console.log('------------------------------------------------------------------------------------------------'); + console.log('------------------------------------------------------------------------------------------------'); + console.log(req); + console.log('------------------------------------------------------------------------------------------------'); // Expose user if(req.user) { - currentUser = req.user; - // Don't just expose everything to the view... - delete currentUser.resetPasswordToken; - delete currentUser.resetPasswordExpires; - delete currentUser.emailToken; - delete currentUser.password; - delete currentUser.salt; + currentUser = usersHandler.sanitizeProfile(req.user, req.user); } res.render('modules/core/server/views/index', { diff --git a/modules/core/server/controllers/errors.server.controller.js b/modules/core/server/controllers/errors.server.controller.js index e0a9e2d8c6..87b2ba56fe 100644 --- a/modules/core/server/controllers/errors.server.controller.js +++ b/modules/core/server/controllers/errors.server.controller.js @@ -19,6 +19,8 @@ exports.getErrorMessageByKey = function(key) { 'invalid-id': 'Cannot interpret id.', 'unprocessable-entity': 'Unprocessable Entity.', // Status 422, @link http://www.restpatterns.org/HTTP_Status_Codes/422_-_Unprocessable_Entity 'unsupported-media-type': 'Unsupported Media Type.', // Status 415 + 'bad-request': 'Bad request.', // Status 400 + 'conflict': 'Conflict.', // Status 409 'default': defaultErrorMessage }; diff --git a/modules/core/server/views/partials/header.server.view.html b/modules/core/server/views/partials/header.server.view.html index 71b187866a..4e5cf07593 100644 --- a/modules/core/server/views/partials/header.server.view.html +++ b/modules/core/server/views/partials/header.server.view.html @@ -53,6 +53,11 @@ Map +
  • + + Tribes + +
  • diff --git a/modules/pages/client/config/pages.client.routes.js b/modules/pages/client/config/pages.client.routes.js index bc449cb587..22e570eff8 100755 --- a/modules/pages/client/config/pages.client.routes.js +++ b/modules/pages/client/config/pages.client.routes.js @@ -82,7 +82,7 @@ */ if (window.location.search.search('_escaped_fragment_') === -1) { $stateProvider.state('home', { - url: '/', + url: '/?tribe', templateUrl: '/modules/pages/views/home.client.view.html', controller: 'HomeController', controllerAs: 'home', diff --git a/modules/pages/client/controllers/home.client.controller.js b/modules/pages/client/controllers/home.client.controller.js index b781786631..2feed1fd52 100644 --- a/modules/pages/client/controllers/home.client.controller.js +++ b/modules/pages/client/controllers/home.client.controller.js @@ -6,7 +6,7 @@ .controller('HomeController', HomeController); /* @ngInject */ - function HomeController($log, $window, $location, Authentication) { + function HomeController(Authentication, TribesService) { var headerHeight = angular.element('#tr-header').height() || 0; @@ -18,5 +18,9 @@ vm.boards = Authentication.user ? 'wavewatching' : ['rainbowpeople', 'hitchroad', 'desertgirl', 'sierranevada', 'wavewatching', 'hitchgirl1', 'hitchgirl2']; + vm.tribes = TribesService.query({ + limit: 3 + }); + } })(); diff --git a/modules/pages/client/less/home.less b/modules/pages/client/less/home.less index af259ef814..9799193510 100644 --- a/modules/pages/client/less/home.less +++ b/modules/pages/client/less/home.less @@ -140,9 +140,84 @@ @media (max-width: @screen-sm-max) { padding: 30px 0 10px 0; } + // Tribe bubbles for small screens + .tribes-xs { + text-align: center; + margin: 30px -10px 30px 0; + } + .tribe-xs { + display: inline-block; + .square(100px); + line-height: 100px; + margin: 0 0 0 -20px; + .font-brand-light(); + font-size: 60px; + color: rgba(255, 255, 255, 0.5); + text-align: center; + user-select: none; + &, + &:hover { + text-decoration: none; + } + &:first-child { + margin-left: 10px; // Half of the minus margin of `.tribe-xs` + } + } + .tribe-intro { + text-align: center; + p { + padding: 20px 0; + margin: 0; + font-size: 16px; + @media (min-width: @screen-md-min) { + font-size: 21px; + } + } + } + .tribe, + .tribe-intro { + margin-left: auto; + margin-right: auto; + margin-bottom: 20px; + width: 100%; + @media (min-width: @screen-sm-min) { + .square(150px); + } + @media (min-width: @screen-md-min) { + .square(220px); + } + @media (min-width: @screen-lg-min) { + .square(260px); + } + } + .tribe { + overflow: hidden; + .tribe-link { + display: block; + position: relative; + margin: 0; + padding: 0; + width: 100%; + height: 100%; + background: linear-gradient(to top, rgba(0,0,0,0.65) 0%,rgba(0,0,0,0) 100%); + .tribe-label { + position: absolute; + left: 40px; + right: 40px; + bottom: 25px; + padding: 0; + margin: 0; + text-align: center; + @media (max-width: @screen-sm-max) { + font-size: @font-size-large; + } + } + &:hover { + } + } + } } - .home-wohoo { width: 207px; height: 162px; @@ -152,6 +227,9 @@ // Home section - footer .home-footer { margin-bottom: -@article-padding-bottom; + @media (max-width: @screen-xs-max) { + margin-bottom: -@article-padding-bottom-xs; + } background-position: 50% bottom; padding-top: 30px; text-shadow: none; diff --git a/modules/pages/client/views/home.client.view.html b/modules/pages/client/views/home.client.view.html index 33c9401539..b2af8f996a 100644 --- a/modules/pages/client/views/home.client.view.html +++ b/modules/pages/client/views/home.client.view.html @@ -84,6 +84,44 @@

    How does it work?

    + +
    + +
    +
    diff --git a/modules/tags/client/config/tags.client.config.js b/modules/tags/client/config/tags.client.config.js new file mode 100644 index 0000000000..299d66b46f --- /dev/null +++ b/modules/tags/client/config/tags.client.config.js @@ -0,0 +1,51 @@ +(function() { + 'use strict'; + + angular + .module('tags') + .config(TagsRoutes); + + /* @ngInject */ + function TagsRoutes($stateProvider) { + + $stateProvider. + state('tribes', { + url: '/tribes', + abstract: true, + template: '' + }). + state('tribes.list', { + url: '', + title: 'Tribes', + templateUrl: '/modules/tags/views/tribes-list.client.view.html', + controller: 'TribesListController', + controllerAs: 'tribesList', + resolve: { + // A string value resolves to a service + TribesService: 'TribesService', + tribes: function(TribesService) { + return TribesService.query(); + } + } + }). + state('tribes.tribe', { + url: '/:tribe', + title: 'Tribe', + footerHidden: true, + templateUrl: '/modules/tags/views/tribe.client.view.html', + controller: 'TribeController', + controllerAs: 'tribeCtrl', + resolve: { + // A string value resolves to a service + TribeService: 'TribeService', + tribe: function(TribeService, $stateParams) { + return TribeService.get({ + tribeSlug: $stateParams.tribe + }); + } + } + }); + + } + +})(); diff --git a/modules/tags/client/controllers/tribe.client.controller.js b/modules/tags/client/controllers/tribe.client.controller.js new file mode 100644 index 0000000000..5953355c03 --- /dev/null +++ b/modules/tags/client/controllers/tribe.client.controller.js @@ -0,0 +1,34 @@ +(function() { + 'use strict'; + + angular + .module('tags') + .controller('TribeController', TribeController); + + /* @ngInject */ + function TribeController($scope, $state, tribe) { + + var headerHeight = angular.element('#tr-header').height() || 0; + + // ViewModel + var vm = this; + + // Exposed to the view + vm.tribe = tribe; + vm.windowHeight = angular.element('html').height() - headerHeight; + vm.goBack = goBack; + + // `tr-tribe-join-button` and `tr-tribe-join` directives expect + // `tribe` to be directly on their scope, as they don't have their own scope. + $scope.tribe = tribe; + + /** + * Go to tribe grid + */ + function goBack() { + $state.go('tribes.list'); + } + + } + +})(); diff --git a/modules/tags/client/controllers/tribes-list.client.controller.js b/modules/tags/client/controllers/tribes-list.client.controller.js new file mode 100644 index 0000000000..028269ee43 --- /dev/null +++ b/modules/tags/client/controllers/tribes-list.client.controller.js @@ -0,0 +1,19 @@ +(function() { + 'use strict'; + + angular + .module('tags') + .controller('TribesListController', TribesListController); + + /* @ngInject */ + function TribesListController(tribes) { + + // ViewModel + var vm = this; + + // Exposed to the view + vm.tribes = tribes; + + } + +})(); diff --git a/modules/tags/client/directives/tr-tags-list.client.directive.js b/modules/tags/client/directives/tr-tags-list.client.directive.js new file mode 100644 index 0000000000..f638885e86 --- /dev/null +++ b/modules/tags/client/directives/tr-tags-list.client.directive.js @@ -0,0 +1,23 @@ +(function() { + 'use strict'; + + /** + * Simple list of tribes + */ + angular + .module('tags') + .directive('trTagsList', trTagsListDirective); + + /* @ngInject */ + function trTagsListDirective() { + return { + templateUrl: '/modules/tags/views/directives/tr-tags-list.client.view.html', + restrict: 'A', + replace: true, + scope: { + tags: '=trTagsList' + } + }; + + } +})(); diff --git a/modules/tags/client/directives/tr-tribe-join-button.client.directive.js b/modules/tags/client/directives/tr-tribe-join-button.client.directive.js new file mode 100644 index 0000000000..a5c96359a4 --- /dev/null +++ b/modules/tags/client/directives/tr-tribe-join-button.client.directive.js @@ -0,0 +1,78 @@ +(function() { + 'use strict'; + + /** + * Join tribe button + */ + angular + .module('tags') + .run(trTribeJoinButtonTemplate) + .directive('trTribeJoinButton', trTribeJoinButtonDirective); + + /* @ngInject */ + function trTribeJoinButtonTemplate($templateCache) { + var buttonTemplate = [ + '', + ]; + $templateCache.put('tr-tribe-join-button.html', buttonTemplate.join('')); + } + + /* @ngInject */ + function trTribeJoinButtonDirective(Authentication) { + return { + restrict: 'A', + replace: true, + //transclude: true, + scope: false, + require: '^^trTribeJoin', // Require `tr-tribe-join` directive above this in DOM + templateUrl: 'tr-tribe-join-button.html', + link: trTribeJoinButtonDirectiveLink + }; + + function trTribeJoinButtonDirectiveLink(scope, elem, attrs, parentCtrl) { + + scope.isMember = parentCtrl.isMember; + + // Set labels + scope.joinLabel = (angular.isUndefined(attrs.trTribeJoinLabel)) ? 'Join' : attrs.trTribeJoinLabel; + scope.joinedLabel = (angular.isUndefined(attrs.trTribeJoinedLabel)) ? 'Joined' : attrs.trTribeJoinedLabel; + //scope.leaveLabel = (angular.isUndefined(attrs.trTribeLeaveLabel)) ? 'Leave Tribe' : attrs.trTribeLeaveLabel; + + // Set icon visibility + scope.icon = (angular.isDefined(attrs.trTribeJoinIcon) && (attrs.trTribeJoinIcon === false || attrs.trTribeJoinIcon === 'false')) ? false : true; + + /** + * Toggle membership + */ + scope.toggleMembership = function() { + scope.isLoading = true; + + // If user is not authenticated, redirect them to signup page + if(!Authentication.user) { + parentCtrl.tribeSignup(); + return; + } + + // Optimistic toggle without API action when joining + if(!scope.isMember) { + scope.isMember = true; + } + + // Do the actual updating + parentCtrl.toggleMembership().then(function(isMember) { + scope.isLoading = false; + scope.isMember = isMember; + }, function(isMember) { + scope.isLoading = false; + scope.isMember = isMember; + }); + }; + + } + } + +})(); diff --git a/modules/tags/client/directives/tr-tribe-join.client.directive.js b/modules/tags/client/directives/tr-tribe-join.client.directive.js new file mode 100644 index 0000000000..8533430e7b --- /dev/null +++ b/modules/tags/client/directives/tr-tribe-join.client.directive.js @@ -0,0 +1,196 @@ +(function() { + 'use strict'; + + /** + * Join tribe + */ + angular + .module('tags') + + .directive('trTribeJoin', trTribeJoinDirective); + + /* @ngInject */ + function trTribeJoinDirective() { + return { + restrict: 'A', + scope: false, + controller: trTribeJoinDirectiveController, + controllerAs: 'tribeJoinDirective', + }; + + /* @ngInject */ + function trTribeJoinDirectiveController($q, $rootScope, $scope, $state, $analytics, $confirm, TribeService, UserTagsService, Authentication, messageCenterService) { + + // View Model + /*jshint validthis: true */ + var vm = this; + + vm.toggleMembership = toggleMembership; + vm.openTribe = openTribe; + vm.tribeSignup = tribeSignup; + vm.isMember = false; + + activate(); + + /** + * Initialize directive + */ + function activate() { + // Check if authenticated user is already a member + if(Authentication.user) { + checkIsMember(); + } + } + + /** + * Open tribe + */ + function openTribe() { + // Put tribe object to `$rootScope` to be used after + // page transition has finished + TribeService.fillCache(angular.copy($scope.tribe)); + $state.go('tribes.tribe', {tribe: $scope.tribe.slug}); + } + + /** + * Go to signup page and refer to this tribe + */ + function tribeSignup() { + TribeService.fillCache(angular.copy($scope.tribe)); + $state.go('signup', {'tribe': $scope.tribe.slug}); + } + + /** + * Toggle membership (join or leave) + */ + function toggleMembership() { + //Authentication.user.memberIds = angular.copy(Authentication.user.memberIds); + vm.isMember = !vm.isMember; + return (vm.isMember) ? join() : leave(); + } + + /** + * Join Tribe + */ + function join() { + // Tracking + $analytics.eventTrack('join-tribe', { + category: 'tribes.membership', + label: 'Join tribe', + value: $scope.tribe.slug + }); + + return $q(function(resolve, reject) { + UserTagsService.post({ + id: $scope.tribe._id, + relation: 'is' + }, + function(data) { + if(data.tag && data.user) { + vm.isMember = true; + data.tag.$resolved = true; + $scope.tribe = data.tag; + Authentication.user = data.user; + $rootScope.$broadcast('userUpdated'); + resolve(true); + } + else { + toggleMembershipError(); + vm.isMember = false; + reject(false); + } + }, function(err) { + toggleMembershipError(); + vm.isMember = false; + reject(false); + }); + }); + } + + /** + * Leave tribe + */ + function leave() { + // Tracking + $analytics.eventTrack('leave-tribe', { + category: 'tribes.membership', + label: 'Leave tribe', + value: $scope.tribe.slug + }); + + return $q(function(resolve, reject) { + + // Ask user for confirmation + $confirm({ + title: 'Leave this Tribe?', + text: 'Do you want to leave ' + $scope.tribe.label + '?', + ok: 'Leave Tribe', + cancel: 'Cancel' + }) + .then(function() { + UserTagsService.post({ + id: $scope.tribe._id, + relation: 'leave' + }, + function(data) { + // API success + if(data.tag && data.user) { + vm.isMember = false; + data.tag.$resolved = true; + $scope.tribe = data.tag; + Authentication.user = data.user; + $rootScope.$broadcast('userUpdated'); + resolve(false); + } + // API returned error + else { + toggleMembershipError(); + vm.isMember = true; + reject(true); + } + }, function(err) { + toggleMembershipError(); + vm.isMember = true; + reject(true); + }); + }, + // `Cancel` button from confirm dialog + function() { + $analytics.eventTrack('leave-tribe-cancelled', { + category: 'tribes.membership', + label: 'Leaving tribe cancelled', + value: $scope.tribe.slug + }); + vm.isMember = true; + reject(true); + }); + + }); + } + + /** + * On API error when joinin or leaving a tribe + */ + function toggleMembershipError() { + messageCenterService.add('danger', 'Something went wrong. Please try again.'); + } + + /** + * Check if currently authenticated user is member of this tribe + */ + function checkIsMember() { + // Array missing, cannot be member of anything + if(!Authentication.user || !Authentication.user.memberIds || !Authentication.user.memberIds.length) { + vm.isMember = false; + } + else { + // Is this tribe's id among member's tags/tribes ids + vm.isMember = (Authentication.user.memberIds.indexOf($scope.tribe._id) > -1) ? true : false; + } + } + + } + + } + +})(); diff --git a/modules/tags/client/directives/tr-tribe-styles.client.directive.js b/modules/tags/client/directives/tr-tribe-styles.client.directive.js new file mode 100644 index 0000000000..7d815d4157 --- /dev/null +++ b/modules/tags/client/directives/tr-tribe-styles.client.directive.js @@ -0,0 +1,39 @@ +(function() { + 'use strict'; + + /** + * Directive to apply tribe color + image styles to an element + */ + angular + .module('tags') + .directive('trTribeStyles', trTribeStylesDirective); + + /* @ngInject */ + function trTribeStylesDirective() { + return { + restrict: 'A', + replace: false, + scope: false, + link: function(scope, elem, attrs) { + + if(angular.isDefined(attrs.trTribeStyles) && attrs.trTribeStyles !== '') { + var style = '', + tribe = angular.fromJson(attrs.trTribeStyles); + + if(tribe.image && tribe._id) { + style += 'background-image: url(/modules/tags/img/tribe/' + tribe._id.toString() + '.jpg);'; + } + + if(tribe.color) { + style += 'background-color: #' + tribe.color + ';'; + } + + if(style !== '') { + attrs.$set('style', style); + } + } + + } + }; + } +})(); diff --git a/modules/tags/client/directives/tr-tribes-list.client.directive.js b/modules/tags/client/directives/tr-tribes-list.client.directive.js new file mode 100644 index 0000000000..e1b44e4877 --- /dev/null +++ b/modules/tags/client/directives/tr-tribes-list.client.directive.js @@ -0,0 +1,23 @@ +(function() { + 'use strict'; + + /** + * Simple list of tribes + */ + angular + .module('tags') + .directive('trTribesList', trTribesListDirective); + + /* @ngInject */ + function trTribesListDirective() { + return { + templateUrl: '/modules/tags/views/directives/tr-tribes-list.client.view.html', + restrict: 'A', + replace: true, + scope: { + tribes: '=trTribesList' + } + }; + + } +})(); diff --git a/modules/tags/client/less/tags.less b/modules/tags/client/less/tags.less new file mode 100644 index 0000000000..764f97e78f --- /dev/null +++ b/modules/tags/client/less/tags.less @@ -0,0 +1,17 @@ +.tags-list { + list-style: none; + margin: 0; + padding: 0; + li { + float: left; + margin: 0 10px 10px 0; + } + .tag { + background-color: @gray-lighter; + border-radius: 3px; + color: @gray-light; + font-size: 13px; + line-height: 14px; + padding: 5px 10px; + } +} diff --git a/modules/tags/client/less/tribe.less b/modules/tags/client/less/tribe.less new file mode 100644 index 0000000000..3d0eff7714 --- /dev/null +++ b/modules/tags/client/less/tribe.less @@ -0,0 +1,73 @@ +.tribe-header { + background-position: 50% 30%; + padding: 0; + position: fixed; + top: @navbar-height; + bottom: 0; + left: 0; + right: 0; + .tribe-header-back { + position: absolute; + top: (@navbar-height + 10px); + left: 10px; + [class^="icon-"]:before, + [class*=" icon-"]:before { + transition: all 0.2s ease-in-out; + margin-right: 5px; + margin-left: 5px; + } + &:hover { + [class^="icon-"]:before, + [class*=" icon-"]:before { + margin-right: 10px; + margin-left: 0; + } + } + } +} +.tribe-header-info { + width: 100%; + min-height: 680px; + background: linear-gradient(to right, rgba(0,0,0,0.65) 0%,rgba(0,0,0,0) 100%); + .tribe-pre { + margin-bottom: 0; + } + .tribe-title { + font-size: 46px; + line-height: 55px; + } + .tribe-meta { + margin-top: 10px; + } + .tribe-join.btn.btn-active span { + color: #fff; + } +} +// For non-authenticated members we show more text, so make header darker +.is-guest { + .tribe-header-info { + text-align: center; + background: rgba(0,0,0,0.6); + @media (min-width: @screen-xs-min) { + background: linear-gradient(to right, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.5) 40%, rgba(0,0,0,0.0) 70%, rgba(0,0,0,0) 100%); + } + @media (min-width: @screen-md-min) { + background: linear-gradient(to right, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.5) 40%, rgba(0,0,0,0.0) 70%, rgba(0,0,0,0) 100%); + } + @media (min-width: @screen-xs-min) { + text-align: left; + .tribe-pre { + font-size: 26px; + line-height: 35px; + } + .tribe-title { + font-size: 56px; + line-height: 65px; + } + } + .tribe-readmore { + margin-left: 0; + padding-left: 0; + } + } +} diff --git a/modules/tags/client/less/tribes-grid.less b/modules/tags/client/less/tribes-grid.less new file mode 100644 index 0000000000..41d173f4da --- /dev/null +++ b/modules/tags/client/less/tribes-grid.less @@ -0,0 +1,53 @@ +/** + * Big "Discover Tribes" grid + */ +.tribes-grid { + overflow: hidden; + .tribe { + background-color: @brand-primary; + background-size: cover; + height: 250px; + margin: 0; + padding: 0; + color: #fff; + // Animate tile transition animations: + // transition: all 0.2s ease-out; + } + .tribe-link { + display: block; + position: relative; + width: 100%; + height: 100%; + transition: background 0.1s ease-in-out; + &:hover, + &:focus { + background: rgba(255, 255, 255, 0.15); + } + } + .tribe-content { + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 10px; + &.is-image { + background: linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0.65) 100%); + } + } + .tribe-label { + font-size: 25px; + line-height: 30px; + } + .tribe-actions { + position: absolute; + bottom: 0; + right: 0; + padding: 5px 10px 10px 5px; + text-align: right; + .btn { + &:hover { + background: #fff; + } + } + } +} diff --git a/modules/tags/client/less/tribes-list.less b/modules/tags/client/less/tribes-list.less new file mode 100644 index 0000000000..49c525e613 --- /dev/null +++ b/modules/tags/client/less/tribes-list.less @@ -0,0 +1,54 @@ +/** + * Small list at the profile + */ +.tribes-list { + list-style: none; + display: block; + margin: 0; + padding: 0; + .tribe { + position: relative; + display: flex; + flex-direction: row; + flex-wrap: wrap; + flex-flow: row wrap; + justify-content: flex-start; + align-items: center; + align-content: stretch; + margin: 0 0 5px 0; + padding: 0 0 5px 0; + border-bottom: 1px solid @gray-lighter; + &:last-child { + border-bottom: 0; + } + } + .tribe-image { + .square(60px); + line-height: 60px; + flex-grow: 0; + display: block; + .font-brand-light(); + font-size: 30px; + color: rgba(255, 255, 255, 0.5); + text-align: center; + user-select: none; + margin: 0 10px 0 0; + * { + cursor: default; + } + } + .tribe-info { + flex-grow: 1; + } + .tribe-actions { + flex-grow: 0; + //align-self: flex-start; + padding: 5px; + /* + position: absolute; + top: 10px; + right: 10px; + border: 1px solid @gray-lighter; + */ + } +} diff --git a/modules/tags/client/less/tribes.less b/modules/tags/client/less/tribes.less new file mode 100644 index 0000000000..e44d665982 --- /dev/null +++ b/modules/tags/client/less/tribes.less @@ -0,0 +1,51 @@ +.tribes-header { + padding-top: 130px; + padding-bottom: 50px; + background-position: 50% 30%; + .lead, + h2 { + text-shadow: none; + } + @media (min-width: @screen-sm-min) { + padding-top: 260px; + padding-bottom: 200px; + } +} + +/** + * Common styles for tribe elements + */ +.tribe-image { + background-size: cover; + background-position: 50% 50%; + background-color: @brand-primary; +} + +.tribe-join.btn.btn-active { + opacity: 0.8; + &, span { + color: @gray; + } + &:hover { + opacity: 1; + } +} + +.tribe-actions { + .btn { + transition: all 0.2s ease-in-out; + outline: none; + } +} + +.tribe-meta, +.tribe-label { + color: #fff; + text-shadow: 1px 1px 1px rgba(0,0,0,0.5); +} +.tribe-meta { + .font-brand-regular(); +} +.tribe-label { + .font-brand-light(); +} diff --git a/modules/tags/client/services/tribe.client.service.js b/modules/tags/client/services/tribe.client.service.js new file mode 100644 index 0000000000..30d9e54408 --- /dev/null +++ b/modules/tags/client/services/tribe.client.service.js @@ -0,0 +1,88 @@ +(function() { + 'use strict'; + + angular + .module('tags') + .factory('TribeService', TribeService); + + /* @ngInject */ + function TribeService($resource, $q, $log) { + + // `$resource` to communicate with tribes REST API + var Tribe = $resource('/api/tribes/:tribeSlug', { + tribeSlug:'@slug' + }, { + get: { + method: 'GET' + } + }); + + var cachedTribe; + + var service = { + fillCache: fillCache, + clearCache: clearCache, + get: get + }; + + return service; + + /** + * Service to store single tribe object for caching + * Automatically clears cache on `get()`. + */ + function fillCache(tribe) { + if(!angular.isDefined(tribe) || !angular.isDefined(tribe.slug)) { + $log.error('Missing tribe to cache.'); + return; + } + else { + cachedTribe = tribe; + cachedTribe.$resolved = true; + } + } + + /** + * Empty cache + */ + function clearCache() { + cachedTribe = undefined; + } + + /** + * Get tribe + * First checks if tribe exists in cache and if not, returns API `$resource` promise + * Automatically clears cache after retreiving object from cache + */ + function get(options) { + + return $q(function(resolve, reject) { + if(!angular.isDefined(options) || !angular.isDefined(options.tribeSlug) || !angular.isString(options.tribeSlug)) { + $log.error('Missing tribeSlug'); + reject(); + } + + // Found from cache + else if(cachedTribe && cachedTribe.slug === options.tribeSlug) { + resolve(cachedTribe); + clearCache(); + } + + // Not found from cache, return $resource + else { + Tribe.get({ + tribeSlug: options.tribeSlug + }).$promise + .then(function(tribe) { + resolve(tribe); + }) + .catch(function() { + reject(); + }); + } + }); + } + + } + +})(); diff --git a/modules/tags/client/services/tribes.client.service.js b/modules/tags/client/services/tribes.client.service.js new file mode 100644 index 0000000000..e79eeecbe1 --- /dev/null +++ b/modules/tags/client/services/tribes.client.service.js @@ -0,0 +1,15 @@ +(function() { + 'use strict'; + + angular + .module('tags') + .factory('TribesService', TribesService); + + /* @ngInject */ + function TribesService($resource) { + return $resource('/api/tribes', {}, { + 'query': { method: 'GET', isArray: true } + }); + } + +})(); diff --git a/modules/tags/client/tags.client.module.js b/modules/tags/client/tags.client.module.js new file mode 100644 index 0000000000..d70af52a55 --- /dev/null +++ b/modules/tags/client/tags.client.module.js @@ -0,0 +1,5 @@ +'use strict'; + +// Use application configuration module to register a new module +// The core module is required for special route handling; see /core/client/config/core.client.routes +AppConfig.registerModule('tags', ['core']); diff --git a/modules/tags/client/views/directives/tr-tags-list.client.view.html b/modules/tags/client/views/directives/tr-tags-list.client.view.html new file mode 100644 index 0000000000..350455037c --- /dev/null +++ b/modules/tags/client/views/directives/tr-tags-list.client.view.html @@ -0,0 +1,5 @@ +
      +
    • + +
    • +
    diff --git a/modules/tags/client/views/directives/tr-tribes-list.client.view.html b/modules/tags/client/views/directives/tr-tribes-list.client.view.html new file mode 100644 index 0000000000..37659d28ea --- /dev/null +++ b/modules/tags/client/views/directives/tr-tribes-list.client.view.html @@ -0,0 +1,22 @@ +
      +
    • +
      + +
      +
      +
      + + + +
      +
      + +
      +
    • +
    diff --git a/modules/tags/client/views/tribe.client.view.html b/modules/tags/client/views/tribe.client.view.html new file mode 100644 index 0000000000..c0957b32d4 --- /dev/null +++ b/modules/tags/client/views/tribe.client.view.html @@ -0,0 +1,72 @@ + +
    + +

    + Wait a moment... +
    + +
    + + +
    + +
    +
    +

    This tribe is not here...

    +

    The tribe you're seeking isn't here. Check if your address is correct.

    + See other tribes +
    +
    + +
    + + +
    + Other tribes +
    +
    +
    + + +
    +

    Tribe

    +

    + +

    + +
    + + +
    +

    Trustroots Tribe

    +

    +

    +

    + Trustroots is a travellers' community for sharing, hosting and getting people together. +

    + Join to meet, host and get hosted by this and other communities. +

    + Join {{::tribeCtrl.tribe.label}} on Trustroots
    + Read more +

    +
    + +
    +
    +
    +
    + +
    diff --git a/modules/tags/client/views/tribes-list.client.view.html b/modules/tags/client/views/tribes-list.client.view.html new file mode 100644 index 0000000000..6be636a544 --- /dev/null +++ b/modules/tags/client/views/tribes-list.client.view.html @@ -0,0 +1,61 @@ +
    +
    +
    +
    +

    +

    Discover Tribes

    +
    +

    Joining Tribes helps you find likeminded Trustroots members.

    +
    +
    +
    +
    + +
    + +
    +
    + +
    + + +
    +
    + +
    diff --git a/modules/tags/server/controllers/tags.server.controller.js b/modules/tags/server/controllers/tags.server.controller.js new file mode 100644 index 0000000000..8d7322061f --- /dev/null +++ b/modules/tags/server/controllers/tags.server.controller.js @@ -0,0 +1,94 @@ +'use strict'; + +/** + * Module dependencies. + */ +var path = require('path'), + errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')), + mongoose = require('mongoose'), + Tag = mongoose.model('Tag'); + +// Publicly exposed fields from tags +exports.tagFields = [ + '_id', + 'slug', + 'label', + 'count' + ].join(' '); + +/** + * Crate a tag + */ +exports.createTag = function(req, res) { + if(!req.user) { + return res.status(403).send({ + message: errorHandler.getErrorMessageByKey('forbidden') + }); + } + + // @todo + return res.status(403).send({ + message: errorHandler.getErrorMessageByKey('forbidden') + }); +}; + +/** + * List all tags + */ +exports.listTags = function(req, res) { + + Tag.find( + { + public: true, + tribe: false + }, + exports.tagFields, + { + sort: { + count: 'desc' + } + } + ) + .exec(function(err, tribes) { + if (err) { + return res.status(400).send({ + message: errorHandler.getErrorMessage(err) + }); + } else { + res.json(tribes); + } + }); +}; + +/** + * Return tag + */ +exports.getTag = function(req, res) { + res.json(req.tag || {}); +}; + +/** + * Tag middleware + */ +exports.tagBySlug = function(req, res, next, slug) { + + Tag.findOne( + { + public: true, + tribe: false, + slug: slug + }, + exports.tagFields + ) + .exec(function(err, tag) { + if (err) { + return res.status(400).send({ + message: errorHandler.getErrorMessage(err) + }); + } else { + req.tag = tag; + } + }); + + return next(); +}; diff --git a/modules/tags/server/controllers/tribes.server.controller.js b/modules/tags/server/controllers/tribes.server.controller.js new file mode 100644 index 0000000000..fdf83094ee --- /dev/null +++ b/modules/tags/server/controllers/tribes.server.controller.js @@ -0,0 +1,96 @@ +'use strict'; + +/** + * Module dependencies. + */ +var path = require('path'), + async = require('async'), + errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')), + paginate = require('express-paginate'), + mongoose = require('mongoose'), + Tag = mongoose.model('Tag'); + +// Publicly exposed fields from tribes +exports.tribeFields = [ + '_id', + 'slug', + 'label', + 'count', + 'color', + 'image' + ].join(' '); + +/** + * Constructs link headers for pagination + */ +var setLinkHeader = function(req, res, pageCount) { + if(paginate.hasNextPages(req)(pageCount)) { + var nextPage = { page: req.query.page + 1 }; + var linkHead = '<' + req.protocol + ':' + res.locals.url.slice(0,-1) + res.locals.paginate.href(nextPage) + '>; rel="next"'; + res.set('Link',linkHead); + } +}; + +/** + * List all tribes + */ +exports.listTribes = function(req, res) { + + Tag.paginate( + { + public: true, + tribe: true + }, + { + page: parseInt(req.query.page) || 1, // Note: `parseInt('0')` will return `NaN`, `page` will be set to `1` in such case. + limit: parseInt(req.query.limit) || 0, // `0` for infinite + sort: { + count: 'desc' + }, + select: exports.tribeFields + }, + function(err, data) { + if (err) { + return res.status(400).send({ + message: errorHandler.getErrorMessage(err) + }); + } else { + // Pass pagination data to construct link header + setLinkHeader(req, res, data.pages); + + res.json(data.docs); + } + } + ); +}; + +/** + * Return tribe + */ +exports.getTribe = function(req, res) { + res.json(req.tribe || {}); +}; + +/** + * Tribe middleware + */ +exports.tribeBySlug = function(req, res, next, slug) { + Tag.findOne( + { + public: true, + tribe: true, + slug: slug + }, + exports.tribeFields + ) + .exec(function(err, tribe) { + if (err) { + return res.status(400).send({ + message: errorHandler.getErrorMessage(err) + }); + } else { + req.tribe = tribe; + return next(); + } + }); +}; diff --git a/modules/tags/server/models/tag.server.model.js b/modules/tags/server/models/tag.server.model.js new file mode 100644 index 0000000000..bd6df29e1d --- /dev/null +++ b/modules/tags/server/models/tag.server.model.js @@ -0,0 +1,146 @@ +'use strict'; + +/** + * Module dependencies. + */ +var path = require('path'), + config = require(path.resolve('./config/config')), + mongoose = require('mongoose'), + mongoosePaginate = require('mongoose-paginate'), + uniqueValidation = require('mongoose-beautiful-unique-validation'), + integerValidator = require('mongoose-integer'), + URLSlugs = require('mongoose-url-slugs'), + randomColor = require('randomcolor'), + speakingurl = require('speakingurl'), + validator = require('validator'), + Schema = mongoose.Schema; + +/** + * Return random dark hex color without leading `#` + */ +function randomHex() { + return randomColor({ + luminosity: 'dark', + format: 'hex' + }).substr(1); +} + +/** + * A Validation function for label + * - should contain at least one a-zA-Z character + * - not in list of illegal labels + * - not begin or end with "." + */ + +var validateLabel = function(label) { + return (label && + label.match(/[a-z]/) && // Should have at least one a-zA-Z (non case-insensitive regex) + config.illegalStrings.indexOf(label.trim().toLowerCase()) < 0 && + label.charAt(0) !== '.' && // Don't start with `.` + label.slice(-1) !== '.' // Don't end with `.` + ); +}; + +/** + * Tag Schema + */ +var TagSchema = new Schema({ + label: { + type: String, + minlength: 2, + maxlength: 255, + trim: true, + required: true, + unique: 'Tag exists already.', + validate: [validateLabel, 'Please fill a valid name.'] + }, + labelHistory: { + type: [String] + }, + slugHistory: { + type: [String] + }, + synonyms: { + type: [String] + }, + tribe: { + type: Boolean, + default: false, + required: true + }, + color: { + type: String, + minlength: 6, + maxlength: 6, + required: true, + default: randomHex + }, + count: { + type: Number, + integer: true, + min: 0, + default: 0, + required: true + }, + created: { + type: Date, + default: Date.now, + required: true + }, + modified: { + type: Date + }, + public: { + type: Boolean, + default: true, + required: true + }, + image: { + type: Boolean, + default: false, + required: true + } +}); + +/** + * Inserts `slug` field to schema and automatically generates unique slug from `label` field. + * @link https://www.npmjs.com/package/mongoose-url-slugs + * + * Uses `speakingurl` package to generate slugs. + * @link https://npmjs.org/package/speakingurl + * @link https://github.com/mindblaze/mongoose-url-slugs/issues/17 + */ +TagSchema.plugin(URLSlugs('label', { + field: 'slug', + generator: function(string) { + return speakingurl(string, { + separator: '-', // char that replaces the whitespaces + maintainCase: false, // maintain case (true, convert all chars to lower case (false) + truncate: 255 // trim to max length ({number}), don't truncate (0) + }); + } +})); + +/** + * Make sure unique fields yeld verbal errors + * @link https://www.npmjs.com/package/mongoose-beautiful-unique-validation + */ +TagSchema.plugin(uniqueValidation); + +/** + * Validate Integers + * @link https://www.npmjs.com/package/mongoose-integer + */ +TagSchema.plugin(integerValidator); + +/** + * Indexing + */ +TagSchema.index({ slug: 1, label: 1 }); + +/** + * Pagination (together with `paginate-express`) + */ +TagSchema.plugin(mongoosePaginate); + +mongoose.model('Tag', TagSchema); diff --git a/modules/tags/server/policies/tags.server.policy.js b/modules/tags/server/policies/tags.server.policy.js new file mode 100644 index 0000000000..1fcd23a1f6 --- /dev/null +++ b/modules/tags/server/policies/tags.server.policy.js @@ -0,0 +1,100 @@ +'use strict'; + +/** + * Module dependencies. + */ +var acl = require('acl'), + path = require('path'), + errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')); + +// Using the memory backend +acl = new acl(new acl.memoryBackend()); + +/** + * Invoke Tags Permissions + */ +exports.invokeRolesPolicies = function() { + acl.allow([{ + roles: ['admin'], + allows: [{ + resources: '/api/tags', + permissions: ['get', 'post'] + }, { + resources: '/api/tags/:tagSlug', + permissions: ['get'] + }, { + resources: '/api/tribes', + permissions: ['get'] + }, { + resources: '/api/tribes/:tribeSlug', + permissions: ['get'] + }] + }, { + roles: ['user'], + allows: [{ + resources: '/api/tags', + permissions: ['get'] + }, { + resources: '/api/tags/:tagSlug', + permissions: ['get'] + }, { + resources: '/api/tribes', + permissions: ['get'] + }, { + resources: '/api/tribes/:tribeSlug', + permissions: ['get'] + }] + }, { + roles: ['guest'], + allows: [{ + resources: '/api/tags', + permissions: ['get'] + }, { + resources: '/api/tags/:tagSlug', + permissions: ['get'] + }, { + resources: '/api/tribes', + permissions: ['get'] + }, { + resources: '/api/tribes/:tribeSlug', + permissions: ['get'] + }] + }]); +}; + + +/** + * Check If Tags Policy Allows + */ +exports.isAllowed = function(req, res, next) { + + // No tags/tribes for non-authenticated users + /* + if(!req.user || (req.user && !req.user.public)) { + return res.status(403).send({ + message: errorHandler.getErrorMessageByKey('forbidden') + }); + } + */ + + // Check for user roles + var roles = (req.user && req.user.roles) ? req.user.roles : ['guest']; + acl.areAnyRolesAllowed(roles, req.route.path, req.method.toLowerCase(), function(err, isAllowed) { + + if(err) { + // An authorization error occurred. + return res.status(500).send({ + message: 'Unexpected authorization error' + }); + } else { + if(isAllowed) { + // Access granted! Invoke next middleware + return next(); + } else { + return res.status(403).json({ + message: errorHandler.getErrorMessageByKey('forbidden') + }); + } + } + }); +}; diff --git a/modules/tags/server/routes/tags.server.routes.js b/modules/tags/server/routes/tags.server.routes.js new file mode 100644 index 0000000000..b2f44f9662 --- /dev/null +++ b/modules/tags/server/routes/tags.server.routes.js @@ -0,0 +1,30 @@ +'use strict'; + +/** + * Module dependencies. + */ +var path = require('path'), + config = require(path.resolve('./config/config')), + tagsPolicy = require('../policies/tags.server.policy'), + tribes = require('../controllers/tribes.server.controller'), + tags = require('../controllers/tags.server.controller'); + +module.exports = function(app) { + + app.route('/api/tags').all(tagsPolicy.isAllowed) + .post(tags.createTag) + .get(tags.listTags); + + app.route('/api/tribes').all(tagsPolicy.isAllowed) + .get(tribes.listTribes); + + app.route('/api/tags/:tagSlug').all(tagsPolicy.isAllowed) + .get(tags.getTag); + + app.route('/api/tribes/:tribeSlug').all(tagsPolicy.isAllowed) + .get(tribes.getTribe); + + // Finish by binding the tags middleware + app.param('tagSlug', tags.tagBySlug); + app.param('tribeSlug', tribes.tribeBySlug); +}; diff --git a/modules/tags/tests/server/tags.server.model.tests.js b/modules/tags/tests/server/tags.server.model.tests.js new file mode 100644 index 0000000000..8ea3a187a1 --- /dev/null +++ b/modules/tags/tests/server/tags.server.model.tests.js @@ -0,0 +1,254 @@ +'use strict'; + +/** + * Module dependencies. + */ +var path = require('path'), + config = require(path.resolve('./config/config')), + should = require('should'), + mongoose = require('mongoose'), + validator = require('validator'), + Tag = mongoose.model('Tag'); + +/** + * Globals + */ +var tag, tag2, tag3; + +/** + * Unit tests + */ +describe('Tag Model Unit Tests:', function() { + + before(function() { + tag = new Tag({ + 'label': 'Tag label' + }); + tag2 = new Tag({ + 'label': 'Tag label' + }); + tag3 = new Tag({ + 'label': 'Different tag label' + }); + }); + + describe('Method Save', function() { + it('should begin with no tags', function (done) { + Tag.find({}, function (err, tags) { + tags.should.have.length(0); + done(); + }); + }); + + it('should be able to save without problems', function (done) { + var _tag = new Tag(tag); + + _tag.save(function (err) { + should.not.exist(err); + _tag.remove(function (err) { + should.not.exist(err); + done(); + }); + }); + }); + + it('should be able to save without problems and have correct default values', function (done) { + var _tag = new Tag(tag); + + _tag.save(function (err) { + should.not.exist(err); + _tag.tribe.should.equal(false); + _tag.synonyms.should.be.an.Array(); + _tag.synonyms.should.be.empty(); + _tag.labelHistory.should.be.an.Array(); + _tag.labelHistory.should.be.empty(); + _tag.slugHistory.should.be.an.Array(); + _tag.slugHistory.should.be.empty(); + _tag.slug.should.equal('tag-label'); + _tag.count.should.eql(0); + //_tag.image.should.equal(false); + should.exist(_tag.color); + _tag.color.should.not.containEql('#'); + validator.isHexadecimal(_tag.color).should.equal(true); + should.exist(_tag.created); + + _tag.remove(function (err) { + should.not.exist(err); + done(); + }); + }); + }); + + it('should fail to save an existing tag again', function (done) { + var _tag = new Tag(tag); + var _tag2 = new Tag(tag2); + + _tag.save(function () { + _tag2.save(function (err) { + should.exist(err); + _tag.remove(function (err) { + should.not.exist(err); + done(); + }); + }); + }); + }); + + it('should confirm that saving tag model doesnt change the color', function (done) { + var _tag = new Tag(tag); + + _tag.save(function (err) { + should.not.exist(err); + var colorBefore = _tag.color; + _tag.label = 'test'; + _tag.save(function (err) { + var colorAfter = _tag.color; + colorBefore.should.equal(colorAfter); + _tag.remove(function (err) { + should.not.exist(err); + done(); + }); + }); + }); + }); + + it('should be able to save 2 different tags', function(done) { + var _tag = new Tag(tag); + var _tag3 = new Tag(tag3); + + _tag.save(function(err) { + should.not.exist(err); + _tag3.save(function(err) { + should.not.exist(err); + _tag3.remove(function(err) { + should.not.exist(err); + _tag.remove(function(err) { + should.not.exist(err); + done(); + }); + }); + }); + }); + }); + + }); + + describe('Slug generator', function() { + + it('should generate slug for label with accents and special symbols', function (done) { + var _tag = new Tag(tag); + + _tag.label = 'Hyvää päivää, herra Hüü!'; + _tag.save(function (err) { + should.not.exist(err); + _tag.slug.should.equal('hyvaa-paivaa-herra-huu'); + _tag.remove(function (err) { + should.not.exist(err); + done(); + }); + }); + }); + + it('should generate slug from unicode label', function (done) { + var _tag = new Tag(tag); + + _tag.label = 'unicode ♥'; + _tag.save(function (err) { + should.not.exist(err); + _tag.slug.should.equal('unicode-love'); + _tag.remove(function (err) { + should.not.exist(err); + done(); + }); + }); + }); + + }); + describe('Label Validation', function() { + + it('should be able to show an error when try to save without label', function (done) { + var _tag = new Tag(tag); + + _tag.label = ''; + _tag.save(function (err) { + should.exist(err); + done(); + }); + }); + + it('should be able to show an error when try to save with not allowed label', function (done) { + var _tag = new Tag(tag); + + _tag.label = config.illegalStrings[Math.floor(Math.random() * config.illegalStrings.length)]; + _tag.save(function (err) { + should.exist(err); + done(); + }); + }); + + it('should show error to save tag label beginning with .', function(done) { + var _tag = new Tag(tag); + + _tag.label = '.label'; + _tag.save(function(err) { + should.exist(err); + done(); + }); + }); + + it('should show error to save tag label end with .', function(done) { + var _tag = new Tag(tag); + + _tag.label = 'label.'; + _tag.save(function(err) { + should.exist(err); + done(); + }); + }); + + it('should save label with dot', function(done) { + var _tag = new Tag(tag); + + _tag.label = 'lab.el'; + _tag.save(function(err) { + should.not.exist(err); + done(); + }); + }); + + it('should show error to save label shorter than 2 character', function(done) { + var _tag = new Tag(tag); + + _tag.label = 's'; + _tag.save(function(err) { + should.exist(err); + done(); + }); + }); + + it('should show error saving a label without at least one alpha character', function(done) { + var _tag = new Tag(tag); + + _tag.label = '1234567890'; + _tag.save(function(err) { + should.exist(err); + done(); + }); + }); + + it('should show error saving a label longer than 255 characters', function(done) { + var _tag = new Tag(tag); + + _tag.label = 'l'.repeat(256); + _tag.save(function(err) { + should.exist(err); + done(); + }); + }); + + }); + + afterEach(function(done) { + Tag.remove().exec(done); + }); +}); diff --git a/modules/tags/tests/server/tags.server.routes.test.js b/modules/tags/tests/server/tags.server.routes.test.js new file mode 100644 index 0000000000..e88b712d2d --- /dev/null +++ b/modules/tags/tests/server/tags.server.routes.test.js @@ -0,0 +1,229 @@ +'use strict'; + +var should = require('should'), + request = require('supertest'), + path = require('path'), + mongoose = require('mongoose'), + User = mongoose.model('User'), + Tag = mongoose.model('Tag'), + config = require(path.resolve('./config/config')), + express = require(path.resolve('./config/lib/express')); + +/** + * Globals + */ +var app, agent, credentials, user, _user, tag, _tag, tribe, _tribe, tribeNonPublic, _tribeNonPublic; + +/** + * User routes tests + */ +describe('Tag CRUD tests', function () { + + before(function (done) { + // Get application + app = express.init(mongoose); + agent = request.agent(app); + + done(); + }); + + beforeEach(function (done) { + // Create user credentials + credentials = { + username: 'tr_username', + password: 'M3@n.jsI$Aw3$0m3' + }; + + // Create a new user + _user = { + firstName: 'Full', + lastName: 'Name', + displayName: 'Full Name', + email: 'test@test.com', + username: credentials.username, + displayUsername: credentials.username, + password: credentials.password, + provider: 'local', + public: true + }; + + // Create a new tag + _tag = { + label: 'Awesome Tag', + tribe: false + }; + + // Create a new tribe + _tribe = { + label: 'Awesome Tribe', + tribe: true + }; + + // Create a new non-public tribe + _tribeNonPublic = { + label: 'Non-public Tribe', + tribe: true, + public: false + }; + + user = new User(_user); + tag = new Tag(_tag); + tribe = new Tag(_tribe); + tribeNonPublic = new Tag(_tribeNonPublic); + + // Save a user to the test db + user.save(function (err) { + should.not.exist(err); + tag.save(function (err) { + should.not.exist(err); + tribe.save(function (err) { + should.not.exist(err); + tribeNonPublic.save(function (err) { + should.not.exist(err); + done(err); + }); + }); + }); + }); + }); + + it('should be able to read tribes when not logged in', function(done) { + + // Read tribes + agent.get('/api/tribes') + .expect(200) + .end(function(tribesReadErr, tribesReadRes) { + + tribesReadRes.body.should.have.length(1); + tribesReadRes.body[0].label.should.equal('Awesome Tribe'); + tribesReadRes.body[0].slug.should.equal('awesome-tribe'); + tribesReadRes.body[0].count.should.eql(0); + should.exist(tribesReadRes.body[0]._id); + + // `color` and `image` are published only for tribes + should.exist(tribesReadRes.body[0].color); + tribesReadRes.body[0].image.should.equal(false); + + + // These are at the model, but aren't exposed + should.not.exist(tribesReadRes.body[0].tribe); + should.not.exist(tribesReadRes.body[0].synonyms); + should.not.exist(tribesReadRes.body[0].labelHistory); + should.not.exist(tribesReadRes.body[0].slugHistory); + should.not.exist(tribesReadRes.body[0].created); + + // Call the assertion callback + return done(tribesReadErr); + }); + }); + + it('should be able to read tribes when logged in', function(done) { + agent.post('/api/auth/signin') + .send(credentials) + .expect(200) + .end(function(signinErr, signinRes) { + // Handle signin error + if (signinErr) done(signinErr); + + // Read tribes + agent.get('/api/tribes') + .expect(200) + .end(function(tribesReadErr, tribesReadRes) { + + tribesReadRes.body.should.have.length(1); + tribesReadRes.body[0].label.should.equal('Awesome Tribe'); + tribesReadRes.body[0].slug.should.equal('awesome-tribe'); + tribesReadRes.body[0].count.should.eql(0); + should.exist(tribesReadRes.body[0]._id); + + // `color` and `image` are published only for tribes + should.exist(tribesReadRes.body[0].color); + tribesReadRes.body[0].image.should.equal(false); + + + // These are at the model, but aren't exposed + should.not.exist(tribesReadRes.body[0].tribe); + should.not.exist(tribesReadRes.body[0].synonyms); + should.not.exist(tribesReadRes.body[0].labelHistory); + should.not.exist(tribesReadRes.body[0].slugHistory); + should.not.exist(tribesReadRes.body[0].created); + + // Call the assertion callback + return done(tribesReadErr); + }); + + }); + }); + + it('should be able to read tags when not logged in', function(done) { + + // Read tags + agent.get('/api/tags') + .expect(200) + .end(function(tagsReadErr, tagsReadRes) { + + tagsReadRes.body.should.have.length(1); + tagsReadRes.body[0].label.should.equal('Awesome Tag'); + tagsReadRes.body[0].slug.should.equal('awesome-tag'); + tagsReadRes.body[0].count.should.eql(0); + should.exist(tagsReadRes.body[0]._id); + + // `color` and `image` are published only for tribes + should.not.exist(tagsReadRes.body[0].color); + should.not.exist(tagsReadRes.body[0].image); + + // These are at the model, but aren't exposed + should.not.exist(tagsReadRes.body[0].tribe); + should.not.exist(tagsReadRes.body[0].synonyms); + should.not.exist(tagsReadRes.body[0].labelHistory); + should.not.exist(tagsReadRes.body[0].slugHistory); + should.not.exist(tagsReadRes.body[0].created); + + // Call the assertion callback + return done(tagsReadErr); + }); + }); + + it('should be able to read tags when logged in', function(done) { + agent.post('/api/auth/signin') + .send(credentials) + .expect(200) + .end(function(signinErr, signinRes) { + // Handle signin error + if (signinErr) done(signinErr); + + // Read tags + agent.get('/api/tags') + .expect(200) + .end(function(tagsReadErr, tagsReadRes) { + + tagsReadRes.body.should.have.length(1); + tagsReadRes.body[0].label.should.equal('Awesome Tag'); + tagsReadRes.body[0].slug.should.equal('awesome-tag'); + tagsReadRes.body[0].count.should.eql(0); + should.exist(tagsReadRes.body[0]._id); + + // `color` and `image` are published only for tribes + should.not.exist(tagsReadRes.body[0].color); + should.not.exist(tagsReadRes.body[0].image); + + // These are at the model, but aren't exposed + should.not.exist(tagsReadRes.body[0].tribe); + should.not.exist(tagsReadRes.body[0].synonyms); + should.not.exist(tagsReadRes.body[0].labelHistory); + should.not.exist(tagsReadRes.body[0].slugHistory); + should.not.exist(tagsReadRes.body[0].created); + + // Call the assertion callback + return done(tagsReadErr); + }); + + }); + }); + + afterEach(function (done) { + User.remove().exec(function() { + Tag.remove().exec(done); + }); + }); +}); diff --git a/modules/users/client/config/users.client.routes.js b/modules/users/client/config/users.client.routes.js index 412f0d0ffa..c72a42a574 100644 --- a/modules/users/client/config/users.client.routes.js +++ b/modules/users/client/config/users.client.routes.js @@ -148,6 +148,13 @@ requiresAuth: true, noScrollingTop: true }). + state('profile.tribes', { + url: '/tribes', + title: 'Profile tribes', + templateUrl: '/modules/users/views/profile/profile-view-tribes.client.view.html', + requiresAuth: true, + noScrollingTop: true + }). // When attempting to look at profile as non-authenticated user state('profile-signup', { @@ -158,7 +165,7 @@ // Auth routes state('signup', { - url: '/signup', + url: '/signup?tribe', title: 'Sign up', templateUrl: '/modules/users/views/authentication/signup.client.view.html', controller: 'SignupController', diff --git a/modules/users/client/controllers/authentication.client.controller.js b/modules/users/client/controllers/authentication.client.controller.js index dfcf547be5..a967871355 100644 --- a/modules/users/client/controllers/authentication.client.controller.js +++ b/modules/users/client/controllers/authentication.client.controller.js @@ -34,7 +34,7 @@ // Attach user to $analytics calls from now on $analytics.setUsername(Authentication.user._id); - + $analytics.eventTrack('login.success', { category: 'authentication', label: 'Login success' diff --git a/modules/users/client/controllers/profile-edit-tags.client.controller.js b/modules/users/client/controllers/profile-edit-tags.client.controller.js new file mode 100644 index 0000000000..38e05e318a --- /dev/null +++ b/modules/users/client/controllers/profile-edit-tags.client.controller.js @@ -0,0 +1,41 @@ +(function() { + 'use strict'; + + angular + .module('users') + .controller('ProfileEditTagsController', ProfileEditTagsController); + + /* @ngInject */ + function ProfileEditTagsController($scope, Users, Authentication, messageCenterService) { + + // ViewModel + var vm = this; + + // Copy user to make a temporary buffer for changes. + // Prevents changes remaining here when cancelling profile editing. + vm.user = new Users(Authentication.user); + + // Exposed + vm.updateUserProfile = updateUserProfile; + + /** + * Update a user profile + */ + function updateUserProfile(isValid) { + if(isValid) { + vm.user.$update(function(response) { + Authentication.user = response; + $scope.$emit('userUpdated'); + messageCenterService.add('success', 'Hospitality networks updated.'); + }, function(response) { + messageCenterService.add('danger', response.data.message || 'Something went wrong. Please try again!' , { timeout: 10000 }); + }); + } + else { + messageCenterService.add('danger', 'Please fix errors from your profile and try again.' , { timeout: 10000 }); + } + } + + } + +})(); diff --git a/modules/users/client/controllers/profile.client.controller.js b/modules/users/client/controllers/profile.client.controller.js index 983361af57..e24ac8c6f0 100644 --- a/modules/users/client/controllers/profile.client.controller.js +++ b/modules/users/client/controllers/profile.client.controller.js @@ -18,6 +18,10 @@ vm.profile = profile; vm.contact = contact; + // Tags & Tribes + // These are filled at with `initMemberships()` at `action()` + vm.memberships = {}; + // Exposed to the view vm.hasConnectedAdditionalSocialAccounts = hasConnectedAdditionalSocialAccounts; vm.isConnectedSocialAccount = isConnectedSocialAccount; @@ -32,6 +36,9 @@ */ function activate() { + // Fill `vm.memberships` + initMemberships(); + // When on small screen... if(angular.element('body').width() <= 480) { // By default we land to `about` tab of this controller @@ -72,6 +79,30 @@ return isNaN(vm.profile.extSitesWS) ? !1 : (x = parseFloat(vm.profile.extSitesWS), (0 | x) === x); } + /** + * Construct Tags & Tribes object + */ + function initMemberships() { + var memberships = { + 'tribes': { + 'is': [], + 'likes': [] + }, + 'tags': { + 'is': [], + 'likes': [] + } + }; + // Construct tribes & tags + if(profile && profile.member && profile.member.length > 0) { + for (var i = 0, len = profile.member.length; i < len; i++) { + // Sort to right category... + memberships[ (profile.member[i].tag.tribe ? 'tribes' : 'tags') ][ profile.member[i].relation ].push(profile.member[i].tag); + } + } + vm.memberships = memberships; + } + /** * Open avatar modal (bigger photo) */ diff --git a/modules/users/client/controllers/signup.client.controller.js b/modules/users/client/controllers/signup.client.controller.js index dc5059678b..22e564daa2 100644 --- a/modules/users/client/controllers/signup.client.controller.js +++ b/modules/users/client/controllers/signup.client.controller.js @@ -6,17 +6,87 @@ .controller('SignupController', SignupController); /* @ngInject */ - function SignupController($scope, $http, $state, $stateParams, $uibModal, Authentication, messageCenterService) { + function SignupController($scope, $rootScope, $timeout, $http, $q, $state, $stateParams, $uibModal, $window, Authentication, UserTagsService, messageCenterService, TribeService, TribesService) { + + var unloadConfirmActivated = false; // View Model var vm = this; - // If user is already signed in then redirect to search page - if(Authentication.user) $state.go('search'); - + vm.credentials = {}; + vm.step = 1; vm.isLoading = false; vm.submitSignup = submitSignup; vm.openRules = openRules; + vm.tribe = null; + vm.suggestedTribes = []; + vm.suggestionsLimit = 3; // How many tribes suggested (including possible referred tribe) + + activate(); + + /** + * Initalize controller + */ + function activate() { + + // If user is already signed in then redirect to search page + if(Authentication.user) { + $state.go('search'); + return; + } + + // Fetch information about referred tribe + if($stateParams.tribe && $stateParams.tribe !== '') { + TribeService.get({ + tribeSlug: $stateParams.tribe + }) + .then(function(tribe) { + + // Got it + if(tribe._id) { + vm.tribe = tribe; + // Show one less suggestion since we have referred tribe + vm.suggestionsLimit--; + } + + // Fetch suggested tribes without this tribe + getSuggestedTribes(tribe._id || null); + + }); + } + else { + getSuggestedTribes(); + } + } + + /** + * Get suggested tribes + * + * @param withoutTribeId {String} Tribe id to take away from array + */ + function getSuggestedTribes(withoutTribeId) { + TribesService.query({ + // If we have referred tribe, load one extra suggestion in case we load referred tribe among suggestions + limit: (vm.tribe ? (parseInt(vm.suggestionsLimit + 1)) : vm.suggestionsLimit) + }, + function(tribes) { + var suggestedTribes = []; + + // Make sure to remove referred tribe from suggested tribes so that we won't have dublicates + // We'll always show 2 or 3 of these at the frontend depending on if referred tribe is shown. + if(withoutTribeId) { + angular.forEach(tribes, function(suggestedTribe) { + if(suggestedTribe._id !== withoutTribeId) { + this.push(suggestedTribe); + } + }, suggestedTribes); + vm.suggestedTribes = suggestedTribes; + } + else { + vm.suggestedTribes = tribes; + } + }); + } /** * Register @@ -24,26 +94,55 @@ function submitSignup() { vm.isLoading = true; - $http.post('/api/auth/signup', vm.credentials).success(function(newUser) { - vm.isLoading = false; - // If successful we assign the response to the global user model - Authentication.user = newUser; - $scope.$emit('userUpdated'); - }).error(function(error) { - vm.isLoading = false; - messageCenterService.add('danger', error.message); - }); + $http + .post('/api/auth/signup', vm.credentials) + .success(function(newUser) { + + // If there is referred tribe, add user to that next up + if(vm.tribe && vm.tribe._id) { + UserTagsService.post({ + id: vm.tribe._id, + relation: 'is' + }, + function(data) { + updateUser(data.user || newUser); + vm.isLoading = false; + vm.step = 2; + }); + } + // No tribe to join, just continue + else { + updateUser(newUser); + vm.isLoading = false; + vm.step = 2; + } + }) + .error(function(error) { + vm.isLoading = false; + messageCenterService.add('danger', error.message || 'Something went wrong.'); + }); + } + + /** + * Assign the response to the global user model + * + * @param user {object} User object to be put to Authentication + * @todo move this to Authentication service + */ + function updateUser(user) { + Authentication.user = user; + $rootScope.$broadcast('userUpdated'); } /** * Open rules modal */ function openRules($event) { - - if($event) $event.preventDefault(); - + if($event) { + $event.preventDefault(); + } $uibModal.open({ - templateUrl: 'rules.client.modal.html', //inline at signup template + templateUrl: '/modules/users/views/authentication/rules-modal.client.view.html', controller: function ($scope, $uibModalInstance) { $scope.closeRules = function () { $uibModalInstance.dismiss('cancel'); diff --git a/modules/users/client/less/signup-tribe-suggestions.less b/modules/users/client/less/signup-tribe-suggestions.less new file mode 100644 index 0000000000..021e3401c1 --- /dev/null +++ b/modules/users/client/less/signup-tribe-suggestions.less @@ -0,0 +1,65 @@ + +// Suggested tribes list +.signup-tribe-suggestions { + h4 { + margin-top: 50px; + margin-bottom: 10px; + padding: 0; + text-align: center; + } + .tribe { + } + .tribe-content { + display: flex; + justify-content: space-between; + align-items: center; + flex-direction: row; + color: #fff; + padding: 0 20px; + min-height: 120px; + margin: 0; + background: linear-gradient(to right, rgba(0,0,0,0.65) 0%, rgba(0,0,0,0) 100%); + } + .tribe-label { + margin: 0; + padding: 0; + font-size: 30px; + line-height: 1; + } + // Checkbox button + .tribe-join { + flex-shrink: 0; + display: block; + border: 3px solid #fff; + color: #fff; + text-align: center; + background: rgba(255,255,255,.3); + transition: background ease-in-out 0.1s; + padding: 0; + margin: 0; + border-radius: 50%; + .square(40px); + font-size: 20px; + box-shadow: 1px 1px 2px rgba(0,0,0,.2); + outline: none; + // Hide labels: + span { + display: none; + } + [class^="icon-"]:before, + [class*=" icon-"]:before { + opacity: 0; + transition: opacity ease-in-out 0.1s; + } + &.btn-active { + background: @brand-primary; + } + &.btn-active, + &:hover { + [class^="icon-"]:before, + [class*=" icon-"]:before { + opacity: 1; + } + } + } +} diff --git a/modules/users/client/less/signup.less b/modules/users/client/less/signup.less new file mode 100644 index 0000000000..4c6c81bb08 --- /dev/null +++ b/modules/users/client/less/signup.less @@ -0,0 +1,72 @@ + +// Form +.signup-form-steps { + position: relative; + //min-height: 600px; +} +.signup-form-step { + //position: absolute; + width: 100%; + opacity: 1; + &.ng-hide-add, + &.ng-hide-remove { + //transition: all 0.2s linear; + } + &.ng-hide { + opacity: 0; + } +} +.signup-form-step-animate-wrapper { + position: relative; + height: 600px; + overflow: hidden; +} + +// Pre-fetched tribe under "Join Trustroots" title +.signup-tribe { + margin-bottom: 0; + height: 30px; + overflow: hidden; + font-size: 18px; + &.ng-hide-add, + &.ng-hide-remove { + transition: all ease-in-out 0.1s; + } + &.ng-hide { + height: 0; + } +} + +// 1-2-3 steps +.signup-steps { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + margin: 30px 0 40px 0; +} +// Horizontal line between step indicators +.signup-step-line { + display: block; + width: 25px; + height: 2px; + margin: 0 15px 30px 15px; + background-color: @gray-lighter; +} +.signup-step-indicator { + margin: 0 auto 10px auto; + font-size: 19px; + clear: both; + line-height: 30px; + .square(30px); + border-radius: 50%; + background-color: @gray-lighter; + color: @gray-light; +} +.signup-step-active { + .signup-step-indicator { + background-color: @brand-primary; + color: #fff; + } +} +//font-brand-semibold diff --git a/modules/users/client/services/users-tags.client.service.js b/modules/users/client/services/users-tags.client.service.js new file mode 100644 index 0000000000..98117c7f25 --- /dev/null +++ b/modules/users/client/services/users-tags.client.service.js @@ -0,0 +1,23 @@ +(function() { + 'use strict'; + + angular + .module('users') + .factory('UserTagsService', UserTagsService); + + /* @ngInject */ + function UserTagsService($resource) { + return $resource('/api/users/tags', {}, { + update: { + method: 'PUT' + }, + delete: { + method: 'DELETE' + }, + post: { + method: 'POST' + } + }); + } + +})(); diff --git a/modules/users/client/views/authentication/rules-modal.client.view.html b/modules/users/client/views/authentication/rules-modal.client.view.html new file mode 100644 index 0000000000..9d5b37206d --- /dev/null +++ b/modules/users/client/views/authentication/rules-modal.client.view.html @@ -0,0 +1,8 @@ + + + diff --git a/modules/users/client/views/authentication/signup.client.view.html b/modules/users/client/views/authentication/signup.client.view.html index 5a2ccf1862..6420b7b7c2 100644 --- a/modules/users/client/views/authentication/signup.client.view.html +++ b/modules/users/client/views/authentication/signup.client.view.html @@ -1,19 +1,40 @@
    - -
    diff --git a/modules/users/client/views/profile/profile-edit.client.view.html b/modules/users/client/views/profile/profile-edit.client.view.html index e137367fb4..5125a6d1b7 100644 --- a/modules/users/client/views/profile/profile-edit.client.view.html +++ b/modules/users/client/views/profile/profile-edit.client.view.html @@ -18,6 +18,7 @@ diff --git a/modules/users/client/views/profile/profile-view-about.client.view.html b/modules/users/client/views/profile/profile-view-about.client.view.html index 6914eca8e7..f347164aae 100644 --- a/modules/users/client/views/profile/profile-view-about.client.view.html +++ b/modules/users/client/views/profile/profile-view-about.client.view.html @@ -37,7 +37,21 @@ - - +
    + + + + + +
    +
    + Tribes +
    +
    +
    +
    +
    + +
    diff --git a/modules/users/client/views/profile/profile-view-tribes.client.view.html b/modules/users/client/views/profile/profile-view-tribes.client.view.html new file mode 100644 index 0000000000..a8ac314926 --- /dev/null +++ b/modules/users/client/views/profile/profile-view-tribes.client.view.html @@ -0,0 +1,27 @@ +
    +
    + + + +
    + +
    diff --git a/modules/users/client/views/profile/profile-view.client.view.html b/modules/users/client/views/profile/profile-view.client.view.html index 5efa64670f..496cbd294c 100644 --- a/modules/users/client/views/profile/profile-view.client.view.html +++ b/modules/users/client/views/profile/profile-view.client.view.html @@ -119,7 +119,6 @@

    @{{ -
    diff --git a/modules/users/server/controllers/users/users.authentication.server.controller.js b/modules/users/server/controllers/users/users.authentication.server.controller.js index a9f6fc580e..d09589a5fb 100644 --- a/modules/users/server/controllers/users/users.authentication.server.controller.js +++ b/modules/users/server/controllers/users/users.authentication.server.controller.js @@ -8,6 +8,7 @@ var _ = require('lodash'), errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')), analyticsHandler = require(path.resolve('./modules/core/server/controllers/analytics.server.controller')), emailsHandler = require(path.resolve('./modules/core/server/controllers/emails.server.controller')), + profileHandler = require(path.resolve('./modules/users/server/controllers/users/users.profile.server.controller')), config = require(path.resolve('./config/config')), passport = require('passport'), nodemailer = require('nodemailer'), @@ -54,7 +55,7 @@ exports.signup = function(req, res) { // Save user function(token, done) { - // For security measurement we remove the roles from the req.body object + // For security measurement we remove the roles from the `req.body` object delete req.body.roles; // These shouldn't be there neither @@ -154,10 +155,7 @@ exports.signup = function(req, res) { req.login(user, function(err) { if (!err) { // Remove sensitive data befor sending user - user = user.toObject(); - delete user.emailToken; - delete user.password; - delete user.salt; + user = profileHandler.sanitizeProfile(user); res.json(user); } done(err); @@ -166,6 +164,7 @@ exports.signup = function(req, res) { ], function(err) { if (err) { + console.log(err); return res.status(400).send({ message: errorHandler.getErrorMessage(err) }); diff --git a/modules/users/server/controllers/users/users.profile.server.controller.js b/modules/users/server/controllers/users/users.profile.server.controller.js index 1361680c80..fb4c8fc632 100644 --- a/modules/users/server/controllers/users/users.profile.server.controller.js +++ b/modules/users/server/controllers/users/users.profile.server.controller.js @@ -8,6 +8,8 @@ var _ = require('lodash'), errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')), textProcessor = require(path.resolve('./modules/core/server/controllers/text-processor.server.controller')), analyticsHandler = require(path.resolve('./modules/core/server/controllers/analytics.server.controller')), + tribesHandler = require(path.resolve('./modules/tags/server/controllers/tribes.server.controller')), + tagsHandler = require(path.resolve('./modules/tags/server/controllers/tags.server.controller')), emailsHandler = require(path.resolve('./modules/core/server/controllers/emails.server.controller')), config = require(path.resolve('./config/config')), nodemailer = require('nodemailer'), @@ -21,7 +23,8 @@ var _ = require('lodash'), os = require('os'), mmmagic = require('mmmagic'), multerConfig = require(path.resolve('./config/lib/multer')), - User = mongoose.model('User'); + User = mongoose.model('User'), + Tag = mongoose.model('Tag'); // Replace mailer with Stub mailer transporter // Stub transport does not send anything, it builds the mail stream into a single Buffer and returns @@ -57,6 +60,7 @@ exports.userProfileFields = [ 'updated', 'avatarSource', 'avatarUploaded', + 'member', 'extSitesBW', // BeWelcome username 'extSitesCS', // CouchSurfing username 'extSitesWS', // WarmShowers username @@ -356,6 +360,7 @@ exports.update = function(req, res) { // For security measurement remove these from the req.body object // Users aren't allowed to modify these directly + delete req.body.member; delete req.body.public; delete req.body.created; delete req.body.seen; @@ -415,12 +420,6 @@ exports.update = function(req, res) { if (err) { done(err); } else { - user = user.toObject(); - delete user.salt; - delete user.password; - delete user.resetPasswordToken; - delete user.resetPasswordExpires; - delete user.emailToken; done(null, token, user); } }); @@ -507,6 +506,7 @@ exports.update = function(req, res) { // Return user function(user, done) { + user = exports.sanitizeProfile(user); return res.json(user); }, @@ -523,7 +523,19 @@ exports.update = function(req, res) { * Show the profile of the user */ exports.getUser = function(req, res) { - res.json(req.profile || {}); + // Not a profile of currently authenticated user: + if( req.profile && !req.user._id.equals(req.profile._id) ) { + // 'public' isn't needed at frontend. + // We had to bring it until here trough + // ACL policy since it's needed there. + // `req.profile.toObject()` is done at sanitizeProfile() before this. + delete req.profile.public; + res.json(req.profile); + } + // Profile of currently authenticated user: + else { + res.json(req.profile || {}); + } }; /** @@ -593,41 +605,29 @@ exports.userByUsername = function(req, res, next, username) { } // Proper 'username' value required - if(typeof username !== 'string' || username === '' || username.length < 3) { + if(typeof username !== 'string' || username.trim() === '' || username.length < 3) { return res.status(400).send({ message: 'Valid username required.' }); } - /** - * Got userId instead? Make it work! - * This is here because previously some API paths used userId instead of username - * This ensures they work during the transition - * Length must be 24, otherwise we'll get true for 12 characters long usernames - * Using $or here in case we make false positive with 24 characters long usernames - */ - if(username.length === 24 && mongoose.Types.ObjectId.isValid(username)) { - console.warn('userByUsername: Found user id when expecting username.'); - query = { - $or: [ - { _id: username }, - { username: username.toLowerCase() } - ] - }; - } - else { - query = { - username: username.toLowerCase() - }; - } - async.waterfall([ // Find user function(done) { - User.findOne( - query, - exports.userProfileFields + ' public').exec(function(err, profile) { + User + .findOne({ + username: username.toLowerCase() + }, + exports.userProfileFields + ' public' + ) + .populate({ + path: 'member.tag', + select: tribesHandler.tribeFields + ' tribe', // Loads `tribe` fields for both `tribe:true` and `tribe:false` objects + model: 'Tag', + options: { sort: { count: -1 }} + }) + .exec(function(err, profile) { // Something went wrong if (err) { @@ -641,7 +641,7 @@ exports.userByUsername = function(req, res, next, username) { } // User's own profile, okay to send with public value in it else if( (profile && req.user) && req.user._id.equals(profile._id) ) { - done(err, profile.toObject()); + done(err, profile); } // Not own profile and not public else if( (profile && req.user) && (!req.user._id.equals(profile._id) && !profile.public) ) { @@ -650,11 +650,8 @@ exports.userByUsername = function(req, res, next, username) { }); } else { - // This isn't needed at frontend - delete profile.public; - // Transform profile into object so that we can add new fields to it - done(err, profile.toObject()); + done(err, profile); } }); @@ -662,11 +659,7 @@ exports.userByUsername = function(req, res, next, username) { // Sanitize & return profile function(profile, done) { - - // We're sanitizing this already on saving/updating the profile, but here we do it again just in case. - if(profile.description) profile.description = sanitizeHtml(profile.description, textProcessor.sanitizeOptions); - - req.profile = profile; + req.profile = exports.sanitizeProfile(profile, req.user); next(); } @@ -675,3 +668,194 @@ exports.userByUsername = function(req, res, next, username) { }); }; + + +/** + * Sanitize profile before sending it to frontend + * - Ensures certain fields are removed before publishing + * - Collects tribe and tag id's into one simple array + * - Removes tag and tribe references that don't exist anymore (i.e. they are removed from `tags` table but reference ID remains in the user's table) + * - Sanitize description in case + */ +exports.sanitizeProfile = function(profile, authenticatedUser) { + if(!profile) { + console.warn('sanitizeProfile() needs profile data to sanitize.'); + return; + } + + profile = profile.toObject(); + + // We're sanitizing this already on saving/updating the profile, but here we do it again just in case. + if(profile.description) profile.description = sanitizeHtml(profile.description, textProcessor.sanitizeOptions); + + // Remove tribes/tags without reference object (= they've been deleted from tags table) + if(profile.member && profile.member.length > 0) { + profile.member = _.reject(profile.member, function(o) { return !o.tag; }); + } + + // Create simple arrays of tag and tribe id's + profile.memberIds = []; + if(profile.member && profile.member.length > 0) { + profile.member.forEach(function(obj) { + // If profile's `member.tag` path was populated + if(obj.tag && obj.tag._id) { + profile.memberIds.push(obj.tag._id.toString()); + } + // If profile's `member.tag` path wasn't populated, tag is ObjectId + else if(obj.tag) { + profile.memberIds.push(obj.tag.toString()); + } + }); + } + + // Profile does not belong to currently authenticated user + // Remove data we don't need from other member's profile + if(!authenticatedUser || !authenticatedUser._id.equals(profile._id)) { + delete profile.updated; + } + + // This info totally shouldn't be at the frontend + // + // - They're not included on `exports.userProfileFields`, + // but this is an additional layer of security + // + // - This step is required by `core.server.controller.js ` + // as it would otherwise send authenticated user's profile "as is" + delete profile.resetPasswordToken; + delete profile.resetPasswordExpires; + delete profile.emailToken; + delete profile.password; + delete profile.salt; + + return profile; +}; + +/** + * Join tribe or tag + */ +exports.modifyUserTag = function(req, res) { + + // Relation (`is`|`likes`|`leave`) should be present + if(!req.body.relation || typeof req.body.relation !== 'string' || ['is', 'likes', 'leave'].indexOf(req.body.relation) === -1) { + return res.status(400).send({ + message: 'Missing relation info.' + }); + } + + // Not a valid ObjectId + if(!req.body.id || !mongoose.Types.ObjectId.isValid(req.body.id)) { + return res.status(400).send({ + message: errorHandler.getErrorMessageByKey('invalid-id') + }); + } + + if(!req.user) { + return res.status(403).send({ + message: errorHandler.getErrorMessageByKey('forbidden') + }); + } + + // Joining (is/likes) or leaving? + var joining = (req.body.relation !== 'leave') ? true : false; + + async.waterfall([ + + // Check user is a member of this tag/tribe + function(done) { + + // Search for existing occurance with provided tag/tribe id + var isMember = (req.user.member && req.user.member.length) ? _.find(req.user.member, function(membership) { + return membership.tag.equals(req.body.id); + }) : false; + + // Return error if "is joining + is a member" OR "is leaving + isn't a member" + if((isMember && joining) || (!isMember && !joining)) { + return res.status(409).send({ + message: errorHandler.getErrorMessageByKey('conflict') + }); + } + else { + done(null); + } + }, + + // Update tribe/tag counter + function(done) { + Tag.findByIdAndUpdate(req.body.id, { + $inc: { + count: (joining ? 1 : -1) + } + }, { + safe: false, // @link http://stackoverflow.com/a/4975054/1984644 + new: true // get the updated document in return + }) + .exec(function(err, tag) { + done(err, tag); + }); + }, + + // Add tribe/tag to user's object + function(tag, done) { + + // Mongo query to perform + var query = (joining) ? + // When joining: + { + $push: { + member: { + tag: tag._id, + relation: req.body.relation, + since: Date.now() + } + } + } : + // When leaving: + { + $pull: { + member: { + tag: tag._id + } + } + }; + + User.findByIdAndUpdate(req.user._id, query, { + safe: true, // @link http://stackoverflow.com/a/4975054/1984644 + new: true // get the updated document in return + }) + .exec(function(err, user) { + done(err, tag, user); + }); + }, + + // Done, output new tribe/tag + user objects + function(tag, user, done) { + + // Preserver only public fields + // Array of keys to preserve in tag/tribe before sending it to the frontend + var pickFields = tag.tribe ? tribesHandler.tribeFields.split(' ') : tagsHandler.tagFields.split(' '); + var pickedTag = _.pick(tag, pickFields); + + // Sanitize user profile + user = exports.sanitizeProfile(user, req.user); + + var message = ''; + message += (joining ? 'Joined' : 'Left'); + message += ' ' + ((tag && tag.tribe) ? 'tribe' : 'tag') + '.'; + + return res.send({ + message: message, + tag: pickedTag, + user: user + }); + } + + // Catch errors + ], function(err) { + if(err) { + return res.status(400).send({ + message: 'Failed to join tribe/tag.' + }); + } + }); + +}; diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index 3837ff8ec8..9cdaeba934 100755 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -3,7 +3,9 @@ /** * Module dependencies. */ -var crypto = require('crypto'), +var path = require('path'), + config = require(path.resolve('./config/config')), + crypto = require('crypto'), mongoose = require('mongoose'), uniqueValidation = require('mongoose-beautiful-unique-validation'), validator = require('validator'), @@ -44,15 +46,38 @@ var validatePassword = function(password) { var validateUsername = function(username) { var usernameRegex = /^(?=.*[0-9a-z])[0-9a-z.\-_]{3,34}$/, - dotsRegex = /^[^.](?!.*(\.)\1).*[^.]$/, - illegalUsernames = ['trustroots', 'trust', 'roots', 're', 're:', 'fwd', 'fwd:', 'reply', 'admin', 'administrator', 'user', 'profile', 'password', 'username', 'unknown', 'anonymous', 'home', 'signup', 'signin', 'edit', 'settings', 'password', 'username', 'user', ' demo', 'test', 'support', 'networks', 'photo', 'account', 'api', 'modify']; + dotsRegex = /^[^.](?!.*(\.)\1).*[^.]$/; return (this.provider !== 'local' || ( username && usernameRegex.test(username) && - illegalUsernames.indexOf(username) < 0) && - dotsRegex.test(username) - ); + config.illegalStrings.indexOf(username) < 0) && + dotsRegex.test(username) + ); }; +/** + * SubSchema for `User` schema's `member` array + * This could be defined directly under `UserSchema` as well, + * but then we'd have extra `_id`'s hanging around. + */ +var UserMemberSchema = mongoose.Schema({ + tag: { + type: Schema.Types.ObjectId, + ref: 'Tag', + required: true + }, + relation: { + type: String, + enum: ['is', 'likes'], + default: 'is', + required: true + }, + since: { + type: Date, + default: Date.now, + required: true + } +}, { _id : false }); + /** * User Schema */ @@ -189,7 +214,7 @@ var UserSchema = new Schema({ }, avatarSource: { type: String, - enum: ['none','gravatar','facebook','local'], + enum: ['none', 'gravatar', 'facebook', 'local'], default: 'gravatar' }, avatarUploaded: { @@ -217,6 +242,10 @@ var UserSchema = new Schema({ }, resetPasswordExpires: { type: Date + }, + /* Tags & Tribes user is member of */ + member: { + type: [UserMemberSchema] } }); diff --git a/modules/users/server/policies/users.server.policy.js b/modules/users/server/policies/users.server.policy.js index 8acd901d64..b2edbcbfa1 100644 --- a/modules/users/server/policies/users.server.policy.js +++ b/modules/users/server/policies/users.server.policy.js @@ -34,6 +34,9 @@ exports.invokeRolesPolicies = function() { }, { resources: '/api/auth/accounts', permissions: [] + }, { + resources: '/api/users/tags', + permissions: [] }] }, { roles: ['user'], @@ -73,6 +76,9 @@ exports.invokeRolesPolicies = function() { }, { resources: '/api/auth/github/callback', permissions: ['get'] + }, { + resources: '/api/users/tags', + permissions: ['post'] }] }]); }; diff --git a/modules/users/server/routes/users.server.routes.js b/modules/users/server/routes/users.server.routes.js index e5cd132a30..bf55d70a41 100644 --- a/modules/users/server/routes/users.server.routes.js +++ b/modules/users/server/routes/users.server.routes.js @@ -17,6 +17,9 @@ module.exports = function(app) { app.route('/api/users-avatar').all(usersPolicy.isAllowed) .post(users.avatarUploadField, users.avatarUpload); + app.route('/api/users/tags').all(usersPolicy.isAllowed) + .post(users.modifyUserTag); + app.route('/api/users/mini/:userId').all(usersPolicy.isAllowed) .get(users.getMiniUser); diff --git a/modules/users/tests/server/user.server.model.tests.js b/modules/users/tests/server/user.server.model.tests.js index 406d6174b1..1417cdb091 100644 --- a/modules/users/tests/server/user.server.model.tests.js +++ b/modules/users/tests/server/user.server.model.tests.js @@ -3,7 +3,9 @@ /** * Module dependencies. */ -var should = require('should'), +var path = require('path'), + config = require(path.resolve('./config/config')), + should = require('should'), mongoose = require('mongoose'), User = mongoose.model('User'); @@ -190,6 +192,16 @@ describe('User Model Unit Tests:', function() { }); }); + it('should be able to show an error when try to save with not allowed username', function (done) { + var _user = new User(user); + + _user.username = config.illegalStrings[Math.floor(Math.random() * config.illegalStrings.length)]; + _user.save(function(err) { + should.exist(err); + done(); + }); + }); + it('should show error to save username end with .', function(done) { var _user = new User(user); @@ -230,10 +242,10 @@ describe('User Model Unit Tests:', function() { }); }); - it('should show error saving a username longer than 32 characters', function(done) { + it('should show error saving a username longer than 34 characters', function(done) { var _user = new User(user); - _user.username = '1234567890' + '1234567890' + '1234567890' + '1234a'; + _user.username = 'l'.repeat(35); _user.save(function(err) { should.exist(err); done(); diff --git a/modules/users/tests/server/user.server.routes.tests.js b/modules/users/tests/server/user.server.routes.tests.js index 34582e71b5..17bfb19352 100644 --- a/modules/users/tests/server/user.server.routes.tests.js +++ b/modules/users/tests/server/user.server.routes.tests.js @@ -1071,6 +1071,36 @@ describe('User CRUD tests', function () { }); }); + it('should be able to join a tribe with "is" relation', function (done) { + agent.post('/api/auth/signin') + .send(credentials) + .expect(200) + .end(function (signinErr, signinRes) { + // Handle signin error + if (signinErr) { + return done(signinErr); + } + + agent.post('/api/users/tags') + .send({ + tag: '' + relation: 'is' + }) + .expect(200) + .end(function (userInfoErr, userInfoRes) { + + // Handle change profile picture error + if (userInfoErr) { + return done(userInfoErr); + } + + console.log(userInfoRes.body); + + return done(); + }); + }); + }); + afterEach(function (done) { User.remove().exec(done); }); diff --git a/package.json b/package.json index d2e3199f49..79d9cdfaf0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "trustroots", "description": "Trustroots.org", - "version": "0.3.1", + "version": "0.3.2", "author": "https://www.trustroots.org/foundation", "private": true, "repository": { @@ -87,7 +87,9 @@ "mongodb": "~2.1.7", "mongoose": "4.4.11", "mongoose-beautiful-unique-validation": "~2.0.3", + "mongoose-integer": "~0.1.1", "mongoose-paginate": "~5.0.0", + "mongoose-url-slugs": "~0.2.1", "morgan": "~1.7.0", "multer": "~1.1.0", "nodemailer": "~2.3.0", @@ -96,10 +98,12 @@ "passport-github": "~1.1.0", "passport-local": "~1.0.0", "passport-twitter": "~1.0.3", + "randomcolor": "~0.4.4", "run-sequence": "~1.1.5", "sanitize-html": "~1.11.4", "segfault-handler": "~1.0.0", "serve-favicon": "~2.3.0", + "speakingurl": "~9.0.0", "swig": "~1.4.2", "validator": "~5.2.0", "yargs": "~4.4.0"