This repository has been archived by the owner on Nov 19, 2019. It is now read-only.
/
editor.coffee
79 lines (64 loc) · 2.61 KB
/
editor.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#= require ./../../vendor/angular.js
#= require ./../../vendor/bootstrap/js/bootstrap-button.js
#= require ./../services/importer
#= require ./../services/session
#= require ./../services/notifier
#= require ./../directives/userpanel
#= require ./../directives/toolbar
#= require ./../directives/overlay
#= require ./../directives/layout
module = angular.module "plunker.editorPage", [
"plunker.userpanel"
"plunker.toolbar"
"plunker.overlay"
"plunker.layout"
"plunker.importer"
"plunker.session"
"plunker.notifier"
]
module.config ["$locationProvider", ($locationProvider) ->
$locationProvider.html5Mode(true)
]
module.config ["$routeProvider", ($routeProvider) ->
$routeProvider.when "/:source",
template: "<div></div>"
reloadOnSearch: false
resolve:
dirtyCheck: ["$q", "notifier", "session", ($q, notifier, session) ->
dfd = $q.defer()
if session.isDirty() and not session.skipDirtyCheck then notifier.confirm "You have unsaved changes. This action will reset your plunk. Are you sure you would like to proceed?",
confirm: -> dfd.resolve()
deny: -> dfd.reject()
else dfd.resolve()
delete session.skipDirtyCheck
dfd.promise
]
source: ["$route", "importer", "session", "notifier", ($route, importer, session, notifier) ->
if source = $route.current.params.source
unless source and source is session.getEditPath()
importer.import(source).then (json) ->
json.source = source
json
, (error) ->
notifier.error "Import error", error
else {}
]
controller: [ "$rootScope", "$scope", "$location", "$browser", "$timeout", "$route", "session", "source", "notifier", ($rootScope, $scope, $location, $browser, $timeout, $route, session, source, notifier) ->
session.reset(source) if source?
$scope.$watch ( -> session.getEditPath()), (path) ->
$location.path("/#{path}").replace()
lastValidUrl = $location.absUrl()
lastValidRoute = $route.current
$rootScope.$on "$routeChangeError", (curr, prev) ->
$route.current = lastValidRoute
$location.$$parse lastValidUrl
$browser.url lastValidUrl, true
window.history.back()
$rootScope.$on "$routeChangeSuccess", (curr, prev) ->
lastValidUrl = $location.absUrl()
lastValidRoute = $route.current
]
]
module.run ["$rootScope", ($rootScope) ->
$rootScope[k] = v for k, v of window._plunker
]