example/index.js (78 lines of code) (raw):

// 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. /** Options API * * the 'options' API allows you to dynamically change UserALE.js params and set meta data values * pass in variables or properties into the options object, such as from sessionStorage or localStorage * NOTE: logDetails is set to true (default:false), this will log key strokes, inputs, and change events * (be careful of your form data and auth workflows!) */ const changeMe = "me"; window.userale.options({ 'userId': changeMe, 'logDetails': true, 'toolName': 'Apache UserALE.js Example (Custom)' }); /**Filter API /**the 'filter' API allows you to eliminate logs you don't want * use as a global filter and add classes of events or log types to eliminate * or use in block scope to surgically eliminate logs from specific elements from an event handler * The filter below reduces logs to capture click, change, select, scroll and submit events on index.html * Note that for surgical filters, you may need to clear or reset back to a global filter callback * the same is true for the 'map' API. See examples below: */ window.userale.addCallbacks({ filter(log) { var type_array = ['mouseup', 'mouseover', 'mousedown', 'keydown', 'dblclick', 'blur', 'focus', 'input', 'wheel']; var logType_array = ['interval']; if(type_array.includes(log.type) || logType_array.includes(log.logType)) { return false; } return log; } }); /**Log Mapping API * * the 'map' API allows you to add or modify new fields to your logs * this example works with the "Click Me!" button at the top of index.html */ document.addEventListener('click', function(e){ if (e.target.innerHTML === 'Click Me!') { window.userale.addCallbacks({ map(log) { return Object.assign({}, log, { logType: 'custom', customLabel: 'map & packageLog Example' }); } }); window.userale.packageLog(e, window.userale.details(window.userale.options(),e.type)); /**you'll want to reset the map callback function, or set a conditional (e.g., return log), else * the callback may be applied to other events of the same class (e.g., click) */ window.userale.removeCallbacks(["map"]); } else { return false } }); /** Alternate Log Mapping API Example * Build a global mapping function with conditional logic to modify logs for similar events * this example works with the "Click Me!" button at the top of index.html * Also, note that specifying log as a return will keep the scope of this callback limited to only the events you want */ //window.userale.map(function (log, e) { // var targetsForLabels = ["button#test_button"]; // if (targetsForLabels.includes(log.target)) { // return Object.assign({}, log, { customLabel: e.target.innerHTML }); // } else { // return log; // } //}); /**'Log' API and Custom Log Functions * * the 'log' API generate custom events and add them to the log queue * pass in any keys:values for fully customized logs * utilize 'options' and other functions to streamline populating custom logs * type 'log' into the 'API Test Field' to see this custom log sent to our example server */ document.addEventListener('change', function(e) { if (e.target.value === 'log') { window.userale.log({ target: window.userale.getSelector(e.target), path: window.userale.buildPath(e), clientTime: Date.now(), type: e.type, logType: 'custom', userAction: false, details: {'foo': 'bar', 'bar': 'foo'}, customField1: 'I can make this log look like anything I want', customField2: 'foo', userId: window.userale.options().userId, toolVersion: window.userale.options().version, toolName: window.userale.options().toolName, useraleVersion: window.userale.options().useraleVersion, sessionID: window.userale.options().sessionID, customLabel: "Custom Log Example" }); } }); /**you can also use UserALE.js' own packaging function for HTML events to strive for standardization * type 'packageLog into the 'API Test Field' to see this custom log sent to our example server */ document.addEventListener('change', function(e){ if (e.target.value === 'packageLog') { /**You can then use the 'Mapping' API function to modify custom logs created with the packageLog function*/ window.userale.addCallbacks({changeMap(log) { var targetsForLabels = ['change']; if (targetsForLabels.includes(log.type)) { return Object.assign({}, log, { logType: 'custom', customLabel: 'packageLog Example' }); } else { return log; } }}); /**You can also use the details function to package additional log meta data, or add custom details*/ window.userale.packageLog(e, window.userale.details(window.userale.options(),e.type)); } else { return false } }); /**you can also just add boilerplate UserALE.js meta data to custom logs with the packageCustomLog function * type 'packageCustomLog into the 'API Test Field' to see this custom log sent to our example server */ document.addEventListener('change', function(e) { if (e.target.value === 'packageCustomLog') { window.userale.packageCustomLog({ customLabel: 'packageCustomLog Example', customField1: 'foo', customField2: 'bar'}, function(){return {'foo': 'bar', 'bar': 'foo'}}, true ); } else { return false } });