code_sync 0.6.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. data/.rvmrc +1 -0
  2. data/CNAME +1 -0
  3. data/Gemfile +24 -0
  4. data/Gemfile.lock +117 -0
  5. data/LICENSE.md +22 -0
  6. data/ROADMAP.md +20 -0
  7. data/TODO.md +14 -0
  8. data/bin/codesync +11 -0
  9. data/code_sync.gemspec +30 -0
  10. data/config/routes.rb +26 -0
  11. data/lib/assets/javascripts/canvas.coffee +12 -0
  12. data/lib/assets/javascripts/canvas/editors.coffee +48 -0
  13. data/lib/assets/javascripts/canvas/index.coffee +15 -0
  14. data/lib/assets/javascripts/canvas/layer_controller.coffee +47 -0
  15. data/lib/assets/javascripts/code_sync.coffee +3 -0
  16. data/lib/assets/javascripts/code_sync/backends/gist.coffee +78 -0
  17. data/lib/assets/javascripts/code_sync/client/index.coffee +104 -0
  18. data/lib/assets/javascripts/code_sync/client/util.coffee +61 -0
  19. data/lib/assets/javascripts/code_sync/codemirror.coffee +12 -0
  20. data/lib/assets/javascripts/code_sync/config.js.coffee.erb +38 -0
  21. data/lib/assets/javascripts/code_sync/console/index.coffee +54 -0
  22. data/lib/assets/javascripts/code_sync/console/templates/console.jst.skim +10 -0
  23. data/lib/assets/javascripts/code_sync/dependencies.coffee +6 -0
  24. data/lib/assets/javascripts/code_sync/editor/advanced.coffee +0 -0
  25. data/lib/assets/javascripts/code_sync/editor/datasources/document.coffee +212 -0
  26. data/lib/assets/javascripts/code_sync/editor/datasources/gist_loader.coffee +7 -0
  27. data/lib/assets/javascripts/code_sync/editor/datasources/modes.coffee +117 -0
  28. data/lib/assets/javascripts/code_sync/editor/datasources/project_assets.coffee +14 -0
  29. data/lib/assets/javascripts/code_sync/editor/index.coffee +415 -0
  30. data/lib/assets/javascripts/code_sync/editor/plugins/asset_selector.coffee +106 -0
  31. data/lib/assets/javascripts/code_sync/editor/plugins/color_picker.coffee +83 -0
  32. data/lib/assets/javascripts/code_sync/editor/plugins/document_manager.coffee +55 -0
  33. data/lib/assets/javascripts/code_sync/editor/plugins/document_tabs.coffee +178 -0
  34. data/lib/assets/javascripts/code_sync/editor/plugins/element_sync.coffee +111 -0
  35. data/lib/assets/javascripts/code_sync/editor/plugins/keymap_selector.coffee +44 -0
  36. data/lib/assets/javascripts/code_sync/editor/plugins/mode_selector.coffee +53 -0
  37. data/lib/assets/javascripts/code_sync/editor/plugins/name_input.coffee +44 -0
  38. data/lib/assets/javascripts/code_sync/editor/plugins/preferences.coffee +71 -0
  39. data/lib/assets/javascripts/code_sync/editor/templates/asset_editor.jst.skim +2 -0
  40. data/lib/assets/javascripts/code_sync/editor/templates/asset_selector.jst.skim +5 -0
  41. data/lib/assets/javascripts/code_sync/editor/templates/document_manager_tab.jst.skim +15 -0
  42. data/lib/assets/javascripts/code_sync/editor/templates/element_sync.jst.skim +19 -0
  43. data/lib/assets/javascripts/code_sync/editor/templates/preferences_panel.jst.skim +38 -0
  44. data/lib/assets/javascripts/code_sync/editor/views/asset_selector.coffee +106 -0
  45. data/lib/assets/javascripts/code_sync/editor/views/color_picker.coffee +76 -0
  46. data/lib/assets/javascripts/code_sync/editor/views/document_manager.coffee +176 -0
  47. data/lib/assets/javascripts/code_sync/editor/views/keymap_selector.coffee +37 -0
  48. data/lib/assets/javascripts/code_sync/editor/views/mode_selector.coffee +47 -0
  49. data/lib/assets/javascripts/code_sync/editor/views/name_input.coffee +44 -0
  50. data/lib/assets/javascripts/code_sync/editor/views/preferences.coffee +71 -0
  51. data/lib/assets/javascripts/code_sync/index.coffee +4 -0
  52. data/lib/assets/javascripts/code_sync/reloader.coffee +2 -0
  53. data/lib/assets/javascripts/code_sync_basic.coffee +1 -0
  54. data/lib/assets/javascripts/demos.coffee +48 -0
  55. data/lib/assets/javascripts/demos/default-content.coffee +72 -0
  56. data/lib/assets/javascripts/demos/layout_selector.coffee +19 -0
  57. data/lib/assets/javascripts/demos/tour.coffee +70 -0
  58. data/lib/assets/javascripts/demos/tour.jst.skim +29 -0
  59. data/lib/assets/javascripts/marketing.coffee +0 -0
  60. data/lib/assets/javascripts/vendor/.DS_Store +0 -0
  61. data/lib/assets/javascripts/vendor/backbone-events.js +160 -0
  62. data/lib/assets/javascripts/vendor/backbone-min.js +4 -0
  63. data/lib/assets/javascripts/vendor/codemirror-coffeescript.js +346 -0
  64. data/lib/assets/javascripts/vendor/codemirror-css.js +570 -0
  65. data/lib/assets/javascripts/vendor/codemirror-haml.js +153 -0
  66. data/lib/assets/javascripts/vendor/codemirror-htmlmixed.js +104 -0
  67. data/lib/assets/javascripts/vendor/codemirror-javascript.js +468 -0
  68. data/lib/assets/javascripts/vendor/codemirror-markdown.js +526 -0
  69. data/lib/assets/javascripts/vendor/codemirror-ruby.js +194 -0
  70. data/lib/assets/javascripts/vendor/codemirror-sass.js +330 -0
  71. data/lib/assets/javascripts/vendor/codemirror-skim.js +330 -0
  72. data/lib/assets/javascripts/vendor/codemirror-vim.js +3159 -0
  73. data/lib/assets/javascripts/vendor/codemirror-xml.js +328 -0
  74. data/lib/assets/javascripts/vendor/console.js +339 -0
  75. data/lib/assets/javascripts/vendor/gisted.js +27 -0
  76. data/lib/assets/javascripts/vendor/jquery-ui-resize-drag.min.js +6 -0
  77. data/lib/assets/javascripts/vendor/jquery.js +5 -0
  78. data/lib/assets/javascripts/vendor/keylauncher.js +4 -0
  79. data/lib/assets/javascripts/vendor/keymaster.min.js +4 -0
  80. data/lib/assets/javascripts/vendor/spectrum.js +1868 -0
  81. data/lib/assets/javascripts/vendor/underscore-min.js +1 -0
  82. data/lib/assets/javascripts/vendor/underscore.string.min.js +1 -0
  83. data/lib/assets/javascripts/vendor/vendored_codemirror.js +5558 -0
  84. data/lib/assets/javascripts/vendor/zepto.js +2 -0
  85. data/lib/assets/stylesheets/canvas.css.scss +101 -0
  86. data/lib/assets/stylesheets/code_sync.css.scss +4 -0
  87. data/lib/assets/stylesheets/code_sync/codemirror.css +7 -0
  88. data/lib/assets/stylesheets/code_sync/console.css +86 -0
  89. data/lib/assets/stylesheets/code_sync/editor/asset-name-input.css.scss +12 -0
  90. data/lib/assets/stylesheets/code_sync/editor/asset-selector.css.scss +58 -0
  91. data/lib/assets/stylesheets/code_sync/editor/codesync-color-picker.css.sass +5 -0
  92. data/lib/assets/stylesheets/code_sync/editor/document-tabs.css.scss +61 -0
  93. data/lib/assets/stylesheets/code_sync/editor/element-sync.css.scss +72 -0
  94. data/lib/assets/stylesheets/code_sync/editor/mode-selector.css.scss +0 -0
  95. data/lib/assets/stylesheets/code_sync/editor/preferences-panel.css.scss +26 -0
  96. data/lib/assets/stylesheets/code_sync/index.css.scss +141 -0
  97. data/lib/assets/stylesheets/demos.css.scss +96 -0
  98. data/lib/assets/stylesheets/marketing.css.sass +46 -0
  99. data/lib/assets/stylesheets/marketing/syntax.css.scss +1 -0
  100. data/lib/assets/stylesheets/vendor/animate.css +1 -0
  101. data/lib/assets/stylesheets/vendor/codemirror-ambiance.css +75 -0
  102. data/lib/assets/stylesheets/vendor/codemirror-lesserdark.css +44 -0
  103. data/lib/assets/stylesheets/vendor/codemirror-monokai.css +28 -0
  104. data/lib/assets/stylesheets/vendor/codemirror-xq-light.css +43 -0
  105. data/lib/assets/stylesheets/vendor/grid-layout.css +1406 -0
  106. data/lib/assets/stylesheets/vendor/spectrum.css +481 -0
  107. data/lib/assets/stylesheets/vendor/vendored_codemirror.css +246 -0
  108. data/lib/code_sync.rb +41 -0
  109. data/lib/code_sync/cli.rb +73 -0
  110. data/lib/code_sync/manager.rb +238 -0
  111. data/lib/code_sync/processors.rb +18 -0
  112. data/lib/code_sync/processors/basic.rb +9 -0
  113. data/lib/code_sync/processors/jst_processor.rb +17 -0
  114. data/lib/code_sync/pry_console.rb +132 -0
  115. data/lib/code_sync/rails.rb +7 -0
  116. data/lib/code_sync/rails/engine.rb +12 -0
  117. data/lib/code_sync/server.rb +225 -0
  118. data/lib/code_sync/sprockets_adapter.rb +145 -0
  119. data/lib/code_sync/temp_asset.rb +20 -0
  120. data/lib/code_sync/version.rb +3 -0
  121. data/lib/middleman_extension.rb +43 -0
  122. data/readme.md +26 -0
  123. data/site/.gitignore +14 -0
  124. data/site/Gemfile +13 -0
  125. data/site/Gemfile.lock +183 -0
  126. data/site/config.rb +26 -0
  127. data/site/source/canvas.html.slim +21 -0
  128. data/site/source/codepen-style-demo.html.slim +21 -0
  129. data/site/source/demo.html.slim +30 -0
  130. data/site/source/index.html.slim +128 -0
  131. data/site/source/layouts/layout.slim +18 -0
  132. data/site/source/samples/_client.html.md +13 -0
  133. data/site/source/samples/_editor.html.md +19 -0
  134. data/site/source/samples/_hooks.html.md +8 -0
  135. data/site/source/samples/_middleman.html.md +7 -0
  136. data/site/source/samples/_rails.html.md +8 -0
  137. data/site/source/samples/_standalone.html.md +36 -0
  138. data/spec/lib/code_sync/sprockets_adapter_spec.rb +44 -0
  139. data/spec/spec_helper.rb +21 -0
  140. data/spec/support/.DS_Store +0 -0
  141. data/spec/support/dummy_middleman/.gitignore +14 -0
  142. data/spec/support/dummy_middleman/Gemfile +5 -0
  143. data/spec/support/dummy_middleman/Gemfile.lock +100 -0
  144. data/spec/support/dummy_middleman/config.rb +77 -0
  145. data/spec/support/dummy_middleman/source/images/background.png +0 -0
  146. data/spec/support/dummy_middleman/source/images/middleman.png +0 -0
  147. data/spec/support/dummy_middleman/source/index.html.erb +10 -0
  148. data/spec/support/dummy_middleman/source/javascripts/all.js +1 -0
  149. data/spec/support/dummy_middleman/source/layouts/layout.erb +19 -0
  150. data/spec/support/dummy_middleman/source/stylesheets/all.css +55 -0
  151. data/spec/support/dummy_middleman/source/stylesheets/normalize.css +375 -0
  152. data/spec/support/dummy_rails/.gitignore +15 -0
  153. data/spec/support/dummy_rails/Gemfile +38 -0
  154. data/spec/support/dummy_rails/Gemfile.lock +112 -0
  155. data/spec/support/dummy_rails/README.rdoc +261 -0
  156. data/spec/support/dummy_rails/Rakefile +7 -0
  157. data/spec/support/dummy_rails/app/assets/images/rails.png +0 -0
  158. data/spec/support/dummy_rails/app/assets/javascripts/application.js +15 -0
  159. data/spec/support/dummy_rails/app/assets/stylesheets/application.css +13 -0
  160. data/spec/support/dummy_rails/app/controllers/application_controller.rb +3 -0
  161. data/spec/support/dummy_rails/app/helpers/application_helper.rb +2 -0
  162. data/spec/support/dummy_rails/app/mailers/.gitkeep +0 -0
  163. data/spec/support/dummy_rails/app/models/.gitkeep +0 -0
  164. data/spec/support/dummy_rails/app/views/layouts/application.html.erb +14 -0
  165. data/spec/support/dummy_rails/config.ru +4 -0
  166. data/spec/support/dummy_rails/config/application.rb +62 -0
  167. data/spec/support/dummy_rails/config/boot.rb +6 -0
  168. data/spec/support/dummy_rails/config/database.yml +25 -0
  169. data/spec/support/dummy_rails/config/environment.rb +5 -0
  170. data/spec/support/dummy_rails/config/environments/development.rb +37 -0
  171. data/spec/support/dummy_rails/config/environments/production.rb +67 -0
  172. data/spec/support/dummy_rails/config/environments/test.rb +37 -0
  173. data/spec/support/dummy_rails/config/initializers/backtrace_silencers.rb +7 -0
  174. data/spec/support/dummy_rails/config/initializers/inflections.rb +15 -0
  175. data/spec/support/dummy_rails/config/initializers/mime_types.rb +5 -0
  176. data/spec/support/dummy_rails/config/initializers/secret_token.rb +7 -0
  177. data/spec/support/dummy_rails/config/initializers/session_store.rb +8 -0
  178. data/spec/support/dummy_rails/config/initializers/wrap_parameters.rb +14 -0
  179. data/spec/support/dummy_rails/config/locales/en.yml +5 -0
  180. data/spec/support/dummy_rails/config/routes.rb +58 -0
  181. data/spec/support/dummy_rails/db/seeds.rb +7 -0
  182. data/spec/support/dummy_rails/doc/README_FOR_APP +2 -0
  183. data/spec/support/dummy_rails/lib/assets/.gitkeep +0 -0
  184. data/spec/support/dummy_rails/lib/tasks/.gitkeep +0 -0
  185. data/spec/support/dummy_rails/log/.gitkeep +0 -0
  186. data/spec/support/dummy_rails/public/404.html +26 -0
  187. data/spec/support/dummy_rails/public/422.html +26 -0
  188. data/spec/support/dummy_rails/public/500.html +25 -0
  189. data/spec/support/dummy_rails/public/favicon.ico +0 -0
  190. data/spec/support/dummy_rails/public/index.html +241 -0
  191. data/spec/support/dummy_rails/public/robots.txt +5 -0
  192. data/spec/support/dummy_rails/script/rails +6 -0
  193. data/spec/support/dummy_rails/test/fixtures/.gitkeep +0 -0
  194. data/spec/support/dummy_rails/test/functional/.gitkeep +0 -0
  195. data/spec/support/dummy_rails/test/integration/.gitkeep +0 -0
  196. data/spec/support/dummy_rails/test/performance/browsing_test.rb +12 -0
  197. data/spec/support/dummy_rails/test/test_helper.rb +13 -0
  198. data/spec/support/dummy_rails/test/unit/.gitkeep +0 -0
  199. data/spec/support/dummy_rails/vendor/assets/javascripts/.gitkeep +0 -0
  200. data/spec/support/dummy_rails/vendor/assets/stylesheets/.gitkeep +0 -0
  201. data/spec/support/dummy_rails/vendor/plugins/.gitkeep +0 -0
  202. data/spec/support/dummy_static/.DS_Store +0 -0
  203. data/spec/support/dummy_static/app/.DS_Store +0 -0
  204. data/spec/support/dummy_static/app/assets/.DS_Store +0 -0
  205. data/spec/support/dummy_static/app/assets/javascripts/manifest.coffee +4 -0
  206. data/spec/support/dummy_static/app/assets/javascripts/spec_application_javascript.coffee +4 -0
  207. data/spec/support/dummy_static/app/assets/stylesheets/spec_application_stylesheet.css.scss +5 -0
  208. data/spec/support/dummy_static/lib/assets/javascripts/spec_library_javascript.coffee +3 -0
  209. data/spec/support/dummy_static/lib/assets/stylesheets/spec_library_stylesheet.css.scss +5 -0
  210. data/spec/support/dummy_static/vendor/assets/javascripts/spec_vendor_javascript.js +5 -0
  211. data/spec/support/dummy_static/vendor/assets/stylesheets/spec_vendor_stylesheets.css +3 -0
  212. data/vendor/assets/stylesheets/code_sync.css +1 -0
  213. 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,4 @@
1
+ #= require ../vendor/keylauncher
2
+ #= require ./config
3
+ #= require ./client
4
+ #= require ./editor
@@ -0,0 +1,2 @@
1
+ #= require ./config
2
+ #= require ./client
@@ -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
+ """