mirror of
https://github.com/atom/atom.git
synced 2026-01-24 06:18:03 -05:00
45 lines
1.4 KiB
CoffeeScript
45 lines
1.4 KiB
CoffeeScript
app = require 'app'
|
|
fs = require 'fs'
|
|
path = require 'path'
|
|
protocol = require 'protocol'
|
|
|
|
# Handles requests with 'atom' protocol.
|
|
#
|
|
# It's created by {AtomApplication} upon instantiation and is used to create a
|
|
# custom resource loader for 'atom://' URLs.
|
|
#
|
|
# The following directories are searched in order:
|
|
# * ~/.atom/assets
|
|
# * ~/.atom/dev/packages (unless in safe mode)
|
|
# * ~/.atom/packages
|
|
# * RESOURCE_PATH/node_modules
|
|
#
|
|
module.exports =
|
|
class AtomProtocolHandler
|
|
constructor: (resourcePath, safeMode) ->
|
|
@loadPaths = []
|
|
|
|
unless safeMode
|
|
@loadPaths.push(path.join(process.env.ATOM_HOME, 'dev', 'packages'))
|
|
|
|
@loadPaths.push(path.join(process.env.ATOM_HOME, 'packages'))
|
|
@loadPaths.push(path.join(resourcePath, 'node_modules'))
|
|
|
|
@registerAtomProtocol()
|
|
|
|
# Creates the 'atom' custom protocol handler.
|
|
registerAtomProtocol: ->
|
|
protocol.registerProtocol 'atom', (request) =>
|
|
relativePath = path.normalize(request.url.substr(7))
|
|
|
|
if relativePath.indexOf('assets/') is 0
|
|
assetsPath = path.join(process.env.ATOM_HOME, relativePath)
|
|
filePath = assetsPath if fs.statSyncNoException(assetsPath).isFile?()
|
|
|
|
unless filePath
|
|
for loadPath in @loadPaths
|
|
filePath = path.join(loadPath, relativePath)
|
|
break if fs.statSyncNoException(filePath).isFile?()
|
|
|
|
new protocol.RequestFileJob(filePath)
|