Xin chào ${email},
diff --git a/src/main/webapp/assets/images/hackathon-job-search.png b/src/main/webapp/assets/images/hackathon-job-search.png
new file mode 100644
index 000000000..eba1916fc
Binary files /dev/null and b/src/main/webapp/assets/images/hackathon-job-search.png differ
diff --git a/src/main/webapp/assets/images/ic-general.png b/src/main/webapp/assets/images/ic-general.png
new file mode 100644
index 000000000..dd2f3a884
Binary files /dev/null and b/src/main/webapp/assets/images/ic-general.png differ
diff --git a/src/main/webapp/assets/modules/common/json.val.js b/src/main/webapp/assets/modules/common/json.val.js
index 93dddb5f8..9d3259603 100644
--- a/src/main/webapp/assets/modules/common/json.val.js
+++ b/src/main/webapp/assets/modules/common/json.val.js
@@ -229,6 +229,16 @@ techlooper.factory("jsonValue", function () {
name: "rootPage",
url: "/"
},
+ {
+ name: "home",
+ url: "/home",
+ ignoreIfLastFoot: true
+ },
+ {
+ name: "employerDashboard",
+ url: "/employer-dashboard",
+ ignoreIfLastFoot: true
+ },
{
name: "postEvent",
url: "/post-event",
@@ -926,6 +936,23 @@ techlooper.factory("jsonValue", function () {
{id: 12, name: "19 years"},
{id: 12, name: "> 20 years"}
],
+ "benefitIcons": [
+ {id: '1',iconClass: 'fa-dollar'},
+ {id: '2', iconClass: 'fa-user-md'},
+ {id: '3', iconClass: 'fa-file-image-o'},
+ {id: '4', iconClass: 'fa-graduation-cap'},
+ {id: '5', iconClass: 'fa-trophy'},
+ {id: '6', iconClass: 'fa-book'},
+ {id: '7', iconClass: 'fa-laptop'},
+ {id: '8', iconClass: 'fa-mobile'},
+ {id: '9', iconClass: 'fa-plane'},
+ {id: '10', iconClass: 'fa-glass'},
+ {id: '11', iconClass: 'fa-cab'},
+ {id: '12', iconClass: 'fa-coffee'},
+ {id: '13', iconClass: 'fa-gift'},
+ {id: '14', iconClass: 'fa-child'},
+ {id: '15', iconClass: 'fa-check-square-o'}
+ ],
"companyPromotion": {
"title": "companyTitle",
"tagLine": "companyMessages",
@@ -971,5 +998,8 @@ techlooper.factory("jsonValue", function () {
var currentYear = new Date().getFullYear();//yrs old from 15 to 99
instance.yobs = Array.apply(0, Array(84)).map(function (x, y) { return {value: currentYear - (y + 15)}; });
+ instance.benefitIconsMap = {};
+ $.each(instance.benefitIcons, function (i, icon) {instance.benefitIconsMap[icon.id] = icon;});
+
return instance;
});
\ No newline at end of file
diff --git a/src/main/webapp/assets/modules/common/listInput.html b/src/main/webapp/assets/modules/common/listInput.html
index 630a2e4ef..44eaeb29e 100644
--- a/src/main/webapp/assets/modules/common/listInput.html
+++ b/src/main/webapp/assets/modules/common/listInput.html
@@ -4,7 +4,7 @@
+ name="inputItem" ng-required="true" />
diff --git a/src/main/webapp/assets/modules/common/listInputDirective.js b/src/main/webapp/assets/modules/common/listInputDirective.js
index dc090ec3b..a660d720b 100644
--- a/src/main/webapp/assets/modules/common/listInputDirective.js
+++ b/src/main/webapp/assets/modules/common/listInputDirective.js
@@ -14,11 +14,12 @@ techlooper.directive("listInput", function () {
//var oriItems = angular.copy(scope.ngModel);
- scope.addItem = function() {
+ scope.addItem = function () {
+ //var requiredToInput = (!scope.item || scope.item.length == 0);
+ //scope.listForm.inputItem.$setValidity("requiredToInput", !requiredToInput);
scope.listForm.$setSubmitted();
- if (scope.listForm.$invalid) return;
- if (!scope.item || scope.item.length == 0) return;
+ if (scope.listForm.$invalid) return;
scope.ngModel.push(scope.item);
@@ -26,7 +27,7 @@ techlooper.directive("listInput", function () {
scope.listForm.$setPristine();
}
- scope.removeItem = function(index) {
+ scope.removeItem = function (index) {
scope.ngModel.splice(index, 1);
}
@@ -36,7 +37,13 @@ techlooper.directive("listInput", function () {
return scope.ngModel.indexOf(modelValue) < 0 && scope.organisers.indexOf(modelValue) < 0;
};
- scope.status = function(type) {
+ //scope.listForm.inputItem.$validators.requiredToInput = function (modelValue, viewValue) {
+ // if (!modelValue) return false;
+ // //if (modelValue.length == 0) return true;
+ // return modelValue.length > 0;
+ //};
+
+ scope.status = function (type) {
switch (type) {
case "organiser":
var item = arguments[1];
@@ -49,17 +56,6 @@ techlooper.directive("listInput", function () {
return false;
}
-
- //scope.$on("bodyClicked", function(targetScope, e) {
- // console.log(2);
- // if ($(e.target).hasClass("add-item")) {
- // console.log(123);
- // return;
- // }
- // console.log(3);
- // scope.item = "";
- // scope.listForm.$setPristine();
- //});
}
}
});
\ No newline at end of file
diff --git a/src/main/webapp/assets/modules/common/securityService.js b/src/main/webapp/assets/modules/common/securityService.js
index afb46104f..22ae4e61f 100644
--- a/src/main/webapp/assets/modules/common/securityService.js
+++ b/src/main/webapp/assets/modules/common/securityService.js
@@ -85,10 +85,15 @@ techlooper.factory("securityService", function (apiService, $rootScope, $q, util
},
routeByRole: function () {
+ utils.sendNotification(jsonValue.notifications.loaded);
var lastFoot = localStorageService.get("lastFoot");
if (lastFoot) {
localStorageService.remove("lastFoot");
- return $location.url(lastFoot);
+
+ var uiView = utils.getUiView(lastFoot);
+ if (!uiView.ignoreIfLastFoot) {
+ return $location.url(lastFoot);
+ }
}
switch ($rootScope.userInfo.roleName) {
diff --git a/src/main/webapp/assets/modules/common/utils.fac.js b/src/main/webapp/assets/modules/common/utils.fac.js
index 8c2ae5351..418b2cc56 100644
--- a/src/main/webapp/assets/modules/common/utils.fac.js
+++ b/src/main/webapp/assets/modules/common/utils.fac.js
@@ -3,8 +3,8 @@ angular.module("Common").factory("utils", function (jsonValue, $location, $rootS
var instance = {
- getUiView: function () {
- var path = $location.path();
+ getUiView: function (pth) {
+ var path = pth || $location.path();
var rs = {};
$.each(jsonValue.uiViews, function (i, view) {
if ((view.regex === undefined && view.url === path) ||
diff --git a/src/main/webapp/assets/modules/create-event/create-event.html b/src/main/webapp/assets/modules/create-event/create-event.html
index face602d8..f6550dc69 100644
--- a/src/main/webapp/assets/modules/create-event/create-event.html
+++ b/src/main/webapp/assets/modules/create-event/create-event.html
@@ -23,7 +23,8 @@
options="uiConfig.fromNowDatetimeConfig" ng-required="true"/>
@@ -34,6 +35,7 @@
class="input-style" ng-required="true"/>
diff --git a/src/main/webapp/assets/modules/create-event/createEventController.js b/src/main/webapp/assets/modules/create-event/createEventController.js
index 80c3182fd..677d33989 100644
--- a/src/main/webapp/assets/modules/create-event/createEventController.js
+++ b/src/main/webapp/assets/modules/create-event/createEventController.js
@@ -45,18 +45,41 @@ techlooper.controller("createEventController", function ($scope, $translate, jso
}
return false;
- case "error-event-start-date":
+ case "error-past-date":
if (!$scope.webinar) return false;
- if ($scope.webinar.startDate && $scope.webinar.endDate) {
+ $scope.webinarForm.startDate.$setValidity("past", true);
+ $scope.webinarForm.endDate.$setValidity("past", true);
+
+ var isPast = false;
+
+ if ($scope.webinar.startDate) {
var startDate = moment($scope.webinar.startDate, jsonValue.dateTimeFormat);
+ isPast |= startDate.isBefore(moment()) || startDate.isBefore(moment());
+ $scope.webinarForm.startDate.$setValidity("past", !isPast);
+ }
+
+ if ($scope.webinar.endDate) {
var endDate = moment($scope.webinar.endDate, jsonValue.dateTimeFormat);
- var before = endDate.isBefore(startDate);
- $scope.webinarForm.startDate.$setValidity("range", !before);
- $scope.webinarForm.endDate.$setValidity("range", !before);
- return before;
+ isPast |= endDate.isBefore(moment()) || endDate.isBefore(moment());
+ $scope.webinarForm.endDate.$setValidity("past", !isPast);
}
+
+ return isPast;
+
+ case "error-range-date":
+ if (!$scope.webinar) return false;
+ if ($scope.state("error-past-date")) return false;
$scope.webinarForm.startDate.$setValidity("range", true);
$scope.webinarForm.endDate.$setValidity("range", true);
+
+ if ($scope.webinar.startDate && $scope.webinar.endDate) {
+ var startDate = moment($scope.webinar.startDate, jsonValue.dateTimeFormat);
+ var endDate = moment($scope.webinar.endDate, jsonValue.dateTimeFormat);
+ var isEndDateBeforeStartDate = endDate.isBefore(startDate);
+ $scope.webinarForm.startDate.$setValidity("range", !isEndDateBeforeStartDate);
+ $scope.webinarForm.endDate.$setValidity("range", !isEndDateBeforeStartDate);
+ return isEndDateBeforeStartDate;
+ }
return false;
}
diff --git a/src/main/webapp/assets/modules/events/events.html b/src/main/webapp/assets/modules/events/events.html
index 891172c22..ae8f5ca41 100644
--- a/src/main/webapp/assets/modules/events/events.html
+++ b/src/main/webapp/assets/modules/events/events.html
@@ -1,27 +1,143 @@
-
+
-
-
-
-
- 08:30 PM
+
+ Jun, 12 2015
+
+
+
+
+ Owner Name
+
-
-
-
+
+
+
+ - 08:30 PM
+
+ - 34 attendants
+
+
+
+
+
+
+
+
+
+ Owner Name
+
+
+
+
+
+ - 08:30 PM
+
+ - 34 attendants
+
+
+
+
-
- Event Name
- attendants
+
+
+
+
+ Owner Name
+
+
+
+
+
+ - 08:30 PM
+
+ - 34 attendants
+
+
+
+
-
-
+
+
+
+
+ Owner Name
+
+
+
+
+
+ - 08:30 PM
+
+ - 34 attendants
+
+
+
+
+
+
+
+
+
+ Owner Name
+
+
+
+
+
+ - 08:30 PM
+
+ - 34 attendants
+
+
+
+
+
+
+
+
+
+ Owner Name
+
+
+
+
+
+ - 08:30 PM
+
+ - 34 attendants
+
+
+
+
diff --git a/src/main/webapp/assets/modules/home-page/home.html b/src/main/webapp/assets/modules/home-page/home.html
index b05684514..43906b542 100644
--- a/src/main/webapp/assets/modules/home-page/home.html
+++ b/src/main/webapp/assets/modules/home-page/home.html
@@ -208,6 +208,7 @@
+
diff --git a/src/main/webapp/assets/modules/job-listing/job-listing.html b/src/main/webapp/assets/modules/job-listing/job-listing.html
index 334b58ab5..d8ad2f9a9 100644
--- a/src/main/webapp/assets/modules/job-listing/job-listing.html
+++ b/src/main/webapp/assets/modules/job-listing/job-listing.html
@@ -64,194 +64,22 @@
-
+
-
+
- - 12/05/2015
- - Ho Chi Minh
+ - {{job.postedOn}}
+ - {{job.location}}
:
- $10,000
-
-
- -
-
-
- Angular JS
-
-
-
- -
-
-
- Spring
-
-
-
- -
-
-
- Photoshop, Illustrator, UI/UX Design
-
-
-
-
-
-
-
-
-
-
- - 13th salary payment, opportunities to have training in Japan
- - Premium healthcare insurance
- - 15 days full paid annual leave per year
-
-
-
-
-
- - Company Name
-
-
-
-
-
-
-
-
-
- - 12/05/2015
- - Ho Chi Minh
-
- :
- $10,000
-
-
- -
-
-
- Angular JS
-
-
-
- -
-
-
- Spring
-
-
-
- -
-
-
- Photoshop, Illustrator, UI/UX Design
-
-
-
-
-
-
-
-
-
-
- - 13th salary payment, opportunities to have training in Japan
- - Premium healthcare insurance
- - 15 days full paid annual leave per year
-
-
-
-
-
- - Company Name
-
-
-
-
-
-
-
-
-
- - 12/05/2015
- - Ho Chi Minh
-
- :
- $10,000
-
-
- -
-
-
- Angular JS
-
-
-
- -
-
-
- Spring
-
-
-
- -
-
-
- Photoshop, Illustrator, UI/UX Design
-
-
-
-
-
-
-
-
-
-
- - 13th salary payment, opportunities to have training in Japan
- - Premium healthcare insurance
- - 15 days full paid annual leave per year
-
-
-
-
-
- - Company Name
-
-
-
-
-
-
-
-
-
- - 12/05/2015
- - Ho Chi Minh
-
- :
- $10,000
+ {{'negotiable' | translate}}
+ {{job.salary}}
- -
-
-
- Angular JS
-
-
-
- -
-
-
- Spring
-
-
-
- -
+
-
- Photoshop, Illustrator, UI/UX Design
+ {{skill.skillName}}
@@ -262,75 +90,25 @@
-
-
-
- - Company Name
-
-
-
-
-
-
-
-
-
- - 12/05/2015
- - Ho Chi Minh
-
- :
- $10,000
-
-
- -
-
-
- Angular JS
-
-
-
- -
-
-
- Spring
-
-
-
- -
-
-
- Photoshop, Illustrator, UI/UX Design
-
-
+
-
+
+ {{offer.benefitValue}}
-
-
-
-
-
- - 13th salary payment, opportunities to have training in Japan
- - Premium healthcare insurance
- - 15 days full paid annual leave per year
-
-
- - Company Name
-
+ - {{job.company}}
+ -
+
+
-
+
diff --git a/src/main/webapp/assets/modules/job-listing/jobListingController.js b/src/main/webapp/assets/modules/job-listing/jobListingController.js
index eadfdccf5..965728f92 100644
--- a/src/main/webapp/assets/modules/job-listing/jobListingController.js
+++ b/src/main/webapp/assets/modules/job-listing/jobListingController.js
@@ -31,9 +31,7 @@ techlooper.controller("jobListingController", function (apiService, $scope, vnwC
$scope.searchJob = {keyword : keyword, locationId : locationId, location : location};
}
- $('p.offers').on("click", function(){
- $(this).next().toggleClass( "show", 1000);
- });
+
$scope.getPageRange = function() {
var numberOfShownPages = 5;
diff --git a/src/main/webapp/assets/modules/job-listing/jobListingDirective.js b/src/main/webapp/assets/modules/job-listing/jobListingDirective.js
new file mode 100644
index 000000000..3bb0dccc9
--- /dev/null
+++ b/src/main/webapp/assets/modules/job-listing/jobListingDirective.js
@@ -0,0 +1,9 @@
+techlooper.directive('showHideBenefits', function() {
+ return function(scope, element, attrs) {
+ if (scope.$last){
+ $('p.offers').on("click", function(){
+ $(this).next().toggleClass( "show", 1000);
+ });
+ }
+ };
+ });
\ No newline at end of file
diff --git a/src/main/webapp/assets/modules/translation/messages_en.json b/src/main/webapp/assets/modules/translation/messages_en.json
index 9ae98a825..546aa59d5 100644
--- a/src/main/webapp/assets/modules/translation/messages_en.json
+++ b/src/main/webapp/assets/modules/translation/messages_en.json
@@ -682,5 +682,6 @@
"postAnEvent": "Post An Event",
"webinar": "Webinar",
"allEvents": "All Events",
- "whatDoWeOffer": "What do we offer?"
+ "whatDoWeOffer": "What do we offer?",
+ "cannotInPast": "This field cannot be in the past."
}
\ No newline at end of file
diff --git a/src/main/webapp/assets/modules/translation/messages_vi.json b/src/main/webapp/assets/modules/translation/messages_vi.json
index ac0b8a30b..ceb7cbd35 100644
--- a/src/main/webapp/assets/modules/translation/messages_vi.json
+++ b/src/main/webapp/assets/modules/translation/messages_vi.json
@@ -682,5 +682,6 @@
"postAnEvent": "Tạo Sự Kiện",
"webinar": "Webinar",
"allEvents": "Tất cả Sự Kiện",
- "whatDoWeOffer": "what do we offer?"
+ "whatDoWeOffer": "what do we offer?",
+ "cannotInPast": "Trường này không được ở quá khứ."
}
diff --git a/src/main/webapp/assets/sass/events.sass b/src/main/webapp/assets/sass/events.sass
index 1fc5246af..354883ae8 100644
--- a/src/main/webapp/assets/sass/events.sass
+++ b/src/main/webapp/assets/sass/events.sass
@@ -149,3 +149,114 @@
background-color: #337ab7 !important
.xdsoft_time_box > div > div.xdsoft_current
background-color: #337ab7 !important
+.content-page-block.events-page
+ .content-page-detail
+ float: left
+ width: 100%
+ padding: 20px
+ .events-list-block
+ display: inline-block
+ width: 100%
+ clear: both
+ text-align: left
+ .events-items
+ display: inline-block
+ clear: both
+ width: 100%
+ padding: 0
+ .events-by-date
+ display: inline-block
+ clear: both
+ width: 100%
+ h3
+ font-size: 16px
+ font-weight: 400
+ text-transform: capitalize
+ color: gray
+ margin: 0
+ padding: 0 0 10px 0
+ text-align: left
+ .events-item
+ width: 49%
+ float: left
+ border-left: 2px solid #337ab7
+ -webkit-border-radius: 5px
+ -moz-border-radius: 5px
+ border-radius: 5px
+ background-color: #f4f4f4
+ margin: 0 0 2% 1%
+ max-height: 100px
+ min-height: 100px
+ padding: 15px 10px 10px 10px
+ .left-content
+ float: left
+ width: 100px
+ .owner
+ display: inline-block
+ clear: both
+ width: 100%
+ text-align: center
+ img
+ width: 50px
+ height: 50px
+ p
+ margin: 0
+ padding: 5px 0 0
+ line-height: 100%
+ .right-content
+ width: 290px
+ float: left
+ padding-left: 10px
+ background: url(../images/line-li-gray.png) left top repeat-y
+ h4
+ margin: 0
+ padding: 0
+ font-size: 14px
+ font-weight: 500
+ text-transform: capitalize
+ .event-name
+ height: 30px
+ display: inline-block
+ clear: both
+ width: 100%
+
+ ul
+ margin: 0
+ padding: 10px 0 0 0
+ width: 100%
+ clear: both
+ display: inline-block
+ li
+ width: auto
+ float: left
+ padding: 0 15px 0 25px
+ text-transform: capitalize
+ color: #808080
+ background: url(../images/ic-general.png) left top no-repeat
+ strong
+ color: #333
+ font-weight: 500
+ li.time
+ background-position: 0 0
+ padding-left: 20px
+ li.register
+ background-position: 0 -40px
+ .view-details
+ width: 50px
+ float: right
+ vertical-align: middle
+ text-align: center
+ line-height: 71px
+ background: url(../images/line-li-gray.png) left top repeat-y
+ padding-left: 5px
+ i
+ font-weight: 500
+ font-size: 25px
+ a
+ color: #333
+ display: block
+ width: 100%
+ height: 71px
+ background: url(../images/ic-general.png) center -80px no-repeat
+ .events-item:nth-child(2n)
+ margin: 0 1% 2% 0
\ No newline at end of file
diff --git a/src/main/webapp/assets/sass/job-listing.sass b/src/main/webapp/assets/sass/job-listing.sass
index 126e8da01..c93bff323 100644
--- a/src/main/webapp/assets/sass/job-listing.sass
+++ b/src/main/webapp/assets/sass/job-listing.sass
@@ -132,6 +132,8 @@
clear: both
width: 100%
padding: 10px
+ border-bottom: 0
+ border-top: 1px solid #d2d2d2
p
margin: 0
padding: 0
@@ -242,6 +244,8 @@
padding: 0 0 5px 0
img
max-width: 100px
+ .job-item:first-child
+ border-top: 0
.hot-jobs
display: inline-block
clear: both
diff --git a/src/main/webapp/assets/sass/z-responsive-candidate.sass b/src/main/webapp/assets/sass/z-responsive-candidate.sass
index 715e1a274..bbd5d0f5c 100644
--- a/src/main/webapp/assets/sass/z-responsive-candidate.sass
+++ b/src/main/webapp/assets/sass/z-responsive-candidate.sass
@@ -1599,6 +1599,29 @@
.error-messages
width: 100%
clear: both
+ .content-page-block.events-page
+ .content-page-detail
+ padding: 10px
+ .events-list-block
+ .events-items
+ .events-item
+ width: 100%
+ margin: 0 0 10px 0
+ max-height: inherit
+ .right-content
+ background: transparent
+ width: 75%
+ ul
+ li
+ font-size: 12px
+ li.register
+ padding-right: 0
+ .left-content
+ width: 25%
+ .view-details
+ display: none
+ .events-item:nth-child(2n)
+ margin: 0 0 10px 0
@media (min-width: 640px)
.rwd-table
|