| Conditions | 31 | 
| Total Lines | 205 | 
| Code Lines | 164 | 
| Lines | 0 | 
| Ratio | 0 % | 
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
Complex classes like Helper-Device.ts ➔ get_device often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
| 1 | /**  | 
            ||
| 35 | |||
| 36 | function get_device() { | 
            ||
| 37 | var unknown: string,  | 
            ||
| 38 | width: string | number,  | 
            ||
| 39 | height: string,  | 
            ||
| 40 | screenSize: string,  | 
            ||
| 41 | browser: string,  | 
            ||
| 42 | version: string,  | 
            ||
| 43 | majorVersion: number,  | 
            ||
| 44 | mobile: boolean,  | 
            ||
| 45 | os: string,  | 
            ||
| 46 | osVersion: string | RegExpExecArray | number[],  | 
            ||
| 47 | cookieEnabled: boolean,  | 
            ||
| 48 | flashVersion = "-";  | 
            ||
| 49 |   if (!isnode()) { | 
            ||
| 50 | // screen  | 
            ||
| 51 | |||
| 52 |     if (screen.width) { | 
            ||
| 53 | width = screen.width ? screen.width : "";  | 
            ||
| 54 | height = screen.height ? screen.height.toString() : "";  | 
            ||
| 55 | screenSize += "" + width + " x " + height;  | 
            ||
| 56 | }  | 
            ||
| 57 | |||
| 58 | // browser  | 
            ||
| 59 | var nVer = navigator.appVersion;  | 
            ||
| 60 | var nAgt = navigator.userAgent;  | 
            ||
| 61 | browser = navigator.appName;  | 
            ||
| 62 | version = "" + parseFloat(navigator.appVersion);  | 
            ||
| 63 | majorVersion = parseInt(navigator.appVersion, 10);  | 
            ||
| 64 | var nameOffset: number, verOffset: number, ix: any;  | 
            ||
| 65 | |||
| 66 | // Opera  | 
            ||
| 67 |     if ((verOffset = nAgt.indexOf("Opera")) != -1) { | 
            ||
| 68 | browser = "Opera";  | 
            ||
| 69 | version = nAgt.substring(verOffset + 6);  | 
            ||
| 70 |       if ((verOffset = nAgt.indexOf("Version")) != -1) { | 
            ||
| 71 | version = nAgt.substring(verOffset + 8);  | 
            ||
| 72 | }  | 
            ||
| 73 | }  | 
            ||
| 74 | // Opera Next  | 
            ||
| 75 |     if ((verOffset = nAgt.indexOf("OPR")) != -1) { | 
            ||
| 76 | browser = "Opera";  | 
            ||
| 77 | version = nAgt.substring(verOffset + 4);  | 
            ||
| 78 | }  | 
            ||
| 79 | // Edge  | 
            ||
| 80 |     else if ((verOffset = nAgt.indexOf("Edge")) != -1) { | 
            ||
| 81 | browser = "Microsoft Edge";  | 
            ||
| 82 | version = nAgt.substring(verOffset + 5);  | 
            ||
| 83 | }  | 
            ||
| 84 | // MSIE  | 
            ||
| 85 |     else if ((verOffset = nAgt.indexOf("MSIE")) != -1) { | 
            ||
| 86 | browser = "Microsoft Internet Explorer";  | 
            ||
| 87 | version = nAgt.substring(verOffset + 5);  | 
            ||
| 88 | }  | 
            ||
| 89 | // Chrome  | 
            ||
| 90 |     else if ((verOffset = nAgt.indexOf("Chrome")) != -1) { | 
            ||
| 91 | browser = "Chrome";  | 
            ||
| 92 | version = nAgt.substring(verOffset + 7);  | 
            ||
| 93 | }  | 
            ||
| 94 | // Safari  | 
            ||
| 95 |     else if ((verOffset = nAgt.indexOf("Safari")) != -1) { | 
            ||
| 96 | browser = "Safari";  | 
            ||
| 97 | version = nAgt.substring(verOffset + 7);  | 
            ||
| 98 |       if ((verOffset = nAgt.indexOf("Version")) != -1) { | 
            ||
| 99 | version = nAgt.substring(verOffset + 8);  | 
            ||
| 100 | }  | 
            ||
| 101 | }  | 
            ||
| 102 | // Firefox  | 
            ||
| 103 |     else if ((verOffset = nAgt.indexOf("Firefox")) != -1) { | 
            ||
| 104 | browser = "Firefox";  | 
            ||
| 105 | version = nAgt.substring(verOffset + 8);  | 
            ||
| 106 | }  | 
            ||
| 107 | // MSIE 11+  | 
            ||
| 108 |     else if (nAgt.indexOf("Trident/") != -1) { | 
            ||
| 109 | browser = "Microsoft Internet Explorer";  | 
            ||
| 110 |       version = nAgt.substring(nAgt.indexOf("rv:") + 3); | 
            ||
| 111 | }  | 
            ||
| 112 | // Other browsers  | 
            ||
| 113 | else if (  | 
            ||
| 114 |       (nameOffset = nAgt.lastIndexOf(" ") + 1) < | 
            ||
| 115 |       (verOffset = nAgt.lastIndexOf("/")) | 
            ||
| 116 |     ) { | 
            ||
| 117 | browser = nAgt.substring(nameOffset, verOffset);  | 
            ||
| 118 | version = nAgt.substring(verOffset + 1);  | 
            ||
| 119 |       if (browser.toLowerCase() == browser.toUpperCase()) { | 
            ||
| 120 | browser = navigator.appName;  | 
            ||
| 121 | }  | 
            ||
| 122 | }  | 
            ||
| 123 | // trim the version string  | 
            ||
| 124 |     if ((ix = version.indexOf(";")) != -1) version = version.substring(0, ix); | 
            ||
| 125 |     if ((ix = version.indexOf(" ")) != -1) version = version.substring(0, ix); | 
            ||
| 126 |     if ((ix = version.indexOf(")")) != -1) version = version.substring(0, ix); | 
            ||
| 127 | |||
| 128 |     majorVersion = parseInt("" + version, 10); | 
            ||
| 129 |     if (isNaN(majorVersion)) { | 
            ||
| 130 | version = "" + parseFloat(navigator.appVersion);  | 
            ||
| 131 | majorVersion = parseInt(navigator.appVersion, 10);  | 
            ||
| 132 | }  | 
            ||
| 133 | |||
| 134 | // mobile version  | 
            ||
| 135 | mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);  | 
            ||
| 136 | |||
| 137 | // cookie  | 
            ||
| 138 | cookieEnabled = navigator.cookieEnabled ? true : false;  | 
            ||
| 139 | |||
| 140 |     if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled) { | 
            ||
| 141 | document.cookie = "testcookie";  | 
            ||
| 142 | cookieEnabled =  | 
            ||
| 143 |         document.cookie.indexOf("testcookie") != -1 ? true : false; | 
            ||
| 144 | }  | 
            ||
| 145 | |||
| 146 | // system  | 
            ||
| 147 | var os = unknown;  | 
            ||
| 148 | var clientStrings = [  | 
            ||
| 149 |       { s: "Windows 10", r: /(Windows 10.0|Windows NT 10.0)/ }, | 
            ||
| 150 |       { s: "Windows 8.1", r: /(Windows 8.1|Windows NT 6.3)/ }, | 
            ||
| 151 |       { s: "Windows 8", r: /(Windows 8|Windows NT 6.2)/ }, | 
            ||
| 152 |       { s: "Windows 7", r: /(Windows 7|Windows NT 6.1)/ }, | 
            ||
| 153 |       { s: "Windows Vista", r: /Windows NT 6.0/ }, | 
            ||
| 154 |       { s: "Windows Server 2003", r: /Windows NT 5.2/ }, | 
            ||
| 155 |       { s: "Windows XP", r: /(Windows NT 5.1|Windows XP)/ }, | 
            ||
| 156 |       { s: "Windows 2000", r: /(Windows NT 5.0|Windows 2000)/ }, | 
            ||
| 157 |       { s: "Windows ME", r: /(Win 9x 4.90|Windows ME)/ }, | 
            ||
| 158 |       { s: "Windows 98", r: /(Windows 98|Win98)/ }, | 
            ||
| 159 |       { s: "Windows 95", r: /(Windows 95|Win95|Windows_95)/ }, | 
            ||
| 160 |       { | 
            ||
| 161 | s: "Windows NT 4.0",  | 
            ||
| 162 | r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/,  | 
            ||
| 163 | },  | 
            ||
| 164 |       { s: "Windows CE", r: /Windows CE/ }, | 
            ||
| 165 |       { s: "Windows 3.11", r: /Win16/ }, | 
            ||
| 166 |       { s: "Android", r: /Android/ }, | 
            ||
| 167 |       { s: "Open BSD", r: /OpenBSD/ }, | 
            ||
| 168 |       { s: "Sun OS", r: /SunOS/ }, | 
            ||
| 169 |       { s: "Chrome OS", r: /CrOS/ }, | 
            ||
| 170 |       { s: "Linux", r: /(Linux|X11(?!.*CrOS))/ }, | 
            ||
| 171 |       { s: "iOS", r: /(iPhone|iPad|iPod)/ }, | 
            ||
| 172 |       { s: "Mac OS X", r: /Mac OS X/ }, | 
            ||
| 173 |       { s: "Mac OS", r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ }, | 
            ||
| 174 |       { s: "QNX", r: /QNX/ }, | 
            ||
| 175 |       { s: "UNIX", r: /UNIX/ }, | 
            ||
| 176 |       { s: "BeOS", r: /BeOS/ }, | 
            ||
| 177 |       { s: "OS/2", r: /OS\/2/ }, | 
            ||
| 178 |       { | 
            ||
| 179 | s: "Search Bot",  | 
            ||
| 180 | r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/,  | 
            ||
| 181 | },  | 
            ||
| 182 | ];  | 
            ||
| 183 |     for (var id in clientStrings) { | 
            ||
| 184 | var cs = clientStrings[id];  | 
            ||
| 185 |       if (cs.r.test(nAgt)) { | 
            ||
| 186 | os = cs.s;  | 
            ||
| 187 | break;  | 
            ||
| 188 | }  | 
            ||
| 189 | }  | 
            ||
| 190 | |||
| 191 | osVersion = unknown;  | 
            ||
| 192 | |||
| 193 |     if (/Windows/.test(os)) { | 
            ||
| 194 | osVersion = /Windows (.*)/.exec(os)[1];  | 
            ||
| 195 | os = "Windows";  | 
            ||
| 196 | }  | 
            ||
| 197 | |||
| 198 |     switch (os) { | 
            ||
| 199 | case "Mac OS X":  | 
            ||
| 200 | osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];  | 
            ||
| 201 | break;  | 
            ||
| 202 | |||
| 203 | case "Android":  | 
            ||
| 204 | osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];  | 
            ||
| 205 | break;  | 
            ||
| 206 | |||
| 207 | case "iOS":  | 
            ||
| 208 | osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);  | 
            ||
| 209 | var calc = osVersion.exists(3) ? osVersion[3] : osVersion[0];  | 
            ||
| 210 | osVersion = osVersion[1] + "." + osVersion[2] + "." + calc; //(osVersion[3] | 0);  | 
            ||
| 211 | break;  | 
            ||
| 212 | }  | 
            ||
| 213 | |||
| 214 | // flash (you'll need to include swfobject)  | 
            ||
| 215 | /* script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" */  | 
            ||
| 216 | var flashVersion = "no check";  | 
            ||
| 217 |     if (typeof swfobject != "undefined") { | 
            ||
| 218 | var fv = swfobject.getFlashPlayerVersion();  | 
            ||
| 219 |       if (fv.major > 0) { | 
            ||
| 220 | flashVersion = fv.major + "." + fv.minor + " r" + fv.release;  | 
            ||
| 221 |       } else { | 
            ||
| 222 | flashVersion = unknown;  | 
            ||
| 223 | }  | 
            ||
| 224 | }  | 
            ||
| 225 |   } else { | 
            ||
| 226 |     const terminal = require("os"); | 
            ||
| 227 | os = terminal.platform();  | 
            ||
| 228 | version = terminal.version();  | 
            ||
| 229 | }  | 
            ||
| 230 |   return { | 
            ||
| 231 | screen: screenSize,  | 
            ||
| 232 | browser: browser,  | 
            ||
| 233 | browserVersion: version,  | 
            ||
| 234 | browserMajorVersion: majorVersion,  | 
            ||
| 235 | mobile: mobile,  | 
            ||
| 236 | os: os,  | 
            ||
| 237 | osVersion: osVersion,  | 
            ||
| 238 | cookies: cookieEnabled,  | 
            ||
| 239 | flashVersion: flashVersion,  | 
            ||
| 240 | };  | 
            ||
| 246 |