forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.js
More file actions
1 lines (1 loc) · 13.3 KB
/
Copy pathmain.js
File metadata and controls
1 lines (1 loc) · 13.3 KB
1
define(function(require,exports,module){var AppInit=brackets.getModule("utils/AppInit"),Menus=brackets.getModule("command/Menus"),CommandManager=brackets.getModule("command/CommandManager"),Strings=brackets.getModule("strings"),Commands=brackets.getModule("command/Commands"),HealthDataNotification=require("HealthDataNotification"),HealthDataManager=require("HealthDataManager"),HealthDataPopup=require("HealthDataPopup"),menu=Menus.getMenu(Menus.AppMenuBar.HELP_MENU),healthDataCmdId="healthData.healthDataStatistics";function handleHealthDataStatistics(){HealthDataNotification.handleHealthDataStatistics()}function addCommand(){CommandManager.register(Strings.CMD_HEALTH_DATA_STATISTICS,healthDataCmdId,handleHealthDataStatistics,{supportsDesignMode:!0}),menu.addMenuItem(healthDataCmdId,"",Menus.AFTER,Commands.HELP_GET_INVOLVED),menu.addMenuDivider(Menus.AFTER,Commands.HELP_GET_INVOLVED)}function initTest(){brackets.test.HealthDataPreview=require("HealthDataPreview"),brackets.test.HealthDataManager=HealthDataManager,brackets.test.HealthDataNotification=HealthDataNotification,brackets.test.HealthDataPopup=HealthDataPopup}AppInit.appReady(function(){brackets.test&&initTest()}),addCommand()}),define("HealthDataManager",function(require,exports,module){var AppInit=brackets.getModule("utils/AppInit"),PreferencesManager=brackets.getModule("preferences/PreferencesManager"),Strings=brackets.getModule("strings"),Metrics=brackets.getModule("utils/Metrics"),SendToAnalytics=require("SendToAnalytics"),prefs=PreferencesManager.getExtensionPrefs("healthData"),ONE_SECOND=1e3,TEN_SECOND=1e4,ONE_MINUTE=6e4,MAX_DAYS_TO_KEEP_COUNTS=60,USAGE_COUNTS_KEY="healthDataUsage";function isPowerUser(){let usageData=PreferencesManager.getViewState(USAGE_COUNTS_KEY)||{},dateKeys=Object.keys(usageData),dateBefore14Days=new Date,totalUsageMinutes=0,totalUsageDays=0;dateBefore14Days.setUTCDate(dateBefore14Days.getUTCDate()-14);for(let dateKey of dateKeys){let date;new Date(dateKey)>=dateBefore14Days&&(totalUsageDays++,totalUsageMinutes+=usageData[dateKey])}return totalUsageDays>=3||totalUsageMinutes/60>=8}let healthDataDisabled;function _pruneUsageData(){let usageData=PreferencesManager.getViewState(USAGE_COUNTS_KEY)||{},dateKeys=Object.keys(usageData),dateBefore60Days=new Date;if(dateBefore60Days.setDate(dateBefore60Days.getDate()-MAX_DAYS_TO_KEEP_COUNTS),dateKeys.length>MAX_DAYS_TO_KEEP_COUNTS)for(let dateKey of dateKeys){let date;new Date(dateKey)<dateBefore60Days&&delete usageData[dateKey]}PreferencesManager.setViewState(USAGE_COUNTS_KEY,usageData)}function _trackUsageInfo(){_pruneUsageData(),setInterval(()=>{if(healthDataDisabled)return;let usageData=PreferencesManager.getViewState(USAGE_COUNTS_KEY)||{},dateNow,today=(new Date).toISOString().split("T")[0];usageData[today]=(usageData[today]||0)+1,PreferencesManager.setViewState(USAGE_COUNTS_KEY,usageData)},ONE_MINUTE)}prefs.definePreference("healthDataTracking","boolean",!0,{description:Strings.DESCRIPTION_HEALTH_DATA_TRACKING}),prefs.on("change","healthDataTracking",function(){healthDataDisabled=!prefs.get("healthDataTracking"),Metrics.setDisabled(healthDataDisabled),logger.loggingOptions.healthDataDisabled=healthDataDisabled}),AppInit.appReady(function(){Metrics.init({isPowerUserFn:isPowerUser}),(healthDataDisabled=!prefs.get("healthDataTracking"))&&!Phoenix.healthTrackingDisabled&&Metrics.countEvent(Metrics.EVENT_TYPE.PLATFORM,"metricBoot","disableErr"),Metrics.setDisabled(healthDataDisabled),SendToAnalytics.sendPlatformMetrics(),SendToAnalytics.sendThemesMetrics(),_trackUsageInfo(),setTimeout(SendToAnalytics.sendStartupPerformanceMetrics,1e4)})}),define("HealthDataNotification",function(require,exports,module){const PreferencesManager=brackets.getModule("preferences/PreferencesManager"),HealthDataPreview=require("HealthDataPreview"),HealthDataPopup=require("HealthDataPopup");function handleHealthDataStatistics(){HealthDataPreview.previewHealthData()}function _showFirstLaunchPopup(){const agreementManagedByInstaller=Phoenix.isNativeApp&&("mac"===brackets.platform||"win"===brackets.platform);if(window.testEnvironment||agreementManagedByInstaller)return;const alreadyShown=PreferencesManager.getViewState("healthDataNotificationShown"),prefs=PreferencesManager.getExtensionPrefs("healthData");!alreadyShown&&prefs.get("healthDataTracking")&&HealthDataPopup.showFirstLaunchTooltip().done(function(){PreferencesManager.setViewState("healthDataNotificationShown",!0)})}_showFirstLaunchPopup(),exports.handleHealthDataStatistics=handleHealthDataStatistics}),define("HealthDataPopup",function(require,exports,module){const NotificationUI=brackets.getModule("widgets/NotificationUI"),Strings=brackets.getModule("strings");function showFirstLaunchTooltip(){const deferred=new $.Deferred;return NotificationUI.createToastFromTemplate(Strings.HEALTH_FIRST_POPUP_TITLE,`<div id="healthdata-firstlaunch-popup">${Strings.HEALTH_DATA_NOTIFICATION_MESSAGE}</div>`).done(deferred.resolve),deferred.promise()}exports.showFirstLaunchTooltip=showFirstLaunchTooltip}),define("HealthDataPreview",function(require,exports,module){var _=brackets.getModule("thirdparty/lodash"),Mustache=brackets.getModule("thirdparty/mustache/mustache"),PreferencesManager=brackets.getModule("preferences/PreferencesManager"),Strings=brackets.getModule("strings"),Dialogs=brackets.getModule("widgets/Dialogs"),ExtensionUtils=brackets.getModule("utils/ExtensionUtils"),Metrics=brackets.getModule("utils/Metrics"),HealthDataPreviewDialog='<div class="health-data-preview modal">\n <div class="modal-header">\n <h1 class="dialog-title">{{Strings.HEALTH_DATA_PREVIEW}}</h1>\n </div>\n <div class="modal-body">\n <div class="dialog-message">{{{Strings.HEALTH_DATA_PREVIEW_INTRO}}}</div>\n\t\t<div class="dialog-message">\n\t\t\t<label>\n\t <input type="checkbox" data-target="hdPref" {{#hdPref}}checked{{/hdPref}} />\n\t {{Strings.HEALTH_DATA_DO_TRACK}}\n\t </label>\n\t\t\t<div style="display: flex; align-items: flex-start; gap: 8px; padding: 8px 10px; border-left: 3px solid #aaa; font-size: 13px; color: #666; margin: 8px 0;">\n\t\t\t\t<span style="flex-shrink: 0;">ℹ️</span>\n\t\t\t\t<span>{{Strings.HEALTH_DATA_PREVIEW_NECESSARY}}</span>\n\t\t\t</div>\n \t</div>\n\t <div class="dialog-message preview-content-container">\n\t <p class="preview-content">{{{content}}}</p>\n\t </div>\n\t</div>\n <div class="modal-footer">\n\t\t<button class="dialog-button btn" data-button-id="clear">{{Strings.RECENT_FILES_DLG_CLEAR_BUTTON_LABEL}}</button>\n\t\t<button class="dialog-button btn" data-button-id="cancel">{{Strings.CANCEL}}</button>\n <button class="dialog-button btn primary" data-button-id="save">{{Strings.DONE}}</button>\n </div>\n</div>\n',prefs=PreferencesManager.getExtensionPrefs("healthData");function _buildPreviewData(){let content,auditData=Metrics.getLoggedDataForAudit(),sortedData=new Map([...auditData.entries()].sort()),displayData=[];for(const[key,value]of sortedData.entries()){let valueString="";value.count>1&&(valueString=`(${value.count})`),value.eventType===Metrics.AUDIT_TYPE_COUNT?displayData.push(`${key} total: ${value.sum} ${valueString}`):value.eventType===Metrics.AUDIT_TYPE_VALUE&&0!==value.count&&displayData.push(`${key} avg: ${value.sum/value.count} ${valueString}`)}return content=JSON.stringify(displayData,null,2),content=(content=(content=_.escape(content)).replace(/ /g," ")).replace(/(?:\r\n|\r|\n)/g,"<br />")}function previewHealthData(){let hdPref=prefs.get("healthDataTracking"),template=Mustache.render(HealthDataPreviewDialog,{Strings:Strings,content:_buildPreviewData(),hdPref:hdPref}),$template=$(template);Dialogs.addLinkTooltips($template),Dialogs.showModalDialogUsingTemplate($template).done(function(id){if("save"===id){var newHDPref=$template.find("[data-target]:checkbox").is(":checked");hdPref!==newHDPref&&prefs.set("healthDataTracking",newHDPref)}else"clear"===id&&Metrics.clearAuditData()})}ExtensionUtils.loadStyleSheet(module,"styles.css"),exports.previewHealthData=previewHealthData}),define("SendToAnalytics",function(require,exports,module){const Metrics=brackets.getModule("utils/Metrics"),PreferencesManager=brackets.getModule("preferences/PreferencesManager"),PerfUtils=brackets.getModule("utils/PerfUtils"),NodeUtils=brackets.getModule("utils/NodeUtils"),themesPref=PreferencesManager.getExtensionPrefs("themes"),BugsnagPerformance=window.BugsnagPerformance,PLATFORM=Metrics.EVENT_TYPE.PLATFORM,PERFORMANCE=Metrics.EVENT_TYPE.PERFORMANCE,STORAGE=Metrics.EVENT_TYPE.STORAGE;function _emitDeviceTypeMetrics(){brackets.browser.isDeskTop&&Metrics.countEvent(PLATFORM,"device","desktop"),brackets.browser.isMobile&&Metrics.countEvent(PLATFORM,"device","mobile"),brackets.browser.isTablet&&Metrics.countEvent(PLATFORM,"device","tablet")}function _emitMobileMetricsIfPresent(){let platform="none";if(brackets.browser.mobile.isIos)platform="ios";else if(brackets.browser.mobile.isWindows)platform="windows";else{if(!brackets.browser.mobile.isAndroid)return;platform="android"}Metrics.countEvent(PLATFORM,"mobile",platform)}function _emitBrowserMetrics(){brackets.browser.desktop.isChrome&&Metrics.countEvent(PLATFORM,"browser","chrome"),brackets.browser.desktop.isChromeBased&&Metrics.countEvent(PLATFORM,"browser","chromeBased"),brackets.browser.desktop.isEdgeChromium&&Metrics.countEvent(PLATFORM,"browser","EdgeChromium"),brackets.browser.desktop.isFirefox&&Metrics.countEvent(PLATFORM,"browser","firefox"),brackets.browser.desktop.isOpera&&Metrics.countEvent(PLATFORM,"browser","opera"),brackets.browser.desktop.isOperaChromium&&Metrics.countEvent(PLATFORM,"browser","operaChromium")}async function _sendStorageMetrics(){if(navigator.storage&&navigator.storage.estimate){const quota=await navigator.storage.estimate(),percentageUsed=Math.round(quota.usage/quota.quota*100),usedMB=Math.round(quota.usage/1024/1024);console.log(`Web Storage quota used: ${percentageUsed}%, ${usedMB}MB`),Metrics.valueEvent(STORAGE,"browserQuota","percentUsed",percentageUsed),Metrics.valueEvent(STORAGE,"browserQuota","usedMB",usedMB)}}function _getPlatformInfo(){let OS="";return/Windows|Win32|WOW64|Win64/.test(window.navigator.userAgent)?OS="WIN":/Mac/.test(window.navigator.userAgent)?OS="OSX":/Linux|X11/.test(window.navigator.userAgent)&&(OS="LINUX32",/x86_64/.test(window.navigator.appVersion+window.navigator.userAgent)&&(OS="LINUX64")),OS}function sendPlatformMetrics(){Metrics.countEvent(PLATFORM,"os",brackets.platform),Metrics.countEvent(PLATFORM,"userAgent",window.navigator.userAgent),Metrics.countEvent(PLATFORM,"languageOS",brackets.app.language),Metrics.countEvent(PLATFORM,"languageBrackets",brackets.getLocale()),Metrics.countEvent(PLATFORM,"bracketsVersion",brackets.metadata.version),"linux"===Phoenix.platform&&Phoenix.isNativeApp?NodeUtils.getLinuxOSFlavorName().then(flavor=>{flavor?Metrics.countEvent(PLATFORM,"os.flavor",flavor):Metrics.countEvent(PLATFORM,"os.flavor",_getPlatformInfo())}):Metrics.countEvent(PLATFORM,"os.flavor",_getPlatformInfo()),_emitDeviceTypeMetrics(),_emitBrowserMetrics(),_emitMobileMetricsIfPresent(),_sendStorageMetrics()}const envName=window.__TAURI__?"tauri-":window.__ELECTRON__?"electron-":"";let bugsnagPerformanceInited=!1;function _initBugsnagPerformance(){bugsnagPerformanceInited=!0,BugsnagPerformance.start({apiKey:"94ef94f4daf871ca0f2fc912c6d4764d",appVersion:AppConfig.version,releaseStage:window.__IS_NATIVE_SHELL__?`${envName}${AppConfig.config.bugsnagEnv}-${Phoenix.platform}`:AppConfig.config.bugsnagEnv,autoInstrumentRouteChanges:!1,autoInstrumentNetworkRequests:!1,autoInstrumentFullPageLoads:!1})}function _bugsnagPerformance(key,valueMs){if(Metrics.isDisabled()||!BugsnagPerformance||Phoenix.isTestWindow)return;bugsnagPerformanceInited||_initBugsnagPerformance();let activityStartTime=new Date,activityEndTime=new Date(activityStartTime.getTime()+valueMs);BugsnagPerformance.startSpan(key,{startTime:activityStartTime}).end(activityEndTime)}function sendStartupPerformanceMetrics(){const healthReport=PerfUtils.getHealthReport();let labelAppStart="AppStartupTime";Phoenix.firstBoot&&(labelAppStart="FirstBootTime"),Metrics.valueEvent(PERFORMANCE,"startup",labelAppStart,Number(healthReport.AppStartupTime)),_bugsnagPerformance(labelAppStart,Number(healthReport.AppStartupTime)),Metrics.valueEvent(PERFORMANCE,"startup","ModuleDepsResolved",Number(healthReport.ModuleDepsResolved)),_bugsnagPerformance("ModuleDepsResolved",Number(healthReport.ModuleDepsResolved)),Metrics.valueEvent(PERFORMANCE,"startup","PhStore",PhStore._storageBootstrapTime),_bugsnagPerformance("PhStore",PhStore._storageBootstrapTime),Phoenix.isNativeApp&&(Metrics.valueEvent(PERFORMANCE,"startup","tauriBoot",window._tauriBootVars.bootstrapTime),_bugsnagPerformance("tauriBootVars",window._tauriBootVars.bootstrapTime)),window.nodeSetupDonePromise&&window.nodeSetupDonePromise.then(()=>{window.PhNodeEngine&&window.PhNodeEngine._nodeLoadTime&&(Metrics.valueEvent(PERFORMANCE,"startup","nodeBoot",window.PhNodeEngine._nodeLoadTime),_bugsnagPerformance("nodeBoot",window.PhNodeEngine._nodeLoadTime)),Metrics.countEvent(PERFORMANCE,"nodeBoot","success",1)}).catch(_err=>{Metrics.countEvent(PERFORMANCE,"nodeBoot","fail",1)})}function _getCurrentTheme(){return themesPref.get("theme")||"default"}function sendThemesMetrics(){Metrics.countEvent(Metrics.EVENT_TYPE.THEMES,"currentTheme",_getCurrentTheme())}exports.sendPlatformMetrics=sendPlatformMetrics,exports.sendStartupPerformanceMetrics=sendStartupPerformanceMetrics,exports.sendThemesMetrics=sendThemesMetrics});