1/* 2 * Initialize JavaScript for the NF User Analytics plugin. 3 */ 4jQuery( document ).ready( function ( $ ) { 5 6 /** 7 * Controller for the plugin. 8 */ 9 var NFUserAnalyticsController = Marionette.Object.extend( { 10 11 /** 12 * Functionality to detect which browser and browser version is used. 13 */ 14 DetectBrowser: { 15 init: function () { 16 this.browser = this.searchString( this.dataBrowser ) || "Unknown browser"; 17 this.version = this.searchVersion( navigator.userAgent ) || this.searchVersion( navigator.appVersion ) || "Unknown version"; 18 }, 19 searchString: function ( data ) { 20 for ( var i = 0; i < data.length; i++ ) { 21 var dataString = data[ i ].string; 22 var dataProp = data[ i ].prop; 23 this.versionSearchString = data[ i ].versionSearch || data[ i ].identity; 24 if ( dataString ) { 25 if ( dataString.indexOf( data[ i ].subString ) != -1 ) { 26 return data[ i ].identity; 27 } 28 } 29 else if ( dataProp ) { 30 return data[ i ].identity; 31 } 32 } 33 }, 34 searchVersion: function ( dataString ) { 35 var index = dataString.indexOf( this.versionSearchString ); 36 if ( index == -1 ) return; 37 return parseFloat( dataString.substring( index + this.versionSearchString.length + 1 ) ); 38 }, 39 dataBrowser: [ 40 { 41 string: navigator.userAgent, 42 subString: "Chrome", 43 identity: "Chrome" 44 }, { 45 string: navigator.userAgent, 46 subString: "OmniWeb", 47 versionSearch: "OmniWeb/", 48 identity: "OmniWeb" 49 }, { 50 string: navigator.vendor, 51 subString: "Apple", 52 identity: "Safari", 53 versionSearch: "Version" 54 }, { 55 prop: window.opera, 56 identity: "Opera" 57 }, { 58 string: navigator.vendor, 59 subString: "iCab", 60 identity: "iCab" 61 }, { 62 string: navigator.vendor, 63 subString: "KDE", 64 identity: "Konqueror" 65 }, { 66 string: navigator.userAgent, 67 subString: "Firefox", 68 identity: "Firefox" 69 }, { 70 string: navigator.vendor, 71 subString: "Camino", 72 identity: "Camino" 73 }, { // for newer Netscapes (6+) 74 string: navigator.userAgent, 75 subString: "Netscape", 76 identity: "Netscape" 77 }, { 78 string: navigator.userAgent, 79 subString: "MSIE", 80 identity: "Internet Explorer", 81 versionSearch: "MSIE" 82 }, { 83 string: navigator.userAgent, 84 subString: "Gecko", 85 identity: "Mozilla", 86 versionSearch: "rv" 87 }, { // for older Netscapes (4-) 88 string: navigator.userAgent, 89 subString: "Mozilla", 90 identity: "Netscape", 91 versionSearch: "Mozilla" 92 } ] 93 }, 94 95 hostInfoData: [], 96 97 /** 98 * Initialize the plugin. 99 */ 100 initialize: function() { 101 this.DetectBrowser.init(); 102 this.listenTo( nfRadio.channel( 'form' ), 'render:view', this.updateFormByView ); 103 }, 104 105 /** 106 * Update the form when the view is rendered 107 * 108 * @param object view Rendered view 109 */ 110 updateFormByView: function( view ) { 111 this.updateForm( $( view.el ) ); 112 }, 113 114 /** 115 * Update the form by filling in the User Analytics fields. 116 * 117 * @param object $form Form element on the page 118 */ 119 updateForm: function( $form ) { 120 var data = { 121 'browser': this.DetectBrowser.browser, 122 'browser-version': this.DetectBrowser.version, 123 'os': window.navigator.platform 124 }; 125 126 for ( var key in data ) { 127 var value = data[key]; 128 var $el = $form.find( '.user-analytics-' + key + '-container' + ' .
128nf-element' ); 129 if ( $el.length ) { 130 $el.val( value ).trigger( 'change' ); 131 } 132 } 133 }, 134 135 } ); 136 137 new NFUserAnalyticsController(); 138 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.