under-os 0.0.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +16 -0
  5. data/README.md +70 -0
  6. data/Rakefile +24 -0
  7. data/app/config.rb +4 -0
  8. data/app/layouts/alerts.html +8 -0
  9. data/app/layouts/calculator.html +26 -0
  10. data/app/layouts/collections.html +7 -0
  11. data/app/layouts/home.html +14 -0
  12. data/app/layouts/http.html +8 -0
  13. data/app/layouts/inputs.html +44 -0
  14. data/app/layouts/lockers.html +6 -0
  15. data/app/layouts/navbar.html +9 -0
  16. data/app/layouts/scrolls.html +42 -0
  17. data/app/layouts/sidebars.html +17 -0
  18. data/app/pages/alerts_page.rb +14 -0
  19. data/app/pages/calculator_page.rb +36 -0
  20. data/app/pages/collections_page.rb +9 -0
  21. data/app/pages/home_page.rb +11 -0
  22. data/app/pages/http_page.rb +33 -0
  23. data/app/pages/inputs_page.rb +9 -0
  24. data/app/pages/lockers_page.rb +16 -0
  25. data/app/pages/navbar_page.rb +19 -0
  26. data/app/pages/scrolls_page.rb +5 -0
  27. data/app/pages/sidebars_page.rb +42 -0
  28. data/app/pages/stuff_page.rb +35 -0
  29. data/app/styles/application.css +25 -0
  30. data/app/styles/calculator.css +37 -0
  31. data/app/styles/collections.css +19 -0
  32. data/app/styles/home.css +0 -0
  33. data/app/styles/http.css +24 -0
  34. data/app/styles/inputs.css +47 -0
  35. data/app/styles/scrolls.css +67 -0
  36. data/app/styles/sidebars.css +19 -0
  37. data/lib/assets/fontawesome-webfont.ttf +0 -0
  38. data/lib/assets/under-os.css +115 -0
  39. data/lib/under-os.rb +9 -1
  40. data/lib/under_os/app.rb +33 -0
  41. data/lib/under_os/color.rb +176 -0
  42. data/lib/under_os/config.rb +28 -1
  43. data/lib/under_os/core/kernel.rb +16 -0
  44. data/lib/under_os/core/numeric.rb +23 -0
  45. data/lib/under_os/core/string.rb +40 -0
  46. data/lib/under_os/delegate.rb +3 -2
  47. data/lib/under_os/events.rb +85 -0
  48. data/lib/under_os/file.rb +110 -0
  49. data/lib/under_os/history.rb +50 -0
  50. data/lib/under_os/http/receiver.rb +44 -0
  51. data/lib/under_os/http/request.rb +89 -0
  52. data/lib/under_os/http/response.rb +24 -0
  53. data/lib/under_os/http/session.rb +49 -0
  54. data/lib/under_os/http.rb +5 -0
  55. data/lib/under_os/page/builder.rb +96 -0
  56. data/lib/under_os/page/layout.rb +43 -0
  57. data/lib/under_os/page/matcher.rb +83 -0
  58. data/lib/under_os/page/stylesheet.rb +67 -0
  59. data/lib/under_os/page.rb +153 -0
  60. data/lib/under_os/parser/css.rb +37 -0
  61. data/lib/under_os/parser/html.rb +97 -0
  62. data/lib/under_os/parser.rb +24 -0
  63. data/lib/under_os/point.rb +47 -0
  64. data/lib/under_os/screen.rb +9 -0
  65. data/lib/under_os/timer.rb +65 -0
  66. data/lib/under_os/ui/alert.rb +52 -0
  67. data/lib/under_os/ui/button.rb +22 -0
  68. data/lib/under_os/ui/collection/cell.rb +21 -0
  69. data/lib/under_os/ui/collection/delegate.rb +68 -0
  70. data/lib/under_os/ui/collection/item.rb +32 -0
  71. data/lib/under_os/ui/collection/layout.rb +43 -0
  72. data/lib/under_os/ui/collection/styles.rb +15 -0
  73. data/lib/under_os/ui/collection.rb +63 -0
  74. data/lib/under_os/ui/icon/awesome.rb +376 -0
  75. data/lib/under_os/ui/icon/engine.rb +10 -0
  76. data/lib/under_os/ui/icon.rb +42 -0
  77. data/lib/under_os/ui/image.rb +30 -0
  78. data/lib/under_os/ui/input.rb +41 -0
  79. data/lib/under_os/ui/label.rb +21 -0
  80. data/lib/under_os/ui/locker.rb +42 -0
  81. data/lib/under_os/ui/navbar.rb +115 -0
  82. data/lib/under_os/ui/progress.rb +17 -0
  83. data/lib/under_os/ui/scroll.rb +41 -0
  84. data/lib/under_os/ui/select.rb +98 -0
  85. data/lib/under_os/ui/sidebar.rb +45 -0
  86. data/lib/under_os/ui/slider.rb +49 -0
  87. data/lib/under_os/ui/spinner.rb +23 -0
  88. data/lib/under_os/ui/style/fonts.rb +60 -0
  89. data/lib/under_os/ui/style/margins.rb +160 -0
  90. data/lib/under_os/ui/style/outlining.rb +98 -0
  91. data/lib/under_os/ui/style/positioning.rb +169 -0
  92. data/lib/under_os/ui/style.rb +21 -0
  93. data/lib/under_os/ui/switch.rb +29 -0
  94. data/lib/under_os/ui/textarea.rb +14 -0
  95. data/lib/under_os/ui/utils/animation.rb +99 -0
  96. data/lib/under_os/ui/utils/commons.rb +70 -0
  97. data/lib/under_os/ui/utils/dimensions.rb +37 -0
  98. data/lib/under_os/ui/utils/editable.rb +43 -0
  99. data/lib/under_os/ui/utils/events.rb +75 -0
  100. data/lib/under_os/ui/utils/manipulation.rb +44 -0
  101. data/lib/under_os/ui/utils/position.rb +21 -0
  102. data/lib/under_os/ui/utils/size.rb +21 -0
  103. data/lib/under_os/ui/utils/styles.rb +89 -0
  104. data/lib/under_os/ui/utils/traversing.rb +44 -0
  105. data/lib/under_os/ui/utils/wrap.rb +77 -0
  106. data/lib/under_os/ui/view.rb +31 -0
  107. data/lib/under_os/ui.rb +3 -0
  108. data/lib/under_os.rb +2 -2
  109. data/resources/Default-568h@2x.png +0 -0
  110. data/resources/test.png +0 -0
  111. data/spec/assets/app.css +13 -0
  112. data/spec/assets/test.css +7 -0
  113. data/spec/assets/test.html +3 -0
  114. data/spec/assets/test_page.rb +2 -0
  115. data/spec/lib/core/numeric_spec.rb +37 -0
  116. data/spec/lib/core/string_spec.rb +87 -0
  117. data/spec/lib/under_os/color_spec.rb +133 -0
  118. data/spec/lib/under_os/events_spec.rb +71 -0
  119. data/spec/lib/under_os/file_spec.rb +98 -0
  120. data/spec/lib/under_os/page/builder_spec.rb +128 -0
  121. data/spec/lib/under_os/page/layout_spec.rb +18 -0
  122. data/spec/lib/under_os/page/matcher_spec.rb +154 -0
  123. data/spec/lib/under_os/page/stylesheet_spec.rb +83 -0
  124. data/spec/lib/under_os/page_spec.rb +5 -0
  125. data/spec/lib/under_os/parser/css_spec.rb +77 -0
  126. data/spec/lib/under_os/parser/html_spec.rb +152 -0
  127. data/spec/lib/under_os/parser_spec.rb +16 -0
  128. data/spec/lib/under_os/point_spec.rb +54 -0
  129. data/spec/lib/under_os/screen_spec.rb +11 -0
  130. data/spec/lib/under_os/timer_spec.rb +93 -0
  131. data/spec/lib/under_os/ui/button_spec.rb +5 -0
  132. data/spec/lib/under_os/ui/collection_spec.rb +19 -0
  133. data/spec/lib/under_os/ui/icon_spec.rb +26 -0
  134. data/spec/lib/under_os/ui/image_spec.rb +39 -0
  135. data/spec/lib/under_os/ui/input_spec.rb +77 -0
  136. data/spec/lib/under_os/ui/label_spec.rb +22 -0
  137. data/spec/lib/under_os/ui/locker_spec.rb +31 -0
  138. data/spec/lib/under_os/ui/progress_spec.rb +31 -0
  139. data/spec/lib/under_os/ui/scroll_spec.rb +40 -0
  140. data/spec/lib/under_os/ui/select_spec.rb +131 -0
  141. data/spec/lib/under_os/ui/sidebar_spec.rb +35 -0
  142. data/spec/lib/under_os/ui/slider_spec.rb +65 -0
  143. data/spec/lib/under_os/ui/spinner_spec.rb +57 -0
  144. data/spec/lib/under_os/ui/style/fonts_spec.rb +73 -0
  145. data/spec/lib/under_os/ui/style/margins_spec.rb +106 -0
  146. data/spec/lib/under_os/ui/style/outlining_spec.rb +69 -0
  147. data/spec/lib/under_os/ui/style/positioning_spec.rb +69 -0
  148. data/spec/lib/under_os/ui/style_spec.rb +19 -0
  149. data/spec/lib/under_os/ui/switch_spec.rb +56 -0
  150. data/spec/lib/under_os/ui/textarea_spec.rb +30 -0
  151. data/spec/lib/under_os/ui/utils/commons_spec.rb +81 -0
  152. data/spec/lib/under_os/ui/utils/manipulation_spec.rb +130 -0
  153. data/spec/lib/under_os/ui/utils/styles_spec.rb +140 -0
  154. data/spec/lib/under_os/ui/utils/traversing_spec.rb +124 -0
  155. data/spec/lib/under_os/ui/utils/wrap_spec.rb +69 -0
  156. data/spec/lib/under_os/ui/view_spec.rb +39 -0
  157. data/under-os.gemspec +32 -0
  158. metadata +225 -11
  159. data/lib/under_os/application.rb +0 -16
  160. data/lib/under_os/window.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ef5b142a4e4cb3a0ae9e4fcf41e2348c691bf93f
4
- data.tar.gz: e274b74979f02280d836f2c53a7f28c919b4d0a2
3
+ metadata.gz: 5fd9a1ae79f101e53c35741c6935b5eca5353da6
4
+ data.tar.gz: 44943f17a76499bd0bb3b3fc80f5b52cb0ea5c5d
5
5
  SHA512:
6
- metadata.gz: baacb919ea538b281819beb91f438d77c77abda5bd7e21080ca100d6a0318efef6de4887e12833a78cd2743d0f90ae06f1ffe36d58dfb0f3cd75ce24169f47bc
7
- data.tar.gz: 072c365f9b4f0dec820e9491de382d5f03f76388bc2c35d9160a3f467a81dc84836b722f698827949ffe0aaa35ab2ddf75b190d278c1af841e2664be24e2a72b
6
+ metadata.gz: 1ac6a73d2fe135c0df1cce46b4b20880dbd4a826f857fa25a308b6d4d62f3465369a446ef7c92c98b5253129bf9f52379bcfd59a246a8c6a0da53170581008d3
7
+ data.tar.gz: 27607c0bf2e284d6cc39cd06b45e6f71913329dbcbc14b1225b29f731c0af8755d2bd75ec8bc166e2ef6765e3643d406de9c258f67d37e5dffbaeb69691f84b5
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ build
2
+ .repl_history
3
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,16 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ under-os (0.0.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ rake (10.1.0)
10
+
11
+ PLATFORMS
12
+ ruby
13
+
14
+ DEPENDENCIES
15
+ rake
16
+ under-os!
data/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # Under OS
2
+
3
+ An experiment to build a thin web-like wrapper over iOS using rubymotion
4
+
5
+ The idea is to use incapsulation instead of monkey patching and build the
6
+ entire development platform correctly and from scratch.
7
+
8
+ The result should be a webbish like ifrastructure that uses ruby instead
9
+ of JavaScript and compiles into native code in the end.
10
+
11
+ That's gonna be legendary!
12
+
13
+ ## How To Use
14
+
15
+ 1) install the `under-os` gem
16
+
17
+ ```
18
+ gem install under-os
19
+ ```
20
+
21
+ 2) Clone the RubyMotion template in place
22
+
23
+ ```
24
+ mkdir -p ~/Library/RubyMotion/template/uos
25
+ git clone https://github.com/under-os/under-os-template.git ~/Library/RubyMotion/template/uos
26
+ ```
27
+
28
+ 3) Make a new app using the `uos` template
29
+
30
+ ```
31
+ motion create test --template=uos
32
+ ```
33
+
34
+ Now, Run it!
35
+
36
+ ```
37
+ cd test && rake
38
+ ```
39
+
40
+ ## What's What
41
+
42
+ * `app/layouts` - where you keep your HTML layouts
43
+ * `app/pages` - where the page scripts live
44
+ * `app/styles` - where the CSS files go
45
+ * `app/models` - where your data models chill
46
+ * `app/views` - where you keep your custom views/components classes
47
+
48
+
49
+ # Copyright & License
50
+
51
+ All code in this library is released under the terms of the MIT license
52
+
53
+ Copyright (C) 2013 Nikolay Nemshilov
54
+
55
+ Permission is hereby granted, free of charge, to any person obtaining a copy
56
+ of this software and associated documentation files (the "Software"), to deal
57
+ in the Software without restriction, including without limitation the rights
58
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
59
+ of the Software, and to permit persons to whom the Software is furnished to do so,
60
+ subject to the following conditions:
61
+
62
+ The above copyright notice and this permission notice shall be included in all
63
+ copies or substantial portions of the Software.
64
+
65
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
66
+ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
67
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
68
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
69
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
70
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ # -*- coding: utf-8 -*-
2
+ $:.unshift("/Library/RubyMotion/lib")
3
+ require 'motion/project/template/ios'
4
+ require 'bundler'
5
+ Bundler.require
6
+
7
+ require 'under-os'
8
+
9
+ Motion::Project::App.setup do |app|
10
+ app.name = 'uos-demo'
11
+ app.identifier = 'com.under-os.demo'
12
+ app.specs_dir = './spec/lib'
13
+ app.version = UnderOs::VERSION
14
+
15
+ app.codesign_certificate = ENV['RUBYMOTION_CERTIFICATE']
16
+ app.provisioning_profile = ENV['RUBYMOTION_PROFILE']
17
+
18
+ if ARGV[0] == 'spec'
19
+ app.name = 'uos-spec'
20
+ app.identifier = 'com.under-os.spec'
21
+ app.files << 'spec/assets/test_page.rb'
22
+ app.resources_dirs.unshift "./spec/assets/"
23
+ end
24
+ end
data/app/config.rb ADDED
@@ -0,0 +1,4 @@
1
+ UnderOs::App.start do
2
+ config.navbar = true
3
+ config.root_page = HomePage.new
4
+ end
@@ -0,0 +1,8 @@
1
+ <page title="Alerts">
2
+ <view id="buttons">
3
+ <button id="b1">Simple Alert</button>
4
+ <button id="b2">Alert With Title</button>
5
+ <button id="b3">Alert With Button</button>
6
+ <button id="b4">Alert With Options</button>
7
+ </view>
8
+ </page>
@@ -0,0 +1,26 @@
1
+ <page title="Calculator">
2
+ <label id="result">0</label>
3
+
4
+ <button class="row5 col1 top">C</button>
5
+ <button class="row5 col2 top">±</button>
6
+ <button class="row5 col3 top">%</button>
7
+
8
+ <button class="row5 col4 ops">÷</button>
9
+ <button class="row4 col4 ops">×</button>
10
+ <button class="row3 col4 ops">-</button>
11
+ <button class="row2 col4 ops">+</button>
12
+ <button class="row1 col4 ops">=</button>
13
+
14
+ <button class="row4 col3">9</button>
15
+ <button class="row4 col2">8</button>
16
+ <button class="row4 col1">7</button>
17
+ <button class="row3 col3">6</button>
18
+ <button class="row3 col2">5</button>
19
+ <button class="row3 col1">4</button>
20
+ <button class="row2 col3">3</button>
21
+ <button class="row2 col2">2</button>
22
+ <button class="row2 col1">1</button>
23
+ <button class="row1 col1 double">0</button>
24
+
25
+ <button class="row1 col3">.</button>
26
+ </page>
@@ -0,0 +1,7 @@
1
+ <page title="Collections">
2
+ <collection id="pics">
3
+ <item>
4
+ <label>Number</label>
5
+ </item>
6
+ </collection>
7
+ </page>
@@ -0,0 +1,14 @@
1
+ <page title="Home">
2
+ <view id="buttons">
3
+ <button id="b1" data-page="stuff">Various Stuff</button>
4
+ <button id="b2" data-page="calculator">Calculator Demo</button>
5
+ <button id="b3" data-page="inputs">Inputs Demo</button>
6
+ <button id="b4" data-page="sidebars">Sidebar Demo</button>
7
+ <button id="b5" data-page="scrolls">Scrolls Demo</button>
8
+ <button id="b6" data-page="navbar">Navbar Demo</button>
9
+ <button id="b7" data-page="alerts">Alerts Demo</button>
10
+ <button id="b8" data-page="lockers">Lockers Demo</button>
11
+ <button id="b9" data-page="http">HTTP Demo</button>
12
+ <button id="b10" data-page="collections">Collections</button>
13
+ </view>
14
+ </page>
@@ -0,0 +1,8 @@
1
+ <page title="HTTP Demo">
2
+ <view id="search-form">
3
+ <input type="text" value="puppy" />
4
+ <button>Search</button>
5
+ </view>
6
+
7
+ <img id="result" />
8
+ </page>
@@ -0,0 +1,44 @@
1
+ <page title="Inputs Demo">
2
+ <input placeholder="Tap here" />
3
+ <textarea>some value</textarea>
4
+
5
+ <slider min="0" max="100" value="40" />
6
+
7
+ <switch checked="true" />
8
+
9
+ <progress value="0.6" />
10
+
11
+ <spinner />
12
+
13
+ <view id="select-buttons">
14
+ <button id="show-single-select">Single Select</button>
15
+ <button id="show-multi-select" >Multi Select</button>
16
+ </view>
17
+
18
+ <select id="single-select">
19
+ <option value="1">One</option>
20
+ <option value="2">Two</option>
21
+ <option value="3">Three</option>
22
+ <option value="4">Four</option>
23
+ <option value="5">Five</option>
24
+ <option value="6">Six</option>
25
+ <option value="7">Seven</option>
26
+ </select>
27
+
28
+ <select id="multi-select">
29
+ <optgroup>
30
+ <option value="1">One</option>
31
+ <option value="2">Two</option>
32
+ <option value="3">Three</option>
33
+ <option value="4">Four</option>
34
+ <option value="5">Five</option>
35
+ </optgroup>
36
+
37
+ <optgroup>
38
+ <option>Sandwitch</option>
39
+ <option>Pizza</option>
40
+ <option>Cola</option>
41
+ <option>Balloon</option>
42
+ </optgroup>
43
+ </select>
44
+ </page>
@@ -0,0 +1,6 @@
1
+ <page title="Lockers">
2
+ <view id="buttons">
3
+ <button id="b1">Standard Locker</button>
4
+ <button id="b2">With A Label</button>
5
+ </view>
6
+ </page>
@@ -0,0 +1,9 @@
1
+ <page title="Navigation" fullscreen="false">
2
+ <view id="buttons">
3
+ <button id="b1" data-icons="edit">Edit Native</button>
4
+ <button id="b2" data-icons="trash">Trash Native</button>
5
+ <button id="b3" data-icons="edit,trash">Edit And Trash</button>
6
+ <button id="b4" data-icons="nothing,custom">Custom Titles</button>
7
+ <button id="b5" data-icons="edit,save,trash" class="icons">UOS Icons</button>
8
+ </view>
9
+ </page>
@@ -0,0 +1,42 @@
1
+ <page title="Scrolls Demo">
2
+
3
+ <scroll id="horizontal">
4
+ <button class="b0">0</button>
5
+ <button class="b1">1</button>
6
+ <button class="b2">2</button>
7
+ <button class="b3">3</button>
8
+ <button class="b4">4</button>
9
+ <button class="b5">5</button>
10
+ <button class="b6">6</button>
11
+ <button class="b7">7</button>
12
+ <button class="b8">8</button>
13
+ <button class="b9">9</button>
14
+ </scroll>
15
+
16
+ <scroll id="vertical">
17
+ <button class="b0">0</button>
18
+ <button class="b1">1</button>
19
+ <button class="b2">2</button>
20
+ <button class="b3">3</button>
21
+ <button class="b4">4</button>
22
+ <button class="b5">5</button>
23
+ <button class="b6">6</button>
24
+ <button class="b7">7</button>
25
+ <button class="b8">8</button>
26
+ <button class="b9">9</button>
27
+ </scroll>
28
+
29
+ <scroll id="both">
30
+ <button class="b0">0</button>
31
+ <button class="b1">1</button>
32
+ <button class="b2">2</button>
33
+ <button class="b3">3</button>
34
+ <button class="b4">4</button>
35
+ <button class="b5">5</button>
36
+ <button class="b6">6</button>
37
+ <button class="b7">7</button>
38
+ <button class="b8">8</button>
39
+ <button class="b9">9</button>
40
+ </scroll>
41
+
42
+ </page>
@@ -0,0 +1,17 @@
1
+ <page title="Sidebars">
2
+ <view id="buttons">
3
+ <button id="top"> From Top </button>
4
+ <button id="left"> From Left </button>
5
+ <button id="right"> From Right </button>
6
+ <button id="bottom"> From Bottom </button>
7
+ </view>
8
+
9
+ <sidebar id='test'>
10
+ <label>Hello World!</label>
11
+
12
+ <button id="b1">Hello!</button>
13
+ <button id="b2">Ohay!</button>
14
+ <button id="b3">Hey!</button>
15
+ <button id="b4">Hi!</button>
16
+ </sidebar>
17
+ </page>
@@ -0,0 +1,14 @@
1
+ class AlertsPage < UnderOs::Page
2
+ def initialize
3
+ find('#buttons button').each_with_index do |button, index|
4
+ button.on :tap do
5
+ case index
6
+ when 1 then Alert.new(title: "Error", message: button.text)
7
+ when 2 then Alert.new(message: button.text, button: "Doh...")
8
+ when 3 then Alert.new(message: button.text, buttons: ["Option 1", "Option 2"])
9
+ else Alert.new(button.text)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,36 @@
1
+ class CalculatorPage < UnderOs::Page
2
+
3
+ def initialize
4
+ @label = first('#result')
5
+
6
+ find('button').each do |b|
7
+ b.on(:tap){|e| handle_tap(e)}
8
+ end
9
+ end
10
+
11
+ def handle_tap(event)
12
+ case event.target.text
13
+ when '0','1','2','3','4','5','6','7','8','9','.'
14
+ @label.text = '' if ['0', @first_value].include?(@label.text)
15
+ @label.text += event.target.text if @label.text.size < 18
16
+ when '÷','×','-','+'
17
+ @first_value = @label.text
18
+ @operator = {'÷'=>'/','×'=>'*','-'=>'-','+'=>'+'}[event.target.text]
19
+ when 'C'
20
+ @first_value = nil
21
+ @label.text = '0'
22
+ when '='
23
+ calculate
24
+ end
25
+ end
26
+
27
+ def calculate
28
+ return if ! @first_value
29
+
30
+ values = [@first_value, @label.text]
31
+ values = values.any?{|v| v.include?('.')} ? values.map(&:to_f) : values.map(&:to_i)
32
+
33
+ @label.text = values[0].send(@operator, values[1]).to_s
34
+ end
35
+
36
+ end
@@ -0,0 +1,9 @@
1
+ class CollectionsPage < UnderOs::Page
2
+ def initialize
3
+ @collection = first('collection')
4
+ @collection.number_of_items = 1000
5
+ @collection.on :item do |item, index|
6
+ item.children[0].text = "##{index + 1}"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ class HomePage < UnderOs::Page
2
+
3
+ def initialize
4
+ find('#buttons button').each do |button|
5
+ button.on :tap do
6
+ page = (button.data('page').capitalize + "Page").constantize
7
+ history << page.new
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,33 @@
1
+ class HttpPage < UnderOs::Page
2
+
3
+ def initialize
4
+ @search = first('#search-form input')
5
+ @result = first('img#result')
6
+ @locker = Locker.new
7
+
8
+ first('#search-form button').on(:tap) { search }
9
+ end
10
+
11
+ def search
12
+ @search.hide_keyboard
13
+ @locker.show
14
+
15
+ UnderOs::HTTP.get search_url do |response|
16
+ @result.load parse_first_image_url(response.body) do
17
+ @locker.hide
18
+ end
19
+ end
20
+ end
21
+
22
+ def search_url
23
+ query = @search.value
24
+ query = 'puppy' if query.empty?
25
+
26
+ "https://www.google.com.au/search?q=#{query}&source=lnms&tbm=isch"
27
+ end
28
+
29
+ def parse_first_image_url(html)
30
+ html.scan(/imgurl=(http:\/\/[^&]+)/)[0][0]
31
+ end
32
+
33
+ end
@@ -0,0 +1,9 @@
1
+ class InputsPage < UnderOs::Page
2
+ def initialize
3
+ @single_select = first('#single-select').on(:change){|e| e.target.hide}
4
+ @multi_select = first('#multi-select' ).on(:change){|e| e.target.hide}
5
+
6
+ first('#show-single-select').on(:tap){ @single_select.toggle }
7
+ first('#show-multi-select' ).on(:tap){ @multi_select.toggle }
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ class LockersPage < UnderOs::Page
2
+ def initialize
3
+ first('#buttons #b1').on(:tap){ show_simple_locker }
4
+ first('#buttons #b2').on(:tap){ show_locker_with_label }
5
+ end
6
+
7
+ def show_simple_locker
8
+ @locker = Locker.new.show
9
+ 2.seconds.later { @locker.hide }
10
+ end
11
+
12
+ def show_locker_with_label
13
+ @locker = Locker.new(text: "Wait...").show
14
+ 2.seconds.later { @locker.hide }
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ class NavbarPage < UnderOs::Page
2
+ def initialize
3
+ find('#buttons button').each do |button|
4
+ button.on :tap do
5
+ if button.hasClass('icons')
6
+ navbar.right_buttons = @icons = button.data('icons').split(',').map do |type|
7
+ UnderOs::UI::Icon.new(type: type)
8
+ end
9
+ else
10
+ navbar.right_buttons = {}.tap do |hash|
11
+ button.data('icons').split(',').map do |type|
12
+ hash[type] = Proc.new{ p type }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ class ScrollsPage < UnderOs::Page
2
+ def initialize
3
+
4
+ end
5
+ end
@@ -0,0 +1,42 @@
1
+ class SidebarsPage < UnderOs::Page
2
+ def initialize
3
+ first('#top' ).on(:tap){ show_on_top }
4
+ first('#left' ).on(:tap){ show_on_left }
5
+ first('#right' ).on(:tap){ show_on_right }
6
+ first('#bottom').on(:tap){ show_on_bottom }
7
+
8
+ @sidebar = first('sidebar#test')
9
+ end
10
+
11
+ def show_on_top
12
+ return @sidebar.hide if @sidebar.visible?
13
+
14
+ @sidebar.location = :top
15
+ @sidebar.style.height = 100
16
+ @sidebar.show
17
+ end
18
+
19
+ def show_on_left
20
+ return @sidebar.hide if @sidebar.visible?
21
+
22
+ @sidebar.location = :left
23
+ @sidebar.style.width = 200
24
+ @sidebar.show
25
+ end
26
+
27
+ def show_on_right
28
+ return @sidebar.hide if @sidebar.visible?
29
+
30
+ @sidebar.location = :right
31
+ @sidebar.style.width = 200
32
+ @sidebar.show
33
+ end
34
+
35
+ def show_on_bottom
36
+ return @sidebar.hide if @sidebar.visible?
37
+
38
+ @sidebar.location = :bottom
39
+ @sidebar.style.height = 100
40
+ @sidebar.show
41
+ end
42
+ end
@@ -0,0 +1,35 @@
1
+ class StuffPage < UnderOs::Page
2
+ def initialize
3
+ self.title = "Various Stuff"
4
+
5
+ @box = View.new(style: {
6
+ top: 50,
7
+ left: 50,
8
+ width: 100,
9
+ height: 100,
10
+ background: :red,
11
+ borderRadius: 10,
12
+ borderWidth: 2,
13
+ borderColor: :green
14
+ })
15
+
16
+ @box.on(:tap){ @box.fade_out.fade_in }
17
+
18
+ @b2 = View.new(style: {background: :blue})
19
+ @b2.size = {x: 50, y: 50}
20
+ @b2.position = {x: 25, y: 25}
21
+
22
+ @b2.on(:tap, :highlight)
23
+
24
+ insert @box.insert(@b2)
25
+
26
+ insert Button.new(text: 'Boo Hoo!').position(x: 100, y: 200)
27
+
28
+ insert Label.new(text: "Hey Label", style: {background: :red}).position({x: 100, y: 250})
29
+
30
+ insert Icon.new(:cog).position(x: 50, y: 300)
31
+ insert Icon.new(:trash).position(x: 100, y: 300)
32
+ insert Icon.new(:home).position(x: 150, y: 300)
33
+ insert Icon.new(:magic).position(x: 200, y: 300)
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ page {
2
+ background: white;
3
+ }
4
+
5
+ #buttons {
6
+ top: 60;
7
+ left: 60;
8
+ width: 200;
9
+ height: 500;
10
+ }
11
+
12
+ #buttons button {
13
+ width: 100%;
14
+ }
15
+
16
+ #buttons button#b1 { top: 0; }
17
+ #buttons button#b2 { top: 50; }
18
+ #buttons button#b3 { top: 100; }
19
+ #buttons button#b4 { top: 150; }
20
+ #buttons button#b5 { top: 200; }
21
+ #buttons button#b6 { top: 250; }
22
+ #buttons button#b7 { top: 300; }
23
+ #buttons button#b8 { top: 350; }
24
+ #buttons button#b9 { top: 400; }
25
+ #buttons button#b10 { top: 450; }
@@ -0,0 +1,37 @@
1
+ page {
2
+ background-color: darkgray;
3
+ }
4
+
5
+ label {
6
+ left: 0;
7
+ top: 80;
8
+ color: white;
9
+ height: 80;
10
+ width: 320;
11
+ font-size: 80;
12
+ text-align: right;
13
+ }
14
+
15
+ button {
16
+ width: 79px;
17
+ height: 79px;
18
+ color: black;
19
+ background: white;
20
+ border-radius: 0px;
21
+ font-size: 40;
22
+ }
23
+
24
+ button.double { width: 159; }
25
+ button.ops { background: yellow; font-size: 20; }
26
+ button.top { background: lightgray; font-size: 20; }
27
+
28
+ .row1 { bottom: 0px; }
29
+ .row2 { bottom: 80px; }
30
+ .row3 { bottom: 160px; }
31
+ .row4 { bottom: 240px; }
32
+ .row5 { bottom: 320px; }
33
+
34
+ .col1 { left: 0; }
35
+ .col2 { left: 80; }
36
+ .col3 { left: 160; }
37
+ .col4 { left: 240; }
@@ -0,0 +1,19 @@
1
+ collection {
2
+ width: 100%;
3
+ height: 100%;
4
+ background: white;
5
+ }
6
+
7
+ collection item {
8
+ width: 106px;
9
+ height: 30px;
10
+ margin-bottom: 1px;
11
+ }
12
+
13
+ collection item label {
14
+ width: 100%;
15
+ height: 100%;
16
+ background: #eee;
17
+ border-radius: 2px;
18
+ text-align: center;
19
+ }
File without changes