code_sync 0.6.7
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -0
- data/CNAME +1 -0
- data/Gemfile +24 -0
- data/Gemfile.lock +117 -0
- data/LICENSE.md +22 -0
- data/ROADMAP.md +20 -0
- data/TODO.md +14 -0
- data/bin/codesync +11 -0
- data/code_sync.gemspec +30 -0
- data/config/routes.rb +26 -0
- data/lib/assets/javascripts/canvas.coffee +12 -0
- data/lib/assets/javascripts/canvas/editors.coffee +48 -0
- data/lib/assets/javascripts/canvas/index.coffee +15 -0
- data/lib/assets/javascripts/canvas/layer_controller.coffee +47 -0
- data/lib/assets/javascripts/code_sync.coffee +3 -0
- data/lib/assets/javascripts/code_sync/backends/gist.coffee +78 -0
- data/lib/assets/javascripts/code_sync/client/index.coffee +104 -0
- data/lib/assets/javascripts/code_sync/client/util.coffee +61 -0
- data/lib/assets/javascripts/code_sync/codemirror.coffee +12 -0
- data/lib/assets/javascripts/code_sync/config.js.coffee.erb +38 -0
- data/lib/assets/javascripts/code_sync/console/index.coffee +54 -0
- data/lib/assets/javascripts/code_sync/console/templates/console.jst.skim +10 -0
- data/lib/assets/javascripts/code_sync/dependencies.coffee +6 -0
- data/lib/assets/javascripts/code_sync/editor/advanced.coffee +0 -0
- data/lib/assets/javascripts/code_sync/editor/datasources/document.coffee +212 -0
- data/lib/assets/javascripts/code_sync/editor/datasources/gist_loader.coffee +7 -0
- data/lib/assets/javascripts/code_sync/editor/datasources/modes.coffee +117 -0
- data/lib/assets/javascripts/code_sync/editor/datasources/project_assets.coffee +14 -0
- data/lib/assets/javascripts/code_sync/editor/index.coffee +415 -0
- data/lib/assets/javascripts/code_sync/editor/plugins/asset_selector.coffee +106 -0
- data/lib/assets/javascripts/code_sync/editor/plugins/color_picker.coffee +83 -0
- data/lib/assets/javascripts/code_sync/editor/plugins/document_manager.coffee +55 -0
- data/lib/assets/javascripts/code_sync/editor/plugins/document_tabs.coffee +178 -0
- data/lib/assets/javascripts/code_sync/editor/plugins/element_sync.coffee +111 -0
- data/lib/assets/javascripts/code_sync/editor/plugins/keymap_selector.coffee +44 -0
- data/lib/assets/javascripts/code_sync/editor/plugins/mode_selector.coffee +53 -0
- data/lib/assets/javascripts/code_sync/editor/plugins/name_input.coffee +44 -0
- data/lib/assets/javascripts/code_sync/editor/plugins/preferences.coffee +71 -0
- data/lib/assets/javascripts/code_sync/editor/templates/asset_editor.jst.skim +2 -0
- data/lib/assets/javascripts/code_sync/editor/templates/asset_selector.jst.skim +5 -0
- data/lib/assets/javascripts/code_sync/editor/templates/document_manager_tab.jst.skim +15 -0
- data/lib/assets/javascripts/code_sync/editor/templates/element_sync.jst.skim +19 -0
- data/lib/assets/javascripts/code_sync/editor/templates/preferences_panel.jst.skim +38 -0
- data/lib/assets/javascripts/code_sync/editor/views/asset_selector.coffee +106 -0
- data/lib/assets/javascripts/code_sync/editor/views/color_picker.coffee +76 -0
- data/lib/assets/javascripts/code_sync/editor/views/document_manager.coffee +176 -0
- data/lib/assets/javascripts/code_sync/editor/views/keymap_selector.coffee +37 -0
- data/lib/assets/javascripts/code_sync/editor/views/mode_selector.coffee +47 -0
- data/lib/assets/javascripts/code_sync/editor/views/name_input.coffee +44 -0
- data/lib/assets/javascripts/code_sync/editor/views/preferences.coffee +71 -0
- data/lib/assets/javascripts/code_sync/index.coffee +4 -0
- data/lib/assets/javascripts/code_sync/reloader.coffee +2 -0
- data/lib/assets/javascripts/code_sync_basic.coffee +1 -0
- data/lib/assets/javascripts/demos.coffee +48 -0
- data/lib/assets/javascripts/demos/default-content.coffee +72 -0
- data/lib/assets/javascripts/demos/layout_selector.coffee +19 -0
- data/lib/assets/javascripts/demos/tour.coffee +70 -0
- data/lib/assets/javascripts/demos/tour.jst.skim +29 -0
- data/lib/assets/javascripts/marketing.coffee +0 -0
- data/lib/assets/javascripts/vendor/.DS_Store +0 -0
- data/lib/assets/javascripts/vendor/backbone-events.js +160 -0
- data/lib/assets/javascripts/vendor/backbone-min.js +4 -0
- data/lib/assets/javascripts/vendor/codemirror-coffeescript.js +346 -0
- data/lib/assets/javascripts/vendor/codemirror-css.js +570 -0
- data/lib/assets/javascripts/vendor/codemirror-haml.js +153 -0
- data/lib/assets/javascripts/vendor/codemirror-htmlmixed.js +104 -0
- data/lib/assets/javascripts/vendor/codemirror-javascript.js +468 -0
- data/lib/assets/javascripts/vendor/codemirror-markdown.js +526 -0
- data/lib/assets/javascripts/vendor/codemirror-ruby.js +194 -0
- data/lib/assets/javascripts/vendor/codemirror-sass.js +330 -0
- data/lib/assets/javascripts/vendor/codemirror-skim.js +330 -0
- data/lib/assets/javascripts/vendor/codemirror-vim.js +3159 -0
- data/lib/assets/javascripts/vendor/codemirror-xml.js +328 -0
- data/lib/assets/javascripts/vendor/console.js +339 -0
- data/lib/assets/javascripts/vendor/gisted.js +27 -0
- data/lib/assets/javascripts/vendor/jquery-ui-resize-drag.min.js +6 -0
- data/lib/assets/javascripts/vendor/jquery.js +5 -0
- data/lib/assets/javascripts/vendor/keylauncher.js +4 -0
- data/lib/assets/javascripts/vendor/keymaster.min.js +4 -0
- data/lib/assets/javascripts/vendor/spectrum.js +1868 -0
- data/lib/assets/javascripts/vendor/underscore-min.js +1 -0
- data/lib/assets/javascripts/vendor/underscore.string.min.js +1 -0
- data/lib/assets/javascripts/vendor/vendored_codemirror.js +5558 -0
- data/lib/assets/javascripts/vendor/zepto.js +2 -0
- data/lib/assets/stylesheets/canvas.css.scss +101 -0
- data/lib/assets/stylesheets/code_sync.css.scss +4 -0
- data/lib/assets/stylesheets/code_sync/codemirror.css +7 -0
- data/lib/assets/stylesheets/code_sync/console.css +86 -0
- data/lib/assets/stylesheets/code_sync/editor/asset-name-input.css.scss +12 -0
- data/lib/assets/stylesheets/code_sync/editor/asset-selector.css.scss +58 -0
- data/lib/assets/stylesheets/code_sync/editor/codesync-color-picker.css.sass +5 -0
- data/lib/assets/stylesheets/code_sync/editor/document-tabs.css.scss +61 -0
- data/lib/assets/stylesheets/code_sync/editor/element-sync.css.scss +72 -0
- data/lib/assets/stylesheets/code_sync/editor/mode-selector.css.scss +0 -0
- data/lib/assets/stylesheets/code_sync/editor/preferences-panel.css.scss +26 -0
- data/lib/assets/stylesheets/code_sync/index.css.scss +141 -0
- data/lib/assets/stylesheets/demos.css.scss +96 -0
- data/lib/assets/stylesheets/marketing.css.sass +46 -0
- data/lib/assets/stylesheets/marketing/syntax.css.scss +1 -0
- data/lib/assets/stylesheets/vendor/animate.css +1 -0
- data/lib/assets/stylesheets/vendor/codemirror-ambiance.css +75 -0
- data/lib/assets/stylesheets/vendor/codemirror-lesserdark.css +44 -0
- data/lib/assets/stylesheets/vendor/codemirror-monokai.css +28 -0
- data/lib/assets/stylesheets/vendor/codemirror-xq-light.css +43 -0
- data/lib/assets/stylesheets/vendor/grid-layout.css +1406 -0
- data/lib/assets/stylesheets/vendor/spectrum.css +481 -0
- data/lib/assets/stylesheets/vendor/vendored_codemirror.css +246 -0
- data/lib/code_sync.rb +41 -0
- data/lib/code_sync/cli.rb +73 -0
- data/lib/code_sync/manager.rb +238 -0
- data/lib/code_sync/processors.rb +18 -0
- data/lib/code_sync/processors/basic.rb +9 -0
- data/lib/code_sync/processors/jst_processor.rb +17 -0
- data/lib/code_sync/pry_console.rb +132 -0
- data/lib/code_sync/rails.rb +7 -0
- data/lib/code_sync/rails/engine.rb +12 -0
- data/lib/code_sync/server.rb +225 -0
- data/lib/code_sync/sprockets_adapter.rb +145 -0
- data/lib/code_sync/temp_asset.rb +20 -0
- data/lib/code_sync/version.rb +3 -0
- data/lib/middleman_extension.rb +43 -0
- data/readme.md +26 -0
- data/site/.gitignore +14 -0
- data/site/Gemfile +13 -0
- data/site/Gemfile.lock +183 -0
- data/site/config.rb +26 -0
- data/site/source/canvas.html.slim +21 -0
- data/site/source/codepen-style-demo.html.slim +21 -0
- data/site/source/demo.html.slim +30 -0
- data/site/source/index.html.slim +128 -0
- data/site/source/layouts/layout.slim +18 -0
- data/site/source/samples/_client.html.md +13 -0
- data/site/source/samples/_editor.html.md +19 -0
- data/site/source/samples/_hooks.html.md +8 -0
- data/site/source/samples/_middleman.html.md +7 -0
- data/site/source/samples/_rails.html.md +8 -0
- data/site/source/samples/_standalone.html.md +36 -0
- data/spec/lib/code_sync/sprockets_adapter_spec.rb +44 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/support/.DS_Store +0 -0
- data/spec/support/dummy_middleman/.gitignore +14 -0
- data/spec/support/dummy_middleman/Gemfile +5 -0
- data/spec/support/dummy_middleman/Gemfile.lock +100 -0
- data/spec/support/dummy_middleman/config.rb +77 -0
- data/spec/support/dummy_middleman/source/images/background.png +0 -0
- data/spec/support/dummy_middleman/source/images/middleman.png +0 -0
- data/spec/support/dummy_middleman/source/index.html.erb +10 -0
- data/spec/support/dummy_middleman/source/javascripts/all.js +1 -0
- data/spec/support/dummy_middleman/source/layouts/layout.erb +19 -0
- data/spec/support/dummy_middleman/source/stylesheets/all.css +55 -0
- data/spec/support/dummy_middleman/source/stylesheets/normalize.css +375 -0
- data/spec/support/dummy_rails/.gitignore +15 -0
- data/spec/support/dummy_rails/Gemfile +38 -0
- data/spec/support/dummy_rails/Gemfile.lock +112 -0
- data/spec/support/dummy_rails/README.rdoc +261 -0
- data/spec/support/dummy_rails/Rakefile +7 -0
- data/spec/support/dummy_rails/app/assets/images/rails.png +0 -0
- data/spec/support/dummy_rails/app/assets/javascripts/application.js +15 -0
- data/spec/support/dummy_rails/app/assets/stylesheets/application.css +13 -0
- data/spec/support/dummy_rails/app/controllers/application_controller.rb +3 -0
- data/spec/support/dummy_rails/app/helpers/application_helper.rb +2 -0
- data/spec/support/dummy_rails/app/mailers/.gitkeep +0 -0
- data/spec/support/dummy_rails/app/models/.gitkeep +0 -0
- data/spec/support/dummy_rails/app/views/layouts/application.html.erb +14 -0
- data/spec/support/dummy_rails/config.ru +4 -0
- data/spec/support/dummy_rails/config/application.rb +62 -0
- data/spec/support/dummy_rails/config/boot.rb +6 -0
- data/spec/support/dummy_rails/config/database.yml +25 -0
- data/spec/support/dummy_rails/config/environment.rb +5 -0
- data/spec/support/dummy_rails/config/environments/development.rb +37 -0
- data/spec/support/dummy_rails/config/environments/production.rb +67 -0
- data/spec/support/dummy_rails/config/environments/test.rb +37 -0
- data/spec/support/dummy_rails/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/support/dummy_rails/config/initializers/inflections.rb +15 -0
- data/spec/support/dummy_rails/config/initializers/mime_types.rb +5 -0
- data/spec/support/dummy_rails/config/initializers/secret_token.rb +7 -0
- data/spec/support/dummy_rails/config/initializers/session_store.rb +8 -0
- data/spec/support/dummy_rails/config/initializers/wrap_parameters.rb +14 -0
- data/spec/support/dummy_rails/config/locales/en.yml +5 -0
- data/spec/support/dummy_rails/config/routes.rb +58 -0
- data/spec/support/dummy_rails/db/seeds.rb +7 -0
- data/spec/support/dummy_rails/doc/README_FOR_APP +2 -0
- data/spec/support/dummy_rails/lib/assets/.gitkeep +0 -0
- data/spec/support/dummy_rails/lib/tasks/.gitkeep +0 -0
- data/spec/support/dummy_rails/log/.gitkeep +0 -0
- data/spec/support/dummy_rails/public/404.html +26 -0
- data/spec/support/dummy_rails/public/422.html +26 -0
- data/spec/support/dummy_rails/public/500.html +25 -0
- data/spec/support/dummy_rails/public/favicon.ico +0 -0
- data/spec/support/dummy_rails/public/index.html +241 -0
- data/spec/support/dummy_rails/public/robots.txt +5 -0
- data/spec/support/dummy_rails/script/rails +6 -0
- data/spec/support/dummy_rails/test/fixtures/.gitkeep +0 -0
- data/spec/support/dummy_rails/test/functional/.gitkeep +0 -0
- data/spec/support/dummy_rails/test/integration/.gitkeep +0 -0
- data/spec/support/dummy_rails/test/performance/browsing_test.rb +12 -0
- data/spec/support/dummy_rails/test/test_helper.rb +13 -0
- data/spec/support/dummy_rails/test/unit/.gitkeep +0 -0
- data/spec/support/dummy_rails/vendor/assets/javascripts/.gitkeep +0 -0
- data/spec/support/dummy_rails/vendor/assets/stylesheets/.gitkeep +0 -0
- data/spec/support/dummy_rails/vendor/plugins/.gitkeep +0 -0
- data/spec/support/dummy_static/.DS_Store +0 -0
- data/spec/support/dummy_static/app/.DS_Store +0 -0
- data/spec/support/dummy_static/app/assets/.DS_Store +0 -0
- data/spec/support/dummy_static/app/assets/javascripts/manifest.coffee +4 -0
- data/spec/support/dummy_static/app/assets/javascripts/spec_application_javascript.coffee +4 -0
- data/spec/support/dummy_static/app/assets/stylesheets/spec_application_stylesheet.css.scss +5 -0
- data/spec/support/dummy_static/lib/assets/javascripts/spec_library_javascript.coffee +3 -0
- data/spec/support/dummy_static/lib/assets/stylesheets/spec_library_stylesheet.css.scss +5 -0
- data/spec/support/dummy_static/vendor/assets/javascripts/spec_vendor_javascript.js +5 -0
- data/spec/support/dummy_static/vendor/assets/stylesheets/spec_vendor_stylesheets.css +3 -0
- data/vendor/assets/stylesheets/code_sync.css +1 -0
- metadata +492 -0
@@ -0,0 +1,104 @@
|
|
1
|
+
#= require_self
|
2
|
+
#= require ./util
|
3
|
+
|
4
|
+
class CodeSync.Client
|
5
|
+
|
6
|
+
@_clients: []
|
7
|
+
|
8
|
+
@get: ()->
|
9
|
+
CodeSync.Client._clients[0]
|
10
|
+
|
11
|
+
VERSION: CodeSync.VERSION
|
12
|
+
|
13
|
+
logLevel: 0
|
14
|
+
|
15
|
+
constructor: (options={})->
|
16
|
+
|
17
|
+
@logLevel = options.logLevel || 0
|
18
|
+
|
19
|
+
CodeSync.Client._clients.push(@)
|
20
|
+
|
21
|
+
CodeSync.util.loadScript "#{ CodeSync.get("socketEndpoint") }/client.js", ()=>
|
22
|
+
return if @clientLoaded is true
|
23
|
+
|
24
|
+
setTimeout ()=>
|
25
|
+
try
|
26
|
+
@setupSocket()
|
27
|
+
catch e
|
28
|
+
console.log "Error setting up codesync client"
|
29
|
+
, 25
|
30
|
+
|
31
|
+
@clientLoaded = true
|
32
|
+
|
33
|
+
subscribeWith: (cb)->
|
34
|
+
@socket?.subscribe "/code-sync/outbound", cb
|
35
|
+
|
36
|
+
setupSocket: ()->
|
37
|
+
return unless Faye?
|
38
|
+
|
39
|
+
@socket = new Faye.Client(CodeSync.get("socketEndpoint"))
|
40
|
+
|
41
|
+
@subscribeWith (notification)=>
|
42
|
+
if @logLevel > 0
|
43
|
+
console.log "Received notification on outbound channel", notification
|
44
|
+
|
45
|
+
@onNotification?.call?(@, notification)
|
46
|
+
|
47
|
+
if notification.name?.match(/\.js$/)
|
48
|
+
@onJavascriptNotification.call(@,notification)
|
49
|
+
|
50
|
+
if notification.name?.match(/\.css$/)
|
51
|
+
@onStylesheetNotification.call(@, notification)
|
52
|
+
|
53
|
+
javascriptCallbacks: []
|
54
|
+
|
55
|
+
stylesheetCallbacks: []
|
56
|
+
|
57
|
+
removeJavascriptCallbacks: ()->
|
58
|
+
@javascriptCallbacks = []
|
59
|
+
|
60
|
+
removeStylesheetCallbacks: ()->
|
61
|
+
@stylesheetCalbacks = []
|
62
|
+
|
63
|
+
afterJavascriptChange: (callback, clearExisting=false)->
|
64
|
+
@javascriptCallbacks ||= []
|
65
|
+
@javascriptCallbacks = [] if clearExisting is true
|
66
|
+
@javascriptCallbacks.push(callback)
|
67
|
+
|
68
|
+
afterStylesheetChange: (callback, clearExisting=false)->
|
69
|
+
@stylesheetCallbacks ||= []
|
70
|
+
@stylesheetCallbacks = [] if clearExisting is true
|
71
|
+
@stylesheetCallbacks.push(callback)
|
72
|
+
|
73
|
+
onJavascriptNotification: (notification)->
|
74
|
+
client = @
|
75
|
+
|
76
|
+
CodeSync.processing = true
|
77
|
+
|
78
|
+
if notification.source
|
79
|
+
sourceEval.call(window, notification.source)
|
80
|
+
|
81
|
+
for callback in client.javascriptCallbacks when callback.call?
|
82
|
+
callback.call(client, notification)
|
83
|
+
|
84
|
+
CodeSync.processing = false
|
85
|
+
|
86
|
+
return
|
87
|
+
|
88
|
+
if notification.path
|
89
|
+
console.log "notification", notification.path
|
90
|
+
CodeSync.util.loadScript "#{ CodeSync.get("sprocketsEndpoint") }/#{ notification.path }", ()->
|
91
|
+
for callback in client.javascriptCallbacks when callback.call?
|
92
|
+
callback.call(@, notification)
|
93
|
+
|
94
|
+
onStylesheetNotification: (notification)->
|
95
|
+
client = @
|
96
|
+
|
97
|
+
if notification.path && notification.name
|
98
|
+
CodeSync.util.loadStylesheet "#{ CodeSync.get("sprocketsEndpoint") }/#{ notification.path }", tracker: notification.name, ()->
|
99
|
+
for callback in client.stylesheetCallbacks when callback.call?
|
100
|
+
callback.call(@, notification)
|
101
|
+
|
102
|
+
|
103
|
+
sourceEval = (source)->
|
104
|
+
eval(source)
|
@@ -0,0 +1,61 @@
|
|
1
|
+
CodeSync.util ||= {}
|
2
|
+
|
3
|
+
loadedScripts = {}
|
4
|
+
scriptTimers = {}
|
5
|
+
|
6
|
+
CodeSync.util.loadStylesheet = (url, options={}, callback)->
|
7
|
+
ss = document.createElement("link")
|
8
|
+
ss.type = "text/css"
|
9
|
+
ss.rel = "stylesheet"
|
10
|
+
ss.href = url
|
11
|
+
ss.className = "code-sync-asset"
|
12
|
+
|
13
|
+
if options.tracker
|
14
|
+
$("link[data-tracker='#{ options.tracker }']").remove()
|
15
|
+
ss.setAttribute("data-tracker", options.tracker )
|
16
|
+
|
17
|
+
document.getElementsByTagName("head")[0].appendChild(ss);
|
18
|
+
|
19
|
+
callback?.call?(@)
|
20
|
+
|
21
|
+
CodeSync.util.loadScript = (url, options={}, callback) ->
|
22
|
+
loaded = loadedScripts
|
23
|
+
timers = scriptTimers
|
24
|
+
|
25
|
+
if typeof(options) is "function" and !callback?
|
26
|
+
callback = options
|
27
|
+
options = {}
|
28
|
+
|
29
|
+
head= document.getElementsByTagName('head')[0];
|
30
|
+
script = document.createElement("script")
|
31
|
+
script.src = url
|
32
|
+
script.type = "text/javascript"
|
33
|
+
|
34
|
+
that = @
|
35
|
+
onLoad = ()->
|
36
|
+
if typeof(callback) is "function"
|
37
|
+
callback.call(that, url, options, script)
|
38
|
+
|
39
|
+
try
|
40
|
+
head.removeChild(script)
|
41
|
+
catch e
|
42
|
+
true
|
43
|
+
|
44
|
+
loaded[url] = true
|
45
|
+
|
46
|
+
if options.once is true && loaded[url]
|
47
|
+
return false
|
48
|
+
|
49
|
+
head.appendChild(script)
|
50
|
+
|
51
|
+
script.onreadystatechange = ()->
|
52
|
+
if script.readyState is "loaded" or script.readyState is "complete"
|
53
|
+
onLoad()
|
54
|
+
|
55
|
+
script.onload = onLoad
|
56
|
+
|
57
|
+
if navigator?.userAgent.match(/WebKit/)
|
58
|
+
timers[url] = setInterval ()->
|
59
|
+
onLoad()
|
60
|
+
clearInterval(timers[url])
|
61
|
+
, 10
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#= require ../vendor/vendored_codemirror
|
2
|
+
#= require ../vendor/codemirror-ruby
|
3
|
+
#= require ../vendor/codemirror-coffeescript
|
4
|
+
#= require ../vendor/codemirror-css
|
5
|
+
#= require ../vendor/codemirror-xml
|
6
|
+
#= require ../vendor/codemirror-javascript
|
7
|
+
#= require ../vendor/codemirror-htmlmixed
|
8
|
+
#= require ../vendor/codemirror-sass
|
9
|
+
#= require ../vendor/codemirror-haml
|
10
|
+
#= require ../vendor/codemirror-skim
|
11
|
+
#= require ../vendor/codemirror-vim
|
12
|
+
#= require ../vendor/codemirror-markdown
|
@@ -0,0 +1,38 @@
|
|
1
|
+
root = @
|
2
|
+
|
3
|
+
if typeof(exports) isnt "undefined"
|
4
|
+
CodeSync = exports
|
5
|
+
else
|
6
|
+
CodeSync = root.CodeSync = {}
|
7
|
+
|
8
|
+
CodeSync.VERSION = "<%= CodeSync::Version %>"
|
9
|
+
|
10
|
+
CodeSync.backends = {}
|
11
|
+
|
12
|
+
CodeSync.util = {}
|
13
|
+
CodeSync.plugins = {}
|
14
|
+
|
15
|
+
CodeSync._config ||=
|
16
|
+
defaultFileType: "coffeescript"
|
17
|
+
assetCompilationEndpoint: "http://localhost:9295/source"
|
18
|
+
serverInfoEndpoint: "http://localhost:9295/info"
|
19
|
+
sprocketsEndpoint: "http://localhost:9295/assets"
|
20
|
+
socketEndpoint: "http://localhost:9295/faye"
|
21
|
+
editorToggleHotkey: "ctrl+j"
|
22
|
+
debugMode: false
|
23
|
+
|
24
|
+
CodeSync.set = (setting, value)->
|
25
|
+
CodeSync._config[setting] = value
|
26
|
+
|
27
|
+
CodeSync.get = (setting)->
|
28
|
+
CodeSync._config[setting]
|
29
|
+
|
30
|
+
CodeSync.enableLogging = ()->
|
31
|
+
CodeSync.set("debugMode", true)
|
32
|
+
|
33
|
+
CodeSync.log = (args...)->
|
34
|
+
if CodeSync.get("debugMode") isnt false
|
35
|
+
args.unshift "CodeSync Log:"
|
36
|
+
console.log args...
|
37
|
+
|
38
|
+
_originalSetOption = CodeMirror::setOption
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#= require_tree ./templates
|
2
|
+
#= require_self
|
3
|
+
|
4
|
+
CodeSync.PryConsole = Backbone.View.extend
|
5
|
+
className: "codesync-pry-console"
|
6
|
+
|
7
|
+
endpoint: "http://localhost:9295/pry-console"
|
8
|
+
|
9
|
+
rendered: false
|
10
|
+
|
11
|
+
events:
|
12
|
+
"keydown input" : "processInput"
|
13
|
+
"submit form" : (e)->
|
14
|
+
e.preventDefault()
|
15
|
+
|
16
|
+
initialize: (@options={})->
|
17
|
+
_.extend(@, @options)
|
18
|
+
Backbone.View::initialize.apply(@,arguments)
|
19
|
+
|
20
|
+
processInput: (e)->
|
21
|
+
if e.keyCode is 13 and @getCode().length > 0
|
22
|
+
@sendCode(true)
|
23
|
+
|
24
|
+
|
25
|
+
sendCode: ()->
|
26
|
+
$.ajax
|
27
|
+
url: @endpoint
|
28
|
+
|
29
|
+
type: "POST"
|
30
|
+
|
31
|
+
success: (response)=>
|
32
|
+
console.log("Success", response)
|
33
|
+
|
34
|
+
error: (response)=>
|
35
|
+
console.log("Error", response)
|
36
|
+
|
37
|
+
data:
|
38
|
+
code: @getCode()
|
39
|
+
|
40
|
+
|
41
|
+
getCode: ()->
|
42
|
+
@$('input#code').val()
|
43
|
+
|
44
|
+
render: ()->
|
45
|
+
@$el.html JST["code_sync/console/templates/console"](endpoint: @endpoint)
|
46
|
+
@rendered = true
|
47
|
+
@
|
48
|
+
|
49
|
+
CodeSync.PryConsole.renderSingleton = (renderToElement)->
|
50
|
+
renderToElement ||= $('body')
|
51
|
+
|
52
|
+
window.codeSyncConsole?.remove()
|
53
|
+
window.codeSyncConsole = new CodeSync.PryConsole()
|
54
|
+
$(renderToElement).html(codeSyncConsole.render().el)
|
File without changes
|
@@ -0,0 +1,212 @@
|
|
1
|
+
# Triggers
|
2
|
+
#
|
3
|
+
# status:
|
4
|
+
# - success
|
5
|
+
|
6
|
+
CodeSync.Document = Backbone.Model.extend
|
7
|
+
callbackDelay: 150
|
8
|
+
|
9
|
+
initialize: (@attributes,options)->
|
10
|
+
if localKey = @attributes.localStorageKey
|
11
|
+
@attributes.contents ||= localStorage.getItem(localKey)
|
12
|
+
|
13
|
+
Backbone.Model::initialize.apply(@, arguments)
|
14
|
+
|
15
|
+
_.bindAll @, "onContentChange"
|
16
|
+
|
17
|
+
@on "change:contents", @onContentChange
|
18
|
+
|
19
|
+
@on "change:name", ()=>
|
20
|
+
@set("mode", @determineMode())
|
21
|
+
@set("display", @nameWithoutExtension() )
|
22
|
+
|
23
|
+
@on "change:mode", ()=>
|
24
|
+
@set('extension', @determineExtension(), silent: true)
|
25
|
+
|
26
|
+
url: ()->
|
27
|
+
CodeSync.get("assetCompilationEndpoint")
|
28
|
+
|
29
|
+
saveToDisk: ()->
|
30
|
+
if @isSaveable()
|
31
|
+
@sendToServer(true, "saveToDisk")
|
32
|
+
|
33
|
+
saveToLocalStorage: (path)->
|
34
|
+
if path?
|
35
|
+
localStorage.setItem(path, @get("contents"))
|
36
|
+
|
37
|
+
loadSourceFromDisk: (callback)->
|
38
|
+
$.ajax
|
39
|
+
url: "#{ @url() }?path=#{ @get('path') }"
|
40
|
+
type: "GET"
|
41
|
+
success: (response={})=>
|
42
|
+
if response.success is true and response.contents?
|
43
|
+
@set("contents", response.contents, silent: true)
|
44
|
+
callback(@)
|
45
|
+
|
46
|
+
toJSON: ()->
|
47
|
+
name: @nameWithoutExtension()
|
48
|
+
path: @get('path')
|
49
|
+
extension: @get('extension') || @determineExtension()
|
50
|
+
contents: @toContent()
|
51
|
+
|
52
|
+
nameWithoutExtension: ()->
|
53
|
+
extension = @get('extension') || @determineExtension()
|
54
|
+
(@get("name") || "untitled").replace(extension,'')
|
55
|
+
|
56
|
+
toMode: ()->
|
57
|
+
mode = @get("mode") || @determineMode()
|
58
|
+
modeModel = CodeSync.Modes.getMode(mode)
|
59
|
+
|
60
|
+
toCodeMirrorMode: ()->
|
61
|
+
@toMode()?.get("codeMirrorMode")
|
62
|
+
|
63
|
+
toCodeMirrorDocument: ()->
|
64
|
+
CodeMirror.Doc @toContent(), @toCodeMirrorMode(), 0
|
65
|
+
|
66
|
+
toCodeMirrorOptions: ()->
|
67
|
+
@toMode().get("codeMirrorOptions")
|
68
|
+
|
69
|
+
toContent: ()->
|
70
|
+
"#{ @get("contents") || @toMode()?.get("defaultContent") || " " }"
|
71
|
+
|
72
|
+
onContentChange: ()->
|
73
|
+
localKey = @get("localStorageKey")
|
74
|
+
localKey = if localKey? && _.isFunction(localKey) then localKey.call(@) else localKey
|
75
|
+
localStorage.setItem(localKey, @get("contents"))
|
76
|
+
|
77
|
+
@sendToServer(false, "onContentChange")
|
78
|
+
|
79
|
+
sendToServer: (allowSaveToDisk=false, reason="")->
|
80
|
+
allowSaveToDisk = false unless @isSaveable()
|
81
|
+
|
82
|
+
data = if allowSaveToDisk is true then @toJSON() else _(@toJSON()).pick('name','extension','contents')
|
83
|
+
|
84
|
+
CodeSync.log("Sending Data To #{ CodeSync.get("assetCompilationEndpoint") }", data)
|
85
|
+
|
86
|
+
$.ajax
|
87
|
+
type: "POST"
|
88
|
+
url: CodeSync.get("assetCompilationEndpoint")
|
89
|
+
data: JSON.stringify(data)
|
90
|
+
error: (response)=>
|
91
|
+
CodeSync.log("Document Process Error", arguments)
|
92
|
+
|
93
|
+
success: (response)=>
|
94
|
+
CodeSync.log("Document Process Response", response)
|
95
|
+
|
96
|
+
if response.success is true
|
97
|
+
@trigger "status", type: "success", message: @successMessage(reason), compiled: response.compiled
|
98
|
+
|
99
|
+
if response.success is true and response.compiled?
|
100
|
+
@set("compiled", response.compiled)
|
101
|
+
|
102
|
+
if response.success is false and response.error?
|
103
|
+
@set("error", response.error?.message)
|
104
|
+
@trigger "status", type: "error", message: response.error?.message
|
105
|
+
|
106
|
+
loadInPage: (options={})->
|
107
|
+
if @type() is "stylesheet"
|
108
|
+
helpers.processStyleContent.call(@, @get('compiled'))
|
109
|
+
else if (@type() is "script" or @type() is "template")
|
110
|
+
helpers.processScriptContent.call(@, @get('compiled'))
|
111
|
+
|
112
|
+
if options.complete
|
113
|
+
_.delay(options.complete, (options.delay||@callbackDelay))
|
114
|
+
|
115
|
+
# Determines how we will handle the compiled assets when loading in the page
|
116
|
+
type: ()->
|
117
|
+
switch @get("mode")
|
118
|
+
when "css","sass","scss","less"
|
119
|
+
"stylesheet"
|
120
|
+
when "coffeescript","javascript"
|
121
|
+
"script"
|
122
|
+
when "skim","mustache","jst","haml","eco"
|
123
|
+
"template"
|
124
|
+
|
125
|
+
missingFileName: ()->
|
126
|
+
name = (@get('path') || @get('name'))
|
127
|
+
!name? || name.length is 0
|
128
|
+
|
129
|
+
# If this is an adHoc document that is not being saved to disk, or rather
|
130
|
+
# pulled from an existing asset on disk, then we will need to create an extension
|
131
|
+
# that is appropriate for the CodeMirror mode, for the purposes of on the fly compilation
|
132
|
+
determineExtension: ()->
|
133
|
+
filename = @get("path") || @get("name")
|
134
|
+
|
135
|
+
if extension = CodeSync.Document.getExtensionFor(filename)
|
136
|
+
return extension
|
137
|
+
|
138
|
+
if @get("mode")?
|
139
|
+
return CodeSync.Modes.guessExtensionFor( @get('mode') || CodeSync.get("defaultFileType") )
|
140
|
+
|
141
|
+
# Determine a CodeMirror mode setting appropriate for the file extension
|
142
|
+
determineMode: ->
|
143
|
+
path = @get("path") || @get("name") || @get("extension")
|
144
|
+
CodeSync.Modes.guessModeFor(path)
|
145
|
+
|
146
|
+
successMessage: (reason)->
|
147
|
+
if @type() is "template"
|
148
|
+
"Success. Template will be available as JST[\"#{ @nameWithoutExtension() }\"]"
|
149
|
+
|
150
|
+
isSticky: ()->
|
151
|
+
@get("sticky")? is true
|
152
|
+
|
153
|
+
isSaveable: ()->
|
154
|
+
@get("path")?.length > 0 && !@get("doNotSave")
|
155
|
+
|
156
|
+
CodeSync.Document.getFileNameFrom = (string="")->
|
157
|
+
string.split('/').pop()
|
158
|
+
|
159
|
+
CodeSync.Document.getExtensionFor = (string="")->
|
160
|
+
filename = CodeSync.Document.getFileNameFrom(string)
|
161
|
+
|
162
|
+
[fname,rest...] = filename.split('.')
|
163
|
+
|
164
|
+
if val = rest.length > 0 && rest.join('.')
|
165
|
+
".#{ val }"
|
166
|
+
|
167
|
+
CodeSync.Documents = Backbone.Collection.extend
|
168
|
+
model: CodeSync.Document
|
169
|
+
|
170
|
+
initialize: (models,options)->
|
171
|
+
Backbone.Collection::initialize.apply(@, arguments)
|
172
|
+
|
173
|
+
if client = CodeSync.Client.get() && client?.socket?
|
174
|
+
client.subscribeWith (notification)->
|
175
|
+
console.log "Documents", notification
|
176
|
+
|
177
|
+
nextId: ()->
|
178
|
+
@models.length + 1
|
179
|
+
|
180
|
+
findByPath: (path)->
|
181
|
+
documentModel = @detect (documentModel)->
|
182
|
+
documentModel.get('path')?.match(path)
|
183
|
+
|
184
|
+
findOrCreateForPath: (path="", callback)->
|
185
|
+
if documentModel = @findByPath(path)
|
186
|
+
callback?(documentModel)
|
187
|
+
else
|
188
|
+
name = CodeSync.Document.getFileNameFrom(path)
|
189
|
+
extension = CodeSync.Document.getExtensionFor(name)
|
190
|
+
display = name.replace(extension,'')
|
191
|
+
id = @nextId()
|
192
|
+
|
193
|
+
documentModel = new CodeSync.Document({name,extension,display,path,id})
|
194
|
+
|
195
|
+
documentModel.loadSourceFromDisk ()=>
|
196
|
+
callback?(documentModel)
|
197
|
+
|
198
|
+
helpers =
|
199
|
+
processStyleContent: (content)->
|
200
|
+
$('head style[data-codesync-document]').remove()
|
201
|
+
$('head').append "<style type='text/css' data-codesync-document=true>#{ content }</style>"
|
202
|
+
|
203
|
+
processScriptContent: (code)->
|
204
|
+
doc = @
|
205
|
+
evalRunner = (code)->
|
206
|
+
try
|
207
|
+
eval(code)
|
208
|
+
catch e
|
209
|
+
doc.trigger "status", type: "error", message: "JS Error: #{ e.message }", sticky: true
|
210
|
+
throw(e)
|
211
|
+
|
212
|
+
evalRunner.call(window, code)
|