Commit 6c559818e250d641eed4013b5173317b3e296d16
Exists in
master
and in
1 other branch
Merge pull request #689 from oelmekki/js_filters
ADD allow js client to add filters
Showing
1 changed file
with
31 additions
and
7 deletions
Show diff stats
public/javascripts/notifier.js
| @@ -870,6 +870,12 @@ printStackTrace.implementation.prototype = { | @@ -870,6 +870,12 @@ printStackTrace.implementation.prototype = { | ||
| 870 | // Share to global scope as Airbrake ("window.Hoptoad" for backward compatibility) | 870 | // Share to global scope as Airbrake ("window.Hoptoad" for backward compatibility) |
| 871 | Global = window.Airbrake = window.Hoptoad = Util.generatePublicAPI(_publicAPI, Config); | 871 | Global = window.Airbrake = window.Hoptoad = Util.generatePublicAPI(_publicAPI, Config); |
| 872 | 872 | ||
| 873 | + Global._filters = []; | ||
| 874 | + | ||
| 875 | + Global.addFilter = function (cb) { | ||
| 876 | + Global._filters.push(cb); | ||
| 877 | + }; | ||
| 878 | + | ||
| 873 | function Notifier() { | 879 | function Notifier() { |
| 874 | this.options = Util.merge({}, Config.options); | 880 | this.options = Util.merge({}, Config.options); |
| 875 | this.xmlData = Util.merge(this.DEF_XML_DATA, Config.xmlData); | 881 | this.xmlData = Util.merge(this.DEF_XML_DATA, Config.xmlData); |
| @@ -921,7 +927,7 @@ printStackTrace.implementation.prototype = { | @@ -921,7 +927,7 @@ printStackTrace.implementation.prototype = { | ||
| 921 | } | 927 | } |
| 922 | 928 | ||
| 923 | return function (error) { | 929 | return function (error) { |
| 924 | - var outputData = '', | 930 | + var outputData = '', jsonData, |
| 925 | url = ''; | 931 | url = ''; |
| 926 | // | 932 | // |
| 927 | 933 | ||
| @@ -934,9 +940,12 @@ printStackTrace.implementation.prototype = { | @@ -934,9 +940,12 @@ printStackTrace.implementation.prototype = { | ||
| 934 | 940 | ||
| 935 | switch (this.options['outputFormat']) { | 941 | switch (this.options['outputFormat']) { |
| 936 | case 'XML': | 942 | case 'XML': |
| 937 | - outputData = encodeURIComponent(this.generateXML(this.generateDataJSON(error))); | ||
| 938 | - url = ('https:' == document.location.protocol ? 'https://' : 'http://') + this.options.host + '/notifier_api/v2/notices'; | ||
| 939 | - _sendGETRequest(url, outputData); | 943 | + jsonData = this.generateDataJSON(error); |
| 944 | + if (this.shouldSendData(jsonData)){ | ||
| 945 | + outputData = encodeURIComponent(this.generateXML(jsonData)); | ||
| 946 | + url = ('https:' == document.location.protocol ? 'https://' : 'http://') + this.options.host + '/notifier_api/v2/notices'; | ||
| 947 | + _sendGETRequest(url, outputData); | ||
| 948 | + } | ||
| 940 | break; | 949 | break; |
| 941 | 950 | ||
| 942 | case 'JSON': | 951 | case 'JSON': |
| @@ -945,9 +954,12 @@ printStackTrace.implementation.prototype = { | @@ -945,9 +954,12 @@ printStackTrace.implementation.prototype = { | ||
| 945 | * http://collect.airbrake.io/api/v3/projects/[PROJECT_ID]/notices?key=[API_KEY] | 954 | * http://collect.airbrake.io/api/v3/projects/[PROJECT_ID]/notices?key=[API_KEY] |
| 946 | * url = window.location.protocol + '://' + this.options.host + '/api/v3/projects' + this.options.projectId + '/notices?key=' + this.options.key; | 955 | * url = window.location.protocol + '://' + this.options.host + '/api/v3/projects' + this.options.projectId + '/notices?key=' + this.options.key; |
| 947 | */ | 956 | */ |
| 948 | - outputData = JSON.stringify(this.generateJSON(this.generateDataJSON(error))); | ||
| 949 | - url = ('https:' == document.location.protocol ? 'https://' : 'http://') + this.options.host + '/api/v3/projects/' + this.options.projectId + '/notices?key=' + this.xmlData.key; | ||
| 950 | - _sendPOSTRequest(url, outputData); | 957 | + jsonData = this.generateDataJSON(error); |
| 958 | + if (this.shouldSendData(jsonData)){ | ||
| 959 | + outputData = JSON.stringify(this.generateJSON(jsonData)); | ||
| 960 | + url = ('https:' == document.location.protocol ? 'https://' : 'http://') + this.options.host + '/api/v3/projects/' + this.options.projectId + '/notices?key=' + this.xmlData.key; | ||
| 961 | + _sendPOSTRequest(url, outputData); | ||
| 962 | + } | ||
| 951 | break; | 963 | break; |
| 952 | 964 | ||
| 953 | default: | 965 | default: |
| @@ -1175,6 +1187,18 @@ printStackTrace.implementation.prototype = { | @@ -1175,6 +1187,18 @@ printStackTrace.implementation.prototype = { | ||
| 1175 | } | 1187 | } |
| 1176 | 1188 | ||
| 1177 | return true; | 1189 | return true; |
| 1190 | + }, | ||
| 1191 | + | ||
| 1192 | + shouldSendData: function (jsonData) { | ||
| 1193 | + var shouldSend = true, i; | ||
| 1194 | + | ||
| 1195 | + for ( i = 0; i < Global._filters.length; i++ ) { | ||
| 1196 | + if ( ! Global._filters[i](jsonData) ){ | ||
| 1197 | + shouldSend = false; | ||
| 1198 | + } | ||
| 1199 | + } | ||
| 1200 | + | ||
| 1201 | + return shouldSend; | ||
| 1178 | } | 1202 | } |
| 1179 | }; | 1203 | }; |
| 1180 | 1204 |