Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
/* ========================================================================== Helpers ========================================================================== */ define([ 'jquery', 'underscore', 'backbone' ], function ($, _, Backbone) { 'use strict'; var Helpers = { /* * Recebe um elemento e o coloca dentro de outro, para * permitir a utilização da função .html() do jQuery e pegar o seu conteúdo. * * @return html elements * */ getElementContents : function (viewElement) { return $('<div>').append(viewElement).html(); }, /* * Retorna uma string com a primeira letra maiúscula. * * @return string * */ toTitleCase : function (str) { return str.replace(/\w\S*/g, function(txt){ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }); }, hourToMsec : function (hour) { // Milisegundos em 1 hora. var m = 3600000; if ( hour !== parseInt(hour) ) { var type = typeof(hour); throw new Error( type.toUpperCase() + ' passado como argumento. INT esperado.'); } return hour * m; }, getObjectAt : function (position, obj) { var position = position || 0; var arr = []; for ( var i in obj ) { arr.push(i); } return arr[position]; }, // Serializa os campos de um formulário. serializeObject : function (form) { var o = {}; var a = $(form).serializeArray(); $.each(a, function () { if (o[this.name] !== undefined) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }, // Cookies: Set / Get e delete. cookie : { set : function (name, value, hours) { var expires = "", date, day, hours; if (hours) { date = new Date(); date.setTime(date.getTime()+(hours*60*60*1000)); // date.setHours(date.getHours() + hours); expires = "; expires="+( date.toUTCString() ); } document.cookie = name+"="+value+expires+"; path=/"; }, get: function (name) { var nameEQ = name + "=", ca = document.cookie.split(';'); for(var i=0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; }, 'delete': function (name) { this.set(name,"",-1); } }, // Recebe uma string contendo data no formato dd/mm/yyyy // e converte para yyyy-mm-dd, que é o formato aceito no input do tipo date. toInputDateFormat : function (str) { str = str.split('/'); var d = str[0], m = str[1], y = str[2]; return y + "-" + m + "-" + d; }, toBRFormat : function (str) { if (str.indexOf('/') > 0) { return str; } str = str.split('-'); var d = str[2], m = str[1], y = str[0]; return d + "/" + m + "/" + y; }, // Formatação de data date : function (datetime, withTime, timeOnly, withTag) { timeOnly = timeOnly || false; var dt = datetime + "Z"; // Faz o FF e IE interpretar a UTC date igual ao Chrome var d = new Date(dt), showTime = showTime || false, str = [], day, month, year, hours, minutes, seconds, time; var addZero = function (n) { return (n < 10) ? '0' + n : n; }; function dateFromISOIE(s) { s = s.split(/\D/); return new Date(Date.UTC(s[0], --s[1]||'', s[2]||'', s[3]||'', s[4]||'', s[5]||'', s[6]||'')); } // IE < 9 // 2014-04-04T16:19:51Z if ( isNaN(d) ) { d = dateFromISOIE(dt); } day = addZero(d.getUTCDate()); month = addZero(d.getMonth() + 1); year = d.getFullYear().toString().replace(20, ''); hours = addZero(d.getUTCHours()); minutes = addZero(d.getUTCMinutes()); seconds = addZero(d.getUTCSeconds()); time = ['<time>', hours, ':', minutes, '</time>'].join(''); if (withTag === false) { year = d.getFullYear().toString(); time = [hours, ':', minutes].join(''); } if (timeOnly) { return time; } str = [ day , month, year].join('/'); if ( withTime ) { return [str, time].join(" "); } return str; }, // Formatação de data (novo) dateTimeFormatter: function (options) { var defaults = { dateTime: null, withTag: null, withSeconds: false, yearFull: true //ano completo }, opts = _.defaults(options, defaults), temp, date, time, day, month, year, hours, minutes, seconds; function prepare() { temp = opts.dateTime.split('T'); time = temp[1].split(':'); // Data date = temp[0].split('-'); day = date[2]; month = date[1]; year = date[0]; if (!opts.yearFull) { year = year.slice(2, 4); } // Hora hours = time[0]; minutes = time[1]; seconds = time[2]; } function getDate() { //year = date[0].slice(2,4); return day + '/' + month + '/' + year; } function getHours() { var t; if (options.withSeconds) { t = hours + ':' + minutes + ':' + seconds; } else { if ( opts.withTimeH) { if (minutes == "00") minutes = ""; minutes += "h"; } t = hours + ':' + minutes; } if (options.withTag) { t = '<time>' + t + '</time>'; } return t; } function getHoursString() { var t; if (minutes == "00") t = hours + "h"; else t = hours + ':' + minutes + "h"; if (options.withTag) { t = '<time>' + t + '</time>'; } return t; } // Construção das variáveis prepare(); // API pública return { date: function date() { return getDate(); }, time: function time() { return getHours(); }, timeString: function timeString() { return getHoursString(); }, dateTime: function () { return getDate() + ' '+getHours(); } }; }, /** * Verifica se a hora inicial é menor que a final. */ isHoraInicialMenorHoraFinal: function (horaInicial, horaFinal) { var horaIni = horaInicial.split(':'), horaFim = horaFinal.split(':'), // Verifica as horas. Se forem diferentes, é só ver se a inicial // é menor que a final. hIni = parseInt(horaIni[0], 10), hFim = parseInt(horaFim[0], 10); if (hIni < hFim) { return true; } else { if (hIni === hFim) { // Se as horas são iguais, verifica os minutos então. var mIni = parseInt(horaIni[1], 10), mFim = parseInt(horaFim[1], 10); if (mIni < mFim) { return true; } else { if (mIni === mFim) { // Se os minutos são iguais, verifica os segundos então. var sIni = parseInt(horaIni[2], 10), sFim = parseInt(horaFim[2], 10); if (sIni < sFim) { return true; } else { return false; } } else { return false; } } } else { return false; } } }, isDataInicialMenorDataFinal: function (obj) { // Qualquer grupo abaixo é aceito /* var obj = { dataInicialT: '2017-01-01T00:00', dataFinalT: '2017-01-01T23:59', dataHoraInicial: '01/01/2017 00:00', dataHoraFinal: '01/01/2017 23:59', dataInicial: '01/01/2017', dataFinal: '01/01/2017', horaInicial: '00:00', horaFinal: '23:59' }; */ var split = "/"; var dataInicial, dataFinal, horaInicial, horaFinal; var dataIni, dataFim, aIni, aFim, mIni, mFim, dIni, dFim; var attrs = { 'dataInicialT': { splitData: '-', splitHora: 'T', reverse: true, dataFinal: 'dataFinalT' }, 'dataHoraInicial': { splitData: '/', splitHora: ' ', reverse: false, dataFinal: 'dataHoraFinal' }, 'dataInicial': { splitData: '/', splitHora: void(0), reverse: false, dataFinal: 'dataFinal' } }; $.each(attrs, function (attr, item) { if (obj[attr] != void (0)) { split = attrs[attr].splitData; if(attrs[attr].reverse == true) { dataInicial = obj[attr].split(attrs[attr].splitHora)[0].split(attrs[attr].splitData).reverse().join(attrs[attr].splitData); dataFinal = obj[attrs[attr].dataFinal].split(attrs[attr].splitHora)[0].split(attrs[attr].splitData).reverse().join(attrs[attr].splitData); } else { dataInicial = obj[attr].split(attrs[attr].splitHora)[0]; dataFinal = obj[attrs[attr].dataFinal].split(attrs[attr].splitHora)[0]; } horaInicial = (attrs[attr].splitHora != void (0)) ? obj[attr].split(attrs[attr].splitHora)[1] : obj.horaInicial horaFinal = (attrs[attr].splitHora != void (0)) ? obj[ attrs[attr].dataFinal ].split(attrs[attr].splitHora)[1] : obj.horaFinal; } }); dataIni = dataInicial.split(split); dataFim = dataFinal.split(split); // Verifica os anos. Se forem diferentes, é só ver se o inicial // é menor que o final. aIni = parseInt(dataIni[2], 10); aFim = parseInt(dataFim[2], 10); mIni = parseInt(dataIni[1], 10); mFim = parseInt(dataFim[1], 10); dIni = parseInt(dataIni[0], 10); dFim = parseInt(dataFim[0], 10); //Se o ano é maior, passa direto: if(aFim > aIni) { return true; } //Se o mes é maior, passa direto if(mFim > mIni && aIni == aFim) { return true; } //Se o dia é maior, passa direto if (dFim > dIni && mIni == mFim && aIni == aFim) { return true; } //Se a hora é maior, passa direto. if (UNINTER.Helpers.isHoraInicialMenorHoraFinal(horaInicial, horaFinal) && dFim == dIni && mIni == mFim && aIni == aFim) { return true; } else { return false; } }, // Formata o nome do usuário para mostrar somente o // Nome e Sobrenome username : function (name) { name = name || null; if (!name) { throw new Error('Atributo "name" não fornecido!'); } var n = name.trim().split(' '); var n1 = n[0]; var n2 = n.reverse()[0]; return n1 + " " + n2; }, /** * Wrapper para a contrução da Modal do Twitter Bootstrap. * Recebe Objeto de configuração. * @param size String O tamanho da modal - modal-lg, modal-md, modal-sm * @param body String O texto no corpo. Aceita html. * @param title String O título do cabeçalho * @param buttons Array Os botões de ação. * @param modal Object Parâmetros do plugin do boostrap * @param callback Function Função para tratar as ações da modal * * Ex: App.Helpers.showModal({ size: "modal-sm", body: 'Lorem Ipsum dolor', title: 'Some Title', buttons: [{ 'type': "button", 'klass': "btn btn-primary", 'text': "Ok", 'dismiss': null, 'id': 'modal-ok', 'onClick': function (event, jQModalElement) { window.open(url, '_blank'); jQModalElement.modal('hide'); } }, { 'type': "button", 'klass': "btn btn-default", 'text': "Cancelar", 'dismiss': 'modal', 'id': 'modal-cancel' }] }); * **/ showModalAdicionarFila: function (options) { //usado a variavel UNINTER.objetoSelecionado pois ao atualizar a pilha de modal sera destruida e recarregada conforme chamadas UNINTER.objetoSelecionado = UNINTER.objetoSelecionado || {} UNINTER.objetoSelecionado.filaModal = UNINTER.objetoSelecionado.filaModal || []; UNINTER.objetoSelecionado.filaModal.push(options); //if (!$("#dialogModal").is(":visible")) { if (UNINTER.objetoSelecionado.filaModal.length == 1) { UNINTER.Helpers.showModal(UNINTER.objetoSelecionado.filaModal[0]); } }, showModal: function (options) { options = options || {}; var defaults = { size: "", body: null, title: null, buttons: [{ 'type': "button", 'klass': "btn-primary", 'text': "Ok", 'dismiss': null, 'id': null, 'onClick': null, 'onClose': null }], modal: null, callback: null, reset: null, onClose: null, botaoFechar: true, header: true, footer: true, footerContent: void(0), keyboard: false, backdrop: true //specify static for a backdrop which doesn't close the modal on click. }, dialog = $('#dialogModal'), opts = _.defaults(options, defaults), title = opts.title ? $("<h4>", { 'class': "modal-title", "tabindex": "0" }).html(opts.title) : $("<h4>", { 'class': "modal-title", "tabindex": "0" }).html(""), modalClasses = "modal-dialog", reset = function reset() { if (opts.reset != null) { opts.reset(); } dialog .find('.modal-dialog') .removeClass('modal-lg modal-sm modal-md-sm modal-full modal-popup') .removeAttr('style') .find('.modal-body') .removeAttr('style'); dialog .find('.modal-footer') .removeAttr('style'); $('.modal-backdrop').remove(); }; // Esvaziando o footer dialog.find('.modal-footer').empty(); _.each(opts.buttons, function (v, k) { var button = $('<button>', { 'type': v.type, 'class': v.klass }).text(v.text); if (v.dismiss && v.dismiss === "modal") { button.on("click", function () { dialog.modal("hide"); }); } if (v.id && v.id !== false) { button.prop('id', v.id); } if (v.title && v.title !== false) { button.prop('title', v.title); } if ( v.onClick && typeof v.onClick === 'function' ) { button.on('click', function (e) { v.onClick(e, dialog); }); } dialog.find('.modal-footer').append( button ); }); if (!opts.botaoFechar) { dialog.find('.modal-header').find('.close').hide(); } else { dialog.find('.modal-header').find('.close').show(); } if (!opts.header) { dialog.find('.modal-header').hide(); } else { dialog.find('.modal-header').show(); } if (!opts.footer) { dialog.find('.modal-footer').hide(); } else { if (opts.footerContent) { dialog.find('.modal-footer').append(opts.footerContent); } dialog.find('.modal-footer').show(); } dialog.contents("div").addClass(opts.size + " " + modalClasses); dialog.find('.modal-header').find('h4').remove(); dialog.find('.modal-header').append( title ); dialog.find('.modal-body').html(opts.body); dialog.data('bs.modal', null); dialog.modal(opts.modal); dialog.find('.modal-header h4').focus(); if (typeof opts.callback === 'function') { opts.callback(dialog); } dialog.off('shown.bs.modal').on('shown.bs.modal', function (e) { dialog.find('.modal-header h4').focus(); if(dialog.find('#fecharModalPopup').length > 0){ dialog.find('#fecharModalPopup').focus(); } }); dialog.off('hidden.bs.modal'); dialog.on('hidden.bs.modal', function modalCloseCallback () { if ( typeof opts.onClose === 'function' ) { opts.onClose(dialog); } reset(); UNINTER.objetoSelecionado.filaModal = UNINTER.objetoSelecionado.filaModal || []; UNINTER.objetoSelecionado.filaModal.shift(); if (UNINTER.objetoSelecionado.filaModal.length > 0) { UNINTER.Helpers.showModal(UNINTER.objetoSelecionado.filaModal[0]); } }); }, // Checagem de dispositivo isMobile : function () { var userAgent = navigator.userAgent || navigator.vendor || window.opera; return ((/iPhone|iPod|iPad|Android|BlackBerry|Opera Mini|IEMobile/).test(userAgent)); }, // Faz uma requisição AJAX do tipo deferred, utilizando o $.Deferred() deferredResponse: function (options) { var defer = $.Deferred(); var defaults = { type: 'GET', data: null, async: true, crossDomain: false }; var opts = _.defaults(options, defaults); if ( !opts.url ) { throw new Error("O argumento URL está vazio."); } var ajaxOptions = { type: opts.type, url: opts.url, async: opts.async, success: function (r) { defer.resolve(r); }, error: function (r) { defer.reject(r); } }; if ( opts.data ) { ajaxOptions.data = opts.data; }; $.ajax(ajaxOptions); return defer.promise(); }, // Faz fetch do tipo deferred, utilizando o $.Deferred() fetchCollectionDeferred: function (collectionInstance, url) { var defer = $.Deferred(); var collection = collectionInstance; collection.fetch({ "url": url, cache: false, success: function (response) { defer.resolve(response); }, error: function (response) { defer.reject(response); } }); return defer.promise(); }, /** * Efetua uma requisição AJAX. * @param {string} [type] [Tipo de requisição. Ex: POST, GET] * @param {string} [data] [Informação a enviar] * @param {boolean} [async] [Requisição assíncrona ou síncrona] */ ajaxRequest: function(options) { var response; var defaults = { type: 'GET', data: null, async: false, successCallback: null, errorCallback: null }; var opts = _.defaults(options, defaults); if ( !opts.url ) { throw new Error("O argumento URL está vazio."); } if ( (opts.successCallback && typeof opts.successCallback !== 'function') || (opts.errorCallback && typeof opts.errorCallback !== 'function') ) { throw new TypeError("Parâmetro 'errorCallback' ou 'successCallback' deve ser uma função"); } var ajaxOptions = { type: opts.type, url: opts.url, async: opts.async, success: function (r) { response = r; if ( opts.successCallback ) { opts.successCallback(r); } }, error: function (r) { response = r; if ( opts.errorCallback ) { opts.errorCallback(r); } } }; if ( opts.beforeSend ) { ajaxOptions.beforeSend = opts.beforeSend; } if ( opts.data ) { ajaxOptions.data = opts.data; } $.ajax(ajaxOptions); return response; }, ajaxRequestError: function (options) { var response = { status: null, resposta: null }; var defaults = { type: 'GET', data: null, async: false }; var opts = _.defaults(options, defaults); if (!opts.url) { throw new Error("O argumento URL está vazio."); } var ajaxOptions = { type: opts.type, url: opts.url, async: opts.async, success: function (r) { response.status = 200 response.resposta = r; }, error: function (r, e, t) { response.status = r.status; response.resposta = r.responseText; } }; if (opts.data) { ajaxOptions.data = opts.data; } $.ajax(ajaxOptions); return response; }, // Recebe um objeto jQuery e retorna uma string jQueryObjToString : function (obj) { var jQueryObject = obj instanceof jQuery; if ( !jQueryObject ) { throw new TypeError('Instância do parâmetro não é um objeto jQuery'); } var str = $('<div>').append(obj.clone()).html(); return str; }, // Anima o documento até o topo ou ao elemento passado como parâmetro animatedScrollTop: function (elementtoScrollToID, duration) { var $el = (elementtoScrollToID) ? $(elementtoScrollToID) : $('#headerItemView'); var dur = duration || 500; $('html, body').animate({ scrollTop: $el.offset().top }, dur); }, //Valida se um valor é valido, ou seja, != null, != vazio, != undefined ... stringValida: function (string) { if (_.isNull(string) || _.isUndefined(string) || _.isNaN(string) || !_.isString || string == "") { return false; } else { return true; } }, // Gera um número aleatório entre min e max getRandomInt: function (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }, // Coloca tags <br> onde há quebras de linha "\r\n" ou "\n" newLineToBr: function newLineToBr(str) { if (/<[a-z][\s\S]*>/i.test(str)) { return str; } //console.info(str + " " + str.indexOf('\r')); var hasR = (str.indexOf('\r')) !== -1, arr; if ( hasR ) { arr = str.split('\r\n'); } else { arr = str.split('\n'); } str = arr.join('<br>'); return str; }, // Busca IDS duplicados na página checkForDuplicatedIds: function checkForDuplicatedIds () { var ids = {}, found = false; $('[id]').each(function() { if (this.id && ids[this.id]) { found = true; console.warn('ID em duplicidade encontrado: #'+this.id); } ids[this.id] = 1; }); if (!found) console.info('Nenhum id duplicado foi encontrado.'); }, enterTriggerClick: function (e) { var code = e.keyCode || e.which; if (code == 13) { var elemento = e.currentTarget; $(elemento).trigger("click"); } }, montarUrlComPalavrasChave : function (url) { var keyWordRegex = /\{\w+\}/g; if (keyWordRegex.test(url)) { var matches = url.match(keyWordRegex); var urlAlterada = url; for (var i = 0; i < matches.length; i++) { switch (matches[i]) { case "{idSalaVirtual}": { var idSalaVirtual = UNINTER.StorageWrap.getItem("leftSidebarItemView").idSalaVirtual; var urlAlterada = urlAlterada.replace(matches[i], idSalaVirtual); break; } case "{idSalaVirtualOferta}": { var idSalaVirtualOferta = UNINTER.StorageWrap.getItem("leftSidebarItemView").idSalaVirtualOferta; var urlAlterada = urlAlterada.replace(matches[i], idSalaVirtualOferta); break; } case "{idUsuario}": { var idUsuario = UNINTER.StorageWrap.getItem("user").idUsuario; var urlAlterada = urlAlterada.replace(matches[i], idUsuario); break; } case "{valorIdObjComboPai}": { break; } default: { //Deixa passar para ser tratado no nível acima break; } } } return urlAlterada; } return url; }, montarUrlRoa: function (idItemAprendizagem, acessoROA, edicao, metodo, redirecionar) { var url = "web/roa/?item=" + acessoROA + "&id=" + idItemAprendizagem; if (metodo == void (0)) metodo = "editar"; if (redirecionar == void (0)) redirecionar = 1; if (edicao === true) { url = "web/#/ava/acessoroa/" + idItemAprendizagem + "/" + UNINTER.StorageWrap.getItem('user').idUsuario + "/" + UNINTER.StorageWrap.getItem('user').token; url += "/" + metodo; url += "/" + redirecionar; } url = UNINTER.AppConfig.baseUrlROA() + url; return url; }, removerAcento: function(palavra) { var palavraSemAcento = ''; var caracterComAcento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ'; var caracterSemAcento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC'; for (var i = 0; i < palavra.length; i++) { var char = palavra.substr(i, 1); var indexAcento = caracterComAcento.indexOf(char); if (indexAcento != -1) { palavraSemAcento += caracterSemAcento.substr(indexAcento, 1); } else { palavraSemAcento += char; } } return palavraSemAcento; } }; return Helpers; });
Compartilhar