1var watcherGlobal; 2 3define(["jquery"], function($) { 4 /* Example usage 5 //-- jquery example 6 watcher.add("jquery", "some-jquery-event"); 7 setTimeout(function(){ 8 $("body").trigger("some-jquery-event", {action: "Jquery event hing"}); 9 }, 2000); 10 11 //-- javascript example 12 watcher.add("js", "something-vanilla-js"); 13 setTimeout(function(){ 14 var someEvent = new CustomEvent('something-vanilla-js', {detail: {action: "Vanilla JS thing"}}); 15 document.querySelector('body').dispatchEvent(someEvent); 16 }, 4000); 17 18 //-- vue example 19 watcher.add("vue", "change-page"); 20 $emit('change-page', {action: 'Page Changed', totalPages: pager.totalPages}); 21 */ 22 function UIWatcher(vueInstance, jqueryInstance, documentInstance, uiEvent){ 23 // singleton watcherGlobal 24 var _watcherGlobal = function() { 25 if (!watcherGlobal) { 26 watcherGlobal = {}; 27 } 28 return watcherGlobal; 29 }; 30 // instantiate 31 _watcherGlobal(); 32 33 var watcher = watcherGlobal; 34 watcher.vue = vueInstance; 35 watcher.$ = jqueryInstance || {}; 36 watcher.doc = documentInstance || {}; 37 watcher.uiEvent = uiEvent || {}; 38 watcher.context = {}; 39 watcher.handlers = (watcher.handlers) ? watcher.handlers : {}; 40 watcher.registers = (watcher.registers) ? watcher.registers : []; 41 watcher.widgetContext = (watcher.widgetContext) ? watcher.widgetContext : {}; 42 watcher.eventContext = (watcher.eventContext) ? watcher.eventContext : {}; 43 var debug = (window.location.href.match(/ui_debug/) !== null); 44 45 watcher.on = function (eventName, handler) { 46 if (watcher.handlers[eventName] == undefined) watcher.handlers[eventName] = []; 47 watcher.handlers[eventName].push(handler); 48 } 49 50 watcher.add = function(type, eventName, widgetGuid, context) { 51 var widgetGuid = widgetGuid; 52 var reg = eventName+"_"+type; 53 54 setWidgetContext(eventName, widgetGuid, context); 55 if (watcher.registers.indexOf(reg) > -1) { 56 warn("already registered "+reg); 57 return; 58 } 59 watcher.registers.push(reg); 60 61 // setup global listeners based on type 62 if (type == "vue") { 63 watcher.vue.$on(eventName, function(payload){ 64 trigger(eventName, widgetGuid, {event: eventName, eventContext: payload}); 65 }); 66 } 67 else if (type == "js") { 68 watcher.doc.addEventListener(eventName, function (event, payload) { 69 trigger(eventName, widgetGuid, {event: eventName, eventContext: event.detail}); 70 }, false); 71 } 72 else if (type == "jquery") { 73 watcher.$.on(eventName, function (event, payload) { 74 trigger(eventName, widgetGuid, {event: eventName, eventContext: payload}); 75 }); 76 } 77 else if (type == "ui") { 78 var eSel = "[data-ui-events-click*='eventName\": \""+eventName+"\"']"; 79 $(watcher.uiEvent).off("click", eSel).on("click", eSel, function(){ 80 var attrs = JSON.parse($(this).attr("data-ui-events-click")); 81 var eventName = attrs.eventName; 82 var data = attrs.data; 83 trigger(eventName, widgetGuid, {event: eventName, eventContext: data}); 84 }); 85 } 86 } 87 88 /* 89 * Function 90 */ 91 function trigger(eventName, guid, payload) { 92 var payload = payload; 93 payload.guid = guid; 94 if (watcher.handlers[eventName] == undefined) { 95 warn("No handler registered for UI event", eventName); 96 return; 97 } 98 var ctx = getWidgetContext(eventName, payload.guid); 99 var ctxPayload = { 100 widgetContext: ctx, 101 eventContext: payload.eventContext, 102 eventName: eventName 103 }; 104 for (var i=0; i<watcher.handlers[eventName].length; i++){ 105 watcher.handlers[eventName][i](ctxPayload); 106 } 107 } 108 109 function getWidgetContext(eventName, widgetGuid) { 110 if (!watcher.widgetContext[widgetGuid] || !watcher.widgetContext[widgetGuid][eventName]){ 111 warn("No context registered for guid:"+widgetGuid + " eventName:" +eventName); 112 return false; 113 } 114 return watcher.widgetContext[widgetGuid][eventName]; 115 } 116 117 function setWidgetContext(eventName, widgetGuid, context) { 118 if (!widgetGuid) return; 119 if (watcher.widgetContext[widgetGuid] === undefined) 120 watcher.widgetContext[widgetGuid] = {}; 121 if (watcher.widgetContext[widgetGuid][eventName] === undefined) { 122 watcher.widgetContext[widgetGuid][eventName] = context; 123 warn("Registered context for guid:"+widgetGuid + " eventName:" +eventName); 124 } else { 125 warn("Already registered context for guid:"+widgetGuid + " eventName:" +eventName); 126 } 127 } 128 129 function warn(msg, data) { 130 var data = (data) ? data : ""; 131 if (debug) 132 console.warn(msg, data); 133 } 134 135 return watcher; 136 }; 137 138 return UIWatcher; 139});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.