-
Notifications
You must be signed in to change notification settings - Fork 0
/
application.coffee
169 lines (137 loc) · 4.71 KB
/
application.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
Observable = require 'o_0'
_ = require 'underscore'
axios = require 'axios'
# curated
curated =
featured: require "./curated/featured"
categories: require "./curated/categories"
collections: require "./curated/collections"
partners: require "./curated/partners"
projects: require "./curated/projects"
allProjectGroups = curated.categories.concat curated.collections.concat curated.partners
tracking = require "./tracking"
user = require "./user"
Overlay = require "./presenters/overlay"
Search = require "./presenters/search"
self =
# overlays
overlayVisible: Observable false
overlayTemplate: Observable "" # video, project
overlayProject: Observable {}
overlayProjectAvatarUrl: Observable ""
overlayReadme: Observable ""
overlayReadmeLoaded: Observable false
overlayReadmeError: Observable false
currentUserIsInProject: Observable false
# users
userRecentProjects: Observable []
# pop overs
signInPopVisibleOnHeader: Observable false
signInPopVisibleOnRecentProjects: Observable false
userOptionsPopVisible: Observable false
# search
searchQuery: Observable ""
searchResultsUsers: Observable []
searchResultsUsersLoaded: Observable false
searchResultsProjects: Observable []
searchResultsProjectsLoaded: Observable false
normalizedBaseUrl: ->
urlLength = baseUrl.length
lastCharacter = baseUrl.charAt(urlLength-1)
if baseUrl is ""
return "/"
else if lastCharacter is not "/"
return baseUrl + "/"
else
return baseUrl
closeAllPopOvers: ->
self.signInPopVisibleOnHeader false
self.signInPopVisibleOnRecentProjects false
self.userOptionsPopVisible false
showProjectOverlay: (project) ->
event.preventDefault()
self.overlay.showProjectOverlay project
featuredProjects: ->
_.shuffle curated.featured
categories: ->
homepageCategories = _.filter curated.categories, (category) ->
!category.categoryPageOnly
_.shuffle homepageCategories
allProjects: ->
# returns all projects, shuffled
allProjects = []
for category, projects of curated.projects
allProjects = allProjects.concat projects
_.shuffle allProjects
projectsInCategory: (category) ->
# returns all projects in a category domain, shuffled
projectsInCategory = require("./curated/projects")[category]
_.shuffle projectsInCategory
selectedCategories: ->
# returns 3 shuffled categories to display in full on the homepage
shuffledCategories = self.categories()
shuffledCategories.slice(0, 3)
projectsInSelectedCategory: (category) ->
# returns 3 projects for index page category box, shuffled
shuffledProjects = self.projectsInCategory category
shuffledProjects.slice(0, 3)
isCategoryUrl: (url) ->
if _.contains self.categoryUrls(), url.toLowerCase()
true
getCategoryFromUrl: (url) ->
# in this function, categories include partner and collection pages
category = _.findWhere allProjectGroups,
url: url
categoryUrls: ->
# in this function, categories include partner and collection pages
categories = allProjectGroups
categoryUrls = _.map categories, (category) ->
category.url
api: ->
persistentToken = self.user.cachedUser()?.persistentToken
if persistentToken
axios.create
baseURL: 'https://api.gomix.com/',
headers:
Authorization: persistentToken
else
axios.create
baseURL: 'https://api.gomix.com/'
storeLocal: (key, value) ->
try
window.localStorage[key] = JSON.stringify value
catch
console.warn "Could not save to localStorage. (localStorage is disabled in private Safari windows)"
login: (provider, code) ->
console.log provider, code
authURL = "/authenticate/"
if provider == "facebook"
callbackURL = "https://glitch.com/login/facebook"
authURL = "/auth/facebook/callback?callbackURL=#{callbackURL}&code="
self.api().post "#{authURL}#{code}"
.then (response) ->
console.log "LOGGED IN!", response.data
cachedUser = self.user.cachedUser() ? {}
Object.assign cachedUser, response.data
self.storeLocal 'cachedUser', cachedUser
removeFirstCharacter: (string) ->
# ex: ~cool to cool
firstCharacterPosition = 1
end = string.length
string.substring(firstCharacterPosition, end)
isProjectUrl: (url) ->
if url.charAt(0) is "~"
true
isUserProfileUrl: (url) ->
if url.charAt(0) is "@"
true
isSearchUrl: (url, queryString) ->
queryStringKeys = _.keys queryString # ['q', 'blah']
if (url is 'search') and (_.contains queryStringKeys, 'q')
true
self.overlay = Overlay self
self.tracking = tracking self
self.user = user self
self.search = Search self
global.communityApp = self
module.exports = self