/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ define(['require', 'utils/Globals'], function(require, Globals) { 'use strict'; var Utils = {}; var prevNetworkErrorTime = 0; require(['noty'], function() { $.extend($.noty.defaults, { timeout: 5000, layout: "topRight", theme: "relax", closeWith: ['click', 'button'], animation: { open: 'animated flipInX', close: 'animated flipOutX', easing: 'swing', speed: 500 } }); }); Utils.generateUUID = function() { var d = new Date().getTime(); if (window.performance && typeof window.performance.now === "function") { d += performance.now(); //use high-precision timer if available } var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); }); return uuid; }; Utils.notifyInfo = function(options) { noty({ type: "information", text: "<i class='fa fa-exclamation-circle'></i> " + (options.content || "Info message.") }); }; Utils.notifyWarn = function(options) { noty({ type: "warning", text: "<i class='fa fa-times-circle'></i> " + (options.content || "Info message.") }); }; Utils.notifyError = function(options) { noty({ type: "error", text: "<i class='fa fa-times-circle'></i> " + (options.content || "Error occurred.") }); }; Utils.notifySuccess = function(options) { noty({ type: "success", text: "<i class='fa fa-check-circle-o'></i> " + (options.content || "Error occurred.") }); }; Utils.defaultErrorHandler = function(model, error) { if (error.status == 401) { window.location = 'login.jsp' } else if (error.status == 419) { window.location = 'login.jsp' } else if (error.status == 403) { var message = "You are not authorized"; if (error.statusText) { message = JSON.parse(error.statusText).AuthorizationError; } Utils.notifyError({ content: message }); } else if (error.status == "0") { var diffTime = (new Date().getTime() - prevNetworkErrorTime); if (diffTime > 3000) { prevNetworkErrorTime = new Date().getTime(); Utils.notifyError({ content: "Network Connection Failure : " + "It seems you are not connected to the internet. Please check your internet connection and try again" }); } } }; Utils.localStorage = { checkLocalStorage: function(key, value) { if (typeof(Storage) !== "undefined") { return this.getLocalStorage(key, value); } else { console.log('Sorry! No Web Storage support'); Utils.cookie.checkCookie(key, value); } }, setLocalStorage: function(key, value) { localStorage.setItem(key, value); return { found: false, 'value': value }; }, getLocalStorage: function(key, value) { var keyValue = localStorage.getItem(key); if (!keyValue || keyValue == "undefined") { return this.setLocalStorage(key, value); } else { return { found: true, 'value': keyValue }; } } }; Utils.cookie = { setCookie: function(cname, cvalue) { //var d = new Date(); //d.setTime(d.getTime() + (exdays*24*60*60*1000)); //var expires = "expires=" + d.toGMTString(); document.cookie = cname + "=" + cvalue + "; "; return { found: false, 'value': cvalue }; }, getCookie: function(findString) { var search = findString + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1); if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; }, checkCookie: function(key, value) { var findString = getCookie(key); if (findString != "" || keyValue != "undefined") { return { found: true, 'value': ((findString == "undefined") ? (undefined) : (findString)) }; } else { return setCookie(key, value); } } }; Utils.setUrl = function(options) { if (options) { if (options.mergeBrowserUrl) { var param = Utils.getUrlState.getQueryParams(); if (param) { options.urlParams = $.extend(param, options.urlParams); } } if (options.urlParams) { var urlParams = "?"; _.each(options.urlParams, function(value, key, obj) { urlParams += key + "=" + value + "&"; }); urlParams = urlParams.slice(0, -1); options.url += urlParams; } if (options.updateTabState) { $.extend(Globals.saveApplicationState.tabState, options.updateTabState()); } Backbone.history.navigate(options.url, { trigger: options.trigger != undefined ? options.trigger : true }); } }; Utils.getUrlState = { getQueryUrl: function() { var hashValue = window.location.hash; return { firstValue: hashValue.split('/')[1], hash: hashValue, queyParams: hashValue.split("?"), lastValue: hashValue.split('/')[hashValue.split('/').length - 1] } }, isInitial: function() { return this.getQueryUrl().firstValue == undefined ? true : false; }, isTagTab: function() { return this.getQueryUrl().firstValue == "tag" ? true : false; }, isTaxonomyTab: function() { return this.getQueryUrl().firstValue == "taxonomy" ? true : false; }, isSearchTab: function() { return this.getQueryUrl().firstValue == "search" ? true : false; }, getLastValue: function() { return this.getQueryUrl().lastValue; }, getFirstValue: function() { return this.getQueryUrl().firstValue; }, getQueryParams: function() { var qs = this.getQueryUrl().queyParams[1]; if (typeof qs == "string") { qs = qs.split('+').join(' '); var params = {}, tokens, re = /[?&]?([^=]+)=([^&]*)/g; while (tokens = re.exec(qs)) { params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]); } return params; } }, getKeyValue: function(key) { var paramsObj = this.getQueryParams(); if (key.length) { var values = []; _.each(key, function(objKey) { var obj = {}; obj[objKey] = paramsObj[objKey] values.push(obj); return values; }) } else { return paramsObj[key]; } } } Utils.checkTagOrTerm = function(value) { var name = value.split('.'); if (name.length > 1) { return { term: true, name: name[name.length - 1] } } else { return { term: false, name: name[name.length - 1] } } } return Utils; });