coolstrap-generator 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. data/.DS_Store +0 -0
  2. data/.gitignore +4 -0
  3. data/.rvmrc +1 -0
  4. data/Gemfile +4 -0
  5. data/Rakefile +6 -0
  6. data/bin/coolstrap +5 -0
  7. data/coolstrap-generator.gemspec +42 -0
  8. data/lib/.DS_Store +0 -0
  9. data/lib/coolstrap-generator.rb +39 -0
  10. data/lib/coolstrap-generator/.DS_Store +0 -0
  11. data/lib/coolstrap-generator/builder/middleman.rb +0 -0
  12. data/lib/coolstrap-generator/cli.rb +71 -0
  13. data/lib/coolstrap-generator/generate/project.rb +96 -0
  14. data/lib/coolstrap-generator/generate/view.rb +54 -0
  15. data/lib/coolstrap-generator/logger.rb +13 -0
  16. data/lib/coolstrap-generator/middleman/helpers.rb +176 -0
  17. data/lib/coolstrap-generator/templates/.DS_Store +0 -0
  18. data/lib/coolstrap-generator/templates/app/.DS_Store +0 -0
  19. data/lib/coolstrap-generator/templates/app/assets/.DS_Store +0 -0
  20. data/lib/coolstrap-generator/templates/app/assets/fonts/fontawesome-webfont.eot +0 -0
  21. data/lib/coolstrap-generator/templates/app/assets/fonts/fontawesome-webfont.svg +255 -0
  22. data/lib/coolstrap-generator/templates/app/assets/fonts/fontawesome-webfont.ttf +0 -0
  23. data/lib/coolstrap-generator/templates/app/assets/fonts/fontawesome-webfont.woff +0 -0
  24. data/lib/coolstrap-generator/templates/app/assets/images/.DS_Store +0 -0
  25. data/lib/coolstrap-generator/templates/app/assets/images/coolstrap/arrow-list.png +0 -0
  26. data/lib/coolstrap-generator/templates/app/assets/images/coolstrap/arrow.png +0 -0
  27. data/lib/coolstrap-generator/templates/app/assets/images/coolstrap/menu.png +0 -0
  28. data/lib/coolstrap-generator/templates/app/assets/images/coolstrap/startup/smatphone.png +0 -0
  29. data/lib/coolstrap-generator/templates/app/assets/images/coolstrap/startup/smatphone@2x.png +0 -0
  30. data/lib/coolstrap-generator/templates/app/assets/images/coolstrap/startup/tablet-landscape.png +0 -0
  31. data/lib/coolstrap-generator/templates/app/assets/images/coolstrap/startup/tablet-landscape@2x.png +0 -0
  32. data/lib/coolstrap-generator/templates/app/assets/images/coolstrap/startup/tablet-portrait.png +0 -0
  33. data/lib/coolstrap-generator/templates/app/assets/images/coolstrap/startup/tablet-portrait@2x.png +0 -0
  34. data/lib/coolstrap-generator/templates/app/assets/images/startup/smatphone.png +0 -0
  35. data/lib/coolstrap-generator/templates/app/assets/images/startup/smatphone@2x.png +0 -0
  36. data/lib/coolstrap-generator/templates/app/assets/images/startup/tablet-landscape.png +0 -0
  37. data/lib/coolstrap-generator/templates/app/assets/images/startup/tablet-landscape@2x.png +0 -0
  38. data/lib/coolstrap-generator/templates/app/assets/images/startup/tablet-portrait.png +0 -0
  39. data/lib/coolstrap-generator/templates/app/assets/images/startup/tablet-portrait@2x.png +0 -0
  40. data/lib/coolstrap-generator/templates/app/assets/javascripts/.DS_Store +0 -0
  41. data/lib/coolstrap-generator/templates/app/assets/javascripts/app.js +18 -0
  42. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/_Coolstrap.App.coffee +39 -0
  43. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/_Coolstrap.Console.coffee +49 -0
  44. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/_Coolstrap.Constants.coffee +89 -0
  45. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/_Coolstrap.js +13 -0
  46. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/build/_wrap-start.js +18 -0
  47. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/coolstrap-0.1.js +20 -0
  48. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/coolstrap-0.1.packed.js +23 -0
  49. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/fallback/_Coolstrap.Fallback.Android.coffee +53 -0
  50. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/fallback/_Coolstrap.Fallback.iOS.coffee +29 -0
  51. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/framework/_Coolstrap.Framework.Articles.coffee +34 -0
  52. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/framework/_Coolstrap.Framework.Dialogs.coffee +33 -0
  53. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/framework/_Coolstrap.Framework.Navigation.coffee +118 -0
  54. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/framework/_Coolstrap.Framework.Sections.coffee +60 -0
  55. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/lib/iscroll.js +1076 -0
  56. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/lib/modernizr-2.5.3.js +1265 -0
  57. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/lib/zepto-1.0rc1.js +1357 -0
  58. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/navigate/_Coolstrap.Navigate.History.coffee +164 -0
  59. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/navigate/_Coolstrap.Navigate.coffee +105 -0
  60. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/plugins/_Coolstrap.Plugins.coffee +157 -0
  61. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/util/_Coolstrap.Util.Core.coffee +54 -0
  62. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/util/_Coolstrap.Util.Platform.coffee +89 -0
  63. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/util/_Coolstrap.Util.UI.coffee +96 -0
  64. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/util/_Coolstrap.Util.coffee +41 -0
  65. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/view/_Coolstrap.View.Article.coffee +43 -0
  66. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/view/_Coolstrap.View.Aside.coffee +65 -0
  67. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/view/_Coolstrap.View.Dialog.coffee +129 -0
  68. data/lib/coolstrap-generator/templates/app/assets/javascripts/coolstrap/view/_Coolstrap.View.Scroll.coffee +191 -0
  69. data/lib/coolstrap-generator/templates/app/assets/stylesheets/.DS_Store +0 -0
  70. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/_structure.scss +8 -0
  71. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/coolstrap.css.scss +2 -0
  72. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/_components.scss +5 -0
  73. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/_layout.scss +4 -0
  74. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/_utilities.scss +6 -0
  75. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/components/_dialog.scss +122 -0
  76. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/components/_formelements.scss +89 -0
  77. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/components/_listview.scss +76 -0
  78. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/components/_navigations.scss +192 -0
  79. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/components/_tools.scss +169 -0
  80. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/layout/_layers.scss +57 -0
  81. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/layout/_layout.scss +62 -0
  82. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/layout/_positions.scss +38 -0
  83. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/layout/_transitions.scss +35 -0
  84. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/utilities/_animate.scss +63 -0
  85. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/utilities/_helpers.scss +82 -0
  86. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/utilities/_icons.scss +336 -0
  87. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/utilities/_mixins.scss +45 -0
  88. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/utilities/_reset.scss +367 -0
  89. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/structure/utilities/_variables.scss +176 -0
  90. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/themes/_default.scss +255 -0
  91. data/lib/coolstrap-generator/templates/app/assets/stylesheets/coolstrap/themes/coolstrap.css.scss +164 -0
  92. data/lib/coolstrap-generator/templates/app/assets/stylesheets/customtheme.css.scss +19 -0
  93. data/lib/coolstrap-generator/templates/app/components/_formelements.html.haml +130 -0
  94. data/lib/coolstrap-generator/templates/app/components/_tabbar.html.haml +343 -0
  95. data/lib/coolstrap-generator/templates/app/components/_toolbar.html.haml +463 -0
  96. data/lib/coolstrap-generator/templates/app/components/formelements.html.haml +196 -0
  97. data/lib/coolstrap-generator/templates/app/components/listview/_complexlistavatar.html.haml.erb +77 -0
  98. data/lib/coolstrap-generator/templates/app/components/listview/_simplelist.html.haml.erb +31 -0
  99. data/lib/coolstrap-generator/templates/app/components/tabbar.html.haml.erb +16 -0
  100. data/lib/coolstrap-generator/templates/app/components/toolbar.html.haml.erb +32 -0
  101. data/lib/coolstrap-generator/templates/app/index.html.haml.erb +21 -0
  102. data/lib/coolstrap-generator/templates/app/layout.haml.erb +79 -0
  103. data/lib/coolstrap-generator/templates/app/views/.DS_Store +0 -0
  104. data/lib/coolstrap-generator/templates/app/views/_home.haml.erb +31 -0
  105. data/lib/coolstrap-generator/templates/app/views/shared/_aside_onbottom.haml +2 -0
  106. data/lib/coolstrap-generator/templates/app/views/shared/_aside_onleft.haml +56 -0
  107. data/lib/coolstrap-generator/templates/app/views/shared/_aside_onright.haml +66 -0
  108. data/lib/coolstrap-generator/templates/app/views/shared/_aside_ontop.haml +19 -0
  109. data/lib/coolstrap-generator/templates/defaults/Gemfile.erb +3 -0
  110. data/lib/coolstrap-generator/templates/defaults/LICENSE.erb +1 -0
  111. data/lib/coolstrap-generator/templates/defaults/Readme.mkd.erb +1 -0
  112. data/lib/coolstrap-generator/templates/defaults/config.erb +42 -0
  113. data/lib/coolstrap-generator/templates/defaults/gitignore.erb +2 -0
  114. data/lib/coolstrap-generator/templates/rakefile +102 -0
  115. data/lib/coolstrap-generator/templates/specs/app_spec.coffee +3 -0
  116. data/lib/coolstrap-generator/utils.rb +82 -0
  117. data/lib/coolstrap-generator/version.rb +5 -0
  118. data/readme.md +107 -0
  119. data/spec/cli/command_spec.rb +88 -0
  120. data/spec/coolstrap-generator/generate/project_spec.rb +126 -0
  121. data/spec/coolstrap-generator/generate/view_spec.rb +26 -0
  122. data/spec/coolstrap-generator/logger_spec.rb +25 -0
  123. data/spec/coolstrap-generator/middleman/helpers_spec.rb +16 -0
  124. data/spec/coolstrap-generator/utils_spec.rb +120 -0
  125. data/spec/spec_helper.rb +39 -0
  126. metadata +321 -0
@@ -0,0 +1,89 @@
1
+ ###
2
+ * Coolstrap Platform functions
3
+ *
4
+ * @namespace COOLSTRAP.Util
5
+ * @class Platform
6
+ *
7
+ * @author Abraham Barrera <abarrerac@gmail.com> || @abraham_barrera
8
+ * Inspired by LungoJS
9
+ ###
10
+
11
+ COOLSTRAP.Util.Platform = ((cool) ->
12
+ SUPPORTED_OS =
13
+ android: /(Android)\s+([\d.]+)/
14
+ ipad: /(iPad).*OS\s([\d_]+)/
15
+ iphone: /(iPhone\sOS)\s([\d_]+)/
16
+ blackberry: /(BlackBerry).*Version\/([\d.]+)/
17
+ webos: /(webOS|hpwOS)[\s\/]([\d.]+)/
18
+ windows: /(Windows Phone OS)[\s\/]([\d.]+)/
19
+
20
+ _current_environment = null
21
+ _detectBrowser = (user_agent) ->
22
+ is_webkit = user_agent.match(/WebKit\/([\d.]+)/)
23
+ (if (is_webkit) then is_webkit[0] else user_agent)
24
+
25
+ _detectOS = (user_agent) ->
26
+ detected_os = undefined
27
+ for os of SUPPORTED_OS
28
+ supported = user_agent.match(SUPPORTED_OS[os])
29
+ if supported
30
+ detected_os =
31
+ name: (if (os is "iphone" or os is "ipad") then "ios" else os)
32
+ version: supported[2].replace("_", ".")
33
+
34
+ break
35
+ detected_os
36
+
37
+ _detectEnvironment = ->
38
+ ua = navigator.userAgent
39
+ environment = {}
40
+ environment.browser = _detectBrowser(ua)
41
+ environment.os = _detectOS(ua)
42
+ environment.isMobile = (if (environment.os) then true else false)
43
+ environment.screen =
44
+ width: window.innerWidth
45
+ height: window.innerHeight
46
+
47
+ environment
48
+ ###
49
+ * Determine if the current environment is a mobile environment
50
+ *
51
+ * @method isMobile
52
+ *
53
+ * @return {boolean} true if is mobile environment, false if not.
54
+ ###
55
+ isMobile = ->
56
+ _current_environment = _current_environment or _detectEnvironment()
57
+ _current_environment.isMobile
58
+ ###
59
+ * Get from current environment
60
+ *
61
+ * Inspired by LungoJS
62
+ *
63
+ * @method environment
64
+ ###
65
+ environment = (reload_environment) ->
66
+ _current_environment = (if reload_environment then _detectEnvironment() else _current_environment or _detectEnvironment())
67
+ _current_environment
68
+
69
+ ###
70
+ * Reload current environment
71
+ *
72
+ * @method reloadEnvironment
73
+ ###
74
+ reloadEnvironment = ->
75
+ environment true
76
+
77
+ ###
78
+ * Detect if browser is online
79
+ *
80
+ * @method isOnline
81
+ ###
82
+ isOnline = ->
83
+ navigator.onLine
84
+
85
+ isMobile: isMobile
86
+ environment: environment
87
+ isOnline: isOnline
88
+ reloadEnvironment: reloadEnvironment
89
+ )(COOLSTRAP)
@@ -0,0 +1,96 @@
1
+ ###
2
+ * Coolstrap UI Utils functions
3
+ *
4
+ * @namespace COOLSTRAP.Util
5
+ * @class UI
6
+ *
7
+ * @author Abraham Barrera <abarrerac@gmail.com> || @abraham_barrera
8
+ *
9
+ ###
10
+
11
+ COOLSTRAP.Util.UI = ((cool) ->
12
+ VIEWPORT_META = document.querySelector and document.querySelector("meta[name=\"viewport\"]")
13
+
14
+ ###
15
+ * Normalized hide address bar for iOS & Android
16
+ * (c) Scott Jehl, scottjehl.com
17
+ * MIT License
18
+ *
19
+ * If we split this up into two functions we can reuse
20
+ * this function if we aren't doing full page reloads.
21
+ * If we cache this we don't need to re-calibrate everytime we call
22
+ * the hide url bar
23
+ *
24
+ * So we don't redefine this function everytime we call hideUrlBar
25
+ * Inspired by MBP Helper
26
+ ###
27
+ hideNavigationBar = ->
28
+ _window = window
29
+ _document = _window.document
30
+ if not location.hash or not _window.addEventListener
31
+ _window.scrollTo 0, 1
32
+ scrollTop = 1
33
+ # reset to 0 on bodyready, if needed
34
+ bodycheck = setInterval(->
35
+ if _document.body
36
+ clearInterval bodycheck
37
+ scrollTop = (if "scrollTop" of _document.body then _document.body.scrollTop else 1)
38
+ _window.scrollTo 0, (if scrollTop is 1 then 0 else 1)
39
+ , 15)
40
+ _window.addEventListener "load", (->
41
+ setTimeout (->
42
+ _window.scrollTo 0, (if scrollTop is 1 then 0 else 1)
43
+ ), 0
44
+ ), false
45
+
46
+
47
+ ###
48
+ * Autogrow
49
+ * http://googlecode.blogspot.com/2009/07/gmail-for-mobile-html5-series.html
50
+ *
51
+ ###
52
+ autogrow = (element, lh) ->
53
+ handler = (e) ->
54
+ newHeight = @scrollHeight
55
+ currentHeight = @clientHeight
56
+ @style.height = newHeight + 3 * textLineHeight + "px" if newHeight > currentHeight
57
+ setLineHeight = (if (lh) then lh else 12)
58
+ textLineHeight = (if element.currentStyle then element.currentStyle.lineHeight else getComputedStyle(element, null).lineHeight)
59
+ textLineHeight = (if (textLineHeight.indexOf("px") is -1) then setLineHeight else parseInt(textLineHeight, 10))
60
+ element.style.overflow = "hidden"
61
+ (if element.addEventListener then element.addEventListener("keyup", handler, false) else element.attachEvent("onkeyup", handler))
62
+
63
+
64
+ ###
65
+ * Enable active
66
+ *
67
+ * Enable CSS active pseudo styles in Mobile Safari
68
+ * http://miniapps.co.uk/blog/post/enable-css-active-pseudo-styles-in-mobile-safari/
69
+ ###
70
+ enableActive = ->
71
+ document.addEventListener "touchstart", (->
72
+ ), false
73
+
74
+ ###
75
+ * Prevent iOS from zooming onfocus
76
+ *
77
+ * https://github.com/h5bp/mobile-boilerplate/pull/108
78
+ ###
79
+ preventZoom = ->
80
+ formFields = document.querySelectorAll("input, select, textarea")
81
+ contentString = "width=device-width,initial-scale=1,maximum-scale="
82
+ i = 0
83
+ i = 0
84
+ while i < formFields.length
85
+ formFields[i].onfocus = ->
86
+ VIEWPORT_META.content = contentString + "1"
87
+
88
+ formFields[i].onblur = ->
89
+ VIEWPORT_META.content = contentString + "10"
90
+ i++
91
+
92
+ hideNavigationBar: hideNavigationBar
93
+ autogrow: autogrow
94
+ enableActive: enableActive
95
+ preventZoom: preventZoom
96
+ )(COOLSTRAP)
@@ -0,0 +1,41 @@
1
+ ###
2
+ * Coolstrapp Utils functions
3
+ *
4
+ * @namespace COOLSTRAP
5
+ * @class Util
6
+ *
7
+ * @author Abraham Barrera <abarrerac@gmail.com> || @abraham_barrera
8
+ ###
9
+
10
+ COOLSTRAP.Util = ((cool) ->
11
+ ###
12
+ * Returns a correct URL using hashtag character
13
+ *
14
+ * @method parseUrl
15
+ *
16
+ * @param {string} Url
17
+ * @return {string} Url parsed
18
+ ###
19
+ parseUrl = (href) ->
20
+ href_hashtag = href.lastIndexOf("#")
21
+ if href_hashtag > 0
22
+ href = href.substring(href_hashtag)
23
+ else href = "#" + href if href_hashtag is -1
24
+ href
25
+
26
+ ###
27
+ * Returns a URL without hashtag character
28
+ *
29
+ * @method cleanUrl
30
+ *
31
+ * @param {string} Url
32
+ * @return {string} Url parsed
33
+ ###
34
+ cleanUrl = (href) ->
35
+ href_hashtag = href.lastIndexOf("#")
36
+ href = href.substring(href_hashtag + 1) if href_hashtag >= 0
37
+ href
38
+
39
+ parseUrl: parseUrl
40
+ cleanUrl: cleanUrl
41
+ )(COOLSTRAP)
@@ -0,0 +1,43 @@
1
+ ###
2
+ * Initialize the <articles> layout of a certain <section>
3
+ * Inspired by LungoJS
4
+ *
5
+ * @namespace COOLSTRAP.View
6
+ * @class Article
7
+ *
8
+ * @author Abraham Barrera <abarrerac@gmail.com> || @abraham_barrera
9
+ ###
10
+
11
+
12
+ COOLSTRAP.View.Article = ((cool) ->
13
+ ELEMENT = cool.Constants.ELEMENT
14
+ CLASS = cool.Constants.CLASS
15
+ ATTRIBUTE = cool.Constants.ATTRIBUTE
16
+ TRIGGER = cool.Constants.TRIGGER
17
+ SELECTORS = NAVIGATION_ITEM: "a[href][data-target=\"article\"]"
18
+ _showContainer = (section_id, article_id) ->
19
+ section_articles = section_id + " " + ELEMENT.ARTICLE + "." + CLASS.CURRENT
20
+ current_active_article_id = "#" + cool.dom(section_articles).attr(ATTRIBUTE.ID)
21
+ cool.dom(section_articles).removeClass(CLASS.CURRENT).trigger TRIGGER.UNLOAD
22
+ _fallbackAndroidInputs current_active_article_id, false
23
+ cool.dom(article_id).addClass CLASS.CURRENT
24
+ _fallbackAndroidInputs article_id, true
25
+
26
+ _fallbackAndroidInputs = (article_id, enable) ->
27
+ cool.Fallback.Android.inputs article_id, enable if cool.Fallback.Android
28
+
29
+ _setTitle = (id, item) ->
30
+ title = item.attr(ATTRIBUTE.TITLE)
31
+ if title
32
+ section_title = id + " header h1, " + id + " footer h1"
33
+ cool.dom(section_title).text title
34
+ ###
35
+ * Show section
36
+ *
37
+ * @method show
38
+ ###
39
+ show = (section_id, article_id) ->
40
+ _showContainer section_id, article_id
41
+
42
+ show: show
43
+ )(COOLSTRAP)
@@ -0,0 +1,65 @@
1
+ ###
2
+ * Initialize the <Aisde> layout
3
+ *
4
+ * @namespace COOLSTRAP.View
5
+ * @class Aside
6
+ *
7
+ * @author Abraham Barrera <abarrerac@gmail.com> || @abraham_barrera
8
+ ###
9
+
10
+ COOLSTRAP.View.Aside = ((cool) ->
11
+ ELEMENT = cool.Constants.ELEMENT
12
+ CLASS = cool.Constants.CLASS
13
+ ATTRIBUTE = cool.Constants.ATTRIBUTE
14
+ TRANSITION = cool.Constants.TRANSITION
15
+ ###
16
+ * Display an aside element
17
+ *
18
+ * @method show
19
+ *
20
+ * @param {string} Aside id.
21
+ ###
22
+ show = (aside_id) ->
23
+ aside = cool.dom(ELEMENT.ASIDE + aside_id)
24
+ body_class = CLASS.SHOW + CLASS.ASIDE + _classFromAside(aside)
25
+ _initFirstSection aside
26
+ cool.dom(ELEMENT.BODY).addClass(body_class).addClass CLASS.ASIDE
27
+ aside.addClass CLASS.CURRENT
28
+
29
+ _initFirstSection = (aside) ->
30
+ aside_id = aside.attr(ATTRIBUTE.ID)
31
+ sections = cool.dom("#" + aside_id + " " + ELEMENT.SECTION + "." + CLASS.CURRENT)
32
+ section_to_show = sections.first()
33
+ if not section_to_show or section_to_show.length is 0
34
+ sections = cool.dom("#" + aside_id + " " + ELEMENT.SECTION)
35
+ section_to_show = sections.first()
36
+ section_id = "#" + section_to_show.attr(ATTRIBUTE.ID)
37
+ section_to_show.addClass CLASS.CURRENT
38
+ cool.Navigate.History.add
39
+ section_id: section_id
40
+ container_id: aside_id
41
+ init_container: true
42
+ ###
43
+ * Hide an aside element
44
+ *
45
+ * @method hide
46
+ *
47
+ * @param {string} Aside id.
48
+ ###
49
+ hide = (aside_id) ->
50
+ aside = cool.dom(ELEMENT.ASIDE + aside_id)
51
+ body_class = CLASS.SHOW + CLASS.ASIDE + _classFromAside(aside)
52
+ cool.dom(ELEMENT.BODY).removeClass(body_class).removeClass CLASS.ASIDE
53
+ setTimeout (->
54
+ current_aside = ELEMENT.ASIDE + aside_id + "." + CLASS.CURRENT
55
+ cool.dom(current_aside).removeClass CLASS.CURRENT
56
+ ), TRANSITION.DURATION
57
+ cool.Navigate.History.clear aside_id
58
+
59
+ _classFromAside = (aside) ->
60
+ aside_class = aside.attr(ATTRIBUTE.CLASS)
61
+ aside_class or ""
62
+
63
+ show: show
64
+ hide: hide
65
+ )(COOLSTRAP)
@@ -0,0 +1,129 @@
1
+ ###
2
+ * Initialize the <dialog> layout
3
+ *
4
+ * @namespace COOLSTRAP.View
5
+ * @class Dialog
6
+ *
7
+ * @author Abraham Barrera <abarrerac@gmail.com> || @abraham_barrera
8
+ ###
9
+
10
+ COOLSTRAP.View.Dialog = ((cool) ->
11
+ ELEMENT = cool.Constants.ELEMENT
12
+ CLASS = cool.Constants.CLASS
13
+ DIALOG = cool.Constants.DIALOG
14
+ TRANSITION = cool.Constants.TRANSITION
15
+ console = cool.Console
16
+ _getPosition = (element) ->
17
+ cool.dom.extend {}, (element.offset()),
18
+ width: element[0].offsetWidth
19
+ height: element[0].offsetHeight
20
+
21
+ _getPositionFromSource = (source_pos, dialog_width, dialog_height, placement) ->
22
+ dialog_pos = undefined
23
+ switch placement
24
+ when CLASS.BOTTOM
25
+ dialog_pos =
26
+ top: source_pos.top + source_pos.height
27
+ left: source_pos.left + source_pos.width / 2 - dialog_width / 2
28
+ when CLASS.TOP
29
+ dialog_pos =
30
+ top: source_pos.top - dialog_height
31
+ left: source_pos.left + source_pos.width / 2 - dialog_width / 2
32
+ when CLASS.LEFT
33
+ dialog_pos =
34
+ top: source_pos.top + source_pos.height / 2 - dialog_height / 2
35
+ left: source_pos.left - dialog_width
36
+ when CLASS.RIGHT
37
+ dialog_pos =
38
+ top: source_pos.top + source_pos.height / 2 - dialog_height / 2
39
+ left: source_pos.left + source_pos.width
40
+ dialog_pos.left = 0 if dialog_pos.left < 0
41
+ dialog_pos.top = 0 if dialog_pos.top < 0
42
+ dialog_pos
43
+
44
+ _getPositionCenterOnScreen = (source_size) ->
45
+ dialog_pos = undefined
46
+ update = true
47
+ environment = cool.Util.Platform.reloadEnvironment()
48
+ screen_size = environment.screen
49
+ dialog_pos =
50
+ top: screen_size.height / 2 - source_size.height / 2
51
+ left: screen_size.width / 2 - source_size.width / 2
52
+ "margin-left": 0
53
+
54
+ dialog_pos.left = 0 if dialog_pos.left < 0
55
+ dialog_pos.top = 0 if dialog_pos.top < 0
56
+ dialog_pos
57
+
58
+ _preparePopover = (dialog, options) ->
59
+ source_element = options.source_element
60
+ dialog_pos = undefined
61
+ if source_element
62
+ options.placement = options.placement or source_element.data("placement")
63
+ options.animation = options.animation or source_element.data("animation")
64
+ else
65
+ console.warn "WTF! you must set a source_element"
66
+ return
67
+ options.placement = options.placement or CLASS.RIGHT
68
+ dialog.addClass CLASS.FADE_IN if options.animation
69
+ dialog.removeClass()
70
+ dialog_pos = _getPositionFromSource(_getPosition(source_element), dialog[0].offsetWidth, dialog[0].offsetHeight, options.placement)
71
+ dialog.css(dialog_pos).addClass options.placement
72
+
73
+ _prepareAlert = (dialog, options) ->
74
+ set_alert_position = ->
75
+ dialog_pos = _getPositionCenterOnScreen(_getPosition(dialog))
76
+ dialog.css dialog_pos
77
+
78
+ set_alert_position()
79
+ cool.dom(window).on "resize", ->
80
+ set_alert_position()
81
+
82
+ _prepareModal = (dialog, options) ->
83
+
84
+ _prepareAction = (dialog, options) ->
85
+
86
+
87
+
88
+ ###
89
+ * Show dialog
90
+ *
91
+ * @method show
92
+ ###
93
+ show = (dialog_id, options) ->
94
+ dialog = cool.dom(ELEMENT.DIALOG + dialog_id)
95
+ dialog_type = dialog.data("type")
96
+ options = options or {}
97
+ switch dialog_type
98
+ when DIALOG.MODAL
99
+ _prepareModal dialog, options
100
+ when DIALOG.ALERT
101
+ _prepareAlert dialog, options
102
+ when DIALOG.ACTION
103
+ _prepareAction dialog, options
104
+ when DIALOG.POPOVER
105
+ _preparePopover dialog, options
106
+ dialog.removeClass(CLASS.HIDE).addClass(CLASS.CURRENT).addClass CLASS.SHOW
107
+
108
+ ###
109
+ * Close dialog
110
+ *
111
+ * @method show
112
+ ###
113
+ close = (dialog_id) ->
114
+ dialog = cool.dom(ELEMENT.DIALOG + dialog_id)
115
+ dialog_type = dialog.data("type")
116
+ dialog_animation = dialog.data("transition")
117
+ dialog_animation = dialog_animation or "slideUp" if dialog_type is DIALOG.ACTION
118
+ dialog_animation = dialog_animation or "bounceOut" if dialog_type is DIALOG.MODAL
119
+ dialog.removeClass(CLASS.SHOW).addClass CLASS.HIDE
120
+ unless dialog_animation
121
+ dialog.removeClass CLASS.CURRENT
122
+ else
123
+ setTimeout (->
124
+ dialog.removeClass CLASS.CURRENT
125
+ ), TRANSITION.DURATION
126
+
127
+ show: show
128
+ close: close
129
+ )(COOLSTRAP)