From 4d4592a70aa56b1f5f88525023d9871d452136d9 Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Wed, 7 Mar 2018 19:00:05 +0200 Subject: [PATCH 01/12] fix UI Bug #708 : change title in edit camp page --- locales/he/camps.json | 1 + views/pages/camps/edit.jade | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/locales/he/camps.json b/locales/he/camps.json index 6eba309c9..435b4b341 100644 --- a/locales/he/camps.json +++ b/locales/he/camps.json @@ -98,6 +98,7 @@ "send_request": "שלח בקשה", "close": "סגור", "website_publication": "פרסום באתר", + "midburn_website_publication": "פרסום המחנה באתר מידבן", "contact_person_id": "איש קשר", "contact_person_name": "שם איש קשר", "contact_person_email": "אימייל איש קשר", diff --git a/views/pages/camps/edit.jade b/views/pages/camps/edit.jade index 7554ded81..5c6d676d6 100644 --- a/views/pages/camps/edit.jade +++ b/views/pages/camps/edit.jade @@ -57,7 +57,7 @@ block content label(for='camp_desc_en')=t('camps:edit.desc_en') textarea.form-control(id='camp_desc_en', dir='ltr', name='camp_desc_en') #{camp.camp_desc_en} if(isCamp) - h4=t('camps:new.website_publication') + h4=t('camps:new.midburn_website_publication') .camp-publication.panel .panel-body .information From c2179bc3c76b900f4c230f0892cd6890ec65e501 Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Wed, 7 Mar 2018 19:03:01 +0200 Subject: [PATCH 02/12] fix UI Bugs #711 & #712 (camp page) --- locales/he/camps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/locales/he/camps.json b/locales/he/camps.json index 435b4b341..48715413b 100644 --- a/locales/he/camps.json +++ b/locales/he/camps.json @@ -192,6 +192,7 @@ "edit": "ערוך מחנה", "published": "פורסם", "draft": "טיוטא", + "accept_new_members": "פתוח/סגור למצטרפים חדשים?", "status": "סטטוס", "status_open": "פתוח", "status_closed": "סגור", From f5b5d5b9c29fad886a54586040c9c72eb77e1af4 Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Wed, 7 Mar 2018 19:05:17 +0200 Subject: [PATCH 03/12] fix UI Bugs #711 & #712 (camp page) --- views/pages/camps/camp.jade | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/views/pages/camps/camp.jade b/views/pages/camps/camp.jade index 8098844c8..6c01f2858 100644 --- a/views/pages/camps/camp.jade +++ b/views/pages/camps/camp.jade @@ -112,13 +112,7 @@ block content .col-xs-12.col-md-6 ul.list-group li.list-group-item - span=t('camps:edit.publication') - if camp.web_published - span.badge.bg__green=t('camps:camps.yes') - else - span.badge.bg__red=t('camps:camps.no') - li.list-group-item - span=t('camps:camps.status') + span=t('camps:camps.accept_new_members') if camp.status == 'open' span.badge.bg__teal=t('camps:camps.status_open') else if camp.status == 'closed' From c9daaacceb394f5e6345e6a0299885c1127cc909 Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Wed, 7 Mar 2018 19:05:43 +0200 Subject: [PATCH 04/12] UI Bug fix #710 - remove publish button --- views/pages/camps/edit.jade | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/views/pages/camps/edit.jade b/views/pages/camps/edit.jade index 5c6d676d6..c621037f3 100644 --- a/views/pages/camps/edit.jade +++ b/views/pages/camps/edit.jade @@ -100,15 +100,7 @@ block content // set checkbox status var checkbox = document.getElementById("camp_accept_families"); checkbox.checked = checkbox.attributes.checked.value == "1" ? true:false - if(!isNew) - .col-md-4 - .col-xs-12 - label(for='edit_camp_web_published') #{t('camps:edit.publication')}: - if camp.web_published == '1' - span.badge.bg__green=t('camps:camps.yes') - button.Btn.Btn__sm.bg__teal(id='camp_edit_unpublish')=t('camps:edit.unpublish') - else - span.badge.bg__red=t('camps:camps.no') + if (!isNew) h4=t('camps:edit.contact_title') .camp-leaders.panel From 52ba0740d0616389f8d3f1a8e0308929a694d1d0 Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Wed, 7 Mar 2018 19:06:33 +0200 Subject: [PATCH 05/12] UI main navigation - remove unnecessary class 'undefined' --- views/includes/page.jade | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/views/includes/page.jade b/views/includes/page.jade index 0edf32f0f..def1ff123 100644 --- a/views/includes/page.jade +++ b/views/includes/page.jade @@ -11,34 +11,34 @@ block wrapper a.navbar-brand( href="/#{language}/home" ) Spark #navbar.navbar-collapse.collapse ul.nav.navbar-nav - li( class="#{path[2] === 'home' ? 'active' : undefined }" ) + li( class="#{path[2] === 'home' ? 'active' : '' }" ) a( href="/#{language}/home" )=t('home') - li( class="#{path[2] === 'camps' ? 'active' : undefined }" ) + li( class="#{path[2] === 'camps' ? 'active' : '' }" ) a( href="/#{language}/camps" )=t('camps:nav') - li( class="#{path[2] === 'volunteering' ? 'active' : undefined }" ) + li( class="#{path[2] === 'volunteering' ? 'active' : '' }" ) a( href="/#{language}/volunteering" )=t('volunteering') - li( class="#{path[2] === 'npo' ? 'active' : undefined }" ) + li( class="#{path[2] === 'npo' ? 'active' : '' }" ) a( href="/#{language}/npo" )=t('npo:npo_name') if(user.isAdmin || user.isGateManager) - li( class="#{path[2] === 'gate' ? 'active' : undefined }" ) + li( class="#{path[2] === 'gate' ? 'active' : '' }" ) a( href="/#{language}/gate" )=t('gate:gate') if(user.isAdmin || user.isCampsAdmin) - li( class="#{path[2] === 'camps-admin' ? 'active' : undefined }" ) + li( class="#{path[2] === 'camps-admin' ? 'active' : '' }" ) a( href="/#{language}/camps-admin" )=t('camps:nav_admin') if(user.isAdmin || user.isArtInstallationsAdmin) - li( class="#{path[2] === 'art-admin' ? 'active' : undefined }" ) + li( class="#{path[2] === 'art-admin' ? 'active' : '' }" ) a( href="/#{language}/art-admin" )=t('camps:art_installation.nav_admin') if(user.isAdmin || user.isProdDepsAdmin) - li( class="#{path[2] === 'prod-admin' ? 'active' : undefined }" ) + li( class="#{path[2] === 'prod-admin' ? 'active' : '' }" ) a( href="/#{language}/prod-admin" )=t('camps:prod_dep.nav_admin') if(user.isAdmin) - li( class="#{path[2] === 'npo-admin' ? 'active' : undefined }" ) + li( class="#{path[2] === 'npo-admin' ? 'active' : '' }" ) a( href="/#{language}/npo-admin" )=t('npo:nav_admin') if(user.isAdmin) - li( class="#{path[2] === 'events-admin' ? 'active' : undefined }" ) + li( class="#{path[2] === 'events-admin' ? 'active' : '' }" ) a( href="/#{language}/events-admin" )=t('events:nav_admin') if(user.isAdmin) - li(class="#{path[2] === 'camp-files-admin' ? 'active' : undefined }") + li(class="#{path[2] === 'camp-files-admin' ? 'active' : '' }") a(href="/#{language}/camp-files-admin")=t('camps:files.nav_admin') ul.nav.navbar-nav.navbar-right(style="#{language === 'he' ? 'float:left!important' : ''}") li From fca7f96cf13ede9fd7618138693f29bb93576658 Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Wed, 7 Mar 2018 19:06:47 +0200 Subject: [PATCH 06/12] add he translations --- locales/he/camps.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/locales/he/camps.json b/locales/he/camps.json index 48715413b..5d8526b83 100644 --- a/locales/he/camps.json +++ b/locales/he/camps.json @@ -313,7 +313,8 @@ "all_members": "כל המציגים", "docs": "מסמכים", "new": "חדש", - "all_camps_table": "כל המיצבים" + "all_camps_table": "כל המיצבים", + "all_members_table": "כל החברים" }, "stats": { "search": "חיפוש", @@ -321,10 +322,13 @@ "contact_person": "איש קשר", "status": "סטטוס", "last_update": "עודכן לאחרונה", - "published": "פורסם בתאריך" + "published": "פורסם בתאריך", + "dumpcampsdata": "יצוא לקובץ" }, "members": { - "actions": "פעולות" + "actions": "פעולות", + "search": "חפש חבר במחנה", + "choose_camp": "בחר מחנה" }, "edit": { "view": "צפה במיצב", From 14fd43e5a1fb285418c5bea6331d98ab589cc955 Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Wed, 7 Mar 2018 19:07:23 +0200 Subject: [PATCH 07/12] edit camp - general comments and layout fix --- views/pages/camps/edit.jade | 40 +++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/views/pages/camps/edit.jade b/views/pages/camps/edit.jade index c621037f3..8ecb7addd 100644 --- a/views/pages/camps/edit.jade +++ b/views/pages/camps/edit.jade @@ -122,7 +122,7 @@ block content label(for='camp_safety_contact')=t('camps:edit.safety_contact') select.form-control(id='camp_safety_contact', name='safety_contact') option(ng-repeat="member in approved_members", ng-selected="member.user_id == #{camp.safety_contact}", value="{{member.user_id}}") {{ member.name}} ({{ member.email }}) - + h4=t(t_prefix+'edit.add_info') .camp-details.panel .panel-body @@ -136,15 +136,12 @@ block content //- label(for='location_comments')=t('camps:edit.location_comments') //- input.form-control(id='location_comments', name='location_comments', value=(isNew ? '' : '#{details.location_comments}')) .col-md-4 - .col-xs-12 label(for='camp_location_street')=t('camps:edit.location_street') input.form-control(id='camp_location_street', name='camp_location_street', value=(isNew ? '' : (details.camp_location_street===null?'':'#{details.camp_location_street}')),readonly=(!isAdmin?'true':undefined)) .col-md-4 - .col-xs-12 label(for='camp_location_street_time')=t('camps:edit.location_time') input.form-control(id='camp_location_street_time', name='public_camp_location_street_time', value=(isNew ? '' : (details.camp_location_street_time===null?'':'#{details.camp_location_street_time}')),readonly=(!user.isAdmin?'true':undefined)) .col-md-4 - .col-xs-12 label(for='camp_location_area')=t('camps:edit.location_area') input.form-control(id='camp_location_area', name='public_camp_location_area', value=(isNew ? '' : (details.camp_location_area === null ? '' : '#{details.camp_location_area}')),readonly=(!isAdmin ? 'true' : undefined)) //- .col-md-4 @@ -152,22 +149,19 @@ block content //- label(for='camp_location_area')=t('camps:edit.location_area') //- input.form-control(id='camp_location_area', type='number', name='public_camp_location_area', value=(isNew ? '' : '#{details.camp_location_area}')) .col-md-4 - .col-xs-12 label(for='entrance_quota')=t('camps:edit.early_arrival_quota') input.form-control(id='entrance_quota', name='entrance_quota', value=(isNew ? 0 : (camp.entrance_quota === null ? '' : '#{camp.entrance_quota}')),readonly=(!isAdmin ? 'true' : undefined)) .col-md-4 - .col-xs-12 label(for='pre_sale_tickets_quota')=t('camps:stats.pre_sale_tickets_quota') input.form-control(id='pre_sale_tickets_quota', name='pre_sale_tickets_quota', value=(isNew ? 0 : (camp.pre_sale_tickets_quota === null ? 0 : '#{camp.pre_sale_tickets_quota}')),readonly=(!isAdmin ? 'true' : undefined)) - //- Card 2 + //- BEGIN Card 2: Basic Details .card.card-second.card-hide h4=t('camps:edit.behavior_title') .camp-details.panel .panel-body .camp-behavior .col-md-4 - .col-xs-12 label(for='camp_activity_time', data-camp-status='#{camp.status}') #{t('camps:edit.camp_activity_time')} .checkbox input(type="checkbox", class='camp_activity_time', id="activity_time_morning", name="activity_time_morning", value="morning", checked=camp.camp_activity_time ? (camp.camp_activity_time.indexOf('morning') > -1 ? "checked" : undefined) : undefined) @@ -186,7 +180,6 @@ block content label(for="camp_activity_time_night") | #{t('camps:new.camp_activity_time_night')} .col-md-4 - .col-xs-12 label(for='camp_type', data-camp-type='#{camp.type}') #{t('camps:edit.type')} .checkbox input(type="checkbox", class='camp_type', id="type_music", name="type_music", value="music", checked=camp.type ? (camp.type.indexOf('music') > -1 ? "checked" : undefined) : undefined) @@ -216,9 +209,8 @@ block content input(type="checkbox", class='camp_type', id="camp_type_other_checkbox", name="type_other", value="other", checked=camp.type ? (camp.type.indexOf('other') > -1 ? "checked" : undefined) : undefined) label(for="camp_type_other_checkbox") | #{t('camps:edit.other')} - input(id='camp_type_other_text', type="text", class="form-control checkbox-other hidden", name="type_other_text", value=(camp.type.slice(camp.type.indexOf('other') + 6))) + input(id='camp_type_other_text', type="text", class="form-control checkbox-other", name="type_other_text", value=(camp.type.slice(camp.type.indexOf('other') + 6))) .col-md-4 - .col-xs-12 label(for='camp_child_friendly') #{t('camps:edit.camp_child_friendly')} input.checkbox(id='camp_child_friendly', checked='#{camp.child_friendly}', type="checkbox", name='child_friendly') script. @@ -226,7 +218,6 @@ block content var checkbox = document.getElementById("camp_child_friendly"); checkbox.checked = checkbox.attributes.checked.value == "1" ? true:false .col-md-4 - .col-xs-12 //- script. //- var noise_level = { //- "quiet": "#{t('camps:new.camp_noise_level_quiet')}", @@ -237,6 +228,9 @@ block content label(for='noise_level') #{t('camps:edit.camp_noise_level')} select(id='camp_noise_level', class="form-control", name="noise_level") option(ng-repeat="option in noise_level_options", ng-selected="option.id == '#{camp.noise_level}'", value="{{option.id}}") {{option.value}} + + + //------- Lilach requested to hide section -------------// //- h4=t('camps:edit.public_area_title') //- .camp-details.panel @@ -258,7 +252,11 @@ block content //- // set checkbox status //- var checkbox = document.getElementById("support_art"); //- checkbox.checked = checkbox.attributes.checked.value == "1" ? true:false - //- Card 3 - Manage Members + + //- END Card 2: Basic Details + + + //- BEGIN Card 3: Manage Members .card.card-third.card__shad.card__padding--even.card-hide.col-xs-12.table-responsive .form-inline input.form-control(ng-model='camps_members_add_member', type="text", placeholder="#{t('camps:edit.add_member_placeholder')}") @@ -268,7 +266,12 @@ block content .row .col-xs-12 include partials/members_table - //- Card 4 + + //- END Card 3: Manage Members + + + + //- BEGIN Card 4: Upload Docs & Files .card.card-forth.card-hide h4=t('camps:edit.upload_header') .camp-members.panel @@ -278,7 +281,10 @@ block content //- label(for='edit_camp_upload_security_file')=t('camps:edit.security_file') //- input.form-control(type="file" id='edit_camp_upload_security_file', name='security_file') include partials/camp_files + //- END Card 4: Upload Docs & Files + + //BEGIN Continue & Save buttons .controls.row .col-xs-12 if(isNew) @@ -287,11 +293,10 @@ block content else input(id='camp_edit_camp_id', type='hidden', value='#{camp.id}') button.Btn.Btn__default(id='camp_edit_save')=t('camps:btn_save_camp') + //END Continue & Save buttons - if isCamp && camp.web_published != '1' - button.Btn.Btn__green(id='camp_edit_publish')=t('camps:edit.publish') - // Camp create request modal + // Create New Camp: request modal (appears after save new camp clicked) .modal.fade(id='create_camp_request_modal', tabindex='-1', role='dialog') .modal-dialog.card.card__padding--even.card__shad(role='document') div @@ -356,3 +361,4 @@ block content .modal-footer button.Btn.Btn__transparent(id='create_camp_close_btn', type='button', data-dismiss='modal')=t('camps:new.close') button.Btn.Btn__green(id='camp_create_save_modal_request', type='button')=t('camps:new.send_request') + From 4f28b622375d0dddb8fee970278d5913e3689fd3 Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Wed, 7 Mar 2018 19:08:22 +0200 Subject: [PATCH 08/12] minor style changes, remove underline when hovering buttons, align checkboxes to labels --- public/stylesheets/_camps.scss | 4 ++++ public/stylesheets/main.scss | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/public/stylesheets/_camps.scss b/public/stylesheets/_camps.scss index 71d48ebfd..89fbe753e 100644 --- a/public/stylesheets/_camps.scss +++ b/public/stylesheets/_camps.scss @@ -50,6 +50,7 @@ body[lang="en"] { &:focus, &:hover { + text-decoration: none; color: inherit; transform: translateY(-3px); box-shadow: 0 7px 14px rgba(50,50,93,.1),0 3px 6px rgba(0,0,0,.08); @@ -471,4 +472,7 @@ input.checkbox { .cursor-p { cursor: pointer; + &:hover { + text-decoration: none; + } } diff --git a/public/stylesheets/main.scss b/public/stylesheets/main.scss index 3b8a93f95..cbbfa199d 100644 --- a/public/stylesheets/main.scss +++ b/public/stylesheets/main.scss @@ -28,6 +28,10 @@ span { content: " *"; font-size: larger; } + +.form-control { + margin-bottom: 6px; +} /*NAVIGATION*/ .navbar-brand { padding-left: 30px; @@ -75,11 +79,16 @@ li.dropdown > ul > li > a > span { display: table; } } + +// center modal buttons +.swal-footer { + text-align: center; +} // bootstrap overrides .checkbox input[type=checkbox], .checkbox-inline input[type=checkbox], .radio input[type=radio], .radio-inline input[type=radio] { - margin: 0; + margin: 4px; } From 4d0aa1298beaa4bf1191c434af2cf01d873f439f Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Thu, 8 Mar 2018 13:07:20 +0200 Subject: [PATCH 09/12] fix top navbar style --- public/stylesheets/main.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/stylesheets/main.scss b/public/stylesheets/main.scss index cbbfa199d..94c426c05 100644 --- a/public/stylesheets/main.scss +++ b/public/stylesheets/main.scss @@ -40,6 +40,10 @@ span { background-position: 10px 15px; } +.navbar-nav>li>a { + line-height: 22px; +} + li.dropdown > ul > li > a > img, li.dropdown > ul > li > a > span { float: right; From d442d92379e32a276a1fc85283d437a80e0683d1 Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Thu, 8 Mar 2018 14:26:42 +0200 Subject: [PATCH 10/12] add moment.js to app.locals so it can be used for date formatting in jade templates. use to format date in edit camp page. use angular date pipe in index_admin page. --- docs/development/README.md | 10 ++++++++++ package.json | 1 + public/stylesheets/main.scss | 4 ++++ routes/index.js | 3 +++ views/pages/camps/edit.jade | 2 +- views/pages/camps/index_admin.jade | 10 ++++------ yarn.lock | 4 ++++ 7 files changed, 27 insertions(+), 7 deletions(-) diff --git a/docs/development/README.md b/docs/development/README.md index a780a4ab8..ff507f1e0 100644 --- a/docs/development/README.md +++ b/docs/development/README.md @@ -64,7 +64,17 @@ Example: ``` input( data-error="#{t('bad_email')}" ) ``` +## Date formatting in templates +You can use [moment.js](https://momentjs.com/) function inside jade template like this: +``` +p #{moment(created_at).format('DD/MM/YYYY, HH:mm')} +``` +where `created_at` is jade variable containing date string. +If you want to do date formatting on angular variable, just use [angular.js date pipe](https://docs.angularjs.org/api/ng/filter/date) like this: +``` +td {{camp.updated_at | date: "dd/mm/yyyy, HH:mm" }} +``` ## Email Spark emails by default are **not being sent**. If you wish the emails from Spark to go through, set the `enable` property in your **local** config file. diff --git a/package.json b/package.json index da0d24ff2..862bebadb 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "lodash": "^4.17.4", "mocker-data-generator": "^2.5.2", "module-id": "2.0.4", + "moment": "^2.21.0", "morgan": "~1.9.0", "mysql": "^2.11.1", "node-cache": "^4.1.1", diff --git a/public/stylesheets/main.scss b/public/stylesheets/main.scss index 94c426c05..18629a1ab 100644 --- a/public/stylesheets/main.scss +++ b/public/stylesheets/main.scss @@ -96,3 +96,7 @@ li.dropdown > ul > li > a > span { .radio-inline input[type=radio] { margin: 4px; } + +.btn-xs { + margin-bottom: 5px; +} diff --git a/routes/index.js b/routes/index.js index 4338bb408..1717841d5 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,6 +1,9 @@ const express = require("express"); const app = express(); +// Use locals +app.locals.moment = require('moment'); + //Pages app.use("/:lng?/admin", require("./pages/admin_routes")); app.use("/:lng/events-admin", require("./pages/events_routes")); diff --git a/views/pages/camps/edit.jade b/views/pages/camps/edit.jade index 8ecb7addd..3879f634b 100644 --- a/views/pages/camps/edit.jade +++ b/views/pages/camps/edit.jade @@ -24,7 +24,7 @@ block content else span.label.label-info #{t(t_prefix+'edit.camp')} # #{camp.id} h2 #{t('camps:edit.title')}: #{camp.camp_name_en} - h6 #{t('camps:edit.since')}: #{camp.created_at} + h6 #{t('camps:edit.since')}: #{moment(camp.created_at).format('DD/MM/YYYY, HH:mm')} .controls.row .col-xs-12 //- Card switcher diff --git a/views/pages/camps/index_admin.jade b/views/pages/camps/index_admin.jade index 848446d47..2b8435466 100644 --- a/views/pages/camps/index_admin.jade +++ b/views/pages/camps/index_admin.jade @@ -58,20 +58,18 @@ block content tbody tr(ng-repeat="camp in camps | filter: searchCamp | orderBy: orderCamps") td {{ camp.id }} - td + td a(ng-href=`/${language}/camps/{{camp.id}}`) span {{camp.camp_name_en}} - br + br a(ng-href=`/${language}/camps/{{camp.id}}`) span {{camp.camp_name_he}} td {{ camp.contact_person_name }} td {{ camp.status }} - td {{ camp.updated_at.split('GMT')[0] }} - //- td {{ camp.created_at.split('GMT')[0] }} + td {{camp.updated_at | date: "dd/mm/yyyy, HH:mm" }} td {{ camp.web_published }} - //- td td {{ camp.entrance_quota }} - td + td input( type="number" name="pre_sale_tickets_quota" ondblclick="this.readOnly=''" readonly="true" ng-value="camp.pre_sale_tickets_quota !== null ? camp.pre_sale_tickets_quota : 0" ng-model="camp.pre_sale_tickets_quota_input" ng-model-options="{updateOn : 'change'}" ng-change='updatePreSaleQuota(camp.id,camp.pre_sale_tickets_quota_input)') td //- a.Btn(ng-href=`/${language}/camps/{{camp.id}}` + '/edit') diff --git a/yarn.lock b/yarn.lock index d530b19c2..335a66372 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4093,6 +4093,10 @@ moment@2.x.x, moment@^2.15.2: version "2.20.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" +moment@^2.21.0: + version "2.21.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" + morgan@~1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.0.tgz#d01fa6c65859b76fcf31b3cb53a3821a311d8051" From f4f415fc81b0223ca149a18c21d4a64932e3cc52 Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Thu, 8 Mar 2018 17:50:15 +0200 Subject: [PATCH 11/12] add some style: to statistics on home page and members table. --- locales/en/common.json | 19 +++ locales/he/camps.json | 12 +- locales/he/common.json | 19 +++ locales/he/gate.json | 1 + public/scripts/camps.js | 5 + public/scripts/controllers/camp_manage.js | 2 +- public/stylesheets/_colors.scss | 74 +++++++++ public/stylesheets/main.scss | 142 +++++++++++++++++- views/pages/camps/edit.jade | 11 +- views/pages/camps/index_admin.jade | 55 ++++--- views/pages/camps/partials/members_table.jade | 18 +-- .../partials/members_table_statistics.jade | 36 +++++ views/pages/home.jade | 36 +---- views/pages/partials/gate_statistics.jade | 78 ++++++++++ views/pages/partials/other_statistics.jade | 32 ++++ 15 files changed, 453 insertions(+), 87 deletions(-) create mode 100644 public/stylesheets/_colors.scss create mode 100644 views/pages/camps/partials/members_table_statistics.jade create mode 100644 views/pages/partials/gate_statistics.jade create mode 100644 views/pages/partials/other_statistics.jade diff --git a/locales/en/common.json b/locales/en/common.json index 79fc72da4..d0baf70f7 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -101,5 +101,24 @@ "MIDBURN2014": "2014 - Genesis", "MIDBURN2015": "2015 - Awakeness", "MIDBURN2016": "2016 - Abrakadabra" + }, + "homepage": { + "stats": { + "gate": "Gate Statistics", + "total_tickets":"Event Tickets", + "inside_event": "Currently Inside", + "ticketing": "Ticketing", + "last_24h_first_entrance": "Last 24h entrance", + "last_1h_first_entrance": "Last hour entrance", + "entrances": "Entrances", + "exits": "Exits", + "last_24_hours": "Last 24 hours", + "last_1h": "Last hour", + "other_stats" : "Other Statistics", + "members_in_camps": "Members in camps", + "participants_in_art_installations": "Participants in art installations", + "volunteers_in_production_departments": "Volunteers in production departments" + } + } } diff --git a/locales/he/camps.json b/locales/he/camps.json index 5d8526b83..2e30e9ebe 100644 --- a/locales/he/camps.json +++ b/locales/he/camps.json @@ -44,8 +44,8 @@ "new": "צור מחנה חדש", "all_camps_table": "מחנות", "all_members_table": "חברי מחנות", - "total_approved_members": "סה\"כ חברי מחנה", - "total_camp_tickets": "סה\"כ כרטיסים במחנה", + "total_approved_members": "חברי מחנה", + "total_camp_tickets": "כרטיסים במחנה", "docs_table": "מסמכים וקבצים" }, "new": { @@ -138,11 +138,11 @@ "facebook_page_url": "דף פייסבוק", "remove": "הסרה", "search": "חפש מחנה", - "dumpcampsdata": "יצוא לקובץ", + "dumpcampsdata": "יצוא טבלה לקובץ", "entrance_quota": "מכסת הגעה מוקדמת", "pre_sale_tickets_quota": "הקצאת כרטיסים", - "pre_sale_ticket_count": "סה״כ הכרטיסים שהוקצו", - "total_pre_sale_ticket_assigned": "סה״כ מספר הכרטיסים שניתן להקצות" + "pre_sale_ticket_count": "כרטיסים שהוקצו", + "total_pre_sale_ticket_assigned": "כרטיסים שניתן להקצות" }, "members": { "title": "משתתפים במחנה", @@ -323,7 +323,7 @@ "status": "סטטוס", "last_update": "עודכן לאחרונה", "published": "פורסם בתאריך", - "dumpcampsdata": "יצוא לקובץ" + "dumpcampsdata": "יצוא טבלה לקובץ" }, "members": { "actions": "פעולות", diff --git a/locales/he/common.json b/locales/he/common.json index aa4531a36..910e08cc6 100644 --- a/locales/he/common.json +++ b/locales/he/common.json @@ -102,5 +102,24 @@ "MIDBURN2014": "2014 - בראשית", "MIDBURN2015": "2015 - התעלות", "MIDBURN2016": "2016 – אבראכאדברא" + }, + "homepage": { + "stats": { + "gate": "סטטיסטיקות שער", + "total_tickets":"כרטיסים לאירוע", + "inside_event": "כרגע בתוך האירוע", + "ticketing": "כירטוסים", + "last_24h_first_entrance": "כירטוסים ב-24 שעות אחרונות", + "last_1h_first_entrance": "כירטוסים בשעה אחרונה", + "entrances": "כניסות", + "exits": "יציאות", + "last_24_hours": "24 שעות אחרונות", + "last_1h": "שעה אחרונה", + "other_stats" : "סטטיסטיקת מחנות, מחלקות ומיצבים", + "members_in_camps": "חברים במחנות נושא", + "participants_in_art_installations": "משתתפים במיצבי אומנות", + "volunteers_in_production_departments": "מתנדבים במחלקות הפקה" + } + } } diff --git a/locales/he/gate.json b/locales/he/gate.json index cd56ca975..91287181b 100644 --- a/locales/he/gate.json +++ b/locales/he/gate.json @@ -12,5 +12,6 @@ "reason": "סיבה", "force_reason_placeholder": "תארו את הסיבה ב- 10 תווים לפחות", "entrance_group": "קבוצת הקצאה" + } diff --git a/public/scripts/camps.js b/public/scripts/camps.js index f6c6691c9..f29ca11a4 100644 --- a/public/scripts/camps.js +++ b/public/scripts/camps.js @@ -12,6 +12,11 @@ $(function () { $('[data-toggle="tooltip"]').tooltip() }); +// bind Twitter Bootstrap tooltips to dynamically created elements +$("body").tooltip({ + selector: '[data-toggle="tooltip"]' +}); + /** * Scroll to top - footer button */ diff --git a/public/scripts/controllers/camp_manage.js b/public/scripts/controllers/camp_manage.js index d2b4e66da..c7f82f209 100644 --- a/public/scripts/controllers/camp_manage.js +++ b/public/scripts/controllers/camp_manage.js @@ -12,7 +12,7 @@ __get_camps_all = function ($http, on_success) { } else if (groups_prototype === 'prod_dep') { _url = '/prod_dep_all'; } - console.log(_url); + //console.log(_url); $http.get(_url).then((res) => { camps_all = res; on_success(res); diff --git a/public/stylesheets/_colors.scss b/public/stylesheets/_colors.scss new file mode 100644 index 000000000..b2546715a --- /dev/null +++ b/public/stylesheets/_colors.scss @@ -0,0 +1,74 @@ + +// colors +$dark-gray: #7F8C8D; +$gray: #95A5A6; +$light-gray: #BDC3C7; +$dark-blue: #34495E; +$blue: #2980B9; +$green: #16A085; +$yellow: #F1C40F;; +$orange: #F39C12; +$red: #E74C3C; +$purple: #8E44AD; +$pink: #d6569d; +.dark-blue { + background-color: $dark-blue +} +.green { + background-color: $green +} +.blue { + background-color: $blue; +} +.yellow { + background-color: $yellow; +} +.orange { + background-color: $orange; +} +.red { + background-color: $red; +} +.purple { + background-color: $purple; +} +.pink { + background-color: $pink; +} +.dark-gray { + background-color: $dark-gray; +} +.gray { + background-color: $gray; +} +.light-gray { + background-color: $light-gray; +} + +.text-dark-blue { + color: $dark-blue; +} +.text-green { + color: $green; +} +.text-blue { + color: $blue; +} +.text-orange { + color: $orange; +} +.text-yellow { + color: $yellow +} +.text-red { + color: $red; +} +.text-purple { + color: $purple +} +.text-pink { + color: $pink; +} +.text-faded { + color: rgba(255, 255, 255, 0.7); +} diff --git a/public/stylesheets/main.scss b/public/stylesheets/main.scss index 18629a1ab..02386aeae 100644 --- a/public/stylesheets/main.scss +++ b/public/stylesheets/main.scss @@ -1,13 +1,17 @@ @import './ui'; @import './camps'; @import './footer'; - +@import './colors'; body { display: flex; flex-direction: column; min-height: 100vh; } +a:hover { + text-decoration: none; +} + span { margin: 0 2px; } @@ -89,7 +93,6 @@ li.dropdown > ul > li > a > span { text-align: center; } // bootstrap overrides - .checkbox input[type=checkbox], .checkbox-inline input[type=checkbox], .radio input[type=radio], @@ -100,3 +103,138 @@ li.dropdown > ul > li > a > span { .btn-xs { margin-bottom: 5px; } + +// fix position of select dropdown arrow +div.selectize-input > div > span > span { + margin: 0 26px; +} + +.selectize-input > input { + padding: 0px 26px 0 !important; +} + +// paddings and margins +.p-0 { + padding: 0 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 1em; +} + +.m-2 { + margin: 2em; +} + +// 5 even cols +.col-xs-15, +.col-sm-15, +.col-md-15, +.col-lg-15 { + position: relative; + min-height: 1px; + padding-right: 10px; + padding-left: 10px; +} + +.col-xs-15 { + width: 20%; + float: left; +} + +@media (min-width: 768px) { + .col-sm-15 { + width: 20%; + float: left; + } +} + +@media (min-width: 992px) { + .col-md-15 { + width: 20%; + float: left; + } +} + +@media (min-width: 1200px) { + .col-lg-15 { + width: 20%; + float: left; + } +} + + + +// statistics +.circle-tile { + margin-bottom: 15px; + text-align: center; +} +.circle-tile-heading { + border: 3px solid rgba(255, 255, 255, 0.3); + border-radius: 100%; + color: #FFFFFF; + height: 80px; + margin: 0 auto -40px; + position: relative; + transition: all 0.3s ease-in-out 0s; + width: 80px; +} +.circle-tile-heading .fa { + line-height: 80px; +} +.circle-tile-content { + padding-top: 50px; +} +.circle-tile-number { + font-size: 26px; + font-weight: 700; + line-height: 1; + padding: 5px 0 15px; +} +.circle-tile-description { + text-transform: uppercase; +} +.circle-tile-footer { + background-color: rgba(0, 0, 0, 0.1); + color: rgba(255, 255, 255, 0.5); + display: block; + padding: 5px; + transition: all 0.3s ease-in-out 0s; +} +.circle-tile-footer:hover { + background-color: rgba(0, 0, 0, 0.2); + color: rgba(255, 255, 255, 0.5); + text-decoration: none; +} +.circle-tile-heading.dark-blue:hover { + background-color: #2E4154; +} +.circle-tile-heading.green:hover { + background-color: #138F77; +} +.circle-tile-heading.orange:hover { + background-color: #DA8C10; +} +.circle-tile-heading.blue:hover { + background-color: #2473A6; +} +.circle-tile-heading.red:hover { + background-color: #CF4435; +} +.circle-tile-heading.purple:hover { + background-color: #7F3D9B; +} + +.circle-tile-heading.pink:hover { + background-color: #b763b2; +} +.tile-img { + text-shadow: 2px 2px 3px rgba(0, 0, 0, 0.9); +} + + diff --git a/views/pages/camps/edit.jade b/views/pages/camps/edit.jade index 3879f634b..3abd74674 100644 --- a/views/pages/camps/edit.jade +++ b/views/pages/camps/edit.jade @@ -258,10 +258,13 @@ block content //- BEGIN Card 3: Manage Members .card.card-third.card__shad.card__padding--even.card-hide.col-xs-12.table-responsive - .form-inline - input.form-control(ng-model='camps_members_add_member', type="text", placeholder="#{t('camps:edit.add_member_placeholder')}") - button.Btn.Btn__sm(ng-click="addMember()") + #{t('camps:members.add_member')} - .form-group + include partials/members_table_statistics + .row + .col-xs-12 + .form-inline + input.form-control(ng-model='camps_members_add_member', type="text", placeholder="#{t('camps:edit.add_member_placeholder')}") + button.Btn.Btn__sm(ng-click="addMember()") + #{t('camps:members.add_member')} + .form-group input.form-control(id='camps_members_search_member', ng-model="searchMembers", type="text", placeholder="#{t('camps:edit.search_member')}", name="camps_members_search_member" autofocus) .row .col-xs-12 diff --git a/views/pages/camps/index_admin.jade b/views/pages/camps/index_admin.jade index 2b8435466..9ee090b4a 100644 --- a/views/pages/camps/index_admin.jade +++ b/views/pages/camps/index_admin.jade @@ -2,7 +2,7 @@ extends ../../includes/page block content .camps.camp_admin_index(ng-app="ngCamps") script. - var groups_prototype="#{__groups_prototype}"; + var groups_prototype="#{__groups_prototype}"; if controllDates script. const controllDates = { @@ -20,22 +20,24 @@ block content a.Btn.Btn__transparent.card-switcher#2(href=`/${language}/camps-admin/members`, role='button')=t(t_prefix+'admin_index.all_members') if isCamp a.Btn.Btn__transparent.card-switcher#3(href=`/${language}/camps-admin/docs`, role='button')=t(t_prefix+'admin_index.docs') - if isCamp || isProd + if isCamp || isProd a.Btn.Btn__green.card-switcher#4(href=`/${language}/camps-admin/new`, role='button') span.glyphicon.glyphicon-plus(aria-hidden="true") span=t(t_prefix+'admin_index.new') - + .cards--wrapper.card__shad - //- Card 1 + //- Card 1 : Manage All Camps .card.card-first.card__padding--even.col-xs-12.table-responsive(ng-controller="manageCampsController") - h4=t(t_prefix+'admin_index.all_camps_table') - .controls.row - .col-xs-12.col-md-9 - input.form-control(id='camps_list_search_camp', ng-model="searchCamp", type="text", placeholder="#{t(t_prefix+'stats.search')}") - .col-xs-4.col-md-3 + h2=t(t_prefix+'admin_index.all_camps') + .controls.row.m-0 + .col-xs-12.col-md-9.p-0 + input.form-control(id='camps_list_search_camp', ng-model="searchCamp", type="text", placeholder="#{t(t_prefix + 'stats.search')}") + .col-xs-12.col-md-3 a.Btn.cursor-p(ng-href='/camps_csv/pre_sale_tickets')   - button.btn.btn-xs - span=t(t_prefix+'stats.dumpcampsdata') + button.btn.btn-xs + span=t(t_prefix + 'stats.dumpcampsdata') + + // a.Btn.Btn__green.card-switcher#4(href=`/${language}/camps-admin/new`, role='button') span.glyphicon.glyphicon-plus(aria-hidden="true") span=t(t_prefix+'stats.dumpcampsdata') @@ -65,8 +67,12 @@ block content a(ng-href=`/${language}/camps/{{camp.id}}`) span {{camp.camp_name_he}} td {{ camp.contact_person_name }} - td {{ camp.status }} - td {{camp.updated_at | date: "dd/mm/yyyy, HH:mm" }} + td(class="text-center") + span(ng-if="camp.status == 'open'", class='glyphicon glyphicon-ok text-success', data-toggle="tooltip" data-placement="right" title="open") + span(ng-if="camp.status == 'closed'", class='glyphicon glyphicon-remove text-warning', data-toggle="tooltip" data-placement="right" title="closed") + span(ng-if="camp.status == 'deleted'", class='glyphicon glyphicon-trash text-danger', data-toggle="tooltip" data-placement="right" title="deleted") + span(ng-if="camp.status != 'open' && camp.status != 'closed' && camp.status != 'deleted' ") {{camp.status}} + td {{camp.updated_at | date: "dd/MM/yyyy, HH:mm" }} td {{ camp.web_published }} td {{ camp.entrance_quota }} td @@ -84,20 +90,20 @@ block content span(class='fa fa-facebook-official') if (user.isAdmin || (user.isCampsAdmin && (!controllDates.edit_camps_lastDate || new Date() < controllDates.edit_camps_lastDate))) a.cursor-p(ng-href=`/${language}/camps/{{camp.id}}` + '/edit')   - button.btn.btn-xs + button.btn.btn-xs span(class='glyphicon glyphicon-pencil') =t('camps:stats.edit') a.cursor-p(ng-click='removeCamp(camp.id)')   - button.btn.btn-xs + button.btn.btn-xs span(class='glyphicon glyphicon-trash') =t('camps:stats.remove') //- td - //- Card 2 + //- Card 2: Manage Members .card.card-second.card__padding--even.card-hide.col-xs-12.table-responsive(ng-controller="membersController") - h4=t(t_prefix+'admin_index.all_members_table') + include partials/members_table_statistics .controls.row - .col-xs-12.col-md-3 + .col-xs-12.col-md-5 ui-select(ng-model='camp', theme='selectize', title='Choose a camp', ng-change="getMembers(camp.id)") if(language === 'en') ui-select-match(placeholder="#{t(t_prefix+'members.choose_camp')}") {{$select.selected.camp_name_en}} @@ -109,19 +115,20 @@ block content ui-select-choices(group-by="'camp.camp_name_he'", repeat='camp in camps | filter: $select.search') small.label.label-info(ng-bind-html='camp.id | highlight: $select.search') span(ng-bind-html='camp.camp_name_he | highlight: $select.search') - .col-xs-12.col-md-9 + .col-xs-12.col-md-7 input.form-control(id='camps_members_search_member', ng-model="searchMembers", type="text", placeholder="#{t(t_prefix+'members.search')}") include partials/members_table - - //- Card 3 + + //- Card 3: Files .card.card-third.card__padding--even.card-hide.col-xs-12.table-responsive h4=t(t_prefix+'admin_index.docs_table') - - //- Card 4 + // TODO: where is the docs table ? + + //- Card 4: Create New Camp .choose_name.card.card-forth.card__padding--even.card-hide.col-xs-12 h2=t(t_prefix+'new.header_title') h4=t(t_prefix+'new.name_choosing_title') - .col-sm-8.col-xs-12 + .col-sm-8.col-xs-12.p-0 .pos-r label=t(t_prefix+'new.name_en') input(type="text", class="form-control", name="camp_name_en", autofocus="true", required) diff --git a/views/pages/camps/partials/members_table.jade b/views/pages/camps/partials/members_table.jade index 5a3c03d1f..54aaeaa23 100644 --- a/views/pages/camps/partials/members_table.jade +++ b/views/pages/camps/partials/members_table.jade @@ -1,17 +1,3 @@ - -.col-xs-6 - h4=t('camps:admin_index.total_approved_members') - span.badge {{all_approved_members}} -.col-xs-6 - h4=t('camps:admin_index.total_camp_tickets') - span.badge {{total_camp_tickets}} -.col-xs-6 - h4=t(t('camps:stats.total_pre_sale_ticket_assigned')) - span.badge {{preSaleTicketsCount}} -.col-xs-6 - h4=t(t('camps:stats.pre_sale_ticket_count')) - span.badge {{pre_sale_tickets_quota !== null ? pre_sale_tickets_quota : 0}} - table.table.table-striped.table-hover thead tr @@ -34,7 +20,7 @@ table.table.table-striped.table-hover td {{member.member_status_i18n}} td {{member.current_event_id_ticket_count}} td {{member.inside_event}} - td + td input(id='pre_sale_ticket_approved' type="checkbox" name="ticket_approved" ng-checked="{{member.pre_sale_ticket_approved}}" ng-model="member.pre_sale_ticket_approved" disabled) //- td {{member.earlyArrival ? 'yes':'no'}} td @@ -55,7 +41,7 @@ table.table.table-striped.table-hover span(class='glyphicon glyphicon-king') =t('camps:members.remove_manager') a.cursor-p(ng-click='updateUser(member.name, member.user_id, "remove")', ng-if="member.can_remove")   - button.btn.btn-xs + button.btn.btn-xs span(class='glyphicon glyphicon-remove') =t('camps:members.remove') a.cursor-p(ng-show='allocationPeriodisAvtive' ng-click='updatePreSaleTicket(member.name, member.user_id ,"pre_sale_ticket",member.pre_sale_ticket_approved)', ng-if="member.pre_sale_ticket_approved === false")   diff --git a/views/pages/camps/partials/members_table_statistics.jade b/views/pages/camps/partials/members_table_statistics.jade new file mode 100644 index 000000000..1490e9ad9 --- /dev/null +++ b/views/pages/camps/partials/members_table_statistics.jade @@ -0,0 +1,36 @@ +.row + .col-xs-3 + .circle-tile + .circle-tile-heading.green + i.fa.fa-users.fa-fw.fa-3x + .circle-tile-content.green + .circle-tile-description.text-faded + h5=t('camps:admin_index.total_approved_members') + .circle-tile-number.text-faded {{all_approved_members}} + .col-xs-3 + .circle-tile + .circle-tile-heading.blue + i.fa.fa-ticket.fa-fw.fa-3x + .circle-tile-content.blue + .circle-tile-description.text-faded + h5=t('camps:admin_index.total_camp_tickets') + .circle-tile-number.text-faded {{total_camp_tickets}} + + .col-xs-3 + .circle-tile + .circle-tile-heading.orange + i.fa.fa-ticket.fa-fw.fa-3x + .circle-tile-content.orange + .circle-tile-description.text-faded + h5=t(t('camps:stats.total_pre_sale_ticket_assigned')) + .circle-tile-number.text-faded {{preSaleTicketsCount}} + + .col-xs-3 + .circle-tile + .circle-tile-heading.purple + i.fa.fa-ticket.fa-fw.fa-3x + .circle-tile-content.purple + .circle-tile-description.text-faded + h5=t(t('camps:stats.pre_sale_ticket_count')) + .circle-tile-number.text-faded {{pre_sale_tickets_quota !== null ? pre_sale_tickets_quota : 0}} + diff --git a/views/pages/home.jade b/views/pages/home.jade index 4718fd828..448263a30 100644 --- a/views/pages/home.jade +++ b/views/pages/home.jade @@ -74,39 +74,7 @@ block content span.badge {{total_camp_tickets}} //- h4=סטטיסטיקת אדמין if user.isAdmin - br - h3 סטטיסטיקות שער - .col-xs-12.col-sm-6.col-md-3 - h4 סהכ כרטיסים לאירוע - span.badge {{stat.total_tickets}} - .col-xs-12.col-sm-6.col-md-3 - h4 כרגע בתוך הארוע - span.badge {{stat.inside_event}} - .col-xs-12.col-sm-6.col-md-3 - h4 מספר כירטוסים - span.badge {{stat.ticketing}} - .col-xs-12.col-sm-6.col-md-3 - h4 מספר כירטוסים ב-24 שעות אחרונות - span.badge {{stat.last_24h_first_entrance}} - .col-xs-12.col-sm-6.col-md-3 - h4 מספר כירטוסים בשעה אחרונה - span.badge {{stat.last_1h_first_entrance}} - .col-xs-12.col-sm-6.col-md-3 - h4 כניסות 24 שעות / 1 שעה - span.badge {{stat.last_24h_entrance}} / {{stat.last_1h_entrance}} - .col-xs-12.col-sm-6.col-md-3 - h4 יציאות 24 שעות / 1 שעה - span.badge {{stat.last_24h_exit}} / {{stat.last_1h_exit}} - .row - h3 סטטיסטיקת מחנות/מחלקות/מיצבים - .col-xs-12 - h4 סהכ במחנות נושא מאושרים - span.badge {{stat.groups.theme_camp.total}} - .col-xs-12 - h4 סהכ במיצבי אומנות - span.badge {{stat.groups.art_installation.total}} - .col-xs-12 - h4 סהכ מחלקות הפקה - span.badge {{stat.groups.prod_dep.total}} + include partials/gate_statistics + include partials/other_statistics diff --git a/views/pages/partials/gate_statistics.jade b/views/pages/partials/gate_statistics.jade new file mode 100644 index 000000000..60bc2fea9 --- /dev/null +++ b/views/pages/partials/gate_statistics.jade @@ -0,0 +1,78 @@ +.row.m-2 + .col-md-12.text-center + h3=t('common:homepage.stats.gate') +.row + .col-xs-15 + .circle-tile + .circle-tile-heading.pink + i.fa.fa-ticket.fa-fw.fa-3x + .circle-tile-content.pink + .circle-tile-description.text-faded + h5=t('common:homepage.stats.total_tickets') + .circle-tile-number.text-faded {{stat.total_tickets}} + .col-xs-15 + .circle-tile + .circle-tile-heading.blue + i.fa.fa-users.fa-fw.fa-3x + .circle-tile-content.blue + .circle-tile-description.text-faded + h5=t('common:homepage.stats.inside_event') + .circle-tile-number.text-faded {{stat.inside_event}} + + .col-xs-15 + .circle-tile + .circle-tile-heading.orange + i.fa.fa-ticket.fa-fw.fa-3x + .circle-tile-content.orange + .circle-tile-description.text-faded + h5=t('common:homepage.stats.ticketing') + .circle-tile-number.text-faded {{stat.ticketing}} + + .col-xs-15 + .circle-tile + .circle-tile-heading.purple + i.fa.fa-ticket.fa-fw.fa-3x + .circle-tile-content.purple + .circle-tile-description.text-faded + h5=t('common:homepage.stats.last_24h_first_entrance') + .circle-tile-number.text-faded {{stat.last_24h_first_entrance}} + + .col-xs-15 + .circle-tile + .circle-tile-heading.dark-blue + i.fa.fa-ticket.fa-fw.fa-3x + .circle-tile-content.dark-blue + .circle-tile-description.text-faded + h5=t('common:homepage.stats.last_1h_first_entrance') + .circle-tile-number.text-faded {{stat.last_1h_first_entrance}} + +.row + .col-xs-6 + .circle-tile + .circle-tile-heading.green + i.fa.fa-sign-in.fa-fw.fa-3x + .circle-tile-content.green + .circle-tile-number.text-faded + h4=t('common:homepage.stats.entrances') + .row + .col-xs-6 + .circle-tile-description.text-faded.h5=t('common:homepage.stats.last_24_hours') + .circle-tile-number.text-faded {{stat.last_24h_entrance}} + .col-xs-6 + .circle-tile-description.text-faded.h5=t('common:homepage.stats.last_1h') + .circle-tile-number.text-faded {{stat.last_1h_entrance}} + .col-xs-6 + .circle-tile + .circle-tile-heading.red + i.fa.fa-sign-in.fa-rotate-180.fa-fw.fa-3x + .circle-tile-content.red + .circle-tile-number.text-faded + h4=t('common:homepage.stats.exits') + .row + .col-xs-6 + .circle-tile-description.text-faded.h5=t('common:homepage.stats.last_24_hours') + .circle-tile-number.text-faded {{stat.last_24h_exit}} + .col-xs-6 + .circle-tile-description.text-faded.h5=t('common:homepage.stats.last_1h') + .circle-tile-number.text-faded {{stat.last_1h_exit}} + diff --git a/views/pages/partials/other_statistics.jade b/views/pages/partials/other_statistics.jade new file mode 100644 index 000000000..d5e25afbb --- /dev/null +++ b/views/pages/partials/other_statistics.jade @@ -0,0 +1,32 @@ +.row.m-2 + .col-md-12.text-center + h3=t('common:homepage.stats.other_stats') +.row + .col-xs-4 + .circle-tile + .circle-tile-heading.blue + i.fa.fa-users.fa-fw.fa-3x + .circle-tile-content.blue + .circle-tile-description.text-faded + h5=t('common:homepage.stats.members_in_camps') + .circle-tile-number.text-faded {{stat.groups.theme_camp.total}} + .col-xs-4 + .circle-tile + .circle-tile-heading.purple + i.fa.fa-paint-brush.fa-fw.fa-3x + .circle-tile-content.purple + .circle-tile-description.text-faded + h5=t('common:homepage.stats.participants_in_art_installations') + .circle-tile-number.text-faded {{stat.groups.art_installation.total}} + + .col-xs-4 + .circle-tile + .circle-tile-heading.pink + i.fa.fa-heart.fa-fw.fa-3x + .circle-tile-content.pink + .circle-tile-description.text-faded + h5=t('common:homepage.stats.volunteers_in_production_departments') + .circle-tile-number.text-faded {{stat.groups.prod_dep.total}} + + + From 03737311367168e049b7aed1e52b5e7b4a6c42dd Mon Sep 17 00:00:00 2001 From: Shani Almog Date: Thu, 8 Mar 2018 18:04:59 +0200 Subject: [PATCH 12/12] fix translation, add icon to 'inactive' status --- views/pages/camps/index_admin.jade | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/views/pages/camps/index_admin.jade b/views/pages/camps/index_admin.jade index 9ee090b4a..0a5d957c6 100644 --- a/views/pages/camps/index_admin.jade +++ b/views/pages/camps/index_admin.jade @@ -35,7 +35,7 @@ block content .col-xs-12.col-md-3 a.Btn.cursor-p(ng-href='/camps_csv/pre_sale_tickets')   button.btn.btn-xs - span=t(t_prefix + 'stats.dumpcampsdata') + span=t('camps:stats.dumpcampsdata') // a.Btn.Btn__green.card-switcher#4(href=`/${language}/camps-admin/new`, role='button') @@ -69,9 +69,10 @@ block content td {{ camp.contact_person_name }} td(class="text-center") span(ng-if="camp.status == 'open'", class='glyphicon glyphicon-ok text-success', data-toggle="tooltip" data-placement="right" title="open") - span(ng-if="camp.status == 'closed'", class='glyphicon glyphicon-remove text-warning', data-toggle="tooltip" data-placement="right" title="closed") + span(ng-if="camp.status == 'closed'", class='glyphicon glyphicon-remove text-danger', data-toggle="tooltip" data-placement="right" title="closed") span(ng-if="camp.status == 'deleted'", class='glyphicon glyphicon-trash text-danger', data-toggle="tooltip" data-placement="right" title="deleted") - span(ng-if="camp.status != 'open' && camp.status != 'closed' && camp.status != 'deleted' ") {{camp.status}} + span(ng-if="camp.status == 'inactive'", class='glyphicon glyphicon-exclamation-sign text-yellow', data-toggle="tooltip" data-placement="right" title="inactive") + span(ng-if="camp.status != 'open' && camp.status != 'closed' && camp.status != 'deleted' && camp.status != 'inactive' ") {{camp.status}} td {{camp.updated_at | date: "dd/MM/yyyy, HH:mm" }} td {{ camp.web_published }} td {{ camp.entrance_quota }}