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 | ... | ... |