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,176 @@
|
|
1
|
+
CodeSync.plugins.DocumentTabs = Backbone.View.extend
|
2
|
+
|
3
|
+
views: {}
|
4
|
+
|
5
|
+
events:
|
6
|
+
"click .document-tab.selectable" : "onDocumentTabSelection"
|
7
|
+
"click .document-tab.closable .close-anchor" : "closeTab"
|
8
|
+
"click .document-tab.new-document" : "createDocument"
|
9
|
+
"click .document-tab.save-document" : "saveDocument"
|
10
|
+
"click .document-tab.open-document": "toggleAssetSelector"
|
11
|
+
|
12
|
+
"dblclick .document-tab.editable" : "onDoubleClickTab"
|
13
|
+
|
14
|
+
"blur .document-tab.editable .contents" : "onEditableTabBlur"
|
15
|
+
"keydown .document-tab.editable .contents" : "onEditableTabKeyPress"
|
16
|
+
|
17
|
+
initialize: (options={})->
|
18
|
+
@editor = options.editor
|
19
|
+
|
20
|
+
@$el.append "<div class='document-tabs-container' />"
|
21
|
+
|
22
|
+
@openDocuments = new CodeSync.Documents()
|
23
|
+
@openDocuments.on "add", @renderTabs, @
|
24
|
+
@openDocuments.on "remove", @renderTabs, @
|
25
|
+
@openDocuments.on "change:display", @renderTabs, @
|
26
|
+
|
27
|
+
@projectAssets = new CodeSync.ProjectAssets()
|
28
|
+
|
29
|
+
@state = new Backbone.Model
|
30
|
+
currentDocument: undefined
|
31
|
+
|
32
|
+
@state.on "change:currentDocument", @highlightActiveDocumentTab, @
|
33
|
+
|
34
|
+
@on "editor:hidden", ()=>
|
35
|
+
@$('.document-tab.hideable').hide()
|
36
|
+
|
37
|
+
@on "editor:visible", ()=>
|
38
|
+
@$('.document-tab.hideable').show()
|
39
|
+
|
40
|
+
@views.assetSelector = new CodeSync.AssetSelector
|
41
|
+
collection: @projectAssets
|
42
|
+
documents: @openDocuments
|
43
|
+
editor: @editor
|
44
|
+
|
45
|
+
@views.assetSelector.on "asset:selected", @onAssetSelection, @
|
46
|
+
|
47
|
+
documentInTab: (tabElement)->
|
48
|
+
tabElement = tabElement.parents('.document-tab').eq(0) unless tabElement.is('.document-tab')
|
49
|
+
|
50
|
+
if cid = tabElement.data('document-cid')
|
51
|
+
doc = @openDocuments.detect (model)->
|
52
|
+
model.cid == cid
|
53
|
+
|
54
|
+
renderTabs: ()->
|
55
|
+
container = @$('.document-tabs-container').empty()
|
56
|
+
tmpl = JST["code_sync/editor/templates/document_manager_tab"]
|
57
|
+
|
58
|
+
# Render each document into a tab
|
59
|
+
@openDocuments.each (doc,index)-> container.append tmpl(doc: doc, index: index)
|
60
|
+
|
61
|
+
if @allowNew is true
|
62
|
+
container.append tmpl(display:"New",cls:"new-document")
|
63
|
+
|
64
|
+
if @allowOpen is true
|
65
|
+
container.append tmpl(display:"Open",cls:"open-document")
|
66
|
+
|
67
|
+
onAssetSelection: (path)->
|
68
|
+
@openDocuments.findOrCreateForPath path, (doc)=>
|
69
|
+
@openDocument(doc)
|
70
|
+
|
71
|
+
onEditableTabKeyPress: (e)->
|
72
|
+
target = @$(e.target).closest('.document-tab')
|
73
|
+
contents = target.children('.contents')
|
74
|
+
|
75
|
+
if e.keyCode is 13 or e.keyCode is 27
|
76
|
+
e.preventDefault()
|
77
|
+
|
78
|
+
contents.attr('contenteditable', false)
|
79
|
+
|
80
|
+
if doc = @documentInTab(target)
|
81
|
+
if e.keyCode is 13
|
82
|
+
doc.set('name', contents.html() )
|
83
|
+
|
84
|
+
if e.keyCode is 27 and original = target.attr('data-original-value')
|
85
|
+
contents.html(original)
|
86
|
+
|
87
|
+
@editor.codeMirror.focus()
|
88
|
+
|
89
|
+
onEditableTabBlur: (e)->
|
90
|
+
target = @$(e.target).closest('.document-tab')
|
91
|
+
contents = target.children('.contents')
|
92
|
+
|
93
|
+
console.log "On Editable Tab Blur", @documentInTab(target)?.cid
|
94
|
+
if doc = @documentInTab(target)
|
95
|
+
doc.set('name', contents.html() )
|
96
|
+
contents.attr('contenteditable', false)
|
97
|
+
|
98
|
+
onDoubleClickTab: (e)->
|
99
|
+
target = @$(e.target).closest('.document-tab')
|
100
|
+
contents = target.children('.contents')
|
101
|
+
|
102
|
+
target.attr('data-original-value', contents.html())
|
103
|
+
contents.attr('contenteditable',true)
|
104
|
+
|
105
|
+
onDocumentTabSelection: (e)->
|
106
|
+
@trigger "tab:click"
|
107
|
+
target = @$(e.target).closest('.document-tab')
|
108
|
+
doc = @documentInTab(target)
|
109
|
+
|
110
|
+
@setCurrentDocument(doc)
|
111
|
+
|
112
|
+
closeTab: (e)->
|
113
|
+
target = @$(e.target)
|
114
|
+
doc = @documentInTab(target)
|
115
|
+
|
116
|
+
index = @openDocuments.indexOf(doc)
|
117
|
+
@openDocuments.remove(doc)
|
118
|
+
|
119
|
+
@setCurrentDocument( @openDocuments.at(index - 1) || @openDocuments.at(0) )
|
120
|
+
|
121
|
+
getCurrentDocument: ()->
|
122
|
+
@currentDocument
|
123
|
+
|
124
|
+
openDocument: (doc)->
|
125
|
+
@openDocuments.add(doc)
|
126
|
+
@setCurrentDocument(doc)
|
127
|
+
|
128
|
+
setCurrentDocument: (@currentDocument)->
|
129
|
+
@editor.loadDocument(@currentDocument)
|
130
|
+
|
131
|
+
saveDocument: ()->
|
132
|
+
if CodeSync.get("disableAssetSave")
|
133
|
+
@editor.showStatusMessage(type: "error", message: "Saving is disabled in this demo.")
|
134
|
+
else
|
135
|
+
@currentDocument.saveToDisk()
|
136
|
+
|
137
|
+
createDocument: ()->
|
138
|
+
@openDocuments.add
|
139
|
+
name: "untitled"
|
140
|
+
display: "Untitled"
|
141
|
+
mode: CodeSync.get("defaultFileType")
|
142
|
+
extension: CodeSync.Modes.guessExtensionFor(CodeSync.get("defaultFileType"))
|
143
|
+
|
144
|
+
doc = @openDocuments.last()
|
145
|
+
|
146
|
+
@openDocument(doc)
|
147
|
+
|
148
|
+
toggleAssetSelector: ()->
|
149
|
+
@views.assetSelector.toggle()
|
150
|
+
|
151
|
+
render: ()->
|
152
|
+
@$el.append( @views.assetSelector.render().el )
|
153
|
+
|
154
|
+
@
|
155
|
+
|
156
|
+
CodeSync.plugins.DocumentTabs.setup = (editor)->
|
157
|
+
dm = @views.DocumentTabs = new CodeSync.plugins.DocumentTabs(editor: @)
|
158
|
+
|
159
|
+
_.extend editor.codeMirrorKeyBindings,
|
160
|
+
"Ctrl-T": ()->
|
161
|
+
dm.toggleAssetSelector()
|
162
|
+
|
163
|
+
"Ctrl-S": ()->
|
164
|
+
dm.getCurrentDocument().save()
|
165
|
+
|
166
|
+
"Ctrl-N": ()->
|
167
|
+
dm.createDocument()
|
168
|
+
|
169
|
+
@$el.append(dm.render().el)
|
170
|
+
|
171
|
+
dm.on "tab:click", ()=>
|
172
|
+
@show() if @visible is false
|
173
|
+
|
174
|
+
CodeSync.AssetEditor::loadDefaultDocument = ()->
|
175
|
+
defaultDocument = editor.getDefaultDocument()
|
176
|
+
dm.openDocument(defaultDocument)
|
@@ -0,0 +1,37 @@
|
|
1
|
+
CodeSync.plugins.KeymapSelector = Backbone.View.extend
|
2
|
+
className: "keymap-selector"
|
3
|
+
|
4
|
+
events:
|
5
|
+
"change select" : "onSelect"
|
6
|
+
|
7
|
+
initialize: (options={})->
|
8
|
+
@editor = options.editor
|
9
|
+
|
10
|
+
@editor.on "change:keymap", (keyMap)=>
|
11
|
+
@setValue(keyMap)
|
12
|
+
|
13
|
+
Backbone.View::initialize.apply(@, arguments)
|
14
|
+
|
15
|
+
onSelect: ()->
|
16
|
+
selected = @$('select').val()
|
17
|
+
@editor.setKeyMap(selected)
|
18
|
+
|
19
|
+
setValue: (val)->
|
20
|
+
@$('select').val(val)
|
21
|
+
|
22
|
+
render: ()->
|
23
|
+
options = ""
|
24
|
+
|
25
|
+
for mode in ["default","vim"]
|
26
|
+
options += "<option value='#{ mode }'>#{ mode }</option>"
|
27
|
+
|
28
|
+
@$el.html("<select>#{ options }</select>")
|
29
|
+
|
30
|
+
@
|
31
|
+
|
32
|
+
|
33
|
+
CodeSync.plugins.KeymapSelector.setup = (editor)->
|
34
|
+
v = @views.keymapSelector = new CodeSync.plugins.KeymapSelector({editor})
|
35
|
+
|
36
|
+
editor.$('.codesync-asset-editor').append v.render().el
|
37
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
CodeSync.plugins.ModeSelector = Backbone.View.extend
|
2
|
+
className: "mode-selector"
|
3
|
+
|
4
|
+
events:
|
5
|
+
"change select" : "onSelect"
|
6
|
+
|
7
|
+
initialize: (options={})->
|
8
|
+
@editor = options.editor
|
9
|
+
|
10
|
+
@modes = @editor.modes
|
11
|
+
|
12
|
+
@modes.on "reset", @render, @
|
13
|
+
|
14
|
+
@editor.on "change:mode", (modeModel, modeId)=>
|
15
|
+
@setValue(modeId)
|
16
|
+
|
17
|
+
Backbone.View::initialize.apply(@, arguments)
|
18
|
+
|
19
|
+
onSelect: ()->
|
20
|
+
selected = @$('select').val()
|
21
|
+
mode = @modes.get(selected)
|
22
|
+
|
23
|
+
@editor.setMode(mode)
|
24
|
+
|
25
|
+
setValue: (val)->
|
26
|
+
@$('select').val(val)
|
27
|
+
|
28
|
+
render: ()->
|
29
|
+
options = ""
|
30
|
+
|
31
|
+
for mode in @modes.models
|
32
|
+
options += "<option value='#{ mode.id }'>#{ mode.get('name') }</option>"
|
33
|
+
|
34
|
+
@$el.html("<select>#{ options }</select>")
|
35
|
+
|
36
|
+
@
|
37
|
+
|
38
|
+
|
39
|
+
CodeSync.plugins.ModeSelector.setup = (editor)->
|
40
|
+
v = @views.modeSelector = new CodeSync.plugins.ModeSelector({editor})
|
41
|
+
|
42
|
+
editor.$('.codesync-asset-editor').append v.render().el
|
43
|
+
|
44
|
+
editor.on "document:loaded", (doc)->
|
45
|
+
v.setValue(doc.get('mode'))
|
46
|
+
|
47
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
CodeSync.NameInput = Backbone.View.extend
|
2
|
+
className: "asset-name-input"
|
3
|
+
|
4
|
+
events:
|
5
|
+
"change input" : "updateEditor"
|
6
|
+
"keyup input": "updateEditor"
|
7
|
+
"blur input": "toggle"
|
8
|
+
|
9
|
+
initialize: (options={})->
|
10
|
+
@editor = options.editor
|
11
|
+
|
12
|
+
_.bindAll(@,"_updateEditor","updateEditor","toggle")
|
13
|
+
@_updateEditor = _.debounce(CodeSync.NameInput::_updateEditor, 300)
|
14
|
+
|
15
|
+
Backbone.View::initialize.apply(@, arguments)
|
16
|
+
|
17
|
+
render: ()->
|
18
|
+
@$el.append("<input type='text' placeholder='Enter the name of the asset' />")
|
19
|
+
@$el.hide()
|
20
|
+
@
|
21
|
+
|
22
|
+
updateEditor: ()->
|
23
|
+
@_updateEditor()
|
24
|
+
|
25
|
+
_updateEditor: ()->
|
26
|
+
assetName = @$('input').val()
|
27
|
+
|
28
|
+
if assetName.match(/\./)
|
29
|
+
@editor.currentName = assetName
|
30
|
+
|
31
|
+
mode = @editor.determineModeFor(assetName)
|
32
|
+
|
33
|
+
setValue: (value)->
|
34
|
+
@$('input').val value
|
35
|
+
|
36
|
+
getValue: ()->
|
37
|
+
@$('input').val()
|
38
|
+
|
39
|
+
toggle: ()->
|
40
|
+
if @getValue()?.length is 0
|
41
|
+
@editor.setDefaultExtension()
|
42
|
+
@editor.currentName = @editor.currentPath = undefined
|
43
|
+
|
44
|
+
@$el.toggle()
|
@@ -0,0 +1,71 @@
|
|
1
|
+
CodeSync.plugins.PreferencesPanel = Backbone.View.extend
|
2
|
+
className: "preferences-panel"
|
3
|
+
|
4
|
+
events:
|
5
|
+
"change select,input" : ()->
|
6
|
+
@trigger "update:preferences"
|
7
|
+
|
8
|
+
renderHidden: true
|
9
|
+
|
10
|
+
initialize: (options)->
|
11
|
+
@editor = options.editor
|
12
|
+
|
13
|
+
@$el.html JST["code_sync/editor/templates/preferences_panel"]()
|
14
|
+
|
15
|
+
Backbone.View::initialize.apply(@, arguments)
|
16
|
+
|
17
|
+
values: ()->
|
18
|
+
values = {}
|
19
|
+
|
20
|
+
for el in @$('input,select')
|
21
|
+
input = $(el)
|
22
|
+
values[input.attr('name')] = input.val()
|
23
|
+
|
24
|
+
values
|
25
|
+
|
26
|
+
toggle: ()->
|
27
|
+
@syncWithEditorOptions()
|
28
|
+
@$el.toggle()
|
29
|
+
|
30
|
+
syncWithEditorOptions: ()->
|
31
|
+
@$('select[name="theme"]').val @editor.codeMirror.getOption('theme')
|
32
|
+
@$('select[name="keyMap"]').val @editor.codeMirror.getOption('keyMap')
|
33
|
+
@$('input[name="asset_endpoint"]').val CodeSync.get("assetCompilationEndpoint")
|
34
|
+
@$('input[name="editor_hotkey"]').val CodeSync.get("editorToggleHotKey")
|
35
|
+
|
36
|
+
render: ()->
|
37
|
+
@$el.hide() if @renderHidden is true
|
38
|
+
@
|
39
|
+
|
40
|
+
|
41
|
+
CodeSync.plugins.PreferencesPanel.setup = (editor)->
|
42
|
+
panel = new CodeSync.plugins.PreferencesPanel(editor: @)
|
43
|
+
|
44
|
+
@$('.toolbar-wrapper').append "<div class='button toggle-preferences'>Preferences</div>"
|
45
|
+
|
46
|
+
@events["click .toggle-preferences"] = ()=> panel.toggle()
|
47
|
+
|
48
|
+
@$el.append panel.render().el
|
49
|
+
|
50
|
+
panel.on "update:preferences", ()=>
|
51
|
+
values = panel.values()
|
52
|
+
|
53
|
+
editor.setTheme(values.theme)
|
54
|
+
editor.setKeyMap(values.keyMap)
|
55
|
+
|
56
|
+
CodeSync.set("assetCompilationEndpoint", values.asset_endpoint)
|
57
|
+
|
58
|
+
CodeSync.AssetEditor.setHotKey(values.editor_hotkey)
|
59
|
+
|
60
|
+
editor.on "codemirror:setup", (cm)->
|
61
|
+
cm.on "focus", ()->
|
62
|
+
panel.$el.hide()
|
63
|
+
|
64
|
+
panel.on "update:preferences", ()=>
|
65
|
+
values = panel.values()
|
66
|
+
if editor.position isnt values.position
|
67
|
+
editor.setPosition(values.position)
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
#= require ./code_sync/index
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#= require_tree ./demos
|
2
|
+
#= require_self
|
3
|
+
|
4
|
+
window.defaultContentFor = (mode)->
|
5
|
+
window["#{ mode }Default"]
|
6
|
+
|
7
|
+
window.setupEditors = _.once ()->
|
8
|
+
for mode, index in ["scss","skim","coffeescript"]
|
9
|
+
|
10
|
+
window["#{ mode }Editor"] ||= new CodeSync.AssetEditor
|
11
|
+
hideable: false
|
12
|
+
autoRender: true
|
13
|
+
appendTo: ".editor-container"
|
14
|
+
renderVisible: true
|
15
|
+
startMode: mode
|
16
|
+
name: "panel-#{ index + 1 }"
|
17
|
+
position: "static"
|
18
|
+
document:
|
19
|
+
content: "shit"
|
20
|
+
contents: defaultContentFor(mode)
|
21
|
+
|
22
|
+
plugins:[
|
23
|
+
"ModeSelector"
|
24
|
+
"KeymapSelector"
|
25
|
+
]
|
26
|
+
|
27
|
+
scssEditor.addPlugin("ColorPicker")
|
28
|
+
|
29
|
+
|
30
|
+
setupEditors()
|
31
|
+
|
32
|
+
window.layoutSelector ||= new LayoutSelector()
|
33
|
+
$('body').append( layoutSelector.render().el ) unless $('#layout-selector').length > 0
|
34
|
+
|
35
|
+
CodeSync.onScriptChange ||= (changeObject)->
|
36
|
+
if changeObject.mode is "skim" and changeObject.name is "codesync"
|
37
|
+
$(".canvas-container").html JST["codesync"]()
|
38
|
+
window.coffeeScriptEditor.currentDocument.trigger "change:contents"
|
39
|
+
|
40
|
+
_.delay ()->
|
41
|
+
window.skimEditor.currentDocument.trigger "change:contents"
|
42
|
+
window.scssEditor.currentDocument.trigger "change:contents"
|
43
|
+
, 600
|
44
|
+
|
45
|
+
_.delay ()->
|
46
|
+
window.coffeescriptEditor.currentDocument.trigger "change:contents"
|
47
|
+
window.enableGlobalEditor()
|
48
|
+
, 1800
|
@@ -0,0 +1,72 @@
|
|
1
|
+
window.coffeescriptDefault = """
|
2
|
+
# This coffeescript content will be automatically evaluated any time you
|
3
|
+
# change some stuff.
|
4
|
+
CodeSync.onScriptChange ||= (changeObject)->
|
5
|
+
if changeObject.mode is "skim" and changeObject.name is "codesync"
|
6
|
+
$(".canvas-container").html JST["codesync"]()
|
7
|
+
|
8
|
+
(CodeSync.tour ||= {}).step = 0
|
9
|
+
CodeSync.enableTour(restart: true)
|
10
|
+
"""
|
11
|
+
|
12
|
+
window.skimDefault = """
|
13
|
+
.editor-demos
|
14
|
+
h1 CodeSync Editor Demos
|
15
|
+
p
|
16
|
+
| You can embed as many CodeSync.AssetEditor as you want in any configuration you want, and they will hook right up to the asset pipeline in your project and allow you to use your assets to create a little front end development canvas.
|
17
|
+
p
|
18
|
+
| In this example here, I am using a CodeSync.onScriptChange hook to wire up the automatic rendering of a template file whenever it changes, to display the contents of that template as it would be styled in my project.
|
19
|
+
|
20
|
+
h2.tour-button Click Here to take a tour son
|
21
|
+
"""
|
22
|
+
|
23
|
+
window.scssDefault = """
|
24
|
+
/* scss */
|
25
|
+
|
26
|
+
@import url(http://fonts.googleapis.com/css?family=Lobster|Raleway);
|
27
|
+
|
28
|
+
body {
|
29
|
+
font-family: "Raleway";
|
30
|
+
background: #656892;
|
31
|
+
color: #ffffff;
|
32
|
+
}
|
33
|
+
|
34
|
+
.bubble {
|
35
|
+
width: 250px;
|
36
|
+
background-color: rgba(30,30,30,0.75);
|
37
|
+
border-radius: 12px;
|
38
|
+
padding: 12px;
|
39
|
+
box-shadow: 0 0 6px #000000;
|
40
|
+
h4 {
|
41
|
+
font-family: "Lobster";
|
42
|
+
text-align: center;
|
43
|
+
}
|
44
|
+
|
45
|
+
a.next {
|
46
|
+
font-family: "Lobster";
|
47
|
+
display: block;
|
48
|
+
text-align: right;
|
49
|
+
cursor: pointer;
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
.editor-demos {
|
54
|
+
padding-left: 20px;
|
55
|
+
p {
|
56
|
+
max-width: 600px;
|
57
|
+
}
|
58
|
+
h1,h2 {
|
59
|
+
font-family: "Lobster";
|
60
|
+
text-shadow: 3px 6px #333333;
|
61
|
+
font-weight: 400;
|
62
|
+
}
|
63
|
+
h1 {
|
64
|
+
font-size: 88px;
|
65
|
+
}
|
66
|
+
h2 {
|
67
|
+
font-size: 48px;
|
68
|
+
cursor: pointer;
|
69
|
+
text-shadow: 2px 4px #333333;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
"""
|