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 | 870 | // Share to global scope as Airbrake ("window.Hoptoad" for backward compatibility) |
| 871 | 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 | 879 | function Notifier() { |
| 874 | 880 | this.options = Util.merge({}, Config.options); |
| 875 | 881 | this.xmlData = Util.merge(this.DEF_XML_DATA, Config.xmlData); |
| ... | ... | @@ -921,7 +927,7 @@ printStackTrace.implementation.prototype = { |
| 921 | 927 | } |
| 922 | 928 | |
| 923 | 929 | return function (error) { |
| 924 | - var outputData = '', | |
| 930 | + var outputData = '', jsonData, | |
| 925 | 931 | url = ''; |
| 926 | 932 | // |
| 927 | 933 | |
| ... | ... | @@ -934,9 +940,12 @@ printStackTrace.implementation.prototype = { |
| 934 | 940 | |
| 935 | 941 | switch (this.options['outputFormat']) { |
| 936 | 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 | 949 | break; |
| 941 | 950 | |
| 942 | 951 | case 'JSON': |
| ... | ... | @@ -945,9 +954,12 @@ printStackTrace.implementation.prototype = { |
| 945 | 954 | * http://collect.airbrake.io/api/v3/projects/[PROJECT_ID]/notices?key=[API_KEY] |
| 946 | 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 | 963 | break; |
| 952 | 964 | |
| 953 | 965 | default: |
| ... | ... | @@ -1175,6 +1187,18 @@ printStackTrace.implementation.prototype = { |
| 1175 | 1187 | } |
| 1176 | 1188 | |
| 1177 | 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 | ... | ... |