Skip to content

Instantly share code, notes, and snippets.

@wastrachan
Last active June 21, 2017 10:35
Show Gist options
  • Save wastrachan/cd9bcac03e141d271bd7 to your computer and use it in GitHub Desktop.
Save wastrachan/cd9bcac03e141d271bd7 to your computer and use it in GitHub Desktop.
JS Routing System (Simplified)
###
JS Routing and Init System
###
if typeof window.MANIFEST is "undefined"
window.MANIFEST =
VIEWS: {}
UTILS: {}
###
Clickable Elements
###
MANIFEST.UTILS.CLICKABLE = () ->
el = $(this)
sUrl = el.data('link-url')
if sUrl?
window.location.href = sUrl
return true
###
Django CSRF-safe Ajax Requests
###
MANIFEST.UTILS.CSRF = () ->
csrfToken = Cookies.get('csrftoken')
csrfSafeMethod = (method) ->
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method))
$.ajaxSetup({
beforeSend: (xhr, settings) ->
if (!csrfSafeMethod(settings.type) && !this.crossDomain)
xhr.setRequestHeader("X-CSRFToken", csrfToken)
})
return true
###
Routes for views and common JS
###
MANIFEST.ROUTES =
# Common elements, initialized on all routes
'init': () ->
$('.clickable').on('click', MANIFEST.UTILS.CLICKABLE) # Bind clickable elements
MANIFEST.UTILS.CSRF() # Set up CSRF for Requests
return true
'page_map': () ->
MANIFEST.VIEWS.PageMap()
return true
###
Initializer for ROUTES
###
MANIFEST.INIT =
exec: (view = "init" ) ->
r = MANIFEST.ROUTES
if typeof r[view] is "function"
r[view]()
return true
init: () ->
view = $('body').data('view')
MANIFEST.INIT.exec('init')
if view?
MANIFEST.VIEW = view
MANIFEST.INIT.exec(view)
return true
###
Enter the App
###
$(document).ready(MANIFEST.INIT.init)
MANIFEST.VIEWS.PageMap = (oArgs) ->
oArgs = oArgs || {}
# Initialization
@setup()
MANIFEST.VIEWS.PageMap::setup = () ->
return true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment