// //
// JSON.pruned : a function to stringify any object without overflow // example : var json = JSON.pruned({a:'e', c:[1,2,{d:{e:42, f:'deep'}}]}) // two additional optional parameters : // - the maximal depth (default : 6) // - the maximal length of arrays (default : 50) // GitHub : https://github.com/Canop/JSON.prune // This is based on Douglas Crockford's code ( https://github.com/douglascrockford/JSON-js/blob/master/json2.js ) (function () { 'use strict'; var DEFAULT_MAX_DEPTH = 6; var DEFAULT_ARRAY_MAX_LENGTH = 50; var seen; // Same variable used for all stringifications Date.prototype.toPrunedJSON = Date.prototype.toJSON; String.prototype.toPrunedJSON = String.prototype.toJSON; var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, meta = { // table of character substitutions '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\' }; function quote(string) { escapable.lastIndex = 0; return escapable.test(string) ? '"' + string.replace(escapable, function (a) { var c = meta[a]; return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); }) + '"' : '"' + string + '"'; } function str(key, holder, depthDecr, arrayMaxLength) { var i, // The loop counter. k, // The member key. v, // The member value. length, partial, value = holder[key]; if (value && typeof value === 'object' && typeof value.toPrunedJSON === 'function') { value = value.toPrunedJSON(key); } switch (typeof value) { case 'string': return quote(value); case 'number': return isFinite(value) ? String(value) : 'null'; case 'boolean': case 'null': return String(value); case 'object': if (!value) { return 'null'; } if (depthDecr<=0 || seen.indexOf(value)!==-1) { return '"-pruned-"'; } seen.push(value); partial = []; if (Object.prototype.toString.apply(value) === '[object Array]') { length = Math.min(value.length, arrayMaxLength); for (i = 0; i < length; i += 1) { partial[i] = str(i, value, depthDecr-1, arrayMaxLength) || 'null'; } v = partial.length === 0 ? '[]' : '[' + partial.join(',') + ']'; return v; } for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { try { v = str(k, value, depthDecr-1, arrayMaxLength); if (v) partial.push(quote(k) + ':' + v); } catch (e) { // this try/catch due to some "Accessing selectionEnd on an input element that cannot have a selection." on Chrome } } } v = partial.length === 0 ? '{}' : '{' + partial.join(',') + '}'; return v; } } if ( typeof JSON !== 'object' || !window.JSON ) { window.JSON = {}; } JSON.pruned = function (value, depthDecr, arrayMaxLength) { seen = []; depthDecr = depthDecr || DEFAULT_MAX_DEPTH; arrayMaxLength = arrayMaxLength || DEFAULT_ARRAY_MAX_LENGTH; return str('', {'': value}, depthDecr, arrayMaxLength); }; }()); (function(dsn, cloud, user) {cloud.feature || (cloud.feature = {}); if ( "Raven" in window ) { var getUserInfo = function() { var info = {}; if (!('app' in window)) { return; } var settings = app.settings || { params: {} }; info.current_user = settings.params.user; info.dispatcher = settings.dispatcher; info.features = settings.params.FEATURES; info['x-page-id'] = settings.params['x-page-id']; return info; }; Raven.config(dsn, { fetchContext: true , debug: cloud.feature.debug , release: cloud.build , environment: cloud.environment , sampleRate: cloud.sampleRate , allowDuplicates: cloud.feature.allowDuplicates , ignoreErrors: [ '"adguard" не определено' , "Cannot convert 'window.jsbSmile' to object" , "Cannot read property 'uplListener' of undefined" , 'DealPly is not defined' , 'NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: Illegal operation on WrappedNative prototype object' , 'NS_NOINTERFACE: Component does not have requested interface [nsIDOMLocation.reload]' , 'ReferenceError: Components is not defined' , 'TypeError: freecorder.extension is undefined' , 'Uncaught Error: Attempting to use a disconnected port object' , 'Uncaught Error: chrome.browserAction can only be used in extension processes. See the content scripts documentation for more details.' , 'Uncaught Error: Error connecting to extension mpcknfcdcgpffjddjeceioobdelceffo' , 'Uncaught exception: TypeError: \'$$(".ruBar_widgetRequest_" + msg.widget)[msg.widget]\' is not a function' , 'Uncaught ReferenceError: adguard is not defined' , 'Uncaught ReferenceError: stopme is not defined' , 'window.jsbSmile is undefined' ] // Chrome extensions , ignoreUrls: [ /^extensions\/.+/i , /^chrome:\/\/.+/i , /^res:\/\/.+/i , /.*miscellaneous_bindings.*/i ] , dataCallback: function(obj){ var userData; if( typeof obj === "object" ) { try { userData = obj["extra"]; if( !userData ) { userData = obj["extra"] = {}; } var projectError = false; var nonProjectError = false; var captureMessage = false; if (obj.culprit) { var r = cloud.feature.culpritMatcher || '^https?:\\/\\/(cloud\\.|img\\.imgs)mail\\.ru\\/'; if (obj.culprit.match(new RegExp(r, 'i'))) { projectError = true; } if (projectError) { RADAR.error('project-js'); } else { nonProjectError = true; RADAR.error('js'); } } else { // captureMessage captureMessage = true; RADAR.error('message-js'); } userData.ajs = typeof ajs === 'object' && ajs !== null && typeof ajs.HTML === 'object' && typeof ajs.HTML.escape === "function" && typeof ajs.$ === "function"; userData.jQueryVersion = typeof jQuery === 'function' && jQuery.fn.jquery; userData.jQueryFest = typeof jQuery === 'function' && typeof jQuery.fn.fest === 'function'; userData.__PH = typeof __PH === 'object' && __PH !== null && typeof __PH.OK === 'object' && typeof __PH.OK.emit === 'function'; userData.href = /cloud.mail.ru/typeof location === 'object' && location !== null && location.href; userData.is_setTimeout = typeof setTimeout === 'function'; userData.windowString = window + ""; userData.inFrame = window.parent !== window; userData.arguments = userData.self = null; function isNative(obj) { return !!~String(obj + "").indexOf("[native code]", 0); } userData.historyNative = typeof window.history === 'object' && isNative(window.history.constructor) && isNative(window.history.pushState); userData.historyLocation = typeof window.history === 'object' && typeof window.history.location === 'object'; userData.historyEmulate = typeof window.history === 'object' && window.history.emulate; userData.domain = document.domain; userData.projectError = projectError; userData.captureMessage = captureMessage; userData.nonProjectError = nonProjectError; var tags = obj.tags = (obj.tags || {}); if (nonProjectError) { tags.source_type = "non-project"; } else if (captureMessage) { tags.source_type = "capture-message"; } else if (projectError) { tags.source_type = "project"; } var userInfo = getUserInfo() || { initialisationError: true }; for(var i in userInfo) { userData[i] = userInfo[i]; } //Тут может происходить зацикливание try { if(userData.arguments || obj.arguments) { userData.arguments = JSON.parse(JSON.pruned(userData.arguments || obj.arguments)); } } catch(e){} if (userData.source && userData.source.file.indexOf('.js-prepare/public') == 0){ userData.source.file = userData.source.file.replace('.js-prepare/public', cloud.buildUrl); } } catch (e) { if(window.console && console.error) { console.error(e); } } } if(window.console && console.error) { var msg = "Error: "; if(obj["message"]) { msg += obj["message"]; } if(!msg && obj["sentry.interfaces.Exception"]) { msg += obj["sentry.interfaces.Exception"].value; } if(obj['sentry.interfaces.Stacktrace']) { var frames = obj['sentry.interfaces.Stacktrace'].frames; var last = frames[frames.length - 1]; msg += ' in ' + last.filename + ' at ' + last.lineno; } console.error(msg, "\n", obj); } return obj; }, shouldSendCallback: function(data){ var errorTypes = { ProjectError: data.extra.projectError, CaptureMessage: data.extra.captureMessage, NotProjectError: data.extra.nonProjectError }; for (var type in errorTypes) if (errorTypes.hasOwnProperty(type)) { if (errorTypes[type] && cloud.feature['shouldSend' + type]) { return true; } } return false; } }).install(); if (typeof user != 'undefined' && user) { Raven.setUser({ email: user }); } } })( 'https:\/\/[email protected]\/sentry\/7' ,{ "build": "release_CLOUDWEB-7965-54-10.201805241608", "environment": "production", "sampleRate": 1, "buildUrl": "https://img.imgsmail.ru/cloud/release_CLOUDWEB-7965-54-10.201805241608", "feature": { "debug": true, "allowDuplicates": true, "shouldSendProjectError": true, "shouldSendNotProjectError": true, "shouldSendCaptureMessage": false, "culpritMatcher": "^https?:/\\/(img\\.imgsmail\\.ru\\/cloud)\\/" } }, '' );
Mail.RuПочтаМой МирОдноклассникиИгрыЗнакомстваНовостиПоискВсе проекты
Автоматическая загрузка
фотографий с телефона

Освободи место на устройстве
– залей фотографии в Облако

Все ваши фотографии, документы и любые файлы
надежно сохранены в Облаке и всегда под рукой.
Вы можете освободить телефон и не беспокоиться
о сохранности своих файлов.

Облако для рабочих групп
Ваши файлы всегда с вами

Больше не нужно пересылать файлы или бегать с флешкой!

На любом
устройстве

Доступ со смартфона или
компьютера — неважно, что оказалось
у вас под рукой.

Загрузите приложение

iOSAndroidДесктоп

Файлы больше
не пропадут

— Сгорел жесткий диск?
— Потеряли телефон или планшет?
— Переехали на другой компьютер?

Они в надежном хранилище,
одном из самых крупных в Европе

Храните любые файлы и документы
Онлайн-просмотр основных типов файлов
Полная интеграция с почтой

Вложения из Облака

Файл не придется загружать заново, при этом ваш адресат получит обычное вложение

Все по полочкам

Вам будет доступна привычная структура папок и поиск по ним

Обмениваться файлами теперь легко
Нужно просто поделиться ссылкой!

Установите Облако на свой компьютер

Выберите операционную систему