migrated knockout asset to bower
[openemr.git] / public / assets / knockout-2-2-1 / src / binding / defaultBindings / event.js
blob74b78bf2aabd49286a69c5fe5c7069c151446e2b
1 // For certain common events (currently just 'click'), allow a simplified data-binding syntax
2 // e.g. click:handler instead of the usual full-length event:{click:handler}
3 function makeEventHandlerShortcut(eventName) {
4     ko.bindingHandlers[eventName] = {
5         'init': function(element, valueAccessor, allBindingsAccessor, viewModel) {
6             var newValueAccessor = function () {
7                 var result = {};
8                 result[eventName] = valueAccessor();
9                 return result;
10             };
11             return ko.bindingHandlers['event']['init'].call(this, element, newValueAccessor, allBindingsAccessor, viewModel);
12         }
13     }
16 ko.bindingHandlers['event'] = {
17     'init' : function (element, valueAccessor, allBindingsAccessor, viewModel) {
18         var eventsToHandle = valueAccessor() || {};
19         for(var eventNameOutsideClosure in eventsToHandle) {
20             (function() {
21                 var eventName = eventNameOutsideClosure; // Separate variable to be captured by event handler closure
22                 if (typeof eventName == "string") {
23                     ko.utils.registerEventHandler(element, eventName, function (event) {
24                         var handlerReturnValue;
25                         var handlerFunction = valueAccessor()[eventName];
26                         if (!handlerFunction)
27                             return;
28                         var allBindings = allBindingsAccessor();
30                         try {
31                             // Take all the event args, and prefix with the viewmodel
32                             var argsForHandler = ko.utils.makeArray(arguments);
33                             argsForHandler.unshift(viewModel);
34                             handlerReturnValue = handlerFunction.apply(viewModel, argsForHandler);
35                         } finally {
36                             if (handlerReturnValue !== true) { // Normally we want to prevent default action. Developer can override this be explicitly returning true.
37                                 if (event.preventDefault)
38                                     event.preventDefault();
39                                 else
40                                     event.returnValue = false;
41                             }
42                         }
44                         var bubble = allBindings[eventName + 'Bubble'] !== false;
45                         if (!bubble) {
46                             event.cancelBubble = true;
47                             if (event.stopPropagation)
48                                 event.stopPropagation();
49                         }
50                     });
51                 }
52             })();
53         }
54     }