Created
April 27, 2016 22:03
-
-
Save abernardobr/24ed395f66f7d32c3cd5a275aa86708b to your computer and use it in GitHub Desktop.
emprego.net - front-end - code examples
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// CRUD for the CoverLetter | |
// Author: Augusto Pissarra | |
var _modelName = "cartasdet"; | |
var _renderOrder = ["login", "menu", _modelName]; | |
var _pageTitle = HS.get("Professional Central"); | |
var _pageName = HS.get("Cover Letter"); | |
var _pageTitleCls = 'icon-user'; | |
var _breadcrumbs = [ | |
{ title: _pageName, link: "" } | |
]; | |
var _listPage = CONST.url_site_minhascartas; | |
var _fields = [ | |
{ | |
name: "description", | |
def: "", | |
create: CONST.hdFUFieldTypes.OBSERVABLE, | |
validation: { page: CONST.VALIDATION_PAGE_ALL, options: { required : true, maxSize: 250 } }, | |
type: "string", | |
server: { send: true } | |
}, | |
{ | |
name: "body", | |
def: "", | |
create: CONST.hdFUFieldTypes.OBSERVABLE, | |
validation: { page: CONST.VALIDATION_PAGE_ALL, options: { required : true, maxSize: 2500 } }, | |
type: "string", | |
server: { send: true } | |
} | |
]; | |
var mCartasDet = HDM.extend(function() { | |
var self = this; | |
self.pageTitle = ko.observable(_pageTitle); | |
self.pageName = ko.observable(_pageName); | |
self.pageTitleCls = ko.observable(_pageTitleCls); | |
self.listPage = _listPage; | |
self.breadcrumbs = _breadcrumbs; | |
// init fields | |
var options = { | |
url: { | |
c: global.BASE_PATH + "coverletter", | |
r: global.BASE_PATH + "coverletter/{id}", | |
u: global.BASE_PATH + "coverletter/{id}", | |
d: global.BASE_PATH + "coverletter/{id}" | |
} | |
}; | |
// Create all fields for CRUD, Validations and structure | |
self.hdFU = new hdFU(self, _fields, options); | |
self.hdFU.create(); | |
// formatted fields | |
self.canCreate = ko.computed(function() { | |
return self.isNew(); | |
}); | |
self.canUpdate = ko.computed(function() { | |
return !self.isNew(); | |
}); | |
self.qtyCharSummary = ko.computed(function() { | |
var len = self.body().length; | |
return HS.get('<%= len %> of 2500 characters', { len: len }); | |
}); | |
self.crudOptions.getData.checkPermissions = { allowEdit: true }; | |
}); | |
mCartasDet.prototype.createItem = function(self, evt) { | |
self.saveItem(self, { target: '#createItem' }); | |
} | |
mCartasDet.prototype.updateItem = function(self, evt) { | |
self.saveItem(self, { target: '#updateItem' }); | |
} | |
mCartasDet.prototype.viewItem = function() { | |
var self = this; | |
var id = self._id; | |
var options = { name: "_blank" }; | |
if(id !== "") | |
HD.changePage(HD.url.format.id(CONST.url_site_carta, id), options); | |
} | |
mCartasDet.prototype.getHelp = function() { | |
var self = HDM.get[global.CUR_PAGE]; | |
if(self.isNew()) | |
return 'url_site_cartasdet'; | |
return 'url_site_cartasdet_edit'; | |
} | |
mCartasDet.prototype.postPopulate = function(mData, repopulate) { | |
var self = this; | |
self.crudOptions.saveItem.successRetUrl = _listPage; | |
self.crudOptions.deleteItem.successRetUrl = _listPage; | |
} | |
HDM.add(_modelName, new mCartasDet()); | |
var vCartasDet = HDV.extend({ | |
id: "url_site_" + HD.makeFirstUpperCase(_modelName), | |
dataId: _modelName, | |
model: HDM.get[_modelName], | |
init : function() { | |
} | |
}); | |
HDV.add(_modelName, vCartasDet); | |
$(document).ready(function(){ | |
HDV.render(function() { | |
HDV.get[_modelName].afterDomReady(); | |
}, _renderOrder); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ********************* | |
// TYPES | |
//********************* | |
var DATAPOOL_EXPIRE = { | |
"FOREVER" : 0, | |
"TIME_24HRS" : 86400000, | |
"TIME_ONEWEEK" : 604800000, | |
"TIME_ONEMONTH" : 2678400000 | |
}; | |
var STORAGE_TYPE = { | |
NOKIA : 1, | |
HTML5 : 2, | |
JSTORAGE : 3, | |
HTML5_EX : 4 | |
}, | |
TTL_KEY = "TTL_KEY_STORAGE"; | |
//********************* | |
// HDDataPool functions | |
//********************* | |
var HDDataPool = function(options) { | |
this.settings = $.extend(true, {}, { | |
type : "AJAX", // pode ser AJAX, LOCAL | |
ajax : { | |
url : "", | |
crossDomain : true, | |
contentType : "application/json; charset=utf-8", | |
type : "GET", | |
cache: true, | |
xhrFields: { | |
withCredentials: true, | |
'Access-Control-Allow-Credentials': true | |
}, | |
success : function(data) { | |
self.params.ajax.success(data); | |
}, | |
error : function(err) { | |
self.params.ajax.error(err.statusText) | |
} | |
}, | |
local : { | |
type : STORAGE_TYPE.HTML5_EX, | |
key : "", | |
data : "", | |
expire : DATAPOOL_EXPIRE.NEVER, | |
zip : false // TODO: ainda não implementado | |
} | |
// TODO: criar o tipo local_ajax, que primeiro consulta no local e, não existindo, vai pr'o ajax. | |
}, options); | |
}; | |
// RESTfull API | |
HDDataPool.prototype.triggerRefresh = function(ajaxCallParam) { | |
var intercom = Intercom.getInstance(); | |
intercom.emit('hdRefresh', { page: global.CUR_PAGE, ajaxCallParam: ajaxCallParam }); | |
} | |
HDDataPool.prototype.getCookie = function(name) { | |
var cookieValue = null; | |
if (document.cookie && document.cookie != '') { | |
var cookies = document.cookie.split(';'); | |
for (var i = 0; i < cookies.length; i++) { | |
var cookie = jQuery.trim(cookies[i]); | |
// Does this cookie string begin with the name we want? | |
if (cookie.substring(0, name.length + 1) == (name + '=')) { | |
cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); | |
break; | |
} | |
} | |
} | |
return cookieValue; | |
} | |
HDDataPool.prototype.buildAjaxHeaders = function(xhr, settings) { | |
//console.log('buildAjaxHeaders --> global.BASE_PATH: ' + global.BASE_PATH + " - settings.url: " + settings.url); | |
if(settings.url.indexOf(global.BASE_PATH) === -1) { | |
//var token = this.getCookie('encrumb'); | |
//if (token !== '') | |
// xhr.setRequestHeader("x-csrf-token", token); | |
xhr.setRequestHeader('Access-Control-Allow-Origin', HD.parse.uriBase()); | |
//console.log('buildAjaxHeaders - HD.parse.uriBase(): ' + HD.parse.uriBase()); | |
} else { | |
if(HDM.get.login.user.sessionId !== '' && !_.isUndefined(HDM.get.login.user.sessionId)) { | |
xhr.setRequestHeader('Authorization', HDM.get.login.user.sessionId); | |
//console.log(HDM.get.login.user.sessionId); | |
} | |
} | |
} | |
HDDataPool.prototype.setSpin = function($el, pageSpin, show) { | |
if(show) { | |
if (pageSpin) | |
HD.showPageSpinner(); | |
else | |
HD.showSpin($el); | |
} else { | |
if (pageSpin) | |
HD.hidePageSpinner(); | |
else | |
HD.hideSpin($el); | |
} | |
} | |
HDDataPool.prototype.POST = function(options, $el) { | |
var self = this, | |
params = $.extend({}, { | |
data : {}, | |
parse : false, | |
zip : false | |
}, options); | |
HD.resetAlert(); | |
if(this.settings.type == "AJAX") { | |
var ajaxParams = $.extend(true, {}, this.settings.ajax, params); | |
var callbacks = { | |
success : function(data, textStatus, jqXHR) { | |
self.setSpin($el, params.pageSpin, false); | |
HD.hideSpin($el); | |
self.triggerRefresh(ajaxCallParam); | |
if(!_.isUndefined(params.success)) { | |
params.success(params.parse ? JSON.parse(data) : data, textStatus, jqXHR); | |
} | |
}, | |
error : function(qXHR, textStatus, errorThrown) { | |
self.setSpin($el, params.pageSpin, false); | |
console.log("Error in ajax: " + qXHR.responseText); | |
if(!_.isUndefined(params.error)) | |
params.error(qXHR, textStatus, errorThrown); | |
}, | |
beforeSend : function(jqXHR, settings) { | |
self.buildAjaxHeaders(jqXHR, settings); | |
self.setSpin($el, params.pageSpin, true); | |
if(!_.isUndefined(params.beforeSend)) | |
params.beforeSend(jqXHR, settings); | |
} | |
}; | |
var ajaxCallParam = $.extend(true, {}, ajaxParams, callbacks); | |
ajaxCallParam.type = "POST"; | |
ajaxCallParam.dataType = "json"; | |
HD.hideSpin($el); | |
$.ajax(ajaxCallParam); | |
} else { | |
console.log("RESTful POST --> Use General API to access local data. This call is for RESTful API"); | |
} | |
}; | |
HDDataPool.prototype.GET = function(options, $el) { | |
var self = this, | |
params = $.extend({}, { | |
data : {}, | |
parse : false, | |
zip : false | |
}, options); | |
HD.resetAlert(); | |
if(this.settings.type == "AJAX") { | |
var ajaxParams = $.extend(true, {}, this.settings.ajax, params); | |
var callbacks = { | |
success : function(data, textStatus, jqXHR) { | |
self.setSpin($el, params.pageSpin, false); | |
self.triggerRefresh(ajaxCallParam); | |
if(!_.isUndefined(params.success)) { | |
params.success(params.parse ? JSON.parse(data) : data, textStatus, jqXHR); | |
} | |
}, | |
error : function(qXHR, textStatus, errorThrown) { | |
self.setSpin($el, params.pageSpin, false); | |
console.log("Error in ajax: " + textStatus); | |
if(!_.isUndefined(params.error)) | |
params.error(qXHR, textStatus, errorThrown); | |
}, | |
beforeSend : function(jqXHR, settings) { | |
self.buildAjaxHeaders(jqXHR, settings); | |
self.setSpin($el, params.pageSpin, true); | |
if(!_.isUndefined(params.beforeSend)) | |
params.beforeSend(jqXHR, settings); | |
} | |
}; | |
var ajaxCallParam = $.extend(true, {}, ajaxParams, callbacks); | |
ajaxCallParam.type = "GET"; | |
HD.hideSpin($el); | |
$.ajax(ajaxCallParam); | |
} else { | |
console.log("RESTful GET --> Use General API to access local data. This call is for RESTful API"); | |
} | |
}; | |
HDDataPool.prototype.PUT = function(options, $el) { | |
var self = this, | |
params = $.extend({}, { | |
data : {}, | |
parse : false, | |
zip : false | |
}, options); | |
HD.resetAlert(); | |
if(this.settings.type == "AJAX") { | |
var ajaxParams = $.extend(true, {}, this.settings.ajax, params); | |
var callbacks = { | |
success : function(data, textStatus, jqXHR) { | |
self.setSpin($el, params.pageSpin, false); | |
self.triggerRefresh(ajaxCallParam); | |
if(!_.isUndefined(params.success)) { | |
params.success(params.parse ? JSON.parse(data) : data, textStatus, jqXHR); | |
} | |
}, | |
error : function(qXHR, textStatus, errorThrown) { | |
self.setSpin($el, params.pageSpin, false); | |
console.log("Error in ajax: " + textStatus); | |
if(!_.isUndefined(params.error)) | |
params.error(qXHR, textStatus, errorThrown); | |
}, | |
beforeSend : function(jqXHR, settings) { | |
self.buildAjaxHeaders(jqXHR, settings); | |
self.setSpin($el, params.pageSpin, true); | |
if(!_.isUndefined(params.beforeSend)) | |
params.beforeSend(jqXHR, settings); | |
} | |
}; | |
var ajaxCallParam = $.extend(true, {}, ajaxParams, callbacks); | |
ajaxCallParam.type = "PUT"; | |
HD.hideSpin($el); | |
$.ajax(ajaxCallParam); | |
} else { | |
console.log("RESTful PUT --> Use General API to access local data. This call is for RESTful API"); | |
} | |
}; | |
HDDataPool.prototype.DELETE = function(options, $el) { | |
var self = this, | |
params = $.extend({}, { | |
data : {}, | |
parse : false, | |
zip : false | |
}, options); | |
HD.resetAlert(); | |
if(this.settings.type == "AJAX") { | |
var ajaxParams = $.extend(true, {}, this.settings.ajax, params); | |
var callbacks = { | |
success : function(data, textStatus, jqXHR) { | |
self.setSpin($el, params.pageSpin, false); | |
self.triggerRefresh(ajaxCallParam); | |
if(!_.isUndefined(params.success)) { | |
params.success(params.parse ? JSON.parse(data) : data, textStatus, jqXHR); | |
} | |
}, | |
error : function(qXHR, textStatus, errorThrown) { | |
self.setSpin($el, params.pageSpin, false); | |
console.log("Error in ajax: " + textStatus); | |
if(!_.isUndefined(params.error)) | |
params.error(qXHR, textStatus, errorThrown); | |
}, | |
beforeSend : function(jqXHR, settings) { | |
self.buildAjaxHeaders(jqXHR, settings); | |
self.setSpin($el, params.pageSpin, true); | |
if(!_.isUndefined(params.beforeSend)) | |
params.beforeSend(jqXHR, settings); | |
} | |
}; | |
var ajaxCallParam = $.extend(true, {}, ajaxParams, callbacks); | |
ajaxCallParam.type = "DELETE"; | |
ajaxCallParam.data = ajaxCallParam.data; | |
HD.hideSpin($el); | |
$.ajax(ajaxCallParam); | |
} else { | |
console.log("RESTful DELETE --> Use General API to access local data. This call is for RESTful API"); | |
} | |
}; | |
// GENERAL API | |
HDDataPool.prototype.fetch = function(options) { | |
var self = this, | |
params = $.extend({}, { | |
data : {}, | |
parse : false, | |
zip : false | |
}, options); | |
if(this.settings.type == "AJAX") { | |
var ajaxParams = this.settings.ajax; | |
var callbacks = { | |
success : function(data, textStatus, jqXHR) { | |
HD.hideSpin(); | |
if(!_.isUndefined(params.success)) { | |
params.success(params.parse ? JSON.parse(data) : data, textStatus, jqXHR); | |
} | |
}, | |
error : function(qXHR, textStatus, errorThrown) { | |
HD.hideSpin(); | |
console.log("Error in ajax: " + textStatus); | |
if(!_.isUndefined(params.error)) | |
params.error(qXHR, textStatus, errorThrown); | |
}, | |
beforeSend : function(jqXHR, settings) { | |
HD.showSpin(); | |
if(!_.isUndefined(params.beforeSend)) | |
params.beforeSend(jqXHR, settings); | |
} | |
}; | |
$.ajax($.extend(true, {}, ajaxParams, callbacks)); | |
} else { | |
var key = this.settings.local.key; | |
if(!_.isUndefined(params.key)) | |
key = params.key; | |
var finalData = this.getData(key); | |
if(params.zip) { | |
finalData = HD.decode_utf8(Iuppiter.decompress(finalData)); | |
} | |
if(params.parse && !_.isUndefined(finalData) && finalData != "") { | |
//console.log("Fetch LOCAL --> " + finalData); | |
try { | |
finalData = JSON.parse(finalData); | |
} catch(ex) { | |
finalData = ""; | |
} | |
} | |
if(_.isUndefined(params.success)) | |
return finalData; | |
else | |
params.success(finalData); | |
} | |
}; | |
HDDataPool.prototype.save = function(data, options) { | |
var self = this, | |
params = $.extend({}, { | |
parse : true, | |
zip : false | |
}, options); | |
finalData = _.isUndefined(data) ? self.params.ajax.data : data; | |
if(params.parse) | |
finalData = JSON.stringify(finalData); | |
if(params.zip) { | |
if(!_.isString(finalData)) | |
finalData = JSON.stringify(finalData); | |
finalData = Iuppiter.compress(HD.encode_utf8(finalData)); | |
} | |
if(this.settings.type == "AJAX") { | |
$.ajax( { | |
url : self.params.ajax.url, | |
data : finalData, | |
type: self.params.ajax.type, | |
dataType : self.params.ajax.dataType, | |
success : function(data) { | |
self.params.ajax.success(data); | |
}, | |
error : function(err) { | |
self.params.ajax.error(err.statusText) | |
} | |
}); | |
} else { | |
var key = this.settings.local.key; | |
if(!_.isUndefined(params.key)) | |
key = params.key; | |
return this.setData(key, finalData); | |
} | |
}; | |
HDDataPool.prototype.setData = function (key, data) { | |
if (this.settings.local.type==STORAGE_TYPE.NOKIA) { | |
this.SetPreferenceForKey(data, key); | |
} else if(this.settings.local.type==STORAGE_TYPE.HTML5) { | |
try { | |
window.localStorage.setItem(key, data); | |
} catch(e) { | |
console.log("Erro ao setitem do LocalStorage. Erro: " + e); | |
} | |
} else if (this.settings.local.type == STORAGE_TYPE.JSTORAGE) { | |
$.jStorage.set(key, data, this.settings.local.expire == DATAPOOL_EXPIRE.NEVER ? {} : { TTL : this.settings.local.expire }); | |
} else if(this.settings.local.type==STORAGE_TYPE.HTML5_EX) { | |
try { | |
if(this.settings.local.expire != DATAPOOL_EXPIRE.NEVER) | |
this.setTTLKey(key, this.settings.local.expire); | |
else | |
this.removeTTLKey(key); | |
window.localStorage.setItem(key, data); | |
} catch(e) { | |
console.log("Erro ao setitem do LocalStorage. Erro: " + e); | |
} | |
} | |
}; | |
HDDataPool.prototype.removeData = function (key) { | |
if (this.settings.local.type==STORAGE_TYPE.NOKIA) { | |
this.SetPreferenceForKey(null, key); | |
} else if(this.settings.local.type==STORAGE_TYPE.HTML5) { | |
try { | |
window.localStorage.removeItem(key); | |
} catch(e) { | |
console.log("Erro ao remover do LocalStorage. Erro: " + e); | |
} | |
} else if (this.settings.local.type == STORAGE_TYPE.JSTORAGE) { | |
$.jStorage.deleteKey(key); | |
} else if(this.settings.local.type==STORAGE_TYPE.HTML5_EX) { | |
try { | |
window.localStorage.removeItem(key); | |
this.removeTTLKey(key); | |
} catch(e) { | |
console.log("Erro ao remover do LocalStorage. Erro: " + e); | |
} | |
} | |
}; | |
HDDataPool.prototype.getData = function (key) { | |
if (this.settings.local.type==STORAGE_TYPE.NOKIA) { | |
return this.PreferenceForKey(key); | |
} else if(this.settings.local.type==STORAGE_TYPE.HTML5) { | |
return window.localStorage.getItem(key); | |
} else if (this.settings.local.type == STORAGE_TYPE.JSTORAGE) { | |
return $.jStorage.get(key, ""); | |
} else if(this.settings.local.type==STORAGE_TYPE.HTML5_EX) { | |
if(!this.checkTTLKey(key)) | |
return window.localStorage.getItem(key); | |
return ""; | |
} | |
}; | |
// TTL functions | |
// returns true it has elapsed the time, otherwise false | |
HDDataPool.prototype.checkTTLKey = function (key) { | |
var sSettime = window.localStorage.getItem(TTL_KEY + "_" + key), | |
settime = {}; | |
try { | |
if(sSettime == "" || sSettime == null || _.isUndefined(sSettime)) | |
return true; | |
settime = JSON.parse(sSettime); | |
var currDate = new Date(), | |
prevDate = new Date(settime.time); | |
if(currDate.getTime() - prevDate.getTime() >= settime.ttl) | |
return true; | |
return false; | |
} catch(ex) { | |
return true; | |
} | |
} | |
HDDataPool.prototype.setTTLKey = function (key, newTtl) { | |
var settime = { | |
time : new Date(), | |
ttl : _.isUndefined(newTtl) || !_.isNumber(newTtl) ? 0 : newTtl | |
}; | |
window.localStorage.setItem(TTL_KEY + "_" + key, JSON.stringify(settime)); | |
} | |
HDDataPool.prototype.removeTTLKey = function (key) { | |
this.removeData(TTL_KEY + "_" + key); | |
} | |
// DATA POOL GENERAL FUNCS | |
HDDataPool.prototype.prepareData = function(obj, removeEmpty) { | |
if(removeEmpty) { | |
var t = new Traverse(obj); | |
obj = t.map(function (item) { | |
var fRemove = false; | |
if(_.isArray(item) && item.length === 0) | |
fRemove = true; | |
else if(_.isUndefined(item)) | |
fRemove = true; | |
else if(_.isString(item) && item === "") | |
fRemove = true; | |
else if(_.isObject(item) && !_.isDate(item) && _.isEmpty(item)) | |
fRemove = true; | |
if(fRemove) | |
this.remove(); | |
}); | |
} | |
//return $.param(obj); | |
return JSON.stringify(obj); | |
//return obj; | |
}; | |
HDDataPool.prototype.checkSubmit = function(jqXHR, textStatus, errCodeDefault, errMessageDefatul, fShowError) { | |
var response = { | |
code: errCodeDefault, | |
message: errMessageDefatul | |
}; | |
if(jqXHR.responseText !== "") { | |
try { | |
response = JSON.parse(jqXHR.responseText); | |
} catch(ex) { | |
response = { | |
code: jqXHR.status, | |
message : jqXHR.responseText, | |
errors : [ { message: jqXHR.responseText } ] | |
} | |
} | |
} | |
var getErrorMessage = function(error) { | |
if(error.code === 404) { | |
HD.goto404(); | |
return ''; | |
} | |
if(error.code === 400 && error.message.indexOf("Payload content length greater than maximum allowed") !== -1) | |
error.message = HS.get("Payload content length greater than maximum allowed: <%= maxsize %>", { maxsize: CONST.MAX_UPLOAD }); | |
else if(error.code === 401) { | |
// check if needs verification or it is just a normal not authorized error | |
var errors = HD.getReponseHeaderNeedsVerification(jqXHR).split(","); | |
if(errors.length === 3) { | |
var email = errors[2]; | |
email = $.trim(email.replace('content-type', '')); | |
error.message = HS.get('The email <%= email %> needs to be verified! Check your mailbox and follow the instructions. If you have not received the email, <a id="verifyEmailError" href=""><strong>click here to receive again the verification email.<strong></a>', { email: email }); | |
HDM.get.login.verifyEmailId = errors[1]; | |
HDM.get.login.verifyEmail = email; | |
} else | |
error.message = HS.get(error.message); | |
} else | |
error.message = HS.get(error.message); | |
return error.message; | |
}; | |
if(_.isUndefined(response.code) || (response.code < 400 && textStatus === "success")) | |
return true; | |
if(fShowError) { | |
var msg = response.message ? response.message : (response.error ? response.error : "Erro de comunicação com o servidor. Tente novamente mais tarde!"); | |
if(response.errors && response.errors.length > 0) { | |
_.each(response.errors, function(error) { | |
HD.alert(getErrorMessage(error), ALERT_ERROR) ; | |
}); | |
} else | |
HD.alert(getErrorMessage(response), ALERT_ERROR) ; | |
} | |
console.log("textStatus --> " + textStatus + " - Status Text: " + jqXHR.statusText + " - Status --> " + jqXHR.status + " - ResponseText --> " + jqXHR.responseText); | |
return false; | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var gridItem = function(mData) { | |
var self = this; | |
self.cells = ko.observableArray(mData) | |
} | |
var HDGrid = function(options) { | |
var self = this; | |
self._forceNewPages = false; | |
self._searchQuery = {} | |
self._fullTextQuery = {} | |
self._curSortCol = ""; | |
self._curSortOrder = 1; | |
self.properties = $.extend(true, {}, { | |
id: "dtable", | |
AJAX_PATH: { | |
read: "", | |
delete: "" | |
}, | |
path: { | |
edit: "" | |
}, | |
esSearch: false, | |
cleanItemsBeforeGet: true, | |
showNoRecords: true, | |
showTotalRecords: true, | |
itemObj: null, | |
edgeType: CONST.edgeTypes.NONE, | |
columnsPerRow: 1, | |
paginate: false, | |
pagination: { | |
perPage: 25, | |
curPage: 1, | |
perPages: CONST.perPagesList | |
}, | |
$el: null, | |
$elAdvancedSearch: null, | |
initAvancedSearch: false, | |
classes: { | |
footer: ".table-footer", | |
paginate: { | |
disabled: "paginate_button_disabled", | |
active: "paginate_active", | |
normal: "paginate_button" | |
}, | |
advancedSearch: "" //".advanced-search" | |
}, | |
sortList: [], | |
sortListValue: [], | |
$elTableSpinner: $("#table-spinner"), | |
showLocalSpinner: false, | |
showGlobalSpinner: false, | |
spinnerControl: false, | |
googleAdd: false, | |
keywordFields: [], | |
keywordFieldsInfo: {}, | |
keywordFieldsMap: [], | |
keywordFieldsMapTo: [], | |
keywordFieldsOrderMap: [], | |
edgesPopulate: { nodes: true, extra: false }, | |
filter: false, | |
infiniteScroll: false, | |
afterGetData: false | |
}, options); | |
self.spinnerControlIsShown = ko.observable(false); | |
self.selectedItems = ko.observableArray([]); | |
self.hasSelected = ko.observable(false); | |
self.selected = ko.observable(false); | |
self.selected.subscribe(function() { | |
self.toggleSelect(self.selected.peek()); | |
}); | |
self.totalItems = ko.observable(0); | |
self.totalItemsText = ko.computed(function(){ | |
return HD.format.count(self.totalItems()); | |
}); | |
self.perPage = ko.observable(self.properties.pagination.perPage); | |
self.perPages = ko.observableArray(self.properties.pagination.perPages); | |
self.curPage = ko.observable(self.properties.pagination.curPage); | |
self.totalPages = ko.computed(function() { | |
return Math.ceil(self.totalItems()/self.perPage()); | |
}); | |
self.totalPagesText = ko.computed(function() { | |
return HD.format.count(Math.ceil(self.totalItems()/self.perPage())); | |
}); | |
self.resetPage = true; | |
self.populated = ko.observable(false); | |
self.isFirstPage = ko.computed(function(){ | |
return self.curPage() == 1; | |
}); | |
self.isLastPage = ko.computed(function(){ | |
return self.curPage() == self.totalPages(); | |
}); | |
self.pagBtns = [0,0,0,0,0]; | |
self.pagBtn1 = ko.observable(self.pagBtns[0]); | |
self.pagBtn2 = ko.observable(self.pagBtns[1]); | |
self.pagBtn3 = ko.observable(self.pagBtns[2]); | |
self.pagBtn4 = ko.observable(self.pagBtns[3]); | |
self.pagBtn5 = ko.observable(self.pagBtns[4]); | |
self.items = ko.observableArray([]); | |
self.subItems = ko.observableArray([]); | |
self.keywords = ko.observableArray(_.map(self.properties.keywordFields, function (keyWord) { | |
return { | |
type: keyWord, | |
description: HS.get(keyWord), | |
items: ko.observableArray([]) | |
}; | |
}));self.keywords = ko.observableArray(_.map(self.properties.keywordFields, function (keyWord) { | |
return { | |
type: keyWord, | |
description: HS.get(keyWord), | |
items: ko.observableArray([]) | |
}; | |
})); | |
self.selectedKeywords = ko.observableArray([]); | |
self.showTotalRecords = ko.observable(self.properties.showTotalRecords); | |
self.setShowTotalRecords = function(fShow) { | |
if(self.properties.showTotalRecords) | |
self.showTotalRecords(fShow); | |
} | |
self.showNoRecords = ko.computed(function() { | |
if(self.properties.showNoRecords) { | |
if(self.totalPages() === 0 && self.items().length === 0) { | |
self.setShowTotalRecords(false); | |
return true; | |
} | |
self.setShowTotalRecords(true); | |
return false; | |
} else { | |
self.setShowTotalRecords(true); | |
return false; | |
} | |
}); | |
self.showPagination = ko.observable(self.properties.paginate); | |
self.sortOrder = ko.observable(""); | |
self.sortList = ko.observableArray(self.properties.sortList); | |
// create the data pool for CRUD | |
self.dataPool = []; | |
self.dataPool["read"] = new HDDataPool({ type : "AJAX", | |
ajax : { | |
url : self.properties.AJAX_PATH.read | |
} | |
}); | |
self.dataPool["delete"] = new HDDataPool({ type : "AJAX", | |
ajax : { | |
url : self.properties.AJAX_PATH.delete | |
} | |
}); | |
self.properties.$elAdvancedSearch = $("#" + self.properties.id).find(self.properties.classes.advancedSearch); | |
if(self.properties.initAvancedSearch) | |
self.properties.$elAdvancedSearch.show("fast"); | |
else | |
self.properties.$elAdvancedSearch.hide("fast"); | |
// Infinit Scroll | |
self.infiniteScrollGettingData = false; | |
} | |
HDGrid.prototype.setSortOder = function(sort) { | |
var self = this; | |
self.sortOrder(sort); | |
} | |
HDGrid.prototype.changeSortOrder = function() { | |
var self = this; | |
if(self.isChangingSortOrder) | |
return; | |
self.isChangingSortOrder = true; | |
self.search(self._searchQuery, function() { | |
self.isChangingSortOrder = false; | |
}); | |
} | |
HDGrid.prototype.reset = function() { | |
var self = this; | |
self.curPage(1); | |
self.infiniteScrollNoData = false; | |
self.lastId = false; | |
} | |
HDGrid.prototype.changePerPage = function() { | |
var self = this; | |
self._forceNewPages = true; | |
var curPage = self.curPage(); | |
var totalPages = self.totalPages(); | |
if(curPage > totalPages) { | |
curPage = totalPages; | |
self.curPage(curPage); | |
} | |
self.gotoPage(curPage, true); | |
} | |
HDGrid.prototype.toggleAdvancedSearch = function() { | |
var self = this; | |
var $el = self.properties.$elAdvancedSearch; | |
if($el.length > 0 && $el.is(":visible")) { | |
$el.hide("fade"); | |
} else { | |
$el.show("fade"); | |
} | |
} | |
HDGrid.prototype.setAdvancedSearch = function(open) { | |
var self = this; | |
var $el = self.properties.$elAdvancedSearch; | |
if(open) { | |
$el.show("fade"); | |
} else { | |
$el.hide("fade"); | |
} | |
} | |
HDGrid.prototype.setPagBtn = function() { | |
var self = this; | |
var totalPages = self.totalPages(); | |
var curPage = self.curPage(); | |
if(totalPages < 5) { | |
// update with new pages | |
for(var i = 0; i < 5; i++) { | |
var page = i + 1; | |
if(page > totalPages) | |
self.pagBtns[i] = 0; | |
else | |
self.pagBtns[i] = page; | |
} | |
} else if(curPage === totalPages) { | |
// update with new pages | |
for(var i = 4; i >= 0 ; i--) { | |
if(curPage < 0) | |
self.pagBtns[i] = 0; | |
else | |
self.pagBtns[i] = curPage; | |
curPage--; | |
} | |
} else if(self.pagBtns.indexOf(curPage) === -1 || self._forceNewPages) { | |
// update with new pages | |
for(var i = 0; i < 5; i++) { | |
var page = curPage + i; | |
if(page > totalPages) | |
self.pagBtns[i] = 0; | |
else | |
self.pagBtns[i] = page; | |
} | |
} | |
self.pagBtn1(self.pagBtns[0]); | |
self.pagBtn2(self.pagBtns[1]); | |
self.pagBtn3(self.pagBtns[2]); | |
self.pagBtn4(self.pagBtns[3]); | |
self.pagBtn5(self.pagBtns[4]); | |
self._forceNewPages = false; | |
} | |
HDGrid.prototype.gotoPagBtn = function(pagBtn) { | |
var self = this; | |
var gotoPage = self.pagBtns[pagBtn]; | |
if(self.curPage() === gotoPage) | |
return; | |
self.curPage(gotoPage); | |
self.resetPage = false; | |
self.getData(function() { | |
console.log("gotoPage: " + gotoPage); | |
}, true); | |
} | |
HDGrid.prototype.gotoPage = function(gotoPage, forceGo, cb) { | |
var self = this; | |
if(!forceGo && self.curPage() === gotoPage) | |
return; | |
self.curPage(gotoPage); | |
self.resetPage = false; | |
self.getData(function() { | |
console.log("gotoPage: " + gotoPage); | |
if(cb) cb(); | |
}, true); | |
} | |
HDGrid.prototype.nextScroll = function(cb) { | |
var self = this; | |
if(self.infiniteScrollNoData) { | |
if(cb) cb(); | |
return; | |
} | |
self.infiniteScrollGettingData = true; | |
self.infiniteScrollLimit = self.properties.infiniteScroll.limitScrollNext; | |
var loader = HDM.get['loader.spin.infinite']; | |
if(loader && _.isFunction(loader.show)) | |
loader.show(); | |
var curPage = self.curPage(); | |
self.curPage(curPage + 1); | |
self.resetPage = false; | |
self.getData(function() { | |
if(loader && _.isFunction(loader.hide)) | |
loader.hide(); | |
self.infiniteScrollGettingData = false; | |
if(cb) cb(); | |
}, true); | |
} | |
HDGrid.prototype.getFooterEl = function() { | |
var self = this; | |
var properties = self.properties; | |
if(properties.infiniteScroll) | |
return []; | |
return $('#' + properties.id + ' ' + properties.classes.footer); | |
} | |
HDGrid.prototype.updateGridView = function() { | |
var self = this; | |
var properties = self.properties; | |
if(properties.infiniteScroll) | |
return; | |
var $footer = self.getFooterEl(); | |
if(!properties.paginate) { | |
$footer.hide(); | |
return; | |
} | |
var curPage = self.curPage(); | |
var clsDisabled = properties.classes.paginate.disabled; | |
var clsNormal = properties.classes.paginate.normal; | |
var clsActive = properties.classes.paginate.active; | |
var totalPages = self.totalPages(); | |
if(curPage === 1 && totalPages > 1) { | |
$footer.find(".first").addClass(clsDisabled); | |
$footer.find(".previous").addClass(clsDisabled); | |
$footer.find(".next").removeClass(clsDisabled); | |
$footer.find(".last").removeClass(clsDisabled); | |
} else if(curPage === totalPages && totalPages > 1) { | |
$footer.find(".first").removeClass(clsDisabled); | |
$footer.find(".previous").removeClass(clsDisabled); | |
$footer.find(".next").addClass(clsDisabled); | |
$footer.find(".last").addClass(clsDisabled); | |
} else if(totalPages === 1) { | |
$footer.find(".first").addClass(clsDisabled); | |
$footer.find(".previous").addClass(clsDisabled); | |
$footer.find(".next").addClass(clsDisabled); | |
$footer.find(".last").addClass(clsDisabled); | |
} else if(totalPages === 0) { | |
$footer.find(".first").addClass(clsDisabled); | |
$footer.find(".previous").addClass(clsDisabled); | |
$footer.find(".next").addClass(clsDisabled); | |
$footer.find(".last").addClass(clsDisabled); | |
} else { | |
$footer.find(".first").removeClass(clsDisabled); | |
$footer.find(".previous").removeClass(clsDisabled); | |
$footer.find(".next").removeClass(clsDisabled); | |
$footer.find(".last").removeClass(clsDisabled); | |
} | |
self.setPagBtn(); | |
for(var i = 0; i < 5; i++) { | |
if(curPage === self.pagBtns[i]) | |
$footer.find("#pagBtn" + i).removeClass(clsNormal).addClass(clsActive); | |
else | |
$footer.find("#pagBtn" + i).removeClass(clsActive).addClass(clsNormal); | |
} | |
$footer.show(); | |
} | |
HDGrid.prototype.checkCanGoto = function(type) { | |
var self = this; | |
var properties = self.properties; | |
var $footer = self.getFooterEl(); | |
var clsDisabled = properties.classes.paginate.disabled; | |
return !$footer.find(type).hasClass(clsDisabled); | |
} | |
HDGrid.prototype.gotoFirst = function() { | |
var self = this; | |
if(self.checkCanGoto(".first")) | |
self.gotoPage(1); | |
} | |
HDGrid.prototype.gotoNext = function() { | |
var self = this; | |
if(self.checkCanGoto(".next")) | |
self.gotoPage(self.curPage() + 1); | |
} | |
HDGrid.prototype.gotoPrev = function() { | |
var self = this; | |
if(self.checkCanGoto(".previous")) | |
self.gotoPage(self.curPage() - 1); | |
} | |
HDGrid.prototype.gotoLast = function() { | |
var self = this; | |
if(self.checkCanGoto(".last")) | |
self.gotoPage(self.totalPages()); | |
} | |
HDGrid.prototype.setNextScroll = function(data, query) { | |
var self = this; | |
if(self.properties.infiniteScroll) { | |
if(!self.properties.paginate) { | |
var property = self.properties.infiniteScroll.nextIdName; | |
if (!_.isUndefined(property)) { | |
var len = data.length; | |
if (len > 0) { | |
var item = data[len - 1]; | |
var lastId = item[property]; | |
if (lastId) { | |
if (self.lastId === lastId) { | |
self.infiniteScrollNoData = true; | |
} else { | |
self.lastId = lastId; | |
} | |
} | |
} else { | |
self.infiniteScrollNoData = true; | |
} | |
} | |
} else if(data.length === 0 || data.length < query.perPage) { | |
self.infiniteScrollNoData = true; | |
} | |
} | |
} | |
HDGrid.prototype.setItems = function(aData) { | |
var self = this; | |
var properties = self.properties; | |
if(properties.columnsPerRow === 1) { | |
self.items(aData); | |
} else { | |
var itemObj = properties.itemObj; | |
var newItems = []; | |
var cells = []; | |
for (var i = 0; i < aData.length; i++) { | |
var obj = aData[i]; | |
if(cells.length < properties.columnsPerRow) | |
cells.push(obj); | |
else { | |
newItems.push(new gridItem(cells)); | |
cells = []; | |
cells.push(obj); | |
} | |
} | |
if(cells.length > 0) | |
newItems.push(new gridItem(cells)); | |
self.items(newItems); | |
} | |
} | |
HDGrid.prototype.toggleSelect = function(value) { | |
var self = this; | |
var aSelected = []; | |
_.each(self.items(), function(item){ | |
item.selected(_.isUndefined(value) ? !item.selected() : value); | |
if(item.selected()) | |
aSelected.push(item); | |
}); | |
self.selectedItems(aSelected); | |
self.hasSelected(aSelected.length > 0); | |
} | |
HDGrid.prototype.checkSelected = function(value) { | |
var self = this; | |
var aSelected = []; | |
_.each(self.items(), function(item){ | |
if(item.selected()) | |
aSelected.push(item); | |
}); | |
self.selectedItems(aSelected); | |
self.hasSelected(aSelected.length > 0); | |
} | |
HDGrid.prototype.setSearchQuery = function(query) { | |
var self = this; | |
self._searchQuery = query; | |
} | |
HDGrid.prototype.setFullTextQuery = function(query) { | |
var self = this; | |
self._fullTextQuery = query | |
} | |
HDGrid.prototype.setSortOrder = function(sort) { | |
var self = this; | |
self.sortOrder(sort); | |
} | |
HDGrid.prototype.setSort = function(sort) { | |
var self = this; | |
self._sort = sort; | |
} | |
HDGrid.prototype.setKeywordFields = function(keywordFields) { | |
var self = this; | |
self.properties.keywordFields = keywordFields; | |
self.keywords(_.map(self.properties.keywordFields, function (keyWord) { | |
return { | |
type: keyWord, | |
description: HS.get(keyWord), | |
items: ko.observableArray([]) | |
}; | |
})); | |
} | |
HDGrid.prototype.setReadUrl = function(url) { | |
var self = this; | |
var dataPool = self.dataPool.read; | |
dataPool.settings.ajax.url = url; | |
} | |
HDGrid.prototype.search = function(query, cb) { | |
var self = this; | |
self._searchQuery = query; | |
self._forceNewPages = true; | |
self.curPage(1); | |
self.getData(function() { | |
if(cb) cb(); | |
console.log(query); | |
}, true); | |
} | |
HDGrid.prototype.length = function() { | |
var self = this; | |
return self.items().length; | |
} | |
HDGrid.prototype.getSelected = function() { | |
var self = this; | |
var items = self.items(); | |
var aSelected = []; | |
_.each(items, function(item) { | |
if(item.selected()) | |
aSelected.push(item); | |
}); | |
return aSelected; | |
} | |
HDGrid.prototype.newItem = function() { | |
var self = this; | |
HD.changePage(HD.url.format.id(self.properties.path.edit, "new")); | |
} | |
HDGrid.prototype.editItem = function() { | |
var self = this; | |
var aSelected = self.getSelected(); | |
if(aSelected.length === 0 ) | |
return; | |
if(aSelected.length !== 1 ) { | |
HD.alert(HS.get("You can only edit one item. Please select one item and try again."), ALERT_ERROR); | |
return; | |
} | |
HD.changePage(HD.url.format.id(self.properties.path.edit, aSelected[0]._id)); | |
} | |
HDGrid.prototype.removeItem = function() { | |
var self = this; | |
var aSelected = self.getSelected(); | |
if(aSelected.length === 0 ) { | |
HD.alert(HS.get('Select one item to delete.'), ALERT_ERROR); | |
return; | |
} | |
if(aSelected.length !== 1 ) { | |
HD.alert(HS.get("You can only remove one item. Please select one item and try again."), ALERT_ERROR); | |
return; | |
} | |
var retFunc = function(ret) { | |
if(ret === RET_CANCEL) | |
return; | |
var dataPool = self.dataPool.delete; | |
var errMsg = HS.get("Error trying to communicate with emprego.net. Try again later!"); | |
var ajaxParams = { | |
url: dataPool.settings.ajax.url + "/" + aSelected[0]._id, | |
success : function(data, textStatus, jqXHR) { | |
if(dataPool.checkSubmit(jqXHR, textStatus, "500", errMsg, true)) { | |
var items = self.items(); | |
var curPage = self.curPage(); | |
if(items.length === 0 && self.totalPages() > 1) | |
curPage--; | |
self.gotoPage(curPage, true, function() { | |
HD.alert(HS.get("Successfully removed item."), ALERT_INFO); | |
}); | |
} | |
}, | |
error : function(jqXHR, textStatus, errorThrown) { | |
dataPool.checkSubmit(jqXHR, textStatus, "500", errMsg, true); | |
HD.alert(HS.get("It was not possible to remove this item! Try again later."), ALERT_ERROR); | |
} | |
}; | |
dataPool.DELETE(ajaxParams, self.properties.$elTableSpinner); | |
}; | |
HD.showConfirm(HS.get("Are you sure you want to remove this item?"), retFunc); | |
} | |
HDGrid.prototype.toggleKeyword = function (item, value) { | |
var self = this; | |
if(!_.isUndefined(value)) | |
item.selected(value); | |
if (item.selected()) | |
self.selectedKeywords.push(item); | |
else | |
self.selectedKeywords.remove(function (itemToRemove) { return itemToRemove.id == item.id; } ); | |
self.getData(function () { | |
console.log("toggleKeyword: " + item.text + " (" + item.selected() + ")"); | |
}, true); | |
}; | |
HDGrid.prototype.liveAdd = function(item) { | |
var self = this; | |
var itemObj = self.properties.itemObj; | |
var add = true; | |
if(itemObj != null) { | |
var edgeItem = null; | |
if(!_.isUndefined(item.node) && !_.isUndefined(item.status) && self.properties.edgeType !== CONST.edgeTypes.NONE) { | |
edgeItem = item; | |
item = item.node; | |
} | |
if(_.isObject(item)){ | |
if(edgeItem != null && !_.isUndefined(edgeItem) && edgeItem.extra && edgeItem.extra !== '' && !_.isObject(edgeItem.extraNode)) | |
add = false; | |
} else | |
add = false; | |
if(add) { | |
var obj = new itemObj(item, edgeItem); | |
if (_.isUndefined(obj.selected)) | |
obj.selected = ko.observable(false); | |
obj.selected.subscribe(function () { | |
self.checkSelected(); | |
}); | |
// add the new item to the beginning | |
var aItems = self.items(); | |
aItems.unshift(obj) | |
self.totalItems(HD.checkNumber(self.totalItems()) + 1); | |
self.items(aItems); | |
} | |
} | |
} | |
HDGrid.prototype.populate = function(data, query) { | |
var self = this; | |
var aData = []; | |
var itemObj = self.properties.itemObj; | |
var dataItem = _.isUndefined(data.count) ? data : data.items; | |
var totalItems = HD.checkNumber(_.isUndefined(data.count) ? data.length : data.count); | |
var addedGoogleAdd = false; | |
self.setNextScroll(dataItem, query); | |
var _addObj = function(item, edgeItem) { | |
var add = true; | |
if(_.isObject(item)){ | |
if(edgeItem != null && !_.isUndefined(edgeItem) && edgeItem.extra && edgeItem.extra !== '' && !_.isObject(edgeItem.extraNode)) | |
add = false; | |
} else | |
add = false; | |
if(add) { | |
var obj = new itemObj(item, edgeItem); | |
if (_.isUndefined(obj.selected)) | |
obj.selected = ko.observable(false); | |
obj.selected.subscribe(function () { | |
self.checkSelected(); | |
}); | |
aData.push(obj); | |
} else | |
totalItems--; | |
} | |
if(itemObj != null) { | |
_.each(dataItem, function(item, key) { | |
var edgeItem = null; | |
if(!_.isUndefined(item.node) && !_.isUndefined(item.status) && self.properties.edgeType !== CONST.edgeTypes.NONE){ | |
edgeItem = item; | |
item = item.node; | |
} | |
if(self.properties.googleAdd) { | |
if(self.properties.googleAdd.idx === key && !addedGoogleAdd) { | |
aData.push(new itemObj({ isAd: true })); | |
addedGoogleAdd = true; | |
} else | |
_addObj(item, edgeItem); | |
} else | |
_addObj(item, edgeItem); | |
}); | |
} | |
if(self.properties.googleAdd && !addedGoogleAdd) | |
aData.push(new itemObj({ isAd: true })); | |
var dataObj = { count: totalItems, items: aData }; | |
if(self.infiniteScrollGettingData && self.properties.infiniteScroll && self.items().length > 0) { | |
aCurItems = self.items(); | |
_.each(aData, function (item) { | |
aCurItems.push(item); | |
}); | |
dataObj.items = aCurItems; | |
} | |
if(self.properties.filter) | |
dataObj = self.properties.filter(dataObj); | |
self.totalItems(HD.checkNumber(dataObj.count)); | |
self.setItems(dataObj.items); | |
self.updateGridView(); | |
} | |
HDGrid.prototype.showSpin = function() { | |
var self = this; | |
if(self.properties.showGlobalSpinner) | |
HD.showSearchPageSpinner(); | |
else if(self.properties.showLocalSpinner) | |
$(self.properties.showLocalSpinner).show(); | |
if(self.properties.spinnerControl) | |
self.spinnerControlIsShown(false); | |
} | |
HDGrid.prototype.hideSpin = function() { | |
var self = this; | |
if(self.properties.showGlobalSpinner) | |
HD.hideSearchPageSpinner(); | |
else if(self.properties.showLocalSpinner) | |
$(self.properties.showLocalSpinner).hide(); | |
if(self.properties.spinnerControl) | |
self.spinnerControlIsShown(true); | |
} | |
HDGrid.prototype.getSpinEl = function() { | |
var self = this; | |
return self.properties.showGlobalSpinner || self.properties.showLocalSpinner ? [] : self.properties.$elTableSpinner; | |
} | |
HDGrid.prototype._getTermKey = function(key) { | |
var self = this; | |
if(self.properties.keywordFieldsInfo && self.properties.keywordFieldsInfo[key] && self.properties.keywordFieldsInfo[key].searchFieldPostFix) { | |
return key + self.properties.keywordFieldsInfo[key].searchFieldPostFix; | |
} | |
return key; | |
} | |
HDGrid.prototype._prepareESData = function(query) { | |
var self = this; | |
var keys = _.keys(query); | |
var aESQuery = []; | |
_.each(keys, function(key) { | |
var termKey = self._getTermKey(key); | |
var oTerm = {}; | |
var value = query[key]; | |
if(_.isString(value)) { | |
oTerm['term'] = {}; | |
oTerm.term[termKey] = value; | |
} else if(_.isArray(value)) { | |
oTerm['terms'] = {}; | |
oTerm.terms[termKey] = value; | |
} else if(key === 'geo_distance') { | |
oTerm[key] = value; | |
} else { | |
oTerm['term'] = {}; | |
oTerm.term[termKey] = value; | |
} | |
aESQuery.push(oTerm); | |
}); | |
return aESQuery; | |
} | |
HDGrid.prototype._prepareESSort = function(sort) { | |
var keys = _.keys(sort); | |
var aESSort = []; | |
_.each(keys, function(key) { | |
var oSort = { }; | |
oSort[key] = sort[key] === 1 ? { 'order': 'asc'} : { 'order': 'desc'}; | |
aESSort.push(oSort); | |
}); | |
return aESSort; | |
} | |
HDGrid.prototype.getData = function(cb, auth) { | |
var self = this; | |
if(self.resetPage) | |
self.curPage(1); | |
if(self.properties.esSearch) | |
self.getDataES(cb, auth); | |
else | |
self.getDataMongo(cb, auth); | |
} | |
HDGrid.prototype.getDataES = function(cb, auth) { | |
if(!auth) { | |
cb(); | |
return; | |
} | |
var self = this; | |
var dataPool = self.dataPool.read; | |
var errMsg = HS.get("Error trying to communicate with emprego.net. Try again later!"); | |
var sNoValue = HS.get('[no value]'); | |
self.showSpin(); | |
var data = { esSearch: true, mustAndFilters: [] }; | |
// Query | |
if(!_.isEmpty(self._fullTextQuery)) { | |
data.esQuery = self._fullTextQuery; | |
} | |
// Filters | |
var edgeQuery = {}; | |
if(self.properties.edgeType && self.properties.edgeType !== CONST.edgeTypes.NONE) | |
data.mustAndFilters.push({ terms: { edgeType: [self.properties.edgeType] } }); | |
if(!_.isEmpty(self._searchQuery)) | |
data.mustAndFilters = _.union(data.mustAndFilters, self._prepareESData(self._searchQuery)); | |
if (!_.isEmpty(self.selectedKeywords())){ | |
var keyWordFilter = {}; | |
_.each(self.selectedKeywords(), function(item){ | |
var type = item.type; | |
if(!keyWordFilter.hasOwnProperty(type)) | |
keyWordFilter[type] = { $in: [] }; | |
var value = item.text; | |
if(self.properties.keywordFieldsMapTo && self.properties.keywordFieldsMapTo[type] && _.isFunction(self.properties.keywordFieldsMapTo[type])) | |
value = self.properties.keywordFieldsMapTo[type](value); | |
if(value === sNoValue) | |
keyWordFilter[type] = sNoValue; | |
else | |
keyWordFilter[type].$in.push(value); | |
}); | |
var aESFilters = []; | |
var keyWordFilterKeys = _.keys(keyWordFilter); | |
_.each(keyWordFilterKeys, function(key) { | |
var termKey = self._getTermKey(key); | |
var objTerm = {}; | |
if(keyWordFilter[key] === sNoValue) { | |
objTerm = { missing: { field: key } }; | |
} else { | |
objTerm = { terms: {} }; | |
objTerm.terms[termKey] = keyWordFilter[key].$in; | |
} | |
aESFilters.push(objTerm) | |
}); | |
data.mustAndFilters = _.union(data.mustAndFilters, aESFilters); | |
} | |
// Sort | |
if(self.sortOrder() !== "") { | |
data = $.extend(true, {}, { | |
esSort: self._prepareESSort(self.properties.sortListValue[parseInt(self.sortOrder())]) | |
}, data); | |
} | |
if(self._sort && !_.isEmpty(self._sort)) { | |
if(_.isUndefined(data.sort)) | |
data.sort = []; | |
data.esSort = _.union(data.esSort, self._prepareESSort(self._sort)) | |
} | |
// Aggregations | |
if(self.properties.aggregations) { | |
data.esAggs = self.properties.aggregations; | |
} | |
// Other info | |
if(self.properties.edgeType && self.properties.edgesPopulate && self.properties.edgesPopulate.nodes) | |
data.populateNodes = self.properties.edgesPopulate.nodes; | |
if(self.properties.edgeType && self.properties.edgesPopulate && self.properties.edgesPopulate.extra) | |
data.populateExtra = self.properties.edgesPopulate.extra; | |
if(self.properties.infiniteScroll) { | |
if(self.properties.paginate) { | |
if(self.curPage() === 1) | |
data.limit = self.properties.infiniteScroll.defaultLimit; | |
else | |
data.limit = self.infiniteScrollLimit; | |
} else { | |
if (self.infiniteScrollLimit && self.lastId) { | |
data.limit = self.infiniteScrollLimit; | |
data.lastId = self.lastId; | |
} else { | |
data.limit = self.properties.infiniteScroll.defaultLimit; | |
} | |
} | |
} else { | |
data.limit = self.perPage(); | |
} | |
var query = { | |
page: self.curPage(), | |
perPage: data.limit | |
}; | |
var ajaxParams = { | |
url: dataPool.settings.ajax.url + (self.properties.paginate ? ("?" + $.param(query)) : ""), | |
data: dataPool.prepareData(data), | |
success : function(data, textStatus, jqXHR) { | |
if(dataPool.checkSubmit(jqXHR, textStatus, "500", errMsg, true)) { | |
self.populated(false); | |
self.hideSpin(); | |
if(self.properties.edgeType !== CONST.edgeTypes.NONE) | |
data = data[self.properties.edgeType]; | |
if(data.aggregate) { | |
// cleaning items | |
_.each(self.keywords(), function(key){ | |
key.items.removeAll(); | |
}); | |
var selectedIds = _.pluck(self.selectedKeywords(), "id"); | |
var keywordsHash = _.zipObject(self.properties.keywordFields, self.keywords()); | |
_.each(keywordsHash, function(key) { | |
var itemAgg = data.aggregate[key.type]; | |
if(itemAgg && itemAgg.buckets && itemAgg.buckets.length > 0) { | |
var buckets = itemAgg.buckets; | |
_.each(buckets, function(bucket) { | |
var type = key.type; | |
var rawValue = bucket.key; | |
var value = bucket.key; | |
if(value !== '' && !_.isUndefined(value) && value != null && bucket.doc_count > 0) { | |
if (self.properties.keywordFieldsMap && self.properties.keywordFieldsMap[type] && _.isFunction(self.properties.keywordFieldsMap[type])) | |
value = self.properties.keywordFieldsMap[type](value); | |
var keywordItem = { | |
idValue: rawValue, | |
idValueInt: parseInt(rawValue), | |
id: type + "_" + rawValue, | |
text: value || sNoValue, | |
type: type, | |
count: bucket.doc_count, | |
countText: HD.format.count(bucket.doc_count.toString()), | |
selected: ko.observable(false) | |
}; | |
var wasSelected = _.contains(selectedIds, keywordItem.id); | |
keywordItem.selected(wasSelected); | |
keywordsHash[keywordItem.type].items.push(keywordItem); | |
} | |
}); | |
} | |
}); | |
var ordeMap = self.properties.keywordFieldsOrderMap; | |
var keys = _.keys(ordeMap); | |
_.each(keys, function(key) { | |
var hash = keywordsHash[key]; | |
if(!_.isUndefined(hash)) { | |
var oderItems = hash.items().sortBy(ordeMap[key]); | |
hash.items(oderItems); | |
} | |
}); | |
} | |
self.populate(data, query); | |
if(_.isFunction(self.properties.afterGetData)) | |
self.properties.afterGetData(); | |
self.populated(true); | |
if (cb) cb(data); | |
} | |
}, | |
error : function(jqXHR, textStatus, errorThrown) { | |
self.hideSpin(); | |
dataPool.checkSubmit(jqXHR, textStatus, "500", errMsg, true); | |
if(cb) cb(); | |
} | |
}; | |
// cleaning items | |
_.each(self.keywords(), function(key){ | |
key.items.removeAll(); | |
}); | |
if(self.properties.cleanItemsBeforeGet) | |
self.items([]); | |
// getting data | |
dataPool.POST(ajaxParams, self.getSpinEl()); | |
} | |
HDGrid.prototype.getDataMongo = function(cb, auth) { | |
if(!auth) { | |
cb(); | |
return; | |
} | |
var self = this; | |
var dataPool = self.dataPool.read; | |
var errMsg = HS.get("Error trying to communicate with emprego.net. Try again later!"); | |
var query = { | |
page: self.curPage(), | |
perPage: self.perPage() | |
}; | |
self.showSpin(); | |
var data = {}; | |
var edgeQuery = {}; | |
if(self.properties.edgeType && self.properties.edgeType !== CONST.edgeTypes.NONE) | |
edgeQuery = { edgeType: [self.properties.edgeType] }; | |
if(!_.isEmpty(self._searchQuery)) | |
data = _.merge(edgeQuery, self._searchQuery); | |
else | |
data = edgeQuery; | |
if(self.sortOrder() !== "") | |
data = $.extend(true, {}, { | |
sort: self.properties.sortListValue[parseInt(self.sortOrder())] | |
}, data); | |
if (!_.isEmpty(self.selectedKeywords())){ | |
var keyWordFilter= {}; | |
_.each(self.selectedKeywords(), function(item){ | |
var type = item.type; | |
if(!keyWordFilter.hasOwnProperty(type)) | |
keyWordFilter[type] = { $in: [] }; | |
var value = item.text; | |
if(self.properties.keywordFieldsMapTo && self.properties.keywordFieldsMapTo[type] && _.isFunction(self.properties.keywordFieldsMapTo[type])) | |
value = self.properties.keywordFieldsMapTo[type](value); | |
keyWordFilter[type].$in.push(value); | |
}); | |
data = $.extend(true, {}, keyWordFilter, data); | |
} | |
if (self.properties.keywordFields && _.isArray(self.properties.keywordFields) && self.properties.keywordFields.length > 0) | |
query = $.extend(true, {}, { | |
aggregate: true | |
}, query); | |
if(self.properties.edgeType && self.properties.edgesPopulate && self.properties.edgesPopulate.nodes) | |
data.populateNodes = self.properties.edgesPopulate.nodes; | |
if(self.properties.edgeType && self.properties.edgesPopulate && self.properties.edgesPopulate.extra) | |
data.populateExtra = self.properties.edgesPopulate.extra; | |
if(self.properties.infiniteScroll) { | |
if(self.properties.paginate) { | |
data.page = self.curPage(); | |
if(data.page === 1) | |
data.limit = self.properties.infiniteScroll.defaultLimit; | |
else | |
data.limit = self.infiniteScrollLimit; | |
} else { | |
if (self.infiniteScrollLimit && self.lastId) { | |
data.limit = self.infiniteScrollLimit; | |
data.lastId = self.lastId; | |
} else { | |
data.limit = self.properties.infiniteScroll.defaultLimit; | |
} | |
} | |
} | |
var ajaxParams = { | |
url: dataPool.settings.ajax.url + (self.properties.paginate ? ("?" + $.param(query)) : ""), | |
data: dataPool.prepareData(data), | |
success : function(data, textStatus, jqXHR) { | |
if(dataPool.checkSubmit(jqXHR, textStatus, "500", errMsg, true)) { | |
self.hideSpin(); | |
var sNoValue = HS.get('[no value]'); | |
if(self.properties.edgeType !== CONST.edgeTypes.NONE) | |
data = data[self.properties.edgeType]; | |
if(self.properties.keywordFields.length > 0 && data.aggregate){ | |
// cleaning items | |
_.each(self.keywords(), function(key){ | |
key.items.removeAll(); | |
}); | |
var selectedIds = _.pluck(self.selectedKeywords(), "id"); | |
var keywordsHash = _.zipObject(self.properties.keywordFields, self.keywords()); | |
_.each(data.aggregate, function(i){ | |
if (keywordsHash.hasOwnProperty(i._id.type)) { | |
var type = i._id.type; | |
var value = i._id.value; | |
if(self.properties.keywordFieldsMap && self.properties.keywordFieldsMap[type] && _.isFunction(self.properties.keywordFieldsMap[type])) | |
value = self.properties.keywordFieldsMap[type](value); | |
var keywordItem = { | |
idValue: i._id.value, | |
idValueInt: parseInt(i._id.value), | |
id: type + "_" + i._id.value, | |
text: value || sNoValue, | |
type: type, | |
count: i.total, | |
countText: i.total > 100000 ? "100.000+" : i.total.toString(), | |
selected: ko.observable(false) | |
}; | |
var wasSelected = _.contains(selectedIds, keywordItem.id); | |
keywordItem.selected(wasSelected); | |
keywordsHash[keywordItem.type].items.push(keywordItem); | |
} | |
}); | |
var ordeMap = self.properties.keywordFieldsOrderMap; | |
var keys = _.keys(ordeMap); | |
_.each(keys, function(key) { | |
var hash = keywordsHash[key]; | |
if(!_.isUndefined(hash)) { | |
var oderItems = hash.items().sortBy(ordeMap[key]); | |
hash.items(oderItems); | |
} | |
}); | |
} | |
self.populate(data, query); | |
if(_.isFunction(self.properties.afterGetData)) | |
self.properties.afterGetData(); | |
if (cb) cb(data); | |
} | |
}, | |
error : function(jqXHR, textStatus, errorThrown) { | |
self.hideSpin(); | |
dataPool.checkSubmit(jqXHR, textStatus, "500", errMsg, true); | |
if(cb) cb(); | |
} | |
}; | |
// cleaning items | |
_.each(self.keywords(), function(key){ | |
key.items.removeAll(); | |
}); | |
if(self.properties.cleanItemsBeforeGet) | |
self.items([]); | |
// getting data | |
dataPool.POST(ajaxParams, self.getSpinEl()); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// VIEWS | |
function HDValidation(options) { | |
var opts = $.extend({}, { | |
validateMessage: true, | |
cleanMessages: true, | |
showErrorInformation: true, | |
validateOffscreen: false, | |
alertAreaId: ALERT_ID, | |
doNotScrollToTop: false, | |
removeErrorMsgsNoErrorIds: [] | |
}, options); | |
this.errorMessages = []; | |
this.oneAlert = false; | |
this.validateMessage = opts.validateMessage; | |
this.showErrorInformation = opts.showErrorInformation; | |
this.invalidCls = "field_hilite_error"; | |
this.cleanIds = []; | |
// this.cleanMessages = _.isUndefined(cleanMessages) ? true : cleanMessages; | |
this.cleanMessages = opts.cleanMessages; | |
this.validateOffscreen = opts.validateOffscreen; | |
this.alertAreaId = opts.alertAreaId; | |
this.doNotScrollToTop = opts.doNotScrollToTop; | |
this.removeErrorMsgsNoErrorIds = opts.removeErrorMsgsNoErrorIds; | |
} | |
HDValidation.prototype.processError = function(isError, value, error, id) { | |
var self = this; | |
var aErrs = self.errorMessages; | |
if(isError) { | |
var fAdded = false; | |
_.each(aErrs, function(err) { | |
if(err.id === id && err.error !== error && err.error.indexOf(error) === -1 && error !== "") { | |
err.error += "<br />" + error; | |
fAdded = true; | |
} | |
}); | |
if(!fAdded && error !== "") { | |
aErrs.push({ id: id, error: error }); | |
} | |
} | |
} | |
HDValidation.prototype.getElement = function(id) { | |
var self = this; | |
var $elDataBind = $('[data-validate-el="' + id + '"]'); | |
if($elDataBind.length > 0) | |
return $elDataBind; | |
return HD.getDataBindEl(id); | |
} | |
HDValidation.prototype.cleanupMsgs = function(id) { | |
HD.resetAlert(false, this.alertAreaId); | |
if(!this.cleanMessages) | |
return; | |
if(id) { | |
var $elDataBind = this.getElement(id); | |
if($elDataBind && $elDataBind.length > 0) { | |
var $parent = $elDataBind.parent(); | |
var $elMsg = $parent.find("[data-validatemessage]"); | |
if($elMsg.length > 0) | |
$elMsg.hide(); | |
if(HD.getDataBindType(id) === "checked") | |
$parent.removeClass(this.invalidCls); | |
else | |
$elDataBind.removeClass(this.invalidCls); | |
} | |
} else { | |
if(this.validateMessage) | |
$("[data-validatemessage]").hide(); | |
$("." + this.invalidCls).removeClass(this.invalidCls); | |
} | |
} | |
HDValidation.prototype.cleanupMsg = function(id) { | |
HD.resetAlert(false, this.alertAreaId); | |
var $elDataBind = this.getElement(id); | |
if($elDataBind && $elDataBind.length > 0) { | |
var $parent = $elDataBind.parent(); | |
var $elMsg = $parent.find("[data-validatemessage]"); | |
if($elMsg.length > 0) | |
$elMsg.hide(); | |
if(HD.getDataBindType(id) === "checked") | |
$parent.removeClass(this.invalidCls); | |
else | |
$elDataBind.removeClass(this.invalidCls); | |
} | |
} | |
HDValidation.prototype.showValidationErrors = function(modelId) { | |
var self = this; | |
var count = self.errorMessages.length; | |
var hasError = false; | |
self.cleanupMsgs(modelId); | |
_.each(self.removeErrorMsgsNoErrorIds, function(id) { | |
self.cleanupMsg(id); | |
}); | |
HD.popover.hideAll(); | |
if(count > 0) { | |
// clean the ids | |
_.each(self.cleanIds, function(item) { | |
item.model[item.id](item.value); | |
}); | |
var message = "<h4>" + HS.get("Validation Error") + "</h4><br />"; | |
if(self.validateMessage && self.showErrorInformation) | |
HD.alert(HS.get('Valation errors. Please check your fields for any errors!'), ALERT_ERROR, true, null, this.alertAreaId); | |
for(var i = 0; i < count; i++) { | |
var msg = self.errorMessages[i].error; | |
if(self.oneAlert) | |
message += msg + "<br />"; | |
else { | |
if(self.validateMessage) { | |
var id = self.errorMessages[i].id; | |
var $elValidate = $("[data-validatemessage='" + id + "']"); | |
var $elDataBind = self.getElement(id); | |
if($elDataBind && $elDataBind.length > 0) { | |
// try to find the where the validation message goes | |
var isChecked = HD.getDataBindType(id) === "checked"; // can be radio or checkbox | |
var $elAddValidation; | |
var $elAddInvalid; | |
if(isChecked) { | |
$elAddValidation = $elDataBind.parents(".form-group"); | |
if($elAddValidation.length === 0) | |
$elAddValidation = $elDataBind.parents(".input-group"); | |
if($elAddValidation.length === 0) | |
$elAddValidation = $elDataBind.parents(".control-group"); | |
if($elAddValidation.length === 0) | |
$elAddValidation = $elDataBind.parents(".highlight"); | |
if($elAddValidation.length === 0) | |
$elAddValidation = $elDataBind.parent().parent(); | |
$elAddInvalid = $elAddValidation; | |
} else { | |
$elAddValidation = $elDataBind.parent(); | |
$elAddInvalid = $elDataBind; | |
} | |
if($elValidate.length > 0) { | |
$elValidate.html(msg); | |
$elValidate.show(); | |
} else { | |
var html = '<div data-validatemessage="' + id + '" class="label field_warning">' + msg + '</div>'; | |
$elAddValidation.append(html); | |
} | |
$elAddInvalid.addClass(self.invalidCls); | |
} else | |
HD.alert(msg, ALERT_ERROR); | |
} else | |
HD.alert(msg, ALERT_ERROR); | |
} | |
} | |
if(self.oneAlert) | |
HD.alert(message); | |
hasError = true; | |
} | |
self.errorMessages = []; | |
self.cleanIds = []; | |
//if(hasError && !self.doNotScrollToTop) { | |
// $('body,html').stop(true,true).animate({ | |
// 'scrollTop': $(ALERT_ID).offset().top | |
// }, 500); | |
//} | |
return hasError; | |
} | |
HDValidation.prototype.getValue = function(model, id, getId, isHtml) { | |
var value = ""; | |
if(getId && id.indexOf("guid") !== -1) | |
value = HD.getValueByGuid(model, id, getId); | |
else if(getId && _.isArray(model)) | |
value = HD.getValueByGuid(model, id, getId); | |
else if(getId && !_.isArray(model)) | |
value = ko.utils.unwrapObservable(model[getId]); | |
else | |
value = ko.utils.unwrapObservable(model[id]); | |
if(_.isString(value)) { | |
if(isHtml) { | |
value = $("#" + isHtml).text().trim(); | |
} else | |
value = $.trim(value); | |
} | |
return _.isUndefined(value) ? "" : value; | |
} | |
// return true if valid, or false if not valid (that is, has errors) | |
HDValidation.prototype.validateArraySchema = function(model, schema, id, showErrors) { | |
if(_.isUndefined(schema)) return true; | |
for(var i = 0; i < model.length; ++i) { | |
for(var j = 0; j < schema.length; j++) { | |
var item = schema[j]; | |
item.options["currentId"] = item.id; | |
this.validate(model, item.id + "_" + model[i].guid, item.options); | |
} | |
} | |
if(showErrors) | |
return !this.showValidationErrors(); | |
} | |
HDValidation.prototype.prepareSource = function(model) { | |
var keys = _.keys(model); | |
var sNotInformed = HS.get('[not informed]'); | |
_.each(keys, function(key) { | |
if(model[key] === sNotInformed) | |
model[key] = ""; | |
}); | |
return model; | |
} | |
HDValidation.prototype.validateSchema = function(model, schema) { | |
if(_.isUndefined(schema)) return true; | |
for(var i = 0; i < schema.length; i++) { | |
var item = schema[i]; | |
if(item.options.validateArray) { | |
this.validate(model, item.id, item.options); | |
if(item.options.validateArray.getFunc) | |
value = item.options.validateArray.getFunc(model, item.id); | |
else | |
value = this.getValue(model, item.id); | |
this.validateArraySchema(value, item.options.validateArray.schema, item.id); | |
} else | |
this.validate(model, item.id, item.options); | |
} | |
return !this.showValidationErrors(); | |
} | |
HDValidation.prototype.validateSchemaAsync = function(model, schema, cb) { | |
var self = this; | |
if(_.isUndefined(schema)) | |
cb(true); | |
var funcs = []; | |
var validate = function(next) { | |
for(var i = 0; i < schema.length; i++) { | |
var item = schema[i]; | |
if(item.options.validateArray) { | |
self.validate(model, item.id, item.options); | |
if(item.options.validateArray.getFunc) | |
value = item.options.validateArray.getFunc(model, item.id); | |
else | |
value = self.getValue(model, item.id); | |
self.validateArraySchema(value, item.options.validateArray.schema, item.id); | |
} else | |
self.validate(model, item.id, item.options); | |
} | |
next(); | |
} | |
funcs.push(validate); | |
async.series(funcs, function() { | |
cb(!self.showValidationErrors()); | |
}); | |
} | |
HDValidation.prototype.validate = function(model, id, options) { | |
var defaults = { | |
cnpj : false, | |
dob: false, | |
required : false, | |
truthy: false, | |
maxSize : false, | |
minSize : false, | |
minValue : false, | |
maxValue : false, | |
number : false, | |
email : false, | |
website : false, | |
password : false, | |
passwordCompareId : "", | |
passwordCompareIdCheckEmpty: true, | |
emailCompareId : "", | |
year : false, | |
date : false, | |
cep : false, | |
string : false, | |
capitalize : false, | |
username: false, | |
phone: false, | |
lessThenToday: false, | |
moreThenToday: false, | |
moreThenDateId: false, | |
name: false, | |
message : "", | |
equalIds: [], | |
notEqualIds: [], | |
atLeastOne: false, | |
dateRange: false, | |
valueRange: false, | |
in: false, | |
currentId: false, | |
valueCB: false, | |
ignoreEmpty: false, | |
clean: false, | |
sameAsValue: false, | |
isHtml: false, | |
generic: false, | |
unique: false, | |
source: false, | |
image: false, | |
xss: true | |
}, | |
settings = $.extend({ }, defaults, options), | |
error = false, | |
sValue = "", | |
value = ""; | |
var msg = ""; | |
var self = this; | |
var checkErrMessage = function(message, def) { | |
if(_.isUndefined(message) || message === "") | |
return def; | |
return message; | |
} | |
if(_.isEmpty(options)) | |
return error; | |
var $el = self.getElement(id); | |
if(_.isUndefined($el)) | |
return error; | |
else if(!_.isUndefined($el) && $el.length > 0) { | |
var elemVisible = false; | |
if($el.data().select2) | |
elemVisible = $el.prev().is(":visible"); | |
else | |
elemVisible = $el.is(":visible"); | |
if(!self.validateOffscreen && !elemVisible) | |
return error; | |
} | |
if(settings.source) | |
model = self.prepareSource(settings.source); | |
if(settings.clean !== false) | |
self.cleanIds.push({ id: id, val: settings.clean, model: model }); | |
try { | |
value = self.getValue(model, id, settings.currentId, settings.isHtml); | |
try { | |
sValue = _.isString(value) ? value : value.toString(); | |
} catch(ex) { | |
sValue = ""; | |
} | |
if(self.validateBlank(settings, value)) | |
return value; | |
if(settings.atLeastOne) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateAtLeastOne(model, id, settings); | |
var msg = HS.get('At least one <%= field %> must be informed. Male', { field: settings.atLeastOne.field } ); | |
if(settings.atLeastOne.gender === 1) | |
var msg = HS.get('At least one <%= field %> must be informed. Female', { field: settings.atLeastOne.field } ); | |
msg = checkErrMessage(settings.message, msg); | |
} | |
self.processError(error, value, msg, id); | |
if(_.isFunction(settings.required)) | |
settings.required = settings.required(model, id, settings); | |
if(!settings.image) { | |
if ((!settings.required || (settings.atLeastOne && !error)) && (_.isArray(value) ? value.length === 0 : sValue === "")) | |
return value; | |
} | |
msg = ""; | |
error = false; | |
if(settings.required) { | |
error = _.isNull(value) || _.isUndefined(value) || value === "" || (_.isArray(value) && value.length === 0); | |
msg = checkErrMessage(settings.message, HS.get('Required field.')); | |
} | |
self.processError(error, value, msg, id); | |
if(error) | |
return value; | |
msg = ""; | |
error = false; | |
if(settings.xss) { | |
if(_.isString(value)) | |
error = value !== HD.format.html_sanitize(value); | |
else if(_.isArray(value)) { | |
for(var i = 0; i < value.length; i++) { | |
var item = value[i]; | |
if (_.isString(item)) | |
error = item !== HD.format.text(item); | |
if (error) | |
break; | |
} | |
} | |
msg = checkErrMessage(settings.message, HS.get('Invalid value for this field. Check and try again.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
msg = ""; | |
error = false; | |
if(settings.truthy) { | |
error = _.isNull(value) || _.isUndefined(value) || !_.isBoolean(value) || !value; | |
msg = checkErrMessage(settings.message, HS.get('Please, select this item.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.generic && settings.generic.func && _.isFunction(settings.generic.func)) { | |
error = _.isNull(value) || _.isUndefined(value) || !settings.generic.func(model, value); | |
msg = checkErrMessage(settings.generic.message, HS.get('Field error.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.unique && settings.unique.func && _.isFunction(settings.unique.func)) { | |
error = _.isNull(value) || _.isUndefined(value) || !settings.unique.func(model, value); | |
msg = checkErrMessage(settings.unique.message, HS.get('Field error.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.cpf) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateCPF(value); | |
msg = checkErrMessage(settings.message, HS.get('Invalid field. Please check the value of the Id Card and try again.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.image) { | |
var imageType = ''; | |
if($el[0].files && $el[0].files.length > 0 && $el[0].files[0] && $el[0].files[0].type) { | |
imageType = $el[0].files[0].type | |
} else if(settings.imageInputId !== '') { | |
var $elFile = $(settings.imageInputId) | |
if($elFile[0].files && $elFile[0].files.length > 0 && $elFile[0].files[0] && $elFile[0].files[0].type) | |
imageType = $elFile[0].files[0].type | |
} | |
var aValidTypes = ['image/png', 'image/jpg', 'image/gif', 'image/jpeg']; | |
error = aValidTypes.indexOf(imageType) === -1; | |
msg = checkErrMessage(settings.message, HS.get('Illegal image format. Allowed formats: jpg, jpeg, gif and png.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.sameAsValue) { | |
var checkValue = ""; | |
if(_.isFunction(settings.sameAsValue)) | |
checkValue = settings.sameAsValue(model); | |
error = _.isNull(value) || _.isUndefined(value) || checkValue !== value; | |
msg = checkErrMessage(settings.message, HS.get('The value of the field has to be the same as the value: <%= value %>.', { value: checkValue })); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.username) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateUsername(value); | |
msg = checkErrMessage(settings.message, HS.get('Invalid username.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.name) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateName(value); | |
msg = checkErrMessage(settings.message, HS.get('Invalid name.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.in) { | |
error = _.isNull(value) || _.isUndefined(value) || settings.in.indexOf(value) === -1; | |
msg = checkErrMessage(settings.message, HS.get('Required field.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.cnpj) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateCNPJ(value); | |
msg = checkErrMessage(settings.message, HS.get('Invalid field. Please check the value of the company number and try again.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.phone) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validatePhone(value); | |
msg = checkErrMessage(settings.message, HS.get('Invalid phone number.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.lessThenToday) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateFutureDate(value, settings.dateFormat); | |
msg = checkErrMessage(settings.message, HS.get('This date cannot be in the future.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.moreThenToday) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validatePastDate(value, settings.dateFormat); | |
msg = checkErrMessage(settings.message, HS.get('This date cannot be in the past.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.moreThenDateId) { | |
var dateCompare = ""; | |
if(_.isFunction(settings.moreThenDateId)) | |
dateCompare = settings.moreThenDateId(); | |
else | |
dateCompare = self.getValue(model, settings.moreThenDateId); | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateMoreThanDate(value, dateCompare); | |
msg = checkErrMessage(settings.message, HS.get('This date cannot be less than <%= date %>.', { date: dateCompare })); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.number) { | |
error = _.isNull(value) || _.isUndefined(value) || !_.isNumber(parseInt(value)); | |
msg = checkErrMessage(settings.message, HS.get('Field must be a number.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.minSize) { | |
var len = _.isArray(value) ? value.length : sValue.length; | |
error = _.isNull(value) || _.isUndefined(value) || (len < settings.minSize); | |
msg = checkErrMessage(settings.message, HS.get('This field must have at least <%= size %> characters.', { size: settings.minSize })); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.maxSize) { | |
var len = _.isArray(value) ? value.length : sValue.length; | |
error = _.isNull(value) || _.isUndefined(value) || (len > settings.maxSize); | |
msg = checkErrMessage(settings.message, HS.get('This field must not exeed <%= size %> characters.', { size: settings.maxSize })); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.minValue) { | |
error = _.isNull(value) || _.isUndefined(value) || (HD.format.numberInt(value) < settings.minValue); | |
msg = checkErrMessage(settings.message, HS.get('This field must be at least <%= size %>.', { size: settings.minValue })); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.maxValue) { | |
error = _.isNull(value) || _.isUndefined(value) || (HD.format.numberInt(value) > settings.maxValue); | |
msg = checkErrMessage(settings.message, HS.get('This field must not exeed <%= size %>.', { size: HD.format.number(settings.maxValue) })); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.email) { | |
var compareId = false; | |
if(!_.isUndefined(settings.emailCompareId) && settings.emailCompareId !== "") | |
compareId = !(value === self.getValue(model, id, settings.emailCompareId, settings.isHtml).toString()); | |
var validEmail = self.validateEmail(value); | |
error = _.isNull(value) || _.isUndefined(value) || !validEmail || compareId; | |
if(compareId) | |
msg = checkErrMessage(settings.message, HS.get('Your email is not the same as the verification email.')); | |
else if(!validEmail) | |
msg = checkErrMessage(settings.message, HS.get('Invalid email.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.dob) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateDOB(value); | |
msg = checkErrMessage(settings.message, HS.get("Invalid date of birth! It cannot be a future date and you have to be at least 14 year old.")); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.website) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateWebsite(value); | |
msg = checkErrMessage(settings.message, HS.get("Invalid website! Check the site URL.")); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.cep) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateCEP(value); | |
msg = checkErrMessage(settings.message, HS.get('Invalid zip code!')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.string) { | |
error = _.isNull(value) || _.isUndefined(value) || !_.isString(value); | |
msg = checkErrMessage(settings.message, HS.get('This field must be a string!')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.date) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateDate(value); | |
msg = checkErrMessage(settings.message, HS.get('Invalid date.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.year) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateYear(value); | |
msg = checkErrMessage(settings.message, HS.get('Invalid year.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.dateRange) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateDateRange(model, id, settings); | |
msg = checkErrMessage(settings.message, HS.get('Invalid date range.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.valueRange) { | |
error = _.isNull(value) || _.isUndefined(value) || !self.validateValueRange(model, id, settings); | |
msg = checkErrMessage(settings.message, HS.get('Invalid value range.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.password) { | |
var compareId = false; | |
if(!_.isUndefined(settings.passwordCompareId) && settings.passwordCompareId !== "") { | |
var compareValue = self.getValue(model, id, settings.passwordCompareId, settings.isHtml).toString(); | |
if(settings.passwordCompareIdCheckEmpty) | |
compareId = !(value === compareValue); | |
else { | |
if(compareValue !== "") | |
compareId = !(value === compareValue); | |
} | |
} | |
var validPassword = self.validatePassword(value); | |
error = _.isNull(value) || _.isUndefined(value) || !validPassword || compareId; | |
if(compareId && validPassword) | |
msg = checkErrMessage(settings.message, HS.get('Your password is not the same as the verification password.')); | |
else if(!validPassword) | |
msg = checkErrMessage(settings.message, HS.get('Invalid password. It must have at least 6 characters.')); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.equalIds.length > 0) { | |
var compareEqual = function() { | |
if(_.isObject(settings.equalIds) && !_.isArray(settings.notEqualIds)) | |
settings.equalIds = [settings.equalIds]; | |
var fields = []; | |
for(var i = 0; i < settings.equalIds.length; i++) { | |
var item = settings.equalIds[i]; | |
if(value !== self.getValue(model, id, item.id).toString()) | |
fields.push(item.name); | |
} | |
var isError = false; | |
if(fields.length > 0) { | |
isError = true; | |
var fieldsMsg = fields.toString().replace(/,/g, ", "); | |
if(fields.length === 1) | |
msg = checkErrMessage(settings.message, HS.get('This field must be the same as the field: <%= fields %>', { fields: fieldsMsg })); | |
else | |
msg = checkErrMessage(settings.message, HS.get('This field must be the same as the fields: <%= fields %>', { fields: fieldsMsg })); | |
} | |
return isError; | |
} | |
error = _.isNull(value) || _.isUndefined(value) || compareEqual(); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
if(settings.notEqualIds.length > 0) { | |
var compareNotEqual = function() { | |
if(_.isObject(settings.notEqualIds) && !_.isArray(settings.notEqualIds)) | |
settings.notEqualIds = [settings.notEqualIds]; | |
var fields = []; | |
for(var i = 0; i < settings.notEqualIds.length; i++) { | |
var item = settings.notEqualIds[i]; | |
if(value === self.getValue(model, id, item.id).toString()) | |
fields.push(item.name); | |
} | |
var isError = false; | |
if(fields.length > 0) { | |
isError = true; | |
var fieldsMsg = fields.toString().replace(/,/g, ", "); | |
msg = checkErrMessage(settings.message, HS.get('This field must not be the same as the field(s): <%= fields %>', { fields: fieldsMsg })); | |
} | |
return isError; | |
} | |
error = _.isNull(value) || _.isUndefined(value) || compareNotEqual(); | |
} | |
self.processError(error, value, msg, id); | |
msg = ""; | |
error = false; | |
} catch(ex) { | |
return value; | |
} | |
if(settings.capitalize) | |
value.toUpperCase(); | |
return value; | |
} | |
HDValidation.prototype.validateBlank = function(options, value) { | |
var ret = false; | |
if(options.ignoreEmpty) | |
ret = _.isEmpty(value) || value === "" || (_.isArray(value) && value.length === 0); | |
return ret; | |
} | |
//valida o CNPJ digitado | |
HDValidation.prototype.validateCNPJ = function(cnpj){ | |
var valida = new Array(6,5,4,3,2,9,8,7,6,5,4,3,2), | |
dig1= new Number, | |
dig2= new Number; | |
exp = /\.|\-|\//g | |
cnpj = cnpj.toString().replace( exp, "" ); | |
if(cnpj === "00000000000000") | |
return false; | |
var digito = new Number(eval(cnpj.charAt(12)+cnpj.charAt(13))); | |
for(i = 0; i<valida.length; i++){ | |
dig1 += (i>0? (cnpj.charAt(i-1)*valida[i]):0); | |
dig2 += cnpj.charAt(i)*valida[i]; | |
} | |
dig1 = (((dig1%11)<2)? 0:(11-(dig1%11))); | |
dig2 = (((dig2%11)<2)? 0:(11-(dig2%11))); | |
if(((dig1*10)+dig2) != digito) | |
return false; | |
return true; | |
} | |
HDValidation.prototype.validateCPF = function(cpf) { | |
var erro = false; | |
cpf = cpf.replace('.', ''); | |
cpf = cpf.replace('.', ''); | |
cpf = cpf.replace('-', ''); | |
if (cpf.length == 11) { | |
if (!_.isNumber(parseInt(cpf))) { | |
return false; | |
} | |
else | |
{ | |
if (cpf == "00000000000" || | |
cpf == "11111111111" || | |
cpf == "22222222222" || | |
cpf == "33333333333" || | |
cpf == "44444444444" || | |
cpf == "55555555555" || | |
cpf == "66666666666" || | |
cpf == "77777777777" || | |
cpf == "88888888888" || | |
cpf == "99999999999") { | |
return false; | |
} | |
var a = []; | |
var b = new Number; | |
var c = 11; | |
for (i=0; i<11; i++){ | |
a[i] = cpf.charAt(i); | |
if (i < 9) b += (a[i] * --c); | |
} | |
if ((x = b % 11) < 2) { a[9] = 0 } else { a[9] = 11-x } | |
b = 0; | |
c = 11; | |
for (y=0; y<10; y++) b += (a[y] * c--); | |
if ((x = b % 11) < 2) { a[10] = 0; } else { a[10] = 11-x; } | |
if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10])) { | |
return false; | |
} | |
} | |
} | |
else { | |
return false; | |
} | |
return true; | |
} | |
HDValidation.prototype.validatePassword = function(value) { | |
if(value.trim() === "" || value.indexOf(" ") !== -1 || value.length <= 4) | |
return false; | |
return true; | |
} | |
HDValidation.prototype.validateCEP = function(value) { | |
value = value.toString().replace(/\-|\.|\_/g, ""); | |
return value.length === 8 && _.isNumber(parseInt(value)); | |
} | |
HDValidation.prototype.validateAtLeastOne = function(model, id , options) { | |
var self = this; | |
var aHasValue = []; | |
// get all values | |
var info = options.atLeastOne; | |
_.each(info.ids, function(getId) { | |
var value = self.getValue(model, id, getId, options.isHtml); | |
if(!_.isNull(value) && !_.isUndefined(value)) { | |
var add = false; | |
if(_.isBoolean(value) && !value) | |
add = true; | |
else if(_.isString(value) && value === "") | |
add = true; | |
else if(_.isArray(value) && value.length !== 0) | |
add = true; | |
if(add) | |
aHasValue.push(value); | |
} | |
}); | |
return aHasValue.length < info.ids.length; | |
} | |
HDValidation.prototype.validateDomain = function(domain) { | |
var arr = new Array( | |
'.com','.net','.org','.biz','.coop','.info','.museum','.name', | |
'.pro','.edu','.gov','.int','.mil','.ac','.ad','.ae','.af','.ag', | |
'.ai','.al','.am','.an','.ao','.aq','.ar','.as','.at','.au','.aw', | |
'.az','.ba','.bb','.bd','.be','.bf','.bg','.bh','.bi','.bj','.bm', | |
'.bn','.bo','.br','.bs','.bt','.bv','.bw','.by','.bz','.ca','.cc', | |
'.cd','.cf','.cg','.ch','.ci','.ck','.cl','.cm','.cn','.co','.cr', | |
'.cu','.cv','.cx','.cy','.cz','.de','.dj','.dk','.dm','.do','.dz', | |
'.ec','.ee','.eg','.eh','.er','.es','.et','.fi','.fj','.fk','.fm', | |
'.fo','.fr','.ga','.gd','.ge','.gf','.gg','.gh','.gi','.gl','.gm', | |
'.gn','.gp','.gq','.gr','.gs','.gt','.gu','.gv','.gy','.hk','.hm', | |
'.hn','.hr','.ht','.hu','.id','.ie','.il','.im','.in','.io','.iq', | |
'.ir','.is','.it','.je','.jm','.jo','.jp','.ke','.kg','.kh','.ki', | |
'.km','.kn','.kp','.kr','.kw','.ky','.kz','.la','.lb','.lc','.li', | |
'.lk','.lr','.ls','.lt','.lu','.lv','.ly','.ma','.mc','.md','.mg', | |
'.mh','.mk','.ml','.mm','.mn','.mo','.mp','.mq','.mr','.ms','.mt', | |
'.mu','.mv','.mw','.mx','.my','.mz','.na','.nc','.ne','.nf','.ng', | |
'.ni','.nl','.no','.np','.nr','.nu','.nz','.om','.pa','.pe','.pf', | |
'.pg','.ph','.pk','.pl','.pm','.pn','.pr','.ps','.pt','.pw','.py', | |
'.qa','.re','.ro','.rw','.ru','.sa','.sb','.sc','.sd','.se','.sg', | |
'.sh','.si','.sj','.sk','.sl','.sm','.sn','.so','.sr','.st','.sv', | |
'.sy','.sz','.tc','.td','.tf','.tg','.th','.tj','.tk','.tm','.tn', | |
'.to','.tp','.tr','.tt','.tv','.tw','.tz','.ua','.ug','.uk','.um', | |
'.us','.uy','.uz','.va','.vc','.ve','.vg','.vi','.vn','.vu','.ws', | |
'.wf','.ye','.yt','.yu','.za','.zm','.zw'); | |
var mai = domain; | |
var val = true; | |
var dot = mai.lastIndexOf("."); | |
var dname = mai.substring(0,dot); | |
var ext = mai.substring(dot,mai.length); | |
if(dot>2 && dot<57) { | |
for(var i=0; i<arr.length; i++) { | |
if(ext == arr[i]) { | |
val = true; | |
break; | |
} else { | |
val = false; | |
} | |
} | |
if(val == false){ | |
alert("Your domain extension "+ext+" is not correct"); | |
return false; | |
} else { | |
for(var j=0; j<dname.length; j++) { | |
var dh = dname.charAt(j); | |
var hh = dh.charCodeAt(0); | |
if((hh > 47 && hh<59) || (hh > 64 && hh<91) || (hh > 96 && hh<123) || hh==45 || hh==46) { | |
if((j==0 || j==dname.length-1) && hh == 45) { | |
return false; | |
} | |
} else | |
return false; | |
} | |
} | |
} else | |
return false; | |
return true; | |
} | |
HDValidation.prototype.validatePhone = function(phone) { | |
var filter = /^(\([1-9]{2}\)[9][4-9][0-9]{3}-[0-9]{4})|(\([1-9]{2}\)[2-9][0-9]{3}-[0-9]{4})$/; | |
return filter.test(phone); | |
} | |
HDValidation.prototype.validateEmail = function(email) { | |
if(email.indexOf(";") !== -1) | |
return false; | |
if(email.indexOf(",") !== -1) | |
return false; | |
if(email.indexOf(" ") !== -1) | |
return false; | |
var filter = /(?:[a-z0-9!#$%&'*+/=?^_{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/; | |
return filter.test(email); | |
} | |
HDValidation.prototype.validateWebsite = function(website) { | |
var filter = /[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/; | |
return filter.test(website); | |
} | |
HDValidation.prototype.validateUsername = function(username) { | |
if(username.length < 5) | |
return false; | |
var filter = /^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$/; | |
return filter.test(username); | |
} | |
HDValidation.prototype.validateName = function(name) { | |
if(!_.isString(name)) | |
return false; | |
if(name.length < 10) | |
return false; | |
if(name.length > 250) | |
return false; | |
var filter = /^([\'\.\^\~\´\`\\áÁ\\àÀ\\ãÃ\\âÂ\\éÉ\\èÈ\\êÊ\\íÍ\\ìÌ\\óÓ\\òÒ\\õÕ\\ôÔ\\úÚ\\ùÙ\\çÇaA-zZ]+)+((\s[\-\'\.\^\~\´\`\\áÁ\\àÀ\\ãÃ\\âÂ\\éÉ\\èÈ\\êÊ\\íÍ\\ìÌ\\óÓ\\òÒ\\õÕ\\ôÔ\\úÚ\\ùÙ\\çÇaA-zZ]+)+)?$/; | |
return filter.test($.trim(name)); | |
} | |
HDValidation.prototype.validateYear = function(year) { | |
var text = /^[0-9]+$/; | |
if (!text.test(year)) | |
return false; | |
if (year.length !== 4) | |
return false; | |
var currentYear = new Date().getFullYear(); | |
if((year < 1526) || (year > currentYear)) | |
return false; | |
return true; | |
} | |
HDValidation.prototype.validateDate = function(date) { | |
if(date.length === 7) | |
date = "01/" + date; | |
var filter = /(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d{2,2}/; | |
var isValid = filter.test(date); | |
if(isValid) { | |
var dt = moment(date, CONST.DATE_FORMAT); | |
isValid = dt.isValid(); | |
} | |
return isValid; | |
} | |
HDValidation.prototype.validateDateRange = function(model, id, options) { | |
var self = this; | |
var dateRange = options.dateRange; | |
if(dateRange.fromId === "" || dateRange.toId === "") | |
return false; | |
var _getDate = function(getId) { | |
var sDt = self.getValue(model, id, getId, options.isHtml); | |
if(sDt.length === 7) | |
sDt = "01/" + sDt; | |
var dtFrom = moment(sDt, CONST.DATE_FORMAT); | |
if(dtFrom.isValid()) | |
return dtFrom; | |
return ""; | |
} | |
var dtFrom = _getDate(dateRange.fromId); | |
var dtTo = _getDate(dateRange.toId); | |
if(dtFrom === "" || dtTo === "") | |
return true; | |
return dtFrom <= dtTo; | |
} | |
HDValidation.prototype.validateValueRange = function(model, id, options) { | |
var self = this; | |
var valueRange = options.valueRange; | |
if(valueRange.fromId === "" || valueRange.toId === "") | |
return false; | |
var _getValue = function(getId) { | |
return self.getValue(model, id, getId, options.isHtml); | |
} | |
var valueFrom = _getValue(valueRange.fromId); | |
var valueTo = _getValue(valueRange.toId); | |
if(valueFrom === "" || valueTo === "") | |
return true; | |
return valueFrom <= valueTo; | |
} | |
HDValidation.prototype.validateFutureDate = function(date, format) { | |
if(date === "") | |
return true; | |
if(date.length === 7) | |
date = '01/' + date; | |
if(_.isUndefined(format)) | |
format = CONST.DATE_FORMAT; | |
var filter = /(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d{2,2}/; | |
var isValid = filter.test(date); | |
if(isValid) { | |
var dt = moment(date, format); | |
isValid = dt.isValid(); | |
if(isValid) { | |
var today = moment(new Date()); | |
isValid = dt.isBefore(today); | |
} | |
} | |
return isValid; | |
} | |
HDValidation.prototype.validatePastDate = function(date, format) { | |
if(date === "") | |
return true; | |
if(date.length === 7) | |
date = '01/' + date; | |
if(_.isUndefined(format)) | |
format = CONST.DATE_FORMAT; | |
var filter = /(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d{2,2}/; | |
var isValid = filter.test(date); | |
if(isValid) { | |
var dt = moment(date, format); | |
isValid = dt.isValid(); | |
if(isValid) { | |
var today = moment(new Date()); | |
isValid = !dt.isBefore(today); | |
} | |
} | |
return isValid; | |
} | |
HDValidation.prototype.validateMoreThanDate = function(date, dateCompare, format) { | |
if(date === "" || dateCompare === "") | |
return true; | |
if(date.length === 7) | |
date = '01/' + date; | |
if(dateCompare.length === 7) | |
dateCompare = '01/' + dateCompare; | |
var dt = moment(date, CONST.DATE_FORMAT); | |
var dt2 = moment(dateCompare, CONST.DATE_FORMAT); | |
return dt.isAfter(dt2); | |
} | |
HDValidation.prototype.validateDOB = function(dob) { | |
if(this.validateDate(dob)) { | |
var today = moment(new Date()); | |
var dt = moment(dob, CONST.DATE_FORMAT); | |
today.subtract("year", CONST.AGE_RESTRICTION); | |
return today.isAfter(dt); | |
} else | |
return false; | |
} | |
// Required fields | |
HDValidation.prototype.setRequiredFields = function(validationSchema) { | |
var self = this; | |
// get required | |
var aRed = []; | |
_.each(validationSchema, function(schema){ | |
if(schema.options && (schema.options.required || schema.options.atLeastOne)) { | |
var isReq = true; | |
if(_.isFunction(schema.options.required)) | |
isReq = schema.options.required(HDM.get[global.CUR_PAGE], schema.id, schema.options); | |
if(isReq) | |
aRed.push(schema.id); | |
else | |
$("[data-required=" + schema.id + "]").removeClass("required"); | |
} else | |
$("[data-required=" + schema.id + "]").removeClass("required"); | |
}); | |
_.each(aRed, function(id){ | |
$("[data-required='" + id + "']").addClass("required"); | |
}); | |
} | |
// *** ASYNC verifications | |
HDValidation.prototype._getIdByType = function(getIdType) { | |
var id = ""; | |
if(getIdType === "page") | |
id = HDM.get[global.CUR_PAGE]._id; | |
else if(getIdType === "logged") { | |
id = HDM.get.login.userId(); | |
} | |
if(_.isUndefined(id) || id === 0) | |
id = ""; | |
return id; | |
} | |
HDValidation.prototype.existEmail = function(evt, modelId, getIdType, emailToCheck, model, options, cb) { | |
var self = this; | |
if(emailToCheck === "") { | |
cb(false); | |
return; | |
} | |
var validation = new HDValidation(); | |
var schema = [ | |
{ id : modelId, options : { email: true } } | |
]; | |
if(options) | |
schema[0].options = options | |
if(!validation.validateSchema(model, schema)) { | |
cb(false, false); | |
return; | |
} | |
var dataPool = new HDDataPool({ type : "AJAX", | |
ajax : { | |
url : global.BASE_PATH + "users/email/exist" | |
}}); | |
var data = { email: emailToCheck, id: self._getIdByType(getIdType) }; | |
var ajaxParams = { | |
url: dataPool.settings.ajax.url, | |
data: dataPool.prepareData(data), | |
success : function(data, textStatus, jqXHR) { | |
if(data && data.exist) | |
cb(false, true); | |
else | |
cb(true, true); | |
}, | |
error : function(jqXHR, textStatus, errorThrown) { | |
console.log(jqXHR.responseText); | |
cb(false); | |
} | |
}; | |
dataPool.POST(ajaxParams, $(evt.target)); | |
}; | |
HDValidation.prototype.existEmailCheckCorporate = function(evt, modelId, getIdType, emailToCheck, model, options, cb) { | |
var self = this; | |
if(emailToCheck === "") { | |
cb(false); | |
return; | |
} | |
var validation = new HDValidation(); | |
var schema = [ | |
{ id : modelId, options : { email: true } } | |
]; | |
if(options) | |
schema[0].options = options | |
if(!validation.validateSchema(model, schema)) { | |
cb(false, false); | |
return; | |
} | |
var dataPool = new HDDataPool({ type : "AJAX", | |
ajax : { | |
url : global.BASE_PATH + "users/email/exist/checkcorporate" | |
}}); | |
var data = { email: emailToCheck, id: self._getIdByType(getIdType) }; | |
var ajaxParams = { | |
url: dataPool.settings.ajax.url, | |
data: dataPool.prepareData(data), | |
success : function(data, textStatus, jqXHR) { | |
if(data && data.exist) | |
cb(false, true); | |
else | |
cb(true, true); | |
}, | |
error : function(jqXHR, textStatus, errorThrown) { | |
console.log(jqXHR.responseText); | |
cb(false); | |
} | |
}; | |
dataPool.POST(ajaxParams, $(evt.target)); | |
}; | |
HDValidation.prototype.checkCorporateEmail = function(evt, modelId, getIdType, emailToCheck, cb) { | |
var self = this; | |
if(emailToCheck === "") | |
return cb(false); | |
var dataPool = new HDDataPool({ type : "AJAX", | |
ajax : { | |
url : global.BASE_PATH + "users/email/checkcorporate" | |
}}); | |
var data = { email: emailToCheck }; | |
var ajaxParams = { | |
url: dataPool.settings.ajax.url, | |
data: dataPool.prepareData(data), | |
success : function(data, textStatus, jqXHR) { | |
if(data) | |
cb(data.exist); | |
else | |
cb(false); | |
}, | |
error : function(jqXHR, textStatus, errorThrown) { | |
console.log(jqXHR.responseText); | |
cb(false); | |
} | |
}; | |
dataPool.POST(ajaxParams, $(evt.target)); | |
}; | |
HDValidation.prototype.existIdCard = function(evt, modelId, getIdType, idCardToCheck, cb) { | |
var self = this; | |
if(idCardToCheck === "") | |
cb(false); | |
var dataPool = new HDDataPool({ type : "AJAX", | |
ajax : { | |
url : global.BASE_PATH + "users/idcard/exist" | |
}}); | |
var data = { idcard: idCardToCheck, id: self._getIdByType(getIdType) }; | |
var ajaxParams = { | |
url: dataPool.settings.ajax.url, | |
data: dataPool.prepareData(data), | |
success : function(data, textStatus, jqXHR) { | |
if(data && data.exist) | |
cb(false); | |
else | |
cb(true); | |
}, | |
error : function(jqXHR, textStatus, errorThrown) { | |
console.log(jqXHR.responseText); | |
cb(false); | |
} | |
}; | |
dataPool.POST(ajaxParams, $(evt.target)); | |
}; | |
HDValidation.prototype.existIdCardOrganization = function(evt, modelId, getIdType, idCardToCheck, cb) { | |
var self = this; | |
if(idCardToCheck === "") | |
cb(false); | |
var dataPool = new HDDataPool({ type : "AJAX", | |
ajax : { | |
url : global.BASE_PATH + "organizations/exist" | |
}}); | |
var data = { idcard: HD.getIdCard(idCardToCheck), id: self._getIdByType(getIdType) }; | |
var ajaxParams = { | |
url: dataPool.settings.ajax.url, | |
data: dataPool.prepareData(data), | |
success : function(data, textStatus, jqXHR) { | |
if(data && data.exist) | |
cb(false); | |
else | |
cb(true); | |
}, | |
error : function(jqXHR, textStatus, errorThrown) { | |
console.log(jqXHR.responseText); | |
cb(false); | |
} | |
}; | |
dataPool.PUT(ajaxParams, $(evt.target)); | |
}; | |
HDValidation.prototype.existSlug = function(evt, modelId, getIdType, slugToCheck, cb) { | |
var self = this; | |
if(slugToCheck === "") | |
cb(false); | |
var dataPool = new HDDataPool({ type : "AJAX", | |
ajax : { | |
url : global.BASE_PATH + "pages/exist" | |
}}); | |
var data = { slug: slugToCheck, id: self._getIdByType(getIdType) }; | |
var ajaxParams = { | |
url: dataPool.settings.ajax.url, | |
data: dataPool.prepareData(data), | |
success : function(data, textStatus, jqXHR) { | |
if(data && data.exist) | |
cb(false); | |
else | |
cb(true); | |
}, | |
error : function(jqXHR, textStatus, errorThrown) { | |
console.log(jqXHR.responseText); | |
cb(false); | |
} | |
}; | |
dataPool.PUT(ajaxParams, $(evt.target)); | |
}; | |
HDValidation.prototype.existUsername = function(evt, modelId, getIdType, usernameToCheck, cb) { | |
var self = this; | |
if(usernameToCheck === "") | |
cb(false); | |
var dataPool = new HDDataPool({ type : "AJAX", | |
ajax : { | |
url : global.BASE_PATH + "users/username/exist" | |
}}); | |
var data = { username: usernameToCheck, id: self._getIdByType(getIdType) }; | |
var ajaxParams = { | |
url: dataPool.settings.ajax.url, | |
data: dataPool.prepareData(data), | |
success : function(data, textStatus, jqXHR) { | |
if(data && data.exist) | |
cb(false); | |
else | |
cb(true); | |
}, | |
error : function(jqXHR, textStatus, errorThrown) { | |
console.log(jqXHR.responseText); | |
cb(false); | |
} | |
}; | |
dataPool.POST(ajaxParams, $(evt.target)); | |
}; | |
var HDVal = { | |
setFieldFocus: function(evt, modelField, clean) { | |
if(evt.target) | |
$(evt.target).focus(); | |
if(!_.isUndefined(clean) && clean) | |
modelField(""); | |
}, | |
checkEmail: function(self, evt, modelId, getIdType, options) { | |
var removeErrorMsgsNoErrorIds = options.removeErrorMsgsNoErrorIds || []; | |
var validation = new HDValidation({ removeErrorMsgsNoErrorIds: removeErrorMsgsNoErrorIds }); | |
var modelVal = self[modelId]; | |
var validationCB = function(exist, showError) { | |
if(!exist) | |
HDVal.setFieldFocus(evt, modelVal, true); | |
if(showError) { | |
var msg = HS.get('This email <%= email %> is already registered in our system. Please, select another.', { email: value }); | |
validation.processError(!exist, value, msg, modelId); | |
validation.showValidationErrors(modelId); | |
} | |
}; | |
var value = ko.utils.unwrapObservable(modelVal); | |
if(value !== "") | |
validation.existEmail(evt, modelId, getIdType, value, self, options, validationCB); | |
}, | |
existEmailCheckCorporate: function(self, evt, modelId, getIdType, options) { | |
var validation = new HDValidation(); | |
var modelVal = self[modelId]; | |
var validationCB = function(exist, showError) { | |
if(!exist) | |
HDVal.setFieldFocus(evt, modelVal, true); | |
if(showError) { | |
var msg = HS.get('The email <%= email %> is either already registered in our system or it is not a corporate email. Please, select another.', { email: value }); | |
validation.processError(!exist, value, msg, modelId); | |
validation.showValidationErrors(modelId); | |
} | |
}; | |
var value = ko.utils.unwrapObservable(modelVal); | |
if(value !== "") | |
validation.existEmailCheckCorporate(evt, modelId, getIdType, value, self, options, validationCB); | |
}, | |
checkCorporateEmail: function(self, evt, modelId, getIdType) { | |
var validation = new HDValidation(); | |
var modelVal = self[modelId]; | |
var validationCB = function(exist) { | |
if(exist) | |
HDVal.setFieldFocus(evt, modelVal, true); | |
var msg = HS.get('The email <%= email %> not a corporate email. Please, select another.', { email: value }); | |
validation.processError(exist, value, msg, modelId); | |
validation.showValidationErrors(modelId); | |
}; | |
var value = ko.utils.unwrapObservable(modelVal); | |
if(value !== "") | |
validation.checkCorporateEmail(evt, modelId, getIdType, value, validationCB); | |
}, | |
checkIdCard: function(self, evt, modelId, getIdType) { | |
var validation = new HDValidation(); | |
var modelVal = self[modelId]; | |
var validationCB = function(exist) { | |
if(!exist) | |
HDVal.setFieldFocus(evt, modelVal); | |
var msg = HS.get('This identification card <%= idcard %> is already registered in our system. Please, select another.', { idcard: value }); | |
validation.processError(!exist, value, msg, modelId); | |
validation.showValidationErrors(modelId); | |
}; | |
var value = ko.utils.unwrapObservable(modelVal); | |
if(value !== "") | |
validation.existIdCard(evt, modelId, getIdType, value, validationCB); | |
}, | |
checkIdCardOrganization: function(self, evt, modelId, getIdType) { | |
var validation = new HDValidation(); | |
var modelVal = self[modelId]; | |
var validationCB = function(exist) { | |
if(!exist) | |
HDVal.setFieldFocus(evt, modelVal); | |
var msg = HS.get('This company identification card <%= idcard %> is already registered in our system. Please, select another.', { idcard: value }); | |
validation.processError(!exist, value, msg, modelId); | |
validation.showValidationErrors(modelId); | |
}; | |
var value = ko.utils.unwrapObservable(modelVal); | |
if(value !== "") | |
validation.existIdCardOrganization(evt, modelId, getIdType, value, validationCB); | |
}, | |
checkSlug: function(self, evt, modelId, getIdType) { | |
var validation = new HDValidation(); | |
var modelVal = self[modelId]; | |
var validationCB = function(exist) { | |
if(!exist) | |
HDVal.setFieldFocus(evt, modelVal); | |
var msg = HS.get('This alias <%= slug %> is already used in our system. Please, select another.', { slug: value }); | |
validation.processError(!exist, value, msg, modelId); | |
validation.showValidationErrors(modelId); | |
}; | |
var value = ko.utils.unwrapObservable(modelVal); | |
if(value !== "") | |
validation.existSlug(evt, modelId, getIdType, value, validationCB); | |
}, | |
checkUsername: function(self, evt, modelId, getIdType) { | |
var validation = new HDValidation(); | |
var modelVal = self[modelId]; | |
var validationCB = function(exist) { | |
if(!exist) | |
HDVal.setFieldFocus(evt, modelVal); | |
var msg = HS.get('This username <%= username %> is already registered in our system. Please, select another.', { username: value }); | |
validation.processError(!exist, value, msg, modelId); | |
validation.showValidationErrors(modelId); | |
}; | |
var value = ko.utils.unwrapObservable(modelVal); | |
if(value !== "") | |
validation.existUsername(evt, modelId, getIdType, value, validationCB); | |
} | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html> | |
<head> | |
<!--METATITLE_START--> | |
<title>emprego.net</title> | |
<!--METATITLE_END--> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width, maximum-scale=1, initial-scale=1, user-scalable=0"> | |
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"> | |
<!--META_START--> | |
<!--META_END--> | |
<meta name="application-name" content="minhascartas"/> | |
<meta name="page-name" content="url_site_minhascartas"/> | |
<link href="/stylesheets/application.css" media="screen" rel="stylesheet" type="text/css"/> | |
<!--STYLE_AREA_START--><link href="/stylesheets/empregonet_custom.css" media="screen" rel="stylesheet" type="text/css"/><!--STYLE_AREA_END--> | |
<link rel="icon" type="image/ico" href="https://dq203lu6kgmi4.cloudfront.net/favicon_front.ico"> | |
</head> | |
<body class="gen_pg template_left_ad right_float top_float {{ambientCls}} {{statusCls}} {{registerCls}} {{loginCls}} letters detail {{x_search}}" onload="ymAppInit()"> | |
<div data-kobind="minhascartas" data-container style="display: none"> | |
<div class="pg_x"> | |
<!-- Page Header / Ad --> | |
<div class="row header_ad_bind affix"> | |
<div class="padded upper_ad_container ad_970"> | |
<div class="box"> | |
<!--GOOGLE_HEADER_START--><img src="/images/ads/ad_970x90.jpg"><!--GOOGLE_HEADER_END--> | |
</div> | |
</div> | |
</div> | |
<div class="pg_head"> | |
{{> 'header.menu'}} | |
</div> | |
<!-- Page Header / Ad --> | |
<!-- Main Content --> | |
<div class="main-content"> | |
<!-- Content Top (page.menu) --> | |
<nav class="navbar navbar-default area-top main_menu" role="navigation"> | |
{{> 'main.menu'}} | |
</nav> | |
<!-- /Content Top --> | |
<!-- Alerta --> | |
<!--ALERTS_START--><div id="alertarea" class="container alerts_menu"></div><!--ALERTS_END--> | |
<!-- /Alerta --> | |
<!-- Core Content --> | |
<div class="container core_content"> | |
<!-- Main Search Module --> | |
{{> 'search.professional.content'}} | |
<!-- /Main Search Module --> | |
<div class="row"> | |
<!-- Page Left Column --> | |
<div class="col-md-4 gen_left_column"> | |
<!-- Right Ad --> | |
<!--GOOGLE_SIDE_START--><div class="box padded ad side_ad_container"> <div class="box-content"> <img src="/images/ads/ad_300x600.jpg" alt="" class="ad_300x600"/> </div> </div><!--GOOGLE_SIDE_END--> | |
<!-- /Right Ad --> | |
</div> | |
<!-- /Page Left Column --> | |
<!-- Page Core Column --> | |
<div data-bind="visible: render.pos" style="display: none;" class="col-md-8 gen_core_column"> | |
<!-- Meus Classificados --> | |
<div class="box job_list"> | |
<!-- Menu --> | |
<div class="box-header tool_menu"> | |
<!-- Job List Header --> | |
<div class="inner_tools row"> | |
<div class="tool_left"> | |
<!-- Search Field --> | |
<div class="btn-group search"> | |
<label class="input-with-submit"> | |
<input data-bind="value: searchField, valueUpdate: 'afterkeydown', enterKey: 'gridSearch'" | |
type="text" | |
placeholder="Buscar..."/> | |
<button id="gridSearch" data-bind="click: search" type="submit" class="submit-icon"> | |
<i class="icon-search"></i> | |
</button> | |
<button data-bind="click: cleanTextSearch, if: hasSearchText" type="submit" class="submit-icon"> | |
<i class="icon-remove"></i> | |
</button> | |
</label> | |
</div> | |
<!-- /Search Field --> | |
<!-- Items per Page --> | |
<label class="tool_perpage"> | |
<select data-bind="options: dtable.perPages, value: dtable.perPage, valueUpdate: 'afterkeydown', event: { change: function() { dtable.changePerPage(); } }, select2: { minimumResultsForSearch: -1 }"></select> | |
</label> | |
<!-- /Items per Page --> | |
<!-- Add Classified --> | |
<button class="btn btn-gold new_job" data-bind="click: addItem">Criar Nova Carta</button> | |
<!-- /Add Classified --> | |
</div> | |
<div class="tool_right"> | |
<!-- Sort --> | |
<label class="pull-right tool_order"> | |
<select data-bind="options: dtable.sortList, value: dtable.sortOrder, valueUpdate: 'afterkeydown', optionsText: 'text', optionsValue: 'id', event: { change: function() { dtable.changeSortOrder(); } }, select2: { minimumResultsForSearch: -1 }"></select> | |
</label> | |
<!-- /Sort --> | |
<!-- Clear Filter/Search --> | |
<button data-bind="click: cleanSearch" class="btn btn-default pull-right tool_reset"><i | |
class="icon-remove"></i> Limpar Busca | |
</button> | |
<!-- /Clear Filter/Search --> | |
<!-- Table Spinner --> | |
<div id="table-spinner" class="table-spinner"></div> | |
<!-- /Table Spinner --> | |
</div> | |
</div> | |
<!-- /Job List Header --> | |
</div> | |
<!-- /Menu --> | |
<!-- Classified List Content --> | |
<div id="dtable" class="box-content"> | |
<!-- Classified Row --> | |
<!-- ko foreach: dtable.items --> | |
<div data-bind="css: { 'class_row': !isAd, 'ad_row': isAd }" class="box-section"> | |
<div class="row"> | |
<div class="col-xs-12 job_title"> | |
<a data-bind="attr: { href: editUrl }" href="#"><span data-bind="text: description">Título</span></a> | |
<div class="pull-right"> | |
<i class="icon-calendar" title="Publicada em"></i> | |
<span data-bind="text: date">99/99/9999 (99 dias)</span> | |
</div> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="col-xs-12"> | |
<div class="job_numbers"> | |
<span data-bind="text: textSummary"> | |
Texto do classificado | |
</span> | |
</div> | |
</div> | |
</div> | |
</div> | |
<!-- /ko --> | |
<!-- /Classified Row --> | |
<!-- Classified List Footer --> | |
<div class="list_footer"> | |
<div data-bind="visible: dtable.showNoRecords" class="dataTables_info total_regs">Não há registros para esta | |
pesquisa. | |
</div> | |
<div data-bind="visible: dtable.showTotalRecords" class="dataTables_info total_regs">Exibindo página <strong><span data-bind="text: dtable.curPage">1</span></strong> de <strong><span data-bind="text: dtable.totalPagesText">100</span></strong>.<br/>Total de <strong><span data-bind="text: dtable.totalItemsText">12355</span></strong> registro<span data-bind="visible: dtable.totalItems() > 1">s</span>.</div> | |
<div data-bind="visible: dtable.showPagination" class="paging_full_numbers paginate"> | |
<a data-bind="click: function() { dtable.gotoFirst(); }" tabindex="0" | |
class="first paginate_button paginate_button_disabled" title="Início"><i | |
class="icon-double-angle-left"></i></a> | |
<a data-bind="click: function() { dtable.gotoPrev(); }" tabindex="0" | |
class="previous paginate_button paginate_button_disabled" title="Anterior"><i | |
class="icon-angle-left"></i></a> | |
<span data-bind="click: function() { dtable.gotoPagBtn(0); }, visible: dtable.pagBtn1() !== 0"> | |
<a id="pagBtn0" tabindex="0" class="paginate_active" | |
data-bind="text: dtable.pagBtn1">1</a> | |
</span> | |
<span data-bind="click: function() { dtable.gotoPagBtn(1); }, visible: dtable.pagBtn2() !== 0"> | |
<a id="pagBtn1" tabindex="0" class="paginate_active" | |
data-bind="text: dtable.pagBtn2">2</a> | |
</span> | |
<span data-bind="click: function() { dtable.gotoPagBtn(2); }, visible: dtable.pagBtn3() !== 0"> | |
<a id="pagBtn2" tabindex="0" class="paginate_active" | |
data-bind="text: dtable.pagBtn3">3</a> | |
</span> | |
<span data-bind="click: function() { dtable.gotoPagBtn(3); }, visible: dtable.pagBtn4() !== 0"> | |
<a id="pagBtn3" tabindex="0" class="paginate_active" | |
data-bind="text: dtable.pagBtn4">4</a> | |
</span> | |
<span data-bind="click: function() { dtable.gotoPagBtn(4); }, visible: dtable.pagBtn5() !== 0"> | |
<a id="pagBtn4" tabindex="0" class="paginate_active" | |
data-bind="text: dtable.pagBtn5">5</a> | |
</span> | |
<a data-bind="click: function() { dtable.gotoNext(); }" tabindex="0" | |
class="next paginate_button paginate_button_disabled" title="Próximo"><i | |
class="icon-angle-right"></i></a> | |
<a data-bind="click: function() { dtable.gotoLast(); }" tabindex="0" | |
class="last paginate_button paginate_button_disabled" title="Último"><i | |
class="icon-double-angle-right"></i></a> | |
<div class="clearfix"></div> | |
</div> | |
</div> | |
<!-- /Classified List Footer --> | |
</div> | |
<!-- /Classified List Content --> | |
</div> | |
<!-- /Meus Classificados --> | |
</div> | |
<!-- /Page Core Column --> | |
</div> | |
</div> | |
<!-- /Core Content --> | |
</div> | |
<!-- /Main Content --> | |
<!-- Right Floating Ad --> | |
<div class="float_envelope"> | |
<div class="right_float affix"> | |
<!--GOOGLE_AFIX_START--><img src="/images/ads/ad_160x600.jpg" alt="emprego.net ads" title="emprego.net ads"><!--GOOGLE_AFIX_END--> | |
</div> | |
</div> | |
<!-- /Right Floating Ad --> | |
{{> 'footer.menu'}} | |
</div> | |
</div> | |
<!--SCRIPT_AREA_START--><script src="/javascripts/knockout.js" type="text/javascript"></script> | |
<script src="/javascripts/underscore.js" type="text/javascript"></script> | |
<script src="/javascripts/vendor/jquery.js" type="text/javascript"></script> | |
<script src="/javascripts/vendor/jqueryui.js" type="text/javascript"></script> | |
<script src="/javascripts/vendor/bootstrap/bootstrap.js" type="text/javascript"></script> | |
<script src="/javascripts/vendor/select2.js" type="text/javascript"></script> | |
<script src="/javascripts/bootstrap-datepicker.js" type="text/javascript"></script> | |
<script src="/javascripts/bootstrap-datepicker.pt-BR.js" type="text/javascript"></script> | |
<script src="/javascripts/inputmask.js" type="text/javascript"></script> | |
<script src="/javascripts/generic.js" type="text/javascript"></script> | |
<script src="/javascripts/async.js" type="text/javascript"></script><!--SCRIPT_AREA_END--> | |
<script> var _serverHost = "{{serverHost}}"; var _batchHost = "{{batchHost}}"; </script><script src="/settings" type="text/javascript"></script> | |
<!--HDSCRIPT_AREA_START--><script src="/javascripts/hd_strings.js" type="text/javascript"></script> | |
<script src="/javascripts/hd_utils.js" type="text/javascript"></script> | |
<script src="/javascripts/hd_datapool.js" type="text/javascript"></script> | |
<script src="/javascripts/hd_validation.js" type="text/javascript"></script> | |
<script src="/javascripts/hd_model.js" type="text/javascript"></script> | |
<script src="/javascripts/hd_appview.js" type="text/javascript"></script> | |
<script src="/javascripts/hd_view.js" type="text/javascript"></script><!--HDSCRIPT_AREA_END--> | |
<script id="pageScript"> var _context = "{{context}}"; var _contextQuery = "{{contextQuery}}"; var _page = {{{pageContext}}}; </script> | |
<!--HDPAGESCRIPT_AREA_START--> | |
<script src="/modules/login/mvvm/login.js" type="text/javascript"></script> | |
<script src="/modules/menu/mvvm/menu.js" type="text/javascript"></script> | |
<script src="/modules/content/mvvm/content.js" type="text/javascript"></script> | |
<script src="/javascripts/hd_grid.js" type="text/javascript"></script> | |
<script src="/pages/minhascartas/mvvm/minhascartas.js" type="text/javascript"></script> | |
<!--HDPAGESCRIPT_AREA_END--> | |
<!--FOOTER_START--> | |
<!--FOOTER_END--> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// My Cover Letters | |
// Author: Augusto Pissarra | |
var _modelName = "minhascartas"; | |
var _renderOrder = ["login", "menu", _modelName]; | |
var _pageTitle = HS.get("Professional Central"); | |
var _pageName = HS.get("My Cover Letters"); | |
var _pageTitleCls = 'icon-user'; | |
var _breadcrumbs = [ | |
{ title: _pageName, link: "" } | |
]; | |
var _detailPage = CONST.url_site_cartasdet; | |
// Cover Letter Grid Item | |
var mCoverLetter = function(mData) { | |
var self = this; | |
self._id = mData._id; | |
self.isAd = HD.checkBool(mData.isAd); | |
self.description = mData.description; | |
self.body = mData.body; | |
self.allowEdit = mData.allowEdit; | |
// formatted fields | |
self.textSummary = ko.computed(function() { | |
return HD.format.elipses(self.body, 255); | |
}); | |
self.date = ko.computed(function() { | |
return HD.format.dateAndElapsed(mData.created); | |
}); | |
self.editUrl = ko.computed(function() { | |
return HD.url.format.id(_detailPage, self._id, true); | |
}); | |
self.addUrl = ko.computed(function() { | |
return HD.url.format.id(_detailPage, "new", true); | |
}); | |
}; | |
// Cover letter MVVM code | |
var mCoverLetters = HDM.extend(function() { | |
var self = this; | |
self.pageTitle = ko.observable(_pageTitle); | |
self.pageName = ko.observable(_pageName); | |
self.pageTitleCls = ko.observable(_pageTitleCls); | |
self._doNotSearch = false; | |
// Grid properties | |
self.properties = { | |
AJAX_PATH: { | |
read: global.BASE_PATH + "users/{id}/coverletters" | |
}, | |
path: { | |
edit: _detailPage | |
}, | |
itemObj: mCoverLetter, | |
paginate: true, | |
classes: { | |
footer: ".list_footer" | |
}, | |
pagination: { | |
perPage: 25, | |
curPage: 1 | |
}, | |
$el: $("#dtable"), | |
sortList: CONST.coverLetterSortList, | |
sortListValue: CONST.coverLetterSortListValue, | |
$elTableSpinner: $("#table-spinner") | |
}; | |
// Create the grid | |
self.dtable = new HDGrid(self.properties); | |
self.searchField = ko.observable(""); | |
self.hasSearchText = ko.computed(function(){ | |
return $.trim(self.searchField()) !== ""; | |
}); | |
}); | |
mCoverLetters.prototype.addItem = function(){ | |
HD.changePage(HD.url.format.id(_detailPage, "new")); | |
}; | |
mCoverLetters.prototype.cleanTextSearch = function() { | |
var self = this; | |
self.searchField(""); | |
self.search(); | |
}; | |
mCoverLetters.prototype.cleanSearch = function() { | |
var self = this; | |
self.dtable.setAdvancedSearch(false); | |
self._doNotSearch = true; | |
self.searchField(""); | |
self._doNotSearch = false; | |
self.search(); | |
}; | |
mCoverLetters.prototype.search = function() { | |
var self = this; | |
if(self._doNotSearch) | |
return; | |
var query = { }; | |
var searchField = self.searchField(); | |
var sTerm = $.trim(searchField); | |
if(sTerm !== "") | |
query = $.extend({}, query, { $text: { $search: sTerm, $language: "pt" } }); | |
self.dtable.search(query); | |
}; | |
mCoverLetters.prototype.createDataPools = function() { | |
var self = this; | |
self.baseCreateDataPools(); | |
}; | |
mCoverLetters.prototype.populate = function(data) { | |
var self = this; | |
var userId = HDM.get.login.userId(); | |
self.dtable.setReadUrl(self.properties.AJAX_PATH.read.replace(/{id}/gi, userId)); | |
}; | |
mCoverLetters.prototype.getData = function(cb, auth) { | |
if(!auth) { | |
HD.gotoUserLogin(); | |
cb(); | |
return; | |
} | |
var self = this; | |
self.populate(); | |
self.dtable.getData(function() { | |
cb(); | |
}, auth); | |
}; | |
mCoverLetters.prototype.getBreadCrumbs = function() { | |
return _breadcrumbs; | |
}; | |
mCoverLetters.prototype.init = function() { | |
this.createDataPools(); | |
}; | |
HDM.add(_modelName, new mCoverLetters()); | |
var vCoverLetters = HDV.extend({ | |
id: "url_site_" + HD.makeFirstUpperCase(_modelName), | |
dataId: _modelName, | |
model: HDM.get[_modelName], | |
init : function() { | |
} | |
}); | |
HDV.add(_modelName, vCoverLetters); | |
$(document).ready(function(){ | |
HDV.render(function() { | |
HDV.get[_modelName].afterDomReady(); | |
}, _renderOrder); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment