mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2025-01-01 19:35:23 +03:00
Add more window globals and shims in task shell
This allows jQuery to be successfully loaded from a web worker since it does not have a document or window object by default. Previously it would log about missing methods and properties. Closes #228
This commit is contained in:
parent
0bb0863b61
commit
cd07ec841d
4
spec/fixtures/jquery-task-handler.coffee
vendored
Normal file
4
spec/fixtures/jquery-task-handler.coffee
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
module.exports =
|
||||
load: ->
|
||||
$ = require 'jquery'
|
||||
callTaskMethod('loaded', $?)
|
23
spec/stdlib/task-shell-spec.coffee
Normal file
23
spec/stdlib/task-shell-spec.coffee
Normal file
@ -0,0 +1,23 @@
|
||||
Task = require 'task'
|
||||
|
||||
describe "Task shell", ->
|
||||
describe "populating the window with fake properties", ->
|
||||
describe "when jQuery is loaded in a web worker", ->
|
||||
it "doesn't log to the console", ->
|
||||
spyOn(console, 'log')
|
||||
spyOn(console, 'error')
|
||||
spyOn(console, 'warn')
|
||||
class JQueryTask extends Task
|
||||
constructor: -> super('fixtures/jquery-task-handler.coffee')
|
||||
started: -> @callWorkerMethod('load')
|
||||
loaded: (@jqueryLoaded) ->
|
||||
|
||||
task = new JQueryTask()
|
||||
task.start()
|
||||
waitsFor "web worker to start and jquery to be required", 5000, ->
|
||||
task.jqueryLoaded
|
||||
runs ->
|
||||
expect(task.jqueryLoaded).toBeTruthy()
|
||||
expect(console.log).not.toHaveBeenCalled()
|
||||
expect(console.error).not.toHaveBeenCalled()
|
||||
expect(console.warn).not.toHaveBeenCalled()
|
@ -12,6 +12,19 @@ self.console =
|
||||
log: -> callTaskMethod 'log', arguments...
|
||||
error: -> callTaskMethod 'error', arguments...
|
||||
|
||||
window.document =
|
||||
createElement: ->
|
||||
setAttribute: ->
|
||||
getElementsByTagName: -> []
|
||||
appendChild: ->
|
||||
documentElement:
|
||||
insertBefore: ->
|
||||
removeChild: ->
|
||||
getElementById: -> {}
|
||||
createComment: -> {}
|
||||
createDocumentFragment: -> {}
|
||||
self.document = window.document
|
||||
|
||||
# `callTaskMethod` can be used to invoke method's on the parent `Task` object
|
||||
# back in the window thread.
|
||||
self.callTaskMethod = (method, args...) ->
|
||||
@ -19,9 +32,10 @@ self.callTaskMethod = (method, args...) ->
|
||||
|
||||
# The worker's initial handler replaces itself when `start` is invoked
|
||||
self.handler =
|
||||
start: ({resourcePath, requirePath, handlerPath}) ->
|
||||
self.resourcePath = resourcePath
|
||||
window.resourcePath = resourcePath
|
||||
start: ({resourcePath, globals, requirePath, handlerPath}) ->
|
||||
for key, value of globals
|
||||
self[key] = value
|
||||
window[key] = value
|
||||
importScripts(requirePath)
|
||||
require 'config'
|
||||
self.handler = require(handlerPath)
|
||||
|
@ -17,7 +17,10 @@ class Task
|
||||
|
||||
startWorker: ->
|
||||
@callWorkerMethod 'start'
|
||||
resourcePath: window.resourcePath
|
||||
globals:
|
||||
resourcePath: window.resourcePath
|
||||
navigator:
|
||||
userAgent: navigator.userAgent
|
||||
requirePath: require.getPath('require')
|
||||
handlerPath: @path
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user