PageSourceSearch

https://www.klavto.ru/bitrix/templates/klavto702/js/device.js

js klavto.ru collected 2026-10-08 12:32:11 UTC 6,090 bytes, 220 lines download raw bytes

1(function() {
2  var device,
3    previousDevice,
4    addClass,
5    documentElement,
6    find,
7    handleOrientation,
8    hasClass,
9    orientationEvent,
10    removeClass,
11    userAgent;
12  previousDevice = window.device;
13  device = {};
14  window.device = device;
15  documentElement = window.document.documentElement;
16  userAgent = window.navigator.userAgent.toLowerCase();
17  device.ios = function () {
18    return device.iphone() || device.ipod() || device.ipad();
19  };
20  device.iphone = function () {
21    return !device.windows() && find('iphone');
22  };
23  device.ipod = function () {
24    return find('ipod');
25  };
26  device.ipad = function () {
27    return find('ipad');
28  };
29  device.android = function () {
30    return !device.windows() && find('android');
31  };
32  device.androidPhone = function () {
33    return device.android() && find('mobile');
34  };
35  device.androidTablet = function () {
36    return device.android() && !find('mobile');
37  };
38  device.blackberry = function () {
39    return find('blackberry') || find('bb10') || find('rim');
40  };
41  device.blackberryPhone = function () {
42    return device.blackberry() && !find('tablet');
43  };
44  device.blackberryTablet = function () {
45    return device.blackberry() && find('tablet');
46  };
47  device.windows = function () {
48    return find('windows');
49  };
50  device.windowsPhone = function () {
51    return device.windows() && find('phone');
52  };
53  device.windowsTablet = function () {
54    return device.windows() && (find('touch') && !device.windowsPhone());
55  };
56  device.fxos = function () {
57    return (find('(mobile;') || find('(tablet;')) && find('; rv:');
58  };
59  device.fxosPhone = function () {
60    return device.fxos() && find('mobile');
61  };
62  device.fxosTablet = function () {
63    return device.fxos() && find('tablet');
64  };
65  device.meego = function () {
66    return find('meego');
67  };
68  device.cordova = function () {
69    return window.cordova && location.protocol === 'file:';
70  };
71  device.nodeWebkit = function () {
72    return typeof window.process === 'object';
73  };
74  device.mobile = function () {
75    return device.androidPhone() || device.iphone() || device.ipod() || device.windowsPhone() || device.blackberryPhone() || device.fxosPhone() || device.meego();
76  };
77  device.tablet = function () {
78    return device.ipad() || device.androidTablet() || device.blackberryTablet() || device.windowsTablet() || device.fxosTablet();
79  };
80  device.desktop = function () {
81    return !device.tablet() && !device.mobile();
82  };
83  device.television = function() {
84    var i, tvString;
85    television = [
86      "googletv",
87      "viera",
88      "smarttv",
89      "internet.tv",
90      "netcast",
91      "nettv",
92      "appletv",
93      "boxee",
94      "kylo",
95      "roku",
96      "dlnadoc",
97      "roku",
98      "pov_tv",
99      "hbbtv",
100      "ce-html"
101    ];
102    i = 0;
103    while (i < television.length) {
104      if (find(television[i])) {
105        return true;
106      }
107      i++;
108    }
109    return false;
110  };
111  device.portrait = function () {
112    return (window.innerHeight / window.innerWidth) > 1;
113  };
114  device.landscape = function () {
115    return (window.innerHeight / window.innerWidth) < 1;
116  };
117  
118  device.noConflict = function () {
119    window.device = previousDevice;
120    return this;
121  };
122  find = function (needle) {
123    return userAgent.indexOf(needle) !== -1;
124  };
125  hasClass = function (className) {
126    var regex;
127    regex = new RegExp(className, 'i');
128    return documentElement.className.match(regex);
129  };
130  addClass = function (className) {
131    var currentClassNames = null;
132    if (!hasClass(className)) {
133      currentClassNames = documentElement.className.replace(/^\s+|\s+$/g, '');
134      documentElement.className = currentClassNames + " " + className;
135    }
136  };
137  removeClass = function (className) {
138    if (hasClass(className)) {
139      documentElement.className = documentElement.className.replace(" " + className, "");
140    }
141  };
142  if (device.ios()) {
143    if (device.ipad()) {
144      addClass("ios ipad tablet");
145    } else if (device.iphone()) {
146      addClass("ios iphone mobile");
147    } else if (device.ipod()) {
148      addClass("ios ipod mobile");
149    }
150  } else if (device.android()) {
151    if (device.androidTablet()) {
152      addClass("android tablet");
153    } else {
154      addClass("android mobile");
155    }
156  } else if (device.blackberry()) {
157    if (device.blackberryTablet()) {
158      addClass("blackberry tablet");
159    } else {
160      addClass("blackberry mobile");
161    }
162  } else if (device.windows()) {
163    if (device.windowsTablet()) {
164      addClass("windows tablet");
165    } else if (device.windowsPhone()) {
166      addClass("windows mobile");
167    } else {
168      addClass("desktop");
169    }
170  } else if (device.fxos()) {
171    if (device.fxosTablet()) {
172      addClass("fxos tablet");
173    } else {
174      addClass("fxos mobile");
175    }
176  } else if (device.meego()) {
177    addClass("meego mobile");
178  }
178 else if (device.nodeWebkit()) {
179    addClass("node-webkit");
180  } else if (device.television()) {
181    addClass("television");
182  } else if (device.desktop()) {
183    addClass("desktop");
184  }
185  if (device.cordova()) {
186    addClass("cordova");
187  }
188  handleOrientation = function () {
189    if (device.landscape()) {
190      removeClass("portrait");
191      addClass("landscape");
192    } else {
193      removeClass("landscape");
194      addClass("portrait");
195    }
196    return;
197  };
198  if (Object.prototype.hasOwnProperty.call(window, "onorientationchange")) {
199    orientationEvent = "orientationchange";
200  } else {
201    orientationEvent = "resize";
202  }
203  if (window.addEventListener) {
204    window.addEventListener(orientationEvent, handleOrientation, false);
205  } else if (window.attachEvent) {
206    window.attachEvent(orientationEvent, handleOrientation);
207  } else {
208    window[orientationEvent] = handleOrientation;
209  }
210  handleOrientation();
211  if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {
212    define(function() {
213      return device;
214    });
215  } else if (typeof module !== 'undefined' && module.exports) {
216    module.exports = device;
217  } else {
218    window.device = device;
219  }
220}).call(this);

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.