Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

use uki tools as a server

  • Loading branch information...
commit 69d83a184c1c65de013e65b7684175dbe57afe93 1 parent 0e72c37
Vladimir Kolesnikov authored
Showing with 1,767 additions and 95 deletions.
  1. +2 −6 README.rdoc
  2. +3 −36 Rakefile
  3. BIN  compiler.jar
  4. +59 −0 examples/core-examples/aristo/aristo.js
  5. +18 −0 examples/core-examples/attachment/attachment.js
  6. +59 −0 examples/core-examples/controls/controls.js
  7. +70 −0 examples/core-examples/dnd/dnd.js
  8. +41 −0 examples/core-examples/flow/flow.js
  9. +78 −0 examples/core-examples/list/list.js
  10. +41 −0 examples/core-examples/popup/popup.js
  11. +34 −0 examples/core-examples/resizeToContents/resizeToContents.js
  12. +28 −0 examples/core-examples/scrollPane/scrollPane.js
  13. +23 −0 examples/core-examples/slider/slider.js
  14. +35 −0 examples/core-examples/splitPane/splitPane.js
  15. +39 −0 examples/core-examples/splitPaneExtended/splitPaneExtended.js
  16. +33 −0 examples/core-examples/stress/stress.js
  17. +1 −0  examples/core-examples/table/library.js
  18. +71 −0 examples/core-examples/table/searchable.js
  19. +92 −0 examples/core-examples/table/table.js
  20. BIN  examples/core-examples/toolbar/icon.png
  21. +44 −0 examples/core-examples/toolbar/toolbar.js
  22. BIN  examples/core-examples/twitter/bubble.png
  23. BIN  examples/core-examples/twitter/i/bubble-c.png
  24. BIN  examples/core-examples/twitter/i/bubble-h.png
  25. BIN  examples/core-examples/twitter/i/bubble-m.png
  26. BIN  examples/core-examples/twitter/i/bubble-v.png
  27. BIN  examples/core-examples/twitter/i/loading.gif
  28. +1 −0  examples/core-examples/twitter/tweets.json
  29. +175 −0 examples/core-examples/twitter/twitter.js
  30. +1 −0  examples/core-examples/wave/contacts.json
  31. BIN  examples/core-examples/wave/i/body/normal-m.png
  32. BIN  examples/core-examples/wave/i/body/normal.png
  33. BIN  examples/core-examples/wave/i/button/a-down-m.png
  34. BIN  examples/core-examples/wave/i/button/a-down-v.gif
  35. BIN  examples/core-examples/wave/i/button/a-down-v.png
  36. BIN  examples/core-examples/wave/i/button/a-down.png
  37. BIN  examples/core-examples/wave/i/button/a-normal-m.png
  38. BIN  examples/core-examples/wave/i/button/a-normal-v.gif
  39. BIN  examples/core-examples/wave/i/button/a-normal-v.png
  40. BIN  examples/core-examples/wave/i/button/a-normal.png
  41. BIN  examples/core-examples/wave/i/button/down-m.png
  42. BIN  examples/core-examples/wave/i/button/down-v.gif
  43. BIN  examples/core-examples/wave/i/button/down-v.png
  44. BIN  examples/core-examples/wave/i/button/down.png
  45. BIN  examples/core-examples/wave/i/button/normal-m.png
  46. BIN  examples/core-examples/wave/i/button/normal-v.gif
  47. BIN  examples/core-examples/wave/i/button/normal-v.png
  48. BIN  examples/core-examples/wave/i/button/normal.png
  49. BIN  examples/core-examples/wave/i/button/plus-big-down-m.gif
  50. BIN  examples/core-examples/wave/i/button/plus-big-down-m.png
  51. BIN  examples/core-examples/wave/i/button/plus-big-down.png
  52. BIN  examples/core-examples/wave/i/button/plus-big-normal-m.gif
  53. BIN  examples/core-examples/wave/i/button/plus-big-normal-m.png
  54. BIN  examples/core-examples/wave/i/button/plus-big-normal.png
  55. BIN  examples/core-examples/wave/i/button/plus-down-m.gif
  56. BIN  examples/core-examples/wave/i/button/plus-down-m.png
  57. BIN  examples/core-examples/wave/i/button/plus-down.png
  58. BIN  examples/core-examples/wave/i/button/plus-normal-m.gif
  59. BIN  examples/core-examples/wave/i/button/plus-normal-m.png
  60. BIN  examples/core-examples/wave/i/button/plus-normal.png
  61. BIN  examples/core-examples/wave/i/button/search-button-normal-m.png
  62. BIN  examples/core-examples/wave/i/button/search-button-normal.png
  63. BIN  examples/core-examples/wave/i/button/toolbar-button-down-m.png
  64. BIN  examples/core-examples/wave/i/button/toolbar-button-down.png
  65. BIN  examples/core-examples/wave/i/button/toolbar-button-normal-v.gif
  66. BIN  examples/core-examples/wave/i/button/toolbar-button-normal-v.png
  67. BIN  examples/core-examples/wave/i/button/toolbar-button-normal.png
  68. BIN  examples/core-examples/wave/i/icons-c/drawer.png
  69. BIN  examples/core-examples/wave/i/icons-c/inbox.png
  70. BIN  examples/core-examples/wave/i/icons-c/pencil.png
  71. BIN  examples/core-examples/wave/i/icons-c/skeleton.png
  72. BIN  examples/core-examples/wave/i/icons-c/trash.png
  73. BIN  examples/core-examples/wave/i/icons-c/who.png
  74. BIN  examples/core-examples/wave/i/icons/blue.png
  75. BIN  examples/core-examples/wave/i/icons/dots.png
  76. BIN  examples/core-examples/wave/i/icons/download.png
  77. BIN  examples/core-examples/wave/i/icons/drawer.png
  78. BIN  examples/core-examples/wave/i/icons/eye-closed.png
  79. BIN  examples/core-examples/wave/i/icons/eye.png
  80. BIN  examples/core-examples/wave/i/icons/folder.png
  81. BIN  examples/core-examples/wave/i/icons/nosound.png
  82. BIN  examples/core-examples/wave/i/icons/play.png
  83. BIN  examples/core-examples/wave/i/icons/reply.png
  84. BIN  examples/core-examples/wave/i/icons/skeleton.png
  85. BIN  examples/core-examples/wave/i/icons/sprite-m.gif
  86. BIN  examples/core-examples/wave/i/icons/sprite-m.png
  87. BIN  examples/core-examples/wave/i/icons/sprite.png
  88. BIN  examples/core-examples/wave/i/icons/trash.png
  89. BIN  examples/core-examples/wave/i/icons/unknown.png
  90. BIN  examples/core-examples/wave/i/panel/blue-c.gif
  91. BIN  examples/core-examples/wave/i/panel/blue-c.png
  92. BIN  examples/core-examples/wave/i/panel/blue-h.gif
  93. BIN  examples/core-examples/wave/i/panel/blue-h.png
  94. BIN  examples/core-examples/wave/i/panel/blue-m.png
  95. BIN  examples/core-examples/wave/i/panel/blue-v.gif
  96. BIN  examples/core-examples/wave/i/panel/blue-v.png
  97. BIN  examples/core-examples/wave/i/panel/blue.png
  98. BIN  examples/core-examples/wave/i/panel/white-c.gif
  99. BIN  examples/core-examples/wave/i/panel/white-c.png
  100. BIN  examples/core-examples/wave/i/panel/white-h.gif
  101. BIN  examples/core-examples/wave/i/panel/white-h.png
  102. BIN  examples/core-examples/wave/i/panel/white-m.png
  103. BIN  examples/core-examples/wave/i/panel/white-v.gif
  104. BIN  examples/core-examples/wave/i/panel/white-v.png
  105. BIN  examples/core-examples/wave/i/panel/white.png
  106. BIN  examples/core-examples/wave/i/popup/normal-c.gif
  107. BIN  examples/core-examples/wave/i/popup/normal-c.png
  108. BIN  examples/core-examples/wave/i/popup/normal-h.gif
  109. BIN  examples/core-examples/wave/i/popup/normal-h.png
  110. BIN  examples/core-examples/wave/i/popup/normal-m.png
  111. BIN  examples/core-examples/wave/i/popup/normal-v.gif
  112. BIN  examples/core-examples/wave/i/popup/normal-v.png
  113. BIN  examples/core-examples/wave/i/popup/normal.png
  114. BIN  examples/core-examples/wave/i/searchField/focus-m.png
  115. BIN  examples/core-examples/wave/i/searchField/focus-v.gif
  116. BIN  examples/core-examples/wave/i/searchField/focus-v.png
  117. BIN  examples/core-examples/wave/i/searchField/focus.png
  118. BIN  examples/core-examples/wave/i/searchField/normal-m.png
  119. BIN  examples/core-examples/wave/i/searchField/normal-v.gif
  120. BIN  examples/core-examples/wave/i/searchField/normal-v.png
  121. BIN  examples/core-examples/wave/i/searchField/normal.png
  122. BIN  examples/core-examples/wave/i/toolbar/normal-m.png
  123. BIN  examples/core-examples/wave/i/toolbar/normal.png
  124. BIN  examples/core-examples/wave/voloko.jpg
  125. +269 −0 examples/core-examples/wave/wave-theme.js
  126. +29 −0 examples/core-examples/wave/wave.html
  127. +102 −0 examples/core-examples/wave/wave.js
  128. +1 −0  examples/core-examples/wave/waves.json
  129. +23 −0 examples/css/examples.css
  130. 0  examples/css/index.css
  131. +43 −0 examples/css/reset.css
  132. +17 −0 examples/more-examples/radioButton/radioButton.js
  133. +1 −0  examples/more-examples/splitTable/library.js
  134. +71 −0 examples/more-examples/splitTable/searchable.js
  135. +98 −0 examples/more-examples/splitTable/splitTable.js
  136. +14 −0 examples/more-examples/toggleButton/toggleButton.js
  137. BIN  examples/more-examples/treeList/i/arrows.png
  138. +35 −0 examples/more-examples/treeList/treeList.js
  139. +8 −0 examples/views/example.haml
  140. +24 −0 examples/views/exampleList.haml
  141. +0 −2  run.rb
  142. +84 −0 server.rb
  143. +0 −11 thin.yaml
  144. +0 −38 uki.rb
  145. +0 −2  uki.ru
8 README.rdoc
View
@@ -63,13 +63,9 @@ It comes with a rich view-component library ranging from Sliders to Grids and Sp
To install development server
1. Install ruby http://ruby-lang.org
2. Open terminal and run
- gem install rake sinatra
+ gem install uki
cd PATH_TO_UKI
-3. On windows run
- ruby run.rb
-On *nix
- rake start
-4. http://127.0.0.1:21119/src/uki.cjs – should be a merged version of uki
+ uki run
== Image path
For older browsers uki loads images from server.
39 Rakefile
View
@@ -2,42 +2,15 @@ require 'fileutils'
require 'rubygems'
require 'yaml'
-def process_path(path, included = {})
- code = File.read(path)
- base = File.dirname(path)
- code.gsub(%r{include\s*\(\s*['"]([^"']+)["']\s*\)\s*;?\s*\n?}) {
- include_path = File.expand_path(File.join(base, $1))
- unless included[include_path]
- included[include_path] = true
- process_path(include_path, included)
- else
- ''
- end
- }
-end
-
def read_version
base = File.dirname(__FILE__)
File.read(File.join(base, 'src', 'uki-core', 'uki.js')).match(%r{uki.version\s*=\s*'([^']+)'})[1]
end
-desc "Run thin"
-task :start do
- sh "thin -s 1 -C thin.yaml -R uki.ru start"
-end
-
-desc "Run thin"
-task :restart do
- sh "thin -s 1 -C thin.yaml -R uki.ru restart"
-end
-
-desc "Stop thin"
-task :stop do
- sh "thin -s 1 -C thin.yaml -R uki.ru stop"
-end
-
desc "Build scripts"
task :build_scripts do
+ require 'uki/include_js'
+
base = File.dirname(__FILE__)
version = read_version
compiler_path = File.join(base, 'compiler.jar')
@@ -96,10 +69,4 @@ task :push_version do
:access => :public_read, 'Cache-Control' => 'max-age=315360000'
)
end
-end
-
-# ['width', 'height', 'minX', 'maxX', 'minY', 'maxY', 'left', 'top'].each { |name|
-# print "/** @function
-# @name uki.view.Base##{name} */
-# "
-# }
+end
BIN  compiler.jar
View
Binary file not shown
59 examples/core-examples/aristo/aristo.js
View
@@ -0,0 +1,59 @@
+/**
+@example_title Controls (aristo)
+@example_order 3100
+@example_html
+ <style>body, html { overflow: hidden; margin: 0; padding: 0; }</style>
+ <div id="test" style="width: 90%; height: 300px;"></div>
+ <script src="/src/uki-theamless.cjs"></script>
+ <script src="/src/uki-theme/aristo.cjs"></script>
+ <script src="aristo.js"></script>
+*/
+
+
+// controlls description
+function views() {
+ return [
+ { view: 'Button', rect: '10 10 200 24', anchors: 'left top', text: 'focusable button!' },
+ { view: 'MultilineTextField', rect: '10 35 200 40', anchors: 'left top', value: 'textarea' },
+
+ { view: 'Checkbox', rect: '250 10 24 24', anchors: 'left top', name: 'probe' },
+ { view: 'Label', rect: '275 10 100 24', anchors: 'left top', html: 'Checkbox 1', selectable: false },
+ { view: 'Checkbox', rect: '250 35 24 24', anchors: 'left top', checked: true },
+ { view: 'Label', rect: '275 35 100 24', anchors: 'left top', text: 'Checkbox 2', selectable: false },
+
+ { view: 'Radio', rect: '720 10 24 24', anchors: 'left top', name: 'probe', group: 'radio_1' },
+ { view: 'Label', rect: '745 10 100 24', anchors: 'left top', html: 'Radio 1', selectable: false },
+ { view: 'Radio', rect: '720 35 24 24', anchors: 'left top', checked: true, group: 'radio_1' },
+ { view: 'Label', rect: '745 35 100 24', anchors: 'left top', text: 'Radio 2', selectable: false },
+
+ { view: 'TextField',rect: '400 10 100 24', anchors: 'left top', value: "Small input", placeholder: 'text' },
+ { view: 'Button', rect: '510 10 200 24', anchors: 'left top', text: 'button without focus!', focusable: false },
+ { view: 'TextField',rect: '820 10 100 33', anchors: 'right top', value: "Big input" },
+ { view: 'Slider', rect: '400 65 150 24', anchors: 'right top left width' }
+ ];
+}
+
+// page layout
+uki(
+ { view: 'Box', rect: '0 0 1000 300', minSize: '980 0', anchors: 'top left right width', childViews: [
+ { view: 'Box', background: 'theme(panel)', rect: '0 0 1000 100', // controlls on panel background
+ anchors: 'top left right width', childViews: views() },
+ { view: 'Box', rect: '0 150 1000 100', anchors: 'top left right width', // controlls on page background
+ childViews: views() }
+ ]}
+).attachTo( document.getElementById('test'), '1000 300' );
+
+// Bind alert to all buttons
+uki('Button').bind('click', function() {
+ alert(uki('TextField').attr('value'));
+});
+
+// On slider move update last TextField
+uki('Slider').bind('change', function() {
+ uki(this.parent()).find('> TextField:last').value(this.value())
+});
+
+// Make label work as labels in browser
+uki('Label').click(function() {
+ if (this.prevView().checked) this.prevView().checked(!this.prevView().checked()).focus();
+});
18 examples/core-examples/attachment/attachment.js
View
@@ -0,0 +1,18 @@
+/**
+@example_title Hello world
+@example_order 1
+@example_html
+ <div id='test' style='width: 50%; height: 100px; background: #EEE'>#test</div>
+ <script src="/src/uki.cjs"></script>
+ <script src="attachment.js"></script>
+*/
+
+uki({
+ view: 'Button',
+ rect: '200 40 200 24',
+ text: 'uki is awesome!'
+}).attachTo( document.getElementById('test'), '600 100' );
+
+uki('Button[text^=uki]').bind('click', function() {
+ alert('Hello world!');
+});
59 examples/core-examples/controls/controls.js
View
@@ -0,0 +1,59 @@
+/**
+@example_title Controls
+@example_order 20
+@example_html
+ <style>body, html { overflow: hidden; margin: 0; padding: 0; }</style>
+ <div id="test" style="width: 90%; height: 300px;"></div>
+ <script src="/src/uki.cjs"></script>
+ <script src="controls.js"></script>
+*/
+
+
+// controlls description
+function views() {
+ return [
+ { view: 'Button', rect: '10 10 200 24', anchors: 'left top', text: 'focusable button!' },
+ { view: 'MultilineTextField', rect: '10 35 200 40', anchors: 'left top', value: 'textarea' },
+
+ { view: 'Checkbox', rect: '250 10 24 24', anchors: 'left top', name: 'probe' },
+ { view: 'Label', rect: '275 10 100 24', anchors: 'left top', html: 'Checkbox 1' },
+ { view: 'Checkbox', rect: '250 35 24 24', anchors: 'left top', checked: true },
+ { view: 'Label', rect: '275 35 100 24', anchors: 'left top', text: 'Checkbox 2' },
+
+ { view: 'Radio', rect: '720 10 24 24', anchors: 'left top', name: 'probe', group: 'radio_1' },
+ { view: 'Label', rect: '745 10 100 24', anchors: 'left top', html: 'Radio 1' },
+ { view: 'Radio', rect: '720 35 24 24', anchors: 'left top', checked: true, group: 'radio_1' },
+ { view: 'Label', rect: '745 35 100 24', anchors: 'left top', text: 'Radio 2' },
+
+ { view: 'TextField',rect: '400 10 100 24', anchors: 'left top', value: "Small input", placeholder: 'text' },
+ { view: 'PasswordTextField',rect: '400 36 100 24', anchors: 'left top', value: "Small input", placeholder: 'text' },
+ { view: 'Button', rect: '510 10 200 24', anchors: 'left top', text: 'button without focus!', focusable: false },
+ { view: 'TextField',rect: '820 10 100 34', anchors: 'right top', value: "Big input" },
+ { view: 'Slider', rect: '400 65 150 24', anchors: 'right top left width' }
+ ];
+}
+
+// page layout
+uki(
+ { view: 'Box', rect: '0 0 1000 300', minSize: '980 0', anchors: 'top left right width', childViews: [
+ { view: 'Box', background: 'theme(panel)', rect: '0 0 1000 100', // controlls on panel background
+ anchors: 'top left right width', childViews: views() },
+ { view: 'Box', rect: '0 150 1000 100', anchors: 'top left right width', // controlls on page background
+ childViews: views() }
+ ]}
+).attachTo( document.getElementById('test'), '1000 300' );
+
+// Bind alert to all buttons
+uki('Button').bind('click', function() {
+ alert(uki('TextField').attr('value'));
+});
+
+// On slider move update last TextField
+uki('Slider').bind('change', function() {
+ uki(this.parent()).find('> TextField:last').value(this.value())
+});
+
+// Make label work as labels in browser
+uki('Label').click(function() {
+ if (this.prevView().checked) this.prevView().checked(!this.prevView().checked()).focus();
+});
70 examples/core-examples/dnd/dnd.js
View
@@ -0,0 +1,70 @@
+/**
+@example_title Drag and Drop
+@example_order 400
+@example_html
+ <style>body, html { margin: 0; padding: 0; overflow: hidden };</style>
+ <div id="draggable" draggable="true" unselectable="unselectable"
+ style="position:absolute;left:600px;top:50px;width:100px;height:100px;
+ line-height:100px;font-size:18px;background:#CCF;font-family:sans-serif;text-align:center;
+ -webkit-user-drag:element;-webkit-user-select:none;-moz-user-select:none">
+ draggable
+ </div>
+ <script src="/src/uki.cjs"></script>
+ <script src="dnd.js"></script>
+ */
+
+uki([
+ { view: 'Label', rect: '350 10 100 20', anchors: 'left top', style: { fontSize: '14px' },
+ html: '&larr; Drag items from the list on the left or from &darr; the draggable div. <a href="http://github.com/voloko/ukijs.org/blob/master/examples/core-examples/dnd/dnd.js">Source</a>, <a href="http://blog.ukijs.org/2010/03/16/drag-and-drop-in-uki/">about</a> ' },
+ { view: 'ScrollableList', rect: '0 0 300 600', anchors: 'left top bottom', id: 'source',
+ draggable: true, textSelectable: false, multiselect: true },
+ { view: 'Label', rect: '350 50 150 150', anchors: 'left top', text: 'drop target',
+ style: { fontSize: '25px', textAlign: 'center' },
+ background: 'cssBox(border:2px dashed #CCC; background:#EEE)', name: 'target' },
+ { view: 'Label', rect: '350 250 150 150', anchors: 'left top', text: 'drop target',
+ style: { fontSize: '25px', textAlign: 'center' },
+ background: 'cssBox(border:2px dashed #CCC; background:#EEE)', name: 'target' }
+]).attachTo(window, '1000 600');
+
+var data = [];
+for (var i=0; i < 8000; i++) {
+ data[i] = 'Row ' + Math.random();
+};
+uki('#source List')
+ .data(data)
+ .dragstart(function(e) {
+ e.dataTransfer.setDragImage(uki({ view: 'Label', rect: '100 20', anchors: 'left top',
+ inset: '0 5', background: 'cssBox(border: 1px solid #CCC;background:#EEF)',
+ text: this.selectedIndexes().length + ' rows' })
+ , 10, 10);
+ e.dataTransfer.effectAllowed = 'copy';
+ e.dataTransfer.setData('text/plain', this.selectedRows().join('\n'));
+ }).parent().layout();
+
+
+uki.dom.bind(document.getElementById('draggable'), 'dragstart', function(e) {
+ e.dataTransfer.setDragImage(uki.createElement('div', 'background:blue;width:20px;height:20px'), 5, 5);
+ e.dataTransfer.effectAllowed = 'copy';
+ e.dataTransfer.setData('text/plain', 'test');
+});
+
+
+uki('[name=target]')
+ .dragover(function(e) {
+ e.preventDefault();
+ e.dataTransfer.dropEffect = 'copy';
+ })
+ .dragenter(function(e) {
+ this.text('over');
+ })
+ .dragleave(function(e) {
+ this.text('drop target');
+ })
+ .drop(function(e) {
+ e.preventDefault();
+ this.text('droped');
+ alert(e.dataTransfer.getData('text/plain'))
+ setTimeout(uki.proxy(function() {
+ this.text('drop target');
+ }, this), 100)
+ });
41 examples/core-examples/flow/flow.js
View
@@ -0,0 +1,41 @@
+/**
+@example_title Vertical and Horizontal flows
+@example_order 3062
+@example_html
+ <script src="/src/uki.cjs"></script>
+ <script src="flow.js"></script>
+*/
+
+
+// vertical flow with a single label on the left of the page
+uki({ view: 'VFlow', rect: '10 10 100 0', anchors: 'left top', background: '#CCC', className: 'flow', childViews: [
+ { view: 'Label', rect: '0 0 100 100', anchors: 'left top', inset: '1 5', html: '<a href="#">Link 1</a>' }
+]}).attachTo(window, '100 100');
+
+// horizontal flow with 2 labels at the top of the page
+uki({ view: 'HFlow', rect: '120 10 0 100', anchors: 'left top', background: '#CCC', className: 'flow', childViews: [
+ { view: 'Label', rect: '0 0 100 20', anchors: 'left top', inset: '1 5', html: '<a href="#">Link 1</a>' },
+ { view: 'Label', rect: '0 0 100 20', anchors: 'left top', inset: '1 5', html: '<a href="#">Link 2</a>' }
+]}).attachTo(window, '100 100');
+
+// append 10 labels with links to each flow
+for (var i=1; i < 11; i++) {
+ var l = uki({ view: 'Label', rect: '0 0 100 20', anchors: 'left top', inset: '1 5', html: '<a href="#">Link ' + (i+1) + '</a>' });
+ uki('VFlow').append(l);
+ l = uki({ view: 'Label', rect: '0 0 100 20', anchors: 'left top', inset: '1 5', html: '<a href="#">Link ' + (i+1) + '</a>' });
+ uki('HFlow').append(l);
+};
+
+// resize to the number of labels appended and layout
+uki('VFlow').resizeToContents('height').layout();
+uki('HFlow').resizeToContents('width').layout();
+
+// create button to remove items from vertical flow
+uki({ view: 'Button', rect: '0 0 100 22', text: 'Remove' }).attachTo(window, '100 100').click(function() {
+ uki('VFlow').removeChild(uki('VFlow').childViews()[1]).resizeToContents('height').layout();
+});
+
+// create button to remove items from horizontal flow
+uki({ view: 'Button', rect: '0 30 100 22', text: 'Remove from list 2'}).attachTo(window, '100 100').resizeToContents('width').layout().click(function() {
+ uki('HFlow').removeChild(uki('HFlow').childViews()[1]).resizeToContents('width').layout();
+})
78 examples/core-examples/list/list.js
View
@@ -0,0 +1,78 @@
+/**
+@example_title List
+@example_order 42
+@example_html
+ <div id='test' style='width: 80%; height: 400px;'></div>
+ <script src="/src/uki.cjs"></script>
+ <script src="list.js"></script>
+*/
+
+// pregenerate list data (30000k items)
+var data = ['this is', '30000k long', 'list'];
+for (var i=3; i < 30000; i++) {
+ data[i] = 'item #' + (i+1);
+};
+
+var p = uki(
+ { view: 'HSplitPane', rect: '1000 600', anchors: 'top left right bottom', handleWidth: 1,
+ leftMin: 200, rightMin: 400, handlePosition: 200,
+ leftChildViews: [ // scrollable list on the left
+ { view: 'ScrollPane', rect: '200 600', anchors: 'top left right bottom',
+ // with a wrapping box (test background and border)
+ childViews: { view: 'Box', rect: '10 10 180 900002', anchors: 'top left right', background: '#CCC',
+ // with indierect child list
+ childViews: { view: 'List', rect: '1 1 178 900000', anchors: 'top left right',
+ data: data, rowHeight: 30, id: 'list', throttle: 0, multiselect: true, textSelectable: false }
+ }
+ }
+ ],
+ rightChildViews: [ // other controlls on the right
+
+ // main list controlls
+ { view: 'Box', rect: '0 0 400 100', anchors: 'left top', childViews: [
+ { view: 'Button', rect: '10 10 100 24', anchors: 'left top', text: 'Add +', id: "add", focusable: false },
+ { view: 'TextField', rect: '125 10 50 24', anchors: 'left top', placeholder: 'where', value: '7', id: 'add-n' },
+ { view: 'TextField', rect: '180 10 100 24', anchors: 'left top', placeholder: 'what', value: 'some text', id: 'add-text' },
+
+ { view: 'Button', rect: '10 40 100 24', anchors: 'left top', text: 'Remove -', id: "remove", focusable: false },
+ { view: 'TextField', rect: '125 40 50 24', anchors: 'left top', placeholder: 'which', value: '7', id: 'remove-n' },
+
+ { view: 'Button', rect: '10 70 100 24', anchors: 'left top', text: 'Selected Index', id: 'selectedIndex', focusable: false },
+ { view: 'TextField', rect: '125 70 50 24', anchors: 'left top', placeholder: 'index', value: '7', id: 'selectedIndex-value' }
+ ]},
+
+ // additional list to check list + scrollPane integration
+ { view: 'Box', rect: '350 0 300 400', anchors: 'left top', childViews: [
+ { view: 'Button', rect: '0 0 100 24', anchors: 'left top', id: 'add-s', text: 'add to list 2' },
+ { view: 'Button', rect: '200 0 100 24', anchors: 'right top', id: 'remove-s', text: 'remove from list 2' },
+ { view: 'ScrollPane', rect: '0 30 300 270', anchors: 'left top', childViews: [
+ { view: 'List', rect: '0 0 300 270', anchors: 'left top rigth', minSize: '0 270', data: ['sample #1', 'sample #2', 'sample #3', 'sample #4'], id: 'list2' }
+ ]}
+ ] }
+
+
+ ]
+ }
+).attachTo( document.getElementById('test'), '1000 600' )
+
+// first list controlls
+uki('#add', p).click(function() {
+ uki('#list')[0].addRow(uki('#add-n').value() || 0, uki('#add-text').value() || 'sample')
+});
+
+uki('#remove', p).click(function() {
+ uki('#list')[0].removeRow(uki('#remove-n').value());
+});
+
+uki('#selectedIndex').click(function() {
+ uki('#list').selectedIndex(uki('#selectedIndex-value').value())
+});
+
+// second list controlls
+uki('#add-s').click(function() {
+ uki('#list2').addRow(0, 'text');
+});
+
+uki('#remove-s').resizeToContents('width').layout().click(function() {
+ uki('#list2').removeRow(0);
+});
41 examples/core-examples/popup/popup.js
View
@@ -0,0 +1,41 @@
+/**
+@example_title Popup
+@example_order 52
+@example_html
+ <style>body, html { overflow: hidden; margin: 0; padding: 0; }</style>
+ <div id="test" style="width: 90%; height: 300px;"></div>
+ <script src="/src/uki.cjs"></script>
+ <script src="popup.js"></script>
+*/
+
+// create 8 buttons
+uki({ view: 'Box', rect: '1000 400', anchors: 'left top', childViews: [
+ { view: 'Button', rect: '10 370 100 24', anchors: 'left top', text: 'Left Bottom', id: 'left_bottom' },
+ { view: 'Button', rect: '200 370 100 24', anchors: 'left top', text: 'Right Bottom', id: 'right_bottom' },
+ { view: 'Button', rect: '10 10 100 24', anchors: 'left top', text: 'Left Top', id: 'left_top' },
+ { view: 'Button', rect: '200 10 100 24', anchors: 'left top', text: 'Rigth Top', id: 'right_top' },
+ { view: 'Box', rect: '400 0 400 400', anchors: 'left top', childViews: [
+ { view: 'Button', rect: '70 310 100 24', anchors: 'left top', text: 'Left Bottom', id: 'h_left_bottom' },
+ { view: 'Button', rect: '200 310 100 24', anchors: 'left top', text: 'Right Bottom', id: 'h_right_bottom' },
+ { view: 'Button', rect: '70 70 100 24', anchors: 'left top', text: 'Left Top', id: 'h_left_top' },
+ { view: 'Button', rect: '200 70 100 24', anchors: 'left top', text: 'Rigth Top', id: 'h_right_top' }
+ ] }
+] }).attachTo( window, '1000 400' );
+
+// on button click
+uki('Button').click(function() {
+ var button = this;
+ // find relative popup and toggle it
+ uki('Popup').grep(function(e) { return e.relativeTo() == button; }).toggle();
+});
+
+// attach on popup per button
+uki({ view: 'Popup', rect: '120 120', anchors: 'left bottom', shadow: 'theme(shadow-big)', relativeTo: uki('#left_bottom')[0] })[0].show();
+uki({ view: 'Popup', rect: '120 120', anchors: 'left top', visible: true, relativeTo: uki('#left_top')[0] }).attachTo( window );
+uki({ view: 'Popup', rect: '120 120', anchors: 'right bottom', relativeTo: uki('#right_bottom')[0] }).show();
+uki({ view: 'Popup', rect: '120 120', anchors: 'right top', relativeTo: uki('#right_top')[0] }).show();
+
+uki({ view: 'Popup', rect: '120 120', anchors: 'left bottom', horizontal: true, relativeTo: uki('#h_left_bottom')[0] }).show();
+uki({ view: 'Popup', rect: '120 120', anchors: 'left top', horizontal: true, relativeTo: uki('#h_left_top')[0] }).show();
+uki({ view: 'Popup', rect: '120 120', anchors: 'right bottom', horizontal: true, relativeTo: uki('#h_right_bottom')[0] }).show();
+uki({ view: 'Popup', rect: '120 120', anchors: 'right top', horizontal: true, relativeTo: uki('#h_right_top')[0] }).show();
34 examples/core-examples/resizeToContents/resizeToContents.js
View
@@ -0,0 +1,34 @@
+/**
+@example_title Resize to contents
+@example_order 3071
+@example_html
+ <div id='test' style='width: 90%; height: 350px;'></div>
+ <script src="/src/uki.cjs"></script>
+ <script src='resizeToContents.js'></script>
+*/
+
+
+uki({
+ view: 'Box', rect: '1000 600', anchors: 'left right bottom top', background: '#CCF',
+ childViews: [
+ {view: 'Box', rect: '790 390 200 200', // container box
+ anchors: 'right bottom', // anchored to the bottom (grow up)
+ background: '#CCC', childViews:
+ { view: 'Label', rect: '200 200', // label with long text
+ anchors: 'top left rigth', // anchored to the top right (grow down)
+ multiline: 'true',
+ text: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
+ inset: '3 3', id: 'target'}
+ },
+ {view: 'Button', rect: '10 10 100 24', anchors: 'left top', text: 'resize', id: 'doIt' }
+ ]
+}).attachTo( document.getElementById('test'), '1000 600' )
+
+// on click
+uki('#doIt').click(function () {
+ uki('#target')
+ .html(uki('#target').html() + ' Lorem ipsum dolor sit amet, consectetur adipisicing elit ') // add more text
+ .resizeToContents('height').parent().resizeToContents('height').layout(); // resize to contents and relayout
+});
+
+uki('#doIt').resizeToContents('width').layout(); // fix button size
28 examples/core-examples/scrollPane/scrollPane.js
View
@@ -0,0 +1,28 @@
+/**
+@example_title Scroll pane
+@example_order 61
+@example_html
+ <style>body, html { overflow: hidden; margin: 0; padding: 0; }</style>
+ <script src="/src/uki.cjs"></script>
+ <script src="scrollPane.js"></script>
+*/
+
+uki([
+ { view: 'HSplitPane', rect: '0 0 1000 600', anchors: 'left top right bottom',
+ handlePosition: 300, autogrowLeft: false, autogrowRight: true, autogrowLeft: false, handleWidth: 1, rightMin: 400, leftMin: 150,
+ leftChildViews:
+ { view: 'ScrollPane', rect: '0 0 300 600', anchors: 'top left right bottom', background: '#0F0', name: 'pane_1',
+ childViews: { view: 'Base', rect: '10 10 280 300', anchors: 'top left right', background: '#F00' }
+ },
+ rightPane: {
+ background: '#D0D7E2',
+ childViews: { view: 'ScrollPane', rect: '0 0 699 600', anchors: 'top left right bottom',
+ scrollableH: true, scrollableV: true, name: 'pane_2',
+ childViews: { view: 'Box', rect: '10 10 480 300', anchors: 'top left', background: '#F00', childViews: [
+ { view: 'Label', rect: '5 5 100 100', anchors: 'left top', multiline: true,
+ text: 'try resizing page or drag split pane to see scroll bars' }
+ ] }
+ }
+ }
+ }
+]).attachTo( window, '1000 600' );
23 examples/core-examples/slider/slider.js
View
@@ -0,0 +1,23 @@
+/**
+@example_title Slider
+@example_order 3122
+@example_html
+ <div id='test' style='width: 50%; height: 100px; background: #EEE'></div>
+ <script src="/src/uki.cjs"></script>
+ <script src="slider.js"></script>
+*/
+
+uki({ view: 'Box', rect: '500 100', anchors: 'left top right bottom', childViews: [
+ { view: 'Label', rect: '10 12 70 18', anchors: 'left top', text: 'Continuous' },
+ { view: 'Slider', rect: '90 12 300 18', anchors: 'left right top' },
+ { view: 'TextField', rect: '400 10 90 22', anchors: 'right top' },
+ { view: 'Label', rect: '10 68 70 18', anchors: 'left top', text: 'With steps' },
+ { view: 'Slider', rect: '90 68 300 18', anchors: 'left right top', values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] },
+ { view: 'TextField', rect: '400 66 90 22', anchors: 'right top' }
+ ]})
+ .attachTo( document.getElementById('test'), '500 100' );
+
+uki('Slider').change(function() {
+ this.nextView().value(this.value());
+}).change();
+
35 examples/core-examples/splitPane/splitPane.js
View
@@ -0,0 +1,35 @@
+/**
+@example_title Split pane
+@example_order 31
+@example_html
+ <style>body, html { overflow: hidden; margin: 0; padding: 0; }</style>
+ <script src="/src/uki.cjs"></script>
+ <script src="splitPane.js"></script>
+*/
+
+uki(
+{ // create a split pane...
+ view: 'HSplitPane', rect: '1000 600', anchors: 'left top right bottom',
+ handlePosition: 300, leftMin: 200, rightMin: 300,
+ // ...with button on the left
+ leftChildViews: { view: 'Button', rect: '10 10 280 24', anchors: 'top left right', text: 'Clear text field' },
+ // ...and a vertical split pane on the right...
+ rightChildViews: [
+ { view: 'VSplitPane', rect: '693 600', anchors: 'left top right bottom', vertical: true,
+ // ...with text field in the top part
+ topChildViews: { view: 'TextField', rect: '10 10 280 24', anchors: 'top left', value: '0', id: 'field' },
+ // ...and a slider in the bottom
+ bottomChildViews: { view: 'Slider', rect: '10 10 673 24', anchors: 'top right left' }
+ }
+ ]
+}).attachTo( window, '1000 600' );
+
+// on slider change update text field
+uki('HSplitPane Slider').bind('change', function() {
+ uki('TextField').value(this.value())
+});
+
+// on button click clear the text field
+uki('Button[text~="Clear"]').bind('click', function() {
+ uki('#field').value('') // find by id
+}).parent();
39 examples/core-examples/splitPaneExtended/splitPaneExtended.js
View
@@ -0,0 +1,39 @@
+/**
+@example_title Complex split pane
+@example_order 1032
+@example_html
+ <style>body, html { overflow: hidden; margin: 0; padding: 0; }</style>
+ <script src="/src/uki.cjs"></script>
+ <script src="splitPaneExtended.js"></script>
+*/
+
+uki(
+ { view: 'HSplitPane', rect: '1000 600', anchors: 'left top right bottom', handlePosition: 200, rightMin: 500, handleWidth: 1, id: 'top',
+ leftPane: { background: '#FFF' },
+ rightChildViews: { view: 'HSplitPane', rect: '799 600', anchors: 'left top right bottom', id: 'second',
+ handlePosition: 300, autogrowRight: true, autogrowLeft: false, leftMin: 200, rightMin: 300, handleWidth: 1,
+ leftPane: { background: '#D0D7E2', childViews: [
+ { view: 'Button', rect: '10 566 280 24', anchors: 'bottom left right', text: 'middle pane', focusable: false }
+ ]},
+ rightChildViews: [
+ { view: 'VSplitPane', rect: '498 600', anchors: 'left top right bottom',
+ topChildViews: [
+ { view: 'Button', rect: '10 10 280 24', anchors: 'top left', text: 'top pane' },
+ { view: 'Button', rect: '209 160 280 24', anchors: 'bottom right', text: 'top pane' }
+ ],
+ bottomPane: { background: '#FFF', childViews: [
+ { view: 'Box', rect: '0 0 499 40', anchors: 'top right left', background: 'cssBox(background:#EDF3FE;border-bottom:1px solid #999)' },
+ { view: 'Slider', rect: '10 50 473 24', anchors: 'top right left' },
+ { view: 'Label', rect: '10 80 479 300', anchors: 'top left right bottom', multiline: true, html: 'Sample content ', id: 'workpane' }
+ ]}
+ }
+ ]
+ }
+ }
+).attachTo( window, '1000 600', {minSize: '600 0'} );
+
+// when we resize second split pane and hit border, try resizing first pane
+var top = uki('#top')[0];
+uki('HSplitPane:eq(1)').bind('handleMove', function(e) {
+ if (e.handlePosition > e.dragValue) top.handlePosition(top.handlePosition() - (e.handlePosition - e.dragValue) ).layout();
+});
33 examples/core-examples/stress/stress.js
View
@@ -0,0 +1,33 @@
+/**
+@example_title Background stress test
+@example_order 3000
+@example_html
+ <style>body, html { margin: 0; padding: 0; };</style>
+ <script src="/src/uki.cjs"></script>
+ <script src="stress.js"></script>
+*/
+
+
+function button (i) {
+ return uki.build({
+ view: 'Button',
+ rect: '5 ' + i * 30 + ' ' + (700 - i) + ' 25',
+ anchors: 'top left right',
+ autosize: 'width',
+ text: 'button #' + (i + 1)
+ });
+}
+
+var c = uki({
+ view: 'Box',
+ rect: '0 0 800 1000',
+ anchors: 'top bottom right left',
+ autosize: 'width height'
+});
+
+for (var i=0; i < 100; i++) {
+ c.append(button(i));
+};
+
+c.attachTo( window );
+c[0].dom().style.overflow = 'visible';
1  examples/core-examples/table/library.js
View
1 addition, 0 deletions not shown
71 examples/core-examples/table/searchable.js
View
@@ -0,0 +1,71 @@
+/**
+ * Search with chunks
+ */
+window.Searchable = uki.newClass(uki.view.Observable, new function() {
+ this.chunkSize = 100;
+ this.chunkTimeout = 20;
+
+ this.init = function(data) {
+ this.items = data;
+ };
+
+ this.search = function(query, callback) {
+ stopSearch.call(this);
+
+ this._query = query;
+ var iterator = this.createIterator(query, callback);
+
+ this.trigger('search.start', iterator);
+ filterChunk.call(this, iterator);
+ };
+
+ this.matchRow = function( row, iterator ) { return false; };
+
+ this.createIterator = function(query, callback) {
+ return {
+ query: query,
+ iteration: 0,
+ found: 0,
+ callback: callback
+ };
+ };
+
+ this._bindToDom = function() { return true };
+
+ function filterChunk(iterator) {
+ var filtered = 0,
+ _this = this,
+ foundInChunk = [],
+ item;
+
+ while(iterator.iteration < this.items.length) {
+ if (filtered == this.chunkSize) {
+ if (foundInChunk.length) this.trigger('search.foundInChunk', foundInChunk);
+ this._searchTimer = setTimeout(function() { filterChunk.call(_this, iterator); }, this.chunkTimeout);
+ return;
+ }
+ item = this.items[iterator.iteration];
+ if (this.matchRow( item, iterator )) {
+ iterator.found++;
+ foundInChunk.push(item);
+ this.trigger('search.found', item, iterator);
+ if (iterator.callback) iterator.callback(item, iterator);
+ } else {
+ this.trigger('search.missed', item, iterator);
+ }
+ iterator.iteration++;
+ filtered++;
+ }
+ this.trigger('search.foundInChunk', foundInChunk);
+
+ stopSearch.call(this);
+ this.trigger('search.finish', iterator);
+ };
+
+ function stopSearch () {
+ if (this._searchTimer) {
+ clearTimeout(this._searchTimer);
+ this._searchTimer = false;
+ }
+ }
+});
92 examples/core-examples/table/table.js
View
@@ -0,0 +1,92 @@
+/**
+@example_title Table
+@example_order 42
+@example_html
+ <style>body, html { margin: 0; padding: 0; overflow:hidden; };</style>
+ <script src="/src/uki.cjs"></script>
+ <script src="searchable.js"></script>
+ <script src="table.js"></script>
+*/
+
+
+// custom formatter for duration column
+function formatTime (t) {
+ var m = Math.floor(t/60/1000),
+ s = Math.floor(t/1000 - m * 60);
+
+ return m + ':' + (s > 9 ? s : '0' + s);
+}
+
+// formatter for highlighted strings
+var hlt = '';
+function formatHlted (t) {
+ return t;
+ return hlt ? (t || '').replace(hlt, '<strong>' + hlt + '</strong>') : t;
+}
+
+uki({ view: 'HSplitPane', rect: '1000 1000', anchors: 'left top right bottom', handleWidth: 1, handlePosition: 199,
+ leftMin: 150, rightMin: 400,
+ leftPane: { background: '#D0D7E2', childViews: [ // search panel
+ { view: 'TextField', rect: '5 18 189 22', anchors: 'left top right', placeholder: 'search' }
+ ] },
+ rightChildViews: [ // table with resizable columns
+ { view: 'Table', rect: '0 0 800 1000', minSize: '0 200', anchors: 'left top right bottom', columns: [
+ { view: 'table.NumberColumn', label: 'ID', width: 40 },
+ { view: 'table.CustomColumn', label: 'Name', resizable: true, minWidth: 100, width: 250, formatter: formatHlted },
+ { view: 'table.NumberColumn', label: 'Time', resizable: true, width: 50, formatter: formatTime },
+ { view: 'table.CustomColumn', label: 'Artist', resizable: true, minWidth: 100, width: 150, formatter: formatHlted },
+ { view: 'table.CustomColumn', label: 'Album', resizable: true, minWidth: 100, width: 150, formatter: formatHlted },
+ { view: 'table.CustomColumn', label: 'Genre', resizable: true, width: 100 },
+ { view: 'table.NumberColumn', label: 'Rating', resizable: true, width: 30 },
+ { view: 'table.NumberColumn', label: 'Play Count', resizable: true, width: 30 }
+ ], multiselect: true, style: {fontSize: '11px', lineHeight: '11px'} },
+ { view: 'Label', rect: '200 200 400 20', anchors: 'top', textAlign: 'center', text: 'Loading...', id: 'loading' }
+ ]
+ }
+).attachTo( window, '1000 1000' );
+
+// searchable model
+window.DummyModel = uki.newClass(Searchable, new function() {
+ this.init = function(data) {
+ this.items = data;
+ uki.each(this.items, function(i, row) {
+ row.searchIndex = row[1].toLowerCase();
+ })
+ };
+
+ this.matchRow = function(row, iterator) {
+ return row.searchIndex.indexOf(iterator.query) > -1;
+ };
+});
+
+// dinamicly load library json
+window.onLibraryLoad = function(data) {
+ uki('#loading').visible(false);
+ var model = new DummyModel(data),
+ lastQuery = '',
+ table = uki('Table');
+
+ model.bind('search.foundInChunk', function(chunk) {
+ table.data(table.data().concat(chunk)).layout();
+ });
+
+ table.data(model.items).layout();
+
+ uki('TextField').bind('keyup click', function() {
+ if (this.value().toLowerCase() == lastQuery) return;
+ lastQuery = this.value().toLowerCase();
+ if (lastQuery.match(/\S/)) {
+ hlt = lastQuery;
+ table.data([]);
+ model.search(lastQuery);
+ } else {
+ hlt = '';
+ table.data(model.items);
+ }
+ });
+ document.body.className += '';
+};
+var script = document.createElement('script'),
+ head = document.getElementsByTagName('head')[0];
+script.src = 'library.js';
+head.insertBefore(script, head.firstChild);
BIN  examples/core-examples/toolbar/icon.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
44 examples/core-examples/toolbar/toolbar.js
View
@@ -0,0 +1,44 @@
+/**
+@example_title Toolbar
+@example_order 51
+@example_html
+ <style>body, html { margin: 0; padding: 0; };</style>
+ <script src="/src/uki.cjs"></script>
+ <script src="toolbar.js"></script>
+*/
+
+var html = '<img src="icon.png" width="24" height="24" style="position: absolute; top: 3px; left: -26px;" /> Icon';
+
+uki(
+ { view: 'HSplitPane', rect: '1000 600', anchors: 'left top right bottom',
+ handlePosition: 400,
+ leftChildViews: { view: 'Box', rect: '400 600', anchors: 'left top right bottom', background: '#EEE', childViews: [
+ { view: 'Toolbar', rect: '0 40 400 24', anchors: 'left top right', background: 'theme(panel)', buttons: [
+ { text: 'Edit' },
+ { text: 'Push the button'},
+ { text: 'Shorter 1' },
+ { text: 'Shorter 2' },
+ { text: 'Shorter 3' },
+ { text: 'Shorter 4' },
+ { text: 'Shorter x5' },
+ { text: 'Shorter 1' },
+ { text: 'Shorter 21' },
+ { text: 'Shorter 3' },
+ { text: 'Shorter 4' },
+ { text: 'Shorter 5' },
+ { text: 'Shorter 1' },
+ { text: 'Shorter 2' },
+ { text: 'Shorter 3' },
+ { text: 'Shorter 4' },
+ { text: 'Shorter 5' }
+ ]}
+ ]},
+ rightChildViews: { view: 'Button', rect: '0 0 100 100', anchors: 'left top', text: 'hello world', id: 'button', focusable: false }
+ }
+).attachTo( window, '1000 600' );
+
+uki({ view: 'Popup', rect: '0 0 100 100', anchors: 'left top', relativeTo: uki('#button')[0], id: 'test' }).show();
+
+uki('#button').click(function() {
+ uki('#test').toggle();
+});
BIN  examples/core-examples/twitter/bubble.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/twitter/i/bubble-c.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/twitter/i/bubble-h.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/twitter/i/bubble-m.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/twitter/i/bubble-v.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/twitter/i/loading.gif
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1  examples/core-examples/twitter/tweets.json
View
@@ -0,0 +1 @@
+jsonp1268984584605([{"created_at":"Fri Mar 19 06:55:41 +0000 2010","truncated":false,"place":null,"source":"<a href=\"http://www.atebits.com/\" rel=\"nofollow\">Tweetie</a>","contributors":null,"coordinates":null,"in_reply_to_status_id":null,"favorited":false,"geo":null,"user":{"created_at":"Wed Apr 11 17:46:18 +0000 2007","description":"ajaxian, palm, and human dev aggregator","profile_text_color":"000000","screen_name":"dalmaer","statuses_count":7350,"following":null,"profile_background_image_url":"http://a1.twimg.com/profile_background_images/1673902/main-bg.jpg","favourites_count":7,"profile_link_color":"0000ff","followers_count":5824,"url":"http://almaer.com/blog","contributors_enabled":false,"profile_background_tile":false,"friends_count":878,"profile_background_color":"40ACDA","location":"Palo Alto, CA","geo_enabled":false,"profile_sidebar_fill_color":"DEE1D8","protected":false,"name":"Dion Almaer","verified":false,"notifications":null,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"C8C8C8","id":4216361,"lang":"en","utc_offset":-28800,"profile_image_url":"http://a1.twimg.com/profile_images/292949152/dionprofile_normal.png"},"in_reply_to_user_id":null,"in_reply_to_screen_name":null,"id":10711164437,"text":"MessagePack: \"Extremely efficient object serialization library. It's like JSON, but very fast and small.\" http://msgpack.sourceforge.net/"},{"in_reply_to_status_id":null,"contributors":null,"place":null,"truncated":false,"coordinates":null,"source":"<a href=\"http://apiwiki.twitter.com/\" rel=\"nofollow\">API</a>","geo":null,"in_reply_to_user_id":null,"user":{"following":true,"profile_background_image_url":"http://s.twimg.com/a/1268699350/images/themes/theme9/bg.gif","favourites_count":1,"description":"","contributors_enabled":false,"profile_link_color":"2FC2EF","url":"http://softwaremaniacs.org/about/","geo_enabled":false,"profile_background_tile":false,"profile_background_color":"1A1B1F","location":"Moscow, Russia","verified":false,"profile_sidebar_fill_color":"252429","notifications":false,"time_zone":"Moscow","profile_sidebar_border_color":"181A1E","followers_count":741,"protected":false,"lang":"en","profile_image_url":"http://a3.twimg.com/profile_images/742161983/photo_normal.png","name":"\u0418\u0432\u0430\u043d \u0421\u0430\u0433\u0430\u043b\u0430\u0435\u0432","created_at":"Fri Mar 20 23:42:14 +0000 2009","friends_count":24,"id":25600819,"statuses_count":1075,"utc_offset":10800,"profile_text_color":"666666","screen_name":"isagalaev"},"in_reply_to_screen_name":null,"id":10710920482,"created_at":"Fri Mar 19 06:45:43 +0000 2010","favorited":false,"text":"\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0430\u043a \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u043f\u0438\u0441\u044c\u043c\u0430 \"\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e \u0432\u0451\u0440\u0441\u0442\u043a\u0435. \u041a\u0430\u043a \u043c\u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c\u2026 \" + 5-10 \u041a\u0411 \u043a\u043e\u0434\u0430. \u041c\u043e\u0436\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438\u2026"},{"created_at":"Fri Mar 19 06:36:12 +0000 2010","in_reply_to_screen_name":null,"place":null,"source":"<a href=\"http://www.atebits.com/\" rel=\"nofollow\">Tweetie</a>","coordinates":null,"in_reply_to_status_id":null,"geo":null,"user":{"contributors_enabled":false,"created_at":"Wed Apr 11 17:46:18 +0000 2007","description":"ajaxian, palm, and human dev aggregator","favourites_count":7,"profile_text_color":"000000","screen_name":"dalmaer","following":true,"profile_background_image_url":"http://a1.twimg.com/profile_background_images/1673902/main-bg.jpg","geo_enabled":false,"profile_link_color":"0000ff","url":"http://almaer.com/blog","profile_background_tile":false,"verified":false,"profile_background_color":"40ACDA","location":"Palo Alto, CA","profile_sidebar_fill_color":"DEE1D8","protected":false,"followers_count":5824,"name":"Dion Almaer","statuses_count":7348,"notifications":false,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"C8C8C8","id":4216361,"lang":"en","utc_offset":-28800,"friends_count":877,"profile_image_url":"http://a1.twimg.com/profile_images/292949152/dionprofile_normal.png"},"in_reply_to_user_id":null,"contributors":null,"id":10710682727,"favorited":false,"truncated":false,"text":"RT @maxkiesler SmartPhone design templates for Android, iPhone and Palm Pre http://bit.ly/ci7Ie0 :) Very cool!"},{"contributors":null,"truncated":false,"created_at":"Fri Mar 19 06:26:18 +0000 2010","in_reply_to_screen_name":null,"place":null,"source":"<a href=\"http://www.atebits.com/\" rel=\"nofollow\">Tweetie</a>","coordinates":null,"geo":null,"user":{"created_at":"Wed Apr 11 17:46:18 +0000 2007","friends_count":877,"description":"ajaxian, palm, and human dev aggregator","profile_text_color":"000000","screen_name":"dalmaer","following":null,"profile_background_image_url":"http://a1.twimg.com/profile_background_images/1673902/main-bg.jpg","geo_enabled":false,"profile_link_color":"0000ff","url":"http://almaer.com/blog","statuses_count":7347,"profile_background_tile":false,"profile_background_color":"40ACDA","location":"Palo Alto, CA","contributors_enabled":false,"followers_count":5823,"favourites_count":7,"profile_sidebar_fill_color":"DEE1D8","protected":false,"verified":false,"name":"Dion Almaer","notifications":null,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"C8C8C8","id":4216361,"lang":"en","utc_offset":-28800,"profile_image_url":"http://a1.twimg.com/profile_images/292949152/dionprofile_normal.png"},"favorited":false,"in_reply_to_status_id":null,"id":10710424539,"in_reply_to_user_id":null,"text":"I can't believe I sat next to @bgoldy at the OSBC panel today and didn't bug him about implementing Canvas in IE9. That is restraint."},{"created_at":"Fri Mar 19 06:24:46 +0000 2010","truncated":false,"in_reply_to_status_id":null,"place":null,"source":"<a href=\"http://www.atebits.com/\" rel=\"nofollow\">Tweetie</a>","coordinates":null,"in_reply_to_screen_name":null,"geo":null,"user":{"created_at":"Wed Apr 11 17:46:18 +0000 2007","friends_count":876,"description":"ajaxian, palm, and human dev aggregator","statuses_count":7346,"profile_text_color":"000000","screen_name":"dalmaer","following":null,"profile_background_image_url":"http://a1.twimg.com/profile_background_images/1673902/main-bg.jpg","favourites_count":7,"contributors_enabled":false,"profile_link_color":"0000ff","url":"http://almaer.com/blog","geo_enabled":false,"profile_background_tile":false,"profile_background_color":"40ACDA","location":"Palo Alto, CA","verified":false,"profile_sidebar_fill_color":"DEE1D8","protected":false,"name":"Dion Almaer","notifications":null,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"C8C8C8","followers_count":5823,"id":4216361,"lang":"en","utc_offset":-28800,"profile_image_url":"http://a1.twimg.com/profile_images/292949152/dionprofile_normal.png"},"favorited":false,"in_reply_to_user_id":null,"id":10710384855,"contributors":null,"text":"Express: A Sinatra inspired Node.js Web framework http://expressjs.com/"},{"created_at":"Fri Mar 19 06:23:47 +0000 2010","favorited":false,"in_reply_to_status_id":null,"retweeted_status":{"created_at":"Fri Mar 19 05:07:35 +0000 2010","favorited":false,"in_reply_to_status_id":null,"place":null,"source":"<a href=\"http://www.seesmic.com/\" rel=\"nofollow\">Seesmic</a>","in_reply_to_screen_name":null,"coordinates":null,"in_reply_to_user_id":null,"contributors":null,"geo":null,"user":{"created_at":"Mon Sep 17 20:12:16 +0000 2007","description":"Front-end web developer, esp. interested in JavaScript and performance.","friends_count":103,"profile_text_color":"333333","screen_name":"bcherry","statuses_count":250,"following":false,"profile_background_image_url":"http://s.twimg.com/a/1268953999/images/themes/theme15/bg.png","favourites_count":0,"profile_link_color":"0084B4","url":"http://www.adequatelygood.com","contributors_enabled":false,"profile_background_tile":false,"geo_enabled":false,"profile_background_color":"022330","location":"San Francisco, CA","verified":false,"profile_sidebar_fill_color":"C0DFEC","protected":false,"name":"Ben Cherry","notifications":false,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"a8c7f7","id":8937792,"lang":"en","utc_offset":-28800,"followers_count":115,"profile_image_url":"http://a1.twimg.com/profile_images/91193424/sqimage_normal.jpg"},"id":10708208072,"truncated":false,"text":"we are all such nerds #crockfordfact (but Nerd.prototype === Crockford!)"},"place":null,"source":"web","in_reply_to_screen_name":null,"coordinates":null,"in_reply_to_user_id":null,"contributors":null,"geo":null,"user":{"created_at":"Fri Mar 13 13:19:17 +0000 2009","description":"I'm a Munich based JavaScript addict, interested in HTML5, SVG, XSLT and file formats in general.","friends_count":56,"profile_text_color":"333333","screen_name":"tobeytailor","statuses_count":167,"following":true,"profile_background_image_url":"http://s.twimg.com/a/1268861138/images/themes/theme1/bg.png","favourites_count":0,"profile_link_color":"0084B4","url":"http://www.xing.com/profile/Tobias_Schneider14","contributors_enabled":false,"profile_background_tile":false,"geo_enabled":false,"profile_background_color":"C0DEED","location":"Munich","verified":false,"profile_sidebar_fill_color":"DDEEF6","protected":false,"name":"Tobias Schneider","notifications":false,"time_zone":"Berlin","profile_sidebar_border_color":"C0DEED","id":24168638,"lang":"en","utc_offset":3600,"followers_count":791,"profile_image_url":"http://a1.twimg.com/profile_images/728501610/n783103017_1589966_50992_normal.jpg"},"id":10710359446,"truncated":false,"text":"RT @bcherry: we are all such nerds #crockfordfact (but Nerd.prototype === Crockford!)"},{"favorited":false,"created_at":"Fri Mar 19 06:19:12 +0000 2010","in_reply_to_status_id":null,"place":null,"in_reply_to_screen_name":null,"source":"<a href=\"http://www.atebits.com/\" rel=\"nofollow\">Tweetie</a>","coordinates":null,"contributors":null,"in_reply_to_user_id":null,"geo":null,"user":{"created_at":"Wed Apr 11 17:46:18 +0000 2007","description":"ajaxian, palm, and human dev aggregator","profile_text_color":"000000","screen_name":"dalmaer","following":null,"profile_background_image_url":"http://a1.twimg.com/profile_background_images/1673902/main-bg.jpg","followers_count":5823,"statuses_count":7345,"profile_link_color":"0000ff","url":"http://almaer.com/blog","profile_background_tile":false,"friends_count":876,"contributors_enabled":false,"profile_background_color":"40ACDA","location":"Palo Alto, CA","favourites_count":7,"profile_sidebar_fill_color":"DEE1D8","protected":false,"geo_enabled":false,"name":"Dion Almaer","notifications":null,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"C8C8C8","id":4216361,"lang":"en","verified":false,"utc_offset":-28800,"profile_image_url":"http://a1.twimg.com/profile_images/292949152/dionprofile_normal.png"},"id":10710242223,"truncated":false,"text":"RT @DmitryBaranovsk: http://twitpic.com/19h784 - This is how rendering is improved in IE in Rapha\u00ebl 1.3.2"},{"created_at":"Fri Mar 19 06:18:26 +0000 2010","retweeted_status":{"created_at":"Fri Mar 19 06:13:33 +0000 2010","contributors":null,"place":null,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"source":"<a href=\"http://www.atebits.com/\" rel=\"nofollow\">Tweetie</a>","coordinates":null,"in_reply_to_user_id":null,"truncated":false,"geo":null,"user":{"created_at":"Wed Nov 05 03:41:46 +0000 2008","friends_count":6,"description":"JavaScript Vector Library","statuses_count":187,"profile_text_color":"666666","screen_name":"RaphaelJS","following":null,"profile_background_image_url":"http://a3.twimg.com/profile_background_images/3310603/Rapha\u00ebl-white-bg.png","favourites_count":7,"contributors_enabled":false,"profile_link_color":"2FC2EF","url":"http://raphaeljs.com/","geo_enabled":false,"profile_background_tile":false,"profile_background_color":"1A1B1F","location":"","verified":false,"profile_sidebar_fill_color":"252429","protected":false,"name":"Rapha\u00ebl","notifications":null,"time_zone":"Sydney","profile_sidebar_border_color":"181A1E","followers_count":2196,"id":17180567,"lang":"en","utc_offset":36000,"profile_image_url":"http://a1.twimg.com/profile_images/63632142/Rapha\u00ebl-white-bg_normal.png"},"id":10710092909,"favorited":false,"text":"Trying out IE9? Check http://raphaeljs.com/ Rapha\u00ebl correctly detects SVG support in IE9 and \u201cjust works\u201d. Fascinating :)"},"contributors":null,"place":null,"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"source":"<a href=\"http://www.tweetdeck.com\" rel=\"nofollow\">TweetDeck</a>","coordinates":null,"in_reply_to_user_id":null,"truncated":false,"geo":null,"user":{"created_at":"Tue Feb 13 00:27:29 +0000 2007","friends_count":174,"description":"Part-man, part-machine, entrepreneur,ruby on rails hacker, musician, game designer ...","statuses_count":2980,"profile_text_color":"000000","screen_name":"tobyhede","following":null,"profile_background_image_url":"http://s.twimg.com/a/1267737153/images/themes/theme1/bg.png","favourites_count":3,"contributors_enabled":false,"profile_link_color":"0000ff","url":"http://topsecretproject.finitestatemachine.com/","geo_enabled":false,"profile_background_tile":false,"profile_background_color":"08783E","location":"Melbourne, Australia","verified":false,"profile_sidebar_fill_color":"e0ff92","protected":false,"name":"Toby Hede","notifications":null,"time_zone":"Melbourne","profile_sidebar_border_color":"87bc44","followers_count":282,"id":768743,"lang":"en","utc_offset":36000,"profile_image_url":"http://a1.twimg.com/profile_images/57871194/toby_normal.png"},"id":10710222861,"favorited":false,"text":"RT @RaphaelJS: Trying out IE9? Check http://raphaeljs.com/ Rapha\u00ebl correctly detects SVG support in IE9 and \u201cjust works\u201d. Fascinating :)"},{"in_reply_to_screen_name":null,"contributors":null,"place":null,"truncated":false,"coordinates":null,"in_reply_to_user_id":null,"source":"<a href=\"http://echofon.com/\" rel=\"nofollow\">Echofon</a>","geo":null,"favorited":false,"user":{"following":false,"profile_background_image_url":"http://a3.twimg.com/profile_background_images/12633131/Twit3.gif","friends_count":144,"description":"jQuery/Merb/DM FTW","profile_link_color":"0000ff","url":"http://www.yehudakatz.com","geo_enabled":false,"profile_background_tile":false,"profile_background_color":"333333","location":"iPhone: 37.786461,-122.394867","verified":false,"favourites_count":8,"profile_sidebar_fill_color":"a8caa0","followers_count":4905,"notifications":false,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"87bc44","protected":false,"lang":"en","statuses_count":2723,"profile_image_url":"http://a1.twimg.com/profile_images/427781590/yehuda_normal.jpg","name":"wycats","created_at":"Thu Aug 30 04:07:52 +0000 2007","id":8526432,"contributors_enabled":false,"utc_offset":-28800,"profile_text_color":"000000","screen_name":"wycats"},"id":10709665355,"created_at":"Fri Mar 19 05:58:07 +0000 2010","in_reply_to_status_id":null,"text":"Man Dr. Horrible never gets old"},{"created_at":"Fri Mar 19 05:55:43 +0000 2010","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"place":null,"source":"<a href=\"http://www.tweetdeck.com\" rel=\"nofollow\">TweetDeck</a>","contributors":null,"in_reply_to_user_id":null,"coordinates":null,"geo":null,"user":{"created_at":"Tue Feb 13 00:27:29 +0000 2007","followers_count":282,"description":"Part-man, part-machine, entrepreneur,ruby on rails hacker, musician, game designer ...","statuses_count":2979,"profile_text_color":"000000","screen_name":"tobyhede","following":null,"profile_background_image_url":"http://s.twimg.com/a/1267737153/images/themes/theme1/bg.png","friends_count":173,"contributors_enabled":false,"profile_link_color":"0000ff","url":"http://topsecretproject.finitestatemachine.com/","profile_background_tile":false,"favourites_count":3,"profile_background_color":"08783E","location":"Melbourne, Australia","geo_enabled":false,"profile_sidebar_fill_color":"e0ff92","protected":false,"verified":false,"name":"Toby Hede","notifications":null,"time_zone":"Melbourne","profile_sidebar_border_color":"87bc44","id":768743,"lang":"en","utc_offset":36000,"profile_image_url":"http://a1.twimg.com/profile_images/57871194/toby_normal.png"},"favorited":false,"id":10709601117,"truncated":false,"text":"hot on the heels of his street press appearance, my brother was on TV yesterday talking about cyberbullying. @leohede"},{"in_reply_to_screen_name":null,"in_reply_to_status_id":null,"place":null,"in_reply_to_user_id":null,"coordinates":null,"source":"web","geo":null,"user":{"following":false,"profile_background_image_url":"http://s.twimg.com/a/1268266151/images/themes/theme7/bg.gif","friends_count":135,"description":"Early adopter, late bloomer","contributors_enabled":false,"profile_link_color":"990000","url":"http://www.entp.com","profile_background_tile":false,"favourites_count":7,"profile_background_color":"EBEBEB","location":"Portland, OR","geo_enabled":false,"profile_sidebar_fill_color":"F3F3F3","verified":false,"notifications":false,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"DFDFDF","protected":false,"lang":"en","profile_image_url":"http://a1.twimg.com/profile_images/18129062/nicolepjbio_normal.jpg","name":"Nicole Ramsey","created_at":"Fri Jan 05 22:24:49 +0000 2007","followers_count":357,"id":600123,"statuses_count":1397,"utc_offset":-28800,"profile_text_color":"333333","screen_name":"chronicole"},"favorited":false,"truncated":false,"contributors":null,"id":10708006269,"created_at":"Fri Mar 19 05:01:15 +0000 2010","text":"It's like someone telling me I'm not crazy\u2014Exploratory Testing on Agile Teams An Elusive Bug: http://bit.ly/bJzTFo"},{"created_at":"Fri Mar 19 03:51:53 +0000 2010","retweeted_status":{"created_at":"Fri Mar 19 03:49:13 +0000 2010","truncated":false,"place":null,"source":"<a href=\"http://twitterrific.com\" rel=\"nofollow\">Twitterrific</a>","contributors":null,"coordinates":null,"in_reply_to_status_id":null,"favorited":false,"geo":null,"user":{"created_at":"Tue Nov 17 00:18:49 +0000 2009","description":"Two time UFC heavy weight champ. The official Frank Mir twitter account.","profile_text_color":"333333","screen_name":"thefrankmir","statuses_count":165,"following":false,"profile_background_image_url":"http://s.twimg.com/a/1268687377/images/themes/theme14/bg.gif","favourites_count":0,"profile_link_color":"009999","followers_count":15492,"url":null,"contributors_enabled":false,"profile_background_tile":true,"friends_count":111,"profile_background_color":"131516","location":"Las Vegas, NV ","geo_enabled":false,"profile_sidebar_fill_color":"efefef","protected":false,"name":"Frank Mir UFC","verified":false,"notifications":false,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"eeeeee","id":90521461,"lang":"en","utc_offset":-28800,"profile_image_url":"http://a1.twimg.com/profile_images/530218434/93052048_normal.jpg"},"in_reply_to_user_id":null,"in_reply_to_screen_name":null,"id":10705520268,"text":"The first 100 people to RT this tweet will be entered to win a #UFC glove signed by me. #contest. Who wants to #win"},"truncated":false,"place":null,"source":"<a href=\"http://www.tweetdeck.com\" rel=\"nofollow\">TweetDeck</a>","contributors":null,"coordinates":null,"in_reply_to_status_id":null,"favorited":false,"geo":null,"user":{"created_at":"Tue Feb 13 00:27:29 +0000 2007","description":"Part-man, part-machine, entrepreneur,ruby on rails hacker, musician, game designer ...","profile_text_color":"000000","screen_name":"tobyhede","statuses_count":2977,"following":true,"profile_background_image_url":"http://s.twimg.com/a/1267737153/images/themes/theme1/bg.png","favourites_count":3,"profile_link_color":"0000ff","followers_count":281,"url":"http://topsecretproject.finitestatemachine.com/","contributors_enabled":false,"profile_background_tile":false,"friends_count":173,"profile_background_color":"08783E","location":"Melbourne, Australia","geo_enabled":false,"profile_sidebar_fill_color":"e0ff92","protected":false,"name":"Toby Hede","verified":false,"notifications":false,"time_zone":"Melbourne","profile_sidebar_border_color":"87bc44","id":768743,"lang":"en","utc_offset":36000,"profile_image_url":"http://a1.twimg.com/profile_images/57871194/toby_normal.png"},"in_reply_to_user_id":null,"in_reply_to_screen_name":null,"id":10705619987,"text":"RT @thefrankmir: The first 100 people to RT this tweet will be entered to win a #UFC glove signed by me. #contest. Who wants to #win"},{"created_at":"Fri Mar 19 03:51:37 +0000 2010","contributors":null,"in_reply_to_status_id":null,"truncated":false,"place":null,"source":"<a href=\"http://www.tweetdeck.com\" rel=\"nofollow\">TweetDeck</a>","coordinates":null,"geo":null,"user":{"created_at":"Tue Feb 13 00:27:29 +0000 2007","friends_count":173,"description":"Part-man, part-machine, entrepreneur,ruby on rails hacker, musician, game designer ...","statuses_count":2977,"profile_text_color":"000000","screen_name":"tobyhede","following":true,"profile_background_image_url":"http://s.twimg.com/a/1267737153/images/themes/theme1/bg.png","favourites_count":3,"contributors_enabled":false,"profile_link_color":"0000ff","url":"http://topsecretproject.finitestatemachine.com/","geo_enabled":false,"profile_background_tile":false,"profile_background_color":"08783E","location":"Melbourne, Australia","verified":false,"profile_sidebar_fill_color":"e0ff92","protected":false,"name":"Toby Hede","notifications":false,"time_zone":"Melbourne","profile_sidebar_border_color":"87bc44","followers_count":281,"id":768743,"lang":"en","utc_offset":36000,"profile_image_url":"http://a1.twimg.com/profile_images/57871194/toby_normal.png"},"in_reply_to_screen_name":null,"in_reply_to_user_id":null,"id":10705609744,"favorited":false,"text":"Recruiter FAIL. They never replied to my email, but they definitely added me to their mailing list."},{"created_at":"Fri Mar 19 03:08:21 +0000 2010","in_reply_to_screen_name":null,"in_reply_to_status_id":null,"favorited":false,"place":null,"source":"<a href=\"http://www.atebits.com/\" rel=\"nofollow\">Tweetie</a>","coordinates":null,"contributors":null,"truncated":false,"geo":null,"user":{"verified":false,"created_at":"Sun Apr 27 20:19:25 +0000 2008","description":"Creator of Ruby on Rails, Partner at 37signals","profile_text_color":"000000","screen_name":"dhh","following":null,"profile_background_image_url":"http://s.twimg.com/a/1268437273/images/themes/theme1/bg.png","profile_link_color":"0000ff","followers_count":18335,"url":"http://www.loudthinking.com","profile_background_tile":false,"friends_count":52,"profile_background_color":"9ae4e8","location":"Chicago, USA","statuses_count":1090,"favourites_count":1,"profile_sidebar_fill_color":"e0ff92","protected":false,"contributors_enabled":false,"name":"DHH","geo_enabled":false,"notifications":null,"time_zone":"Central Time (US & Canada)","profile_sidebar_border_color":"87bc44","id":14561327,"lang":"en","utc_offset":-21600,"profile_image_url":"http://a1.twimg.com/profile_images/67881828/headshot64_normal.jpg"},"in_reply_to_user_id":null,"id":10703926252,"text":"REWORK premieres as #2 on the WSJ hardcover business best-seller list: http://bit.ly/ahvXCG"},{"truncated":false,"created_at":"Fri Mar 19 02:52:33 +0000 2010","in_reply_to_user_id":null,"contributors":null,"in_reply_to_screen_name":null,"retweeted_status":{"truncated":false,"created_at":"Fri Mar 19 00:40:24 +0000 2010","in_reply_to_user_id":null,"contributors":null,"in_reply_to_screen_name":null,"place":null,"source":"<a href=\"http://twitterfeed.com\" rel=\"nofollow\">twitterfeed</a>","coordinates":null,"geo":null,"user":{"created_at":"Wed Oct 22 11:45:45 +0000 2008","description":"We all love Ruby News for the Ruby Hackers","profile_text_color":"333333","screen_name":"ruby_news","following":false,"profile_background_image_url":"http://s.twimg.com/a/1268861138/images/themes/theme7/bg.gif","friends_count":11,"geo_enabled":false,"profile_link_color":"990000","url":null,"profile_background_tile":false,"profile_background_color":"EBEBEB","location":"","statuses_count":2538,"followers_count":1953,"favourites_count":0,"profile_sidebar_fill_color":"F3F3F3","protected":false,"contributors_enabled":false,"verified":false,"name":"Ruby News","notifications":false,"time_zone":"Greenland","profile_sidebar_border_color":"DFDFDF","id":16903992,"lang":"en","utc_offset":-10800,"profile_image_url":"http://a3.twimg.com/profile_images/62597161/skitched-20081022-141814_normal.png"},"in_reply_to_status_id":null,"id":10697699921,"favorited":false,"text":"Selenium Grid Needs a New Maintainer http://bit.ly/deVAPa"},"place":null,"source":"<a href=\"http://apiwiki.twitter.com/\" rel=\"nofollow\">API</a>","coordinates":null,"geo":null,"user":{"created_at":"Sun Jul 08 19:07:00 +0000 2007","description":"web dev/entrepreneur. Ruby, JavaScript, Rails, Ajax, web developer; former D-1 college golfer & IL State Champ","profile_text_color":"666666","screen_name":"holtonma","following":true,"profile_background_image_url":"http://a1.twimg.com/profile_background_images/3700190/twitter_background_r1_c1.png","friends_count":140,"geo_enabled":true,"profile_link_color":"2FC2EF","url":"http://holtsblog.blogspot.com","profile_background_tile":false,"profile_background_color":"1A1B1F","location":"Seattle, WA","statuses_count":3206,"followers_count":201,"favourites_count":81,"profile_sidebar_fill_color":"252429","protected":false,"contributors_enabled":false,"verified":false,"name":"Mark Holton","notifications":false,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"181A1E","id":7331952,"lang":"en","utc_offset":-28800,"profile_image_url":"http://a1.twimg.com/profile_images/197829466/myface_normal.png"},"in_reply_to_status_id":null,"id":10703281626,"favorited":false,"text":"RT @ruby_news: Selenium Grid Needs a New Maintainer http://bit.ly/deVAPa"},{"created_at":"Fri Mar 19 02:10:54 +0000 2010","contributors":null,"in_reply_to_status_id":null,"place":null,"source":"<a href=\"http://www.atebits.com/\" rel=\"nofollow\">Tweetie</a>","favorited":false,"coordinates":null,"truncated":false,"geo":null,"user":{"created_at":"Mon Nov 16 00:47:38 +0000 2009","description":"Brought to you by @adamstac and @pengwynn, The Changelog is a blog and weekly podcast about what's fresh and new in open source.","profile_text_color":"171717","followers_count":544,"screen_name":"changelogshow","following":true,"profile_background_image_url":"http://s.twimg.com/a/1268937079/images/themes/theme14/bg.gif","friends_count":37,"profile_link_color":"225588","url":"http://thechangelog.com/","statuses_count":526,"profile_background_tile":false,"favourites_count":11,"profile_background_color":"ffffff","location":"Texas!","contributors_enabled":false,"geo_enabled":true,"profile_sidebar_fill_color":"efefef","protected":false,"name":"The Changelog","verified":false,"notifications":false,"time_zone":"Mountain Time (US & Canada)","profile_sidebar_border_color":"bfbfbf","id":90286855,"lang":"en","utc_offset":-25200,"profile_image_url":"http://a3.twimg.com/profile_images/544002721/Album-Art_normal.png"},"in_reply_to_screen_name":null,"in_reply_to_user_id":null,"id":10701536705,"text":"Fan of the show? Please take a minute and rate/review us on iTunes and help us get discovered! http://bit.ly/tcl-itunes"},{"in_reply_to_screen_name":null,"created_at":"Fri Mar 19 01:37:07 +0000 2010","in_reply_to_user_id":null,"in_reply_to_status_id":null,"place":null,"source":"<a href=\"http://timespeople.nytimes.com\" rel=\"nofollow\">TimesPeople</a>","coordinates":null,"favorited":false,"contributors":null,"geo":null,"user":{"created_at":"Fri Dec 01 08:23:41 +0000 2006","friends_count":298,"description":"social media angel & self-control freak. as boring as @stephenfry","contributors_enabled":false,"profile_text_color":"333333","screen_name":"mio","following":true,"profile_background_image_url":"http://a3.twimg.com/profile_background_images/67883853/CharcoalDamask.png","favourites_count":31,"profile_link_color":"009999","url":"http://denisov.eu/","geo_enabled":true,"profile_background_tile":true,"profile_background_color":"131516","location":"Moscow, Russia","verified":false,"profile_sidebar_fill_color":"efefef","protected":false,"name":"\u041c\u0438\u043e \u0408\u043e\u0432\u043e\u0432\u0438\u045b","notifications":false,"time_zone":"Moscow","profile_sidebar_border_color":"eeeeee","followers_count":1660,"id":33653,"lang":"en","statuses_count":3497,"utc_offset":10800,"profile_image_url":"http://a1.twimg.com/profile_images/694623514/mio_normal.png"},"id":10700104066,"truncated":false,"text":"Formspring \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u0438 http://nyti.ms/98H0oM \u0410 \u043a\u0440\u0438\u0437\u0438\u0441 \u0434\u0430\u0432\u043d\u043e \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f?"},{"favorited":false,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"place":null,"coordinates":null,"source":"<a href=\"http://echofon.com/\" rel=\"nofollow\">Echofon</a>","contributors":null,"in_reply_to_screen_name":null,"geo":null,"user":{"following":false,"profile_background_image_url":"http://a3.twimg.com/profile_background_images/12633131/Twit3.gif","favourites_count":9,"description":"jQuery/Merb/DM FTW","profile_link_color":"0000ff","url":"http://www.yehudakatz.com","geo_enabled":false,"profile_background_tile":false,"profile_background_color":"333333","location":"iPhone: 37.786461,-122.394867","verified":false,"profile_sidebar_fill_color":"a8caa0","notifications":false,"time_zone":"Pacific Time (US & Canada)","profile_sidebar_border_color":"87bc44","followers_count":4902,"protected":false,"lang":"en","statuses_count":2720,"profile_image_url":"http://a1.twimg.com/profile_images/427781590/yehuda_normal.jpg","name":"wycats","created_at":"Thu Aug 30 04:07:52 +0000 2007","friends_count":144,"id":8526432,"contributors_enabled":false,"utc_offset":-28800,"profile_text_color":"000000","screen_name":"wycats"},"truncated":false,"id":10699562473,"created_at":"Fri Mar 19 01:24:43 +0000 2010","text":"Google translate translates lol"}]);
175 examples/core-examples/twitter/twitter.js
View
@@ -0,0 +1,175 @@
+/**
+@example_title Twitter widget
+@example_order 1001
+@example_html
+ <div id="container" style="margin: 20px; width: 250px; height: 300px;"></div>
+ <script src="/src/uki.cjs"></script>
+ <script src='twitter.js'></script>
+ <p> Example code <a href="http://github.com/voloko/uki/tree/master/app/functional/twitter/">at github</a></p>
+*/
+
+
+var tweets = [], // loaded tweets
+ tweetMap = {}, // map of tweet_id -> tweet
+ loading = false; // are we loading now
+
+// custom background for a tweet
+function bubbleBg () {
+ var prefix = "i/bubble-";
+ return new uki.background.Sliced9({
+ c: [prefix + "c.png", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABj0lEQVQ4jZ2U666CQAyEF1g14A+jvv+jGZ9AiTEG78pXnU1FkwNnkrrr0hm6pW32aBFavBfD/X4P/kxrlmUfa57niaOz2CUiplV7L4ghhHHOyhl71iiCF7ndbmZeVIISK4rCzIumCHXN6/VqdrlcwmQyCdPp9ONa8muaJhyPxzAajUKM0Qxxe2kbyUNi5/M5nE6nsFgsvoS6gLPdbu3F4/HYRC16XRVBxObz+Z9i+iD4woGr1CRBouMKCr0P8IUD90uQvJAz/5H6GBy4PyMcEp2P0kcYVRLkwRf3EMAFJuirf7PZ/EvQa+TaYGq5IYAjPsj1hzra7XbpYV+DAze1JT8klgLd7/cpH32ALxy4aLxb89WHVVWF2WwW1ut1L1F88IUDV30eFSHtQ8vhuFqtrAv4z3W6QrRcXddhuVyaD1xFmLVJtZHIdMGZIoWAHQ4HGxR+2tAZFDNCWFmWaTiY4OOFVJgIU6gI06caYfYF36OLnCHkI1PqkiDwc9HvPRLRi7g6jNoI3sFP61/Puyt4Am0NjZ06AwKpAAAAAElFTkSuQmCC"],
+ v: [prefix + "v.png", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAABDCAYAAACcAiVCAAAAeklEQVRYw+2WsQrAIAxEa///C/MZmTKI19WCS4NCxXdwkxhyvhu8I0LuLjNTrTVlM5O7KyJ0X50kpdzrNXCG1gzMRh1FXxv5ICj7RAYKUBIbttZS3rg2FJvIQAEKGwIFKEABChseXptSSsp82o9+w2mRRwdf1N//f+QHOSTzcjXgSDUAAAAASUVORK5CYII=", false, true],
+ h: [prefix + "h.png", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAUCAYAAADfqiBGAAAAd0lEQVQYGe3BQQ2AQBADwDYpBnihAP9KcIIA7lOyue+ug85orWVES2stFNuIjSSKvu9DsY3YSKLoPE9ET7YRPSFGQoxkG9ETYiTbiJ7e90X0hBiJJKInxEiIkRAjPc+D6Om+b0RP13Wh2EZsJFF0HAeKbcRGEuUHmnolQf2UKf0AAAAASUVORK5CYII="],
+ m: [prefix + "m.png", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAABDCAYAAADOIRgJAAAAiklEQVR42u3VwQkAIAwEQQP2X3FIbEDBrzgpYZnTmZk93PZmtzbHOBKIY1bkkEOOOGZFDjmOHHHMihxyyHkrTlWpQI444ojjKydHHLMix5FDjjhmRQ455JBDjjjOrMghhxxxzIoccshx4pgVOeSQQw454pjVt3EiQgWzEkccbw454pgVOeI4s7q4BXGJRsdjrAwPAAAAAElFTkSuQmCC", false, true]
+ }, "10 10 10 10", {inset: '0 0 7 0'});
+}
+
+// widget layout
+var widget = uki({
+ view: 'Box', rect: '200 300', minSize: '200 300', visible: true, // widget parent view with white background
+ anchors: 'left top right bottom', background: '#FFF', // grow with the the container dom
+ childViews: [
+ { view: 'Box', rect: '200 51', // top panel, with default uki panel bg
+ anchors: 'left top right', background: 'theme(panel)', // width grows, height fixed to 51
+ style: { zIndex: 200 }, childViews: [
+ { view: 'MultilineTextField', rect: '5 5 130 42', // Tweet input field
+ anchors: 'left top right',
+ placeholder: "What's happening?", fontSize: '12px' },
+ { view: 'Button', rect: '140 5 55 24', anchors: 'right top', // Update button
+ text: 'Update' }
+ ] },
+ { view: 'ScrollPane', rect: '0 50 200 250', // Scrollable tweet container
+ anchors: 'left top right bottom', childViews: [
+ { view: 'VFlow', rect: '5 5 190 250', // Flow of tweet views
+ anchors: 'left top right bottom', childViews: [
+ { view: 'Image', rect: '100 0 32 32', anchors: 'left top', src: 'i/loading.gif' }
+ ] }
+ ] }
+ ]
+});
+
+// Tweet contents template
+var tweetTemplate = new uki.theme.Template(
+ '<a href="http://twitter.com/${screen_name}">${screen_name}</a> ${text}'
+);
+
+// layout for a particular tweet
+function layoutTweet (tweet, flow) {
+ var data = {
+ screen_name: tweet.user.screen_name,
+ text: uki.escapeHTML(tweet.text)
+ .replace(/([\w]+:\/\/[a-z0-9$_.+()*,;\/?:@&~=-]+[a-z0-9\/])/ig, '<a href="$1">$1</a>')
+ .replace(/(\@(\w+))/g, '<a href="http://twitter.com/$2">$1</a>')
+ };
+
+ var row = uki({
+ view: 'Box', background: bubbleBg(), // box container with a custom bg
+ rect: '200 80', anchors: 'left top right', // grow with container
+ childViews: [
+ { view: 'Image', rect: '10 10 50 50', anchors: 'left top', // author profile image
+ src: tweet.user.profile_image_url },
+ { view: 'Label', rect: '65 10 120 40', anchors: 'left top right', // tweet text
+ multiline: true, html: tweetTemplate.render(data),
+ fontSize: '11px', lineHeight: '13px', textSelectable: true }
+ ]
+ });
+
+ // resize tweet and children to container width
+ row.rect( new uki.geometry.Rect(flow.rect().width, row.rect().height) );
+
+ // resize height to tweet contents
+ row.find('Label').resizeToContents('height'); // label first ...
+ row.resizeToContents('height'); // ... then row to match label
+ row.rect().height += 20; // ... add 20px space below
+ return row[0];
+}
+
+// update tweet list when new tweets loaded
+function updateTweets (data) {
+ var flow = widget.find('VFlow'), // get the container
+ i = 0,
+ firstRow = flow.childViews()[0], // store current first rendered view
+ firstTweet = tweets[0] || {id:-1}, // and current first tweet data
+ ending = uki('> :last', flow);
+
+ flow.removeChild(ending[0]);
+ while (data[i] && !tweetMap[data[i].id]) { // while new tweets
+ tweetMap[data[i].id] = data[i];
+ flow.insertBefore(layoutTweet(data[i], flow), firstRow); // insert new tweet view
+ tweets.unshift(data[i++]); // ... add tweet to loaded tweets
+ }
+ flow.appendChild(ending[0]);
+ flow.resizeToContents('height'); // resize list to contents
+ flow.parent().layout(); // update dom
+}
+
+// append tweets to the end of the list
+function appendTweets (data) {
+ var flow = widget.find('VFlow'), // get the container
+ ending = uki('> :last', flow);
+
+ loading = false;
+ flow.removeChild(ending[0]);
+ uki.each(data, function(i, tweet) {
+ if (!tweetMap[data[i].id]) {
+ tweetMap[data[i].id] = data[i];
+ flow.appendChild(layoutTweet(tweet, flow));
+ tweets.push(tweet);
+ }
+ });
+ flow.appendChild(ending[0]);
+ // if (data.length < 20) ending.visible(false)
+ flow.resizeToContents('height'); // resize list to contents
+ flow.parent().layout(); // update dom
+}
+
+// post to twitter on update button click
+widget.find('Button[text=Update]').click(function() {
+ // create artificial form and iframe target
+ var form = uki.createElement('form', 'position:absolute;left:-999em', '<input type="text" name="status" value="' + uki.escapeHTML(widget.find('MultilineTextField').value()) + '">'),
+ iframe = uki.createElement('iframe', 'position:absolute;left:-999em');
+ iframe.name = 'target_' + +new Date();
+ form.target = iframe.name;
+ form.method = 'POST';
+ form.action = 'http://twitter.com/statuses/update.xml';
+
+ // append them to body
+ document.body.appendChild(form);
+ document.body.appendChild(iframe);
+
+ // submit form
+ form.submit();
+});
+
+// simplest JSONP request implementation
+function jsonp (url, callback) {
+ var name = 'jsonp' + +new Date,
+ script = document.createElement('script'),
+ head = document.getElementsByTagName('head')[0];
+ name = 'jsonp1268984584605';
+ window[name] = callback;
+ script.src = url.replace(/=\?/, '=' + name);
+ head.insertBefore(script, head.firstChild);
+}
+
+// when we scroll tweet list, load more tweets if less than 50px available
+widget.find('ScrollPane').scroll(function() {
+ if (this.contentsSize().height - this.scrollTop() - this.rect().height < 50) {
+ if (!loading && tweets.length) {
+ jsonp('http://api.twitter.com/1/statuses/home_timeline.json?callback=?&max_id=' + tweets[tweets.length - 1].id, appendTweets);
+ loading = true;
+ }
+ }
+});
+
+// update tweet list every 5 minutes
+setTimeout(function() {
+ if (loading) return;
+ jsonp('http://api.twitter.com/1/statuses/home_timeline.json?callback=?', updateTweets);
+}, 5 * 60 * 1000);
+
+// load first portion of tweets
+jsonp('http://api.twitter.com/1/statuses/home_timeline.json?callback=?', appendTweets);
+
+// attach created widget to dom tree
+widget.attachTo( document.getElementById('container'), '200 300' );
1  examples/core-examples/wave/contacts.json
View
@@ -0,0 +1 @@
+[["Lilya Yapparova","apofema@googlewave.com"],["Alexander Solovyev","badunzo@googlewave.com"],["Leonid Khachaturov","leonidkhachaturov@googlewave.com"],[null,"kinder001@googlewave.com"],["Andrey Okonetchnikov","andrej.okonetschnikow@googlewave.com"],[null,"askhat@googlewave.com"],["Andrew Shitov","ashport@googlewave.com"],[null,"samokhvalov@googlewave.com"],["Andrew Kulinich","4vanger@googlewave.com"],[null,"7r0ggy@googlewave.com"],[null,"agololobov@googlewave.com"],[null,"akorsun@googlewave.com"],["Alexander B","alex.daiv@googlewave.com"],["Aleksander","alex.matrosov@googlewave.com"],[null,"alex.suntsov@googlewave.com"],["Alexander MAZUROV","alexander.mazurov@googlewave.com"],[null,"alexey.blinov@googlewave.com"],[null,"alexey.brodskiy@googlewave.com"],[null,"alexey.chernov@googlewave.com"],["Алексей Осипенко","alexey.osipenko@googlewave.com"],["Alex Kunin","alexkunin@googlewave.com"],[null,"alisheryakupov@googlewave.com"],["Anatoly Rr","anatoly.rr@googlewave.com"],["avk","andrew.v.kovalev@googlewave.com"],["Andrey Fomichev","andrey.fomichev@googlewave.com"],[null,"andrey.nekrasov@googlewave.com"],[null,"andrey.sidorov@googlewave.com"],["Сергей Коротков","angrysix@googlewave.com"],[null,"anlarionov@googlewave.com"],[null,"artemio.rad@googlewave.com"],["Alexey Tokar","azazel.tap@googlewave.com"],["Александр Блейхер","bleykher@googlewave.com"],["Ilia Bogdanovich","bogdanovichiy@googlewave.com"],[null,"cheshirsky@googlewave.com"],[null,"chistikov@googlewave.com"],[null,"chudotvorets@googlewave.com"],[null,"combustion@googlewave.com"],[null,"d.osmakov@googlewave.com"],["Alexander Koshelev","daevaorn@googlewave.com"],["Daniil Dadiomov","ddanya@googlewave.com"],[null,"deerares@googlewave.com"],["Денис Барановский","denis.baranovsky@googlewave.com"],[null,"denis.popovtsev@googlewave.com"],["Dmitry Balabanov","dimonb@googlewave.com"],[null,"dlougach@googlewave.com"],["Mikhail Lebedev","dmblit@googlewave.com"],[null,"dmitry.sukhov@googlewave.com"],[null,"elwedo@googlewave.com"],[null,"epislon@googlewave.com"],[null,"euclid.nikiforov@googlewave.com"],["Chin","fookill@googlewave.com"],[null,"gag.teorver@googlewave.com"],[null,"hcodes2@googlewave.com"],["Vladimir Gorshkov","homer2k@googlewave.com"],["Кирилл Клёнов","horneds@googlewave.com"],[null,"ignat1990@googlewave.com"],[null,"ilya.novoselov@googlewave.com"],[null,"imbolk@googlewave.com"],["Mike Nikitin","int1ch@googlewave.com"],[null,"jaffarr@googlewave.com"],[null,"juanych@googlewave.com"],[null,"k.v.kuznetsov@googlewave.com"],[null,"kanicq@googlewave.com"],[null,"kbakba@googlewave.com"],["KidsKilla .grin! wuz here","kidskilla@googlewave.com"],[null,"kornatik@googlewave.com"],[null,"kt97679@googlewave.com"],[null,"l.pagis@googlewave.com"],[null,"lazarev.i@googlewave.com"],["Elena","le.now.ok@googlewave.com"],[null,"lenokparadize@googlewave.com"],["Lidia Popelo","lilith.lida@googlewave.com"],["Matas Petrikas","matas.petrikas@googlewave.com"],["Nikolay Yaremko aka Maki","mendokusee@googlewave.com"],["Mertas","mertas@googlewave.com"],[null,"mikhail.levin@googlewave.com"],["Michael Roizner","mroizner@googlewave.com"],[null,"my.mityan@googlewave.com"],["andrej","ndreij@googlewave.com"],["Niaz Saifutdinov","niazique@googlewave.com"],["Nugumanov Nurlan","nnugumanov@googlewave.com"],[null,"oksana.mandryka@googlewave.com"],[null,"okun.boris@googlewave.com"],[null,"olesya.nesterenko@googlewave.com"],[null,"pank.dm@googlewave.com"],[null,"pavel.zuev@googlewave.com"],[null,"psushin@googlewave.com"],["puskay","puskay@googlewave.com"],[null,"saltommeister@googlewave.com"],["Sergey Minaev","samscrombi@googlewave.com"],[null,"sergant@googlewave.com"],["Кабанов","sergkabanov@googlewave.com"],[null,"sezory@googlewave.com"],["Sergei Golubev","sgolubev@googlewave.com"],["Андрей Смирнов","smirnov.andrey@googlewave.com"],[null,"smychagin.alexei@googlewave.com"],["Stepan Reznikov","stepan.reznikov@googlewave.com"],[null,"synphonica@googlewave.com"],[null,"telerost@googlewave.com"],[null,"v.tvoih.rukah@googlewave.com"]]
BIN  examples/core-examples/wave/i/body/normal-m.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/body/normal.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/a-down-m.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/a-down-v.gif
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/a-down-v.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/a-down.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/a-normal-m.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/a-normal-v.gif
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/a-normal-v.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/a-normal.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/down-m.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/down-v.gif
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/down-v.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/down.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/normal-m.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/normal-v.gif
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/normal-v.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/normal.png
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  examples/core-examples/wave/i/button/plus-big-down-m.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-big-down-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-big-down.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-big-normal-m.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-big-normal-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-big-normal.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-down-m.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-down-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-down.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-normal-m.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-normal-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/plus-normal.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/search-button-normal-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/search-button-normal.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/toolbar-button-down-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/toolbar-button-down.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/toolbar-button-normal-v.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/toolbar-button-normal-v.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/button/toolbar-button-normal.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons-c/drawer.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons-c/inbox.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons-c/pencil.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons-c/skeleton.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons-c/trash.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons-c/who.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/blue.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/dots.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/download.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/drawer.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/eye-closed.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/eye.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/folder.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/nosound.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/play.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/reply.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/skeleton.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/sprite-m.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/sprite-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/sprite.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/trash.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/icons/unknown.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/blue-c.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/blue-c.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/blue-h.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/blue-h.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/blue-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/blue-v.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/blue-v.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/blue.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/white-c.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/white-c.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/white-h.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/white-h.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/white-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/white-v.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/white-v.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/panel/white.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/popup/normal-c.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/popup/normal-c.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/popup/normal-h.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/popup/normal-h.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/popup/normal-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/popup/normal-v.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/popup/normal-v.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/popup/normal.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/searchField/focus-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/searchField/focus-v.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/searchField/focus-v.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/searchField/focus.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/searchField/normal-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/searchField/normal-v.gif
View
Diff not rendered
BIN  examples/core-examples/wave/i/searchField/normal-v.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/searchField/normal.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/toolbar/normal-m.png
View
Diff not rendered
BIN  examples/core-examples/wave/i/toolbar/normal.png
View
Diff not rendered
BIN  examples/core-examples/wave/voloko.jpg
View
Diff not rendered
269 examples/core-examples/wave/wave-theme.js
View
@@ -0,0 +1,269 @@
+(function() {
+ var defaultCss = 'position:absolute;z-index:100;-moz-user-focus:none;font-family:Arial,Helvetica,sans-serif;',
+ T = '';
+
+ function u(url) {
+ return uki.theme.wave.imagePath + url;
+ }
+
+ uki.theme.wave = uki.extend({}, uki.theme.Base, {
+ imagePath: 'i/',
+
+ backgrounds: {
+ link: function() {
+ return new uki.background.Css({color:'#003EA8', textDecoration: 'underline', cursor: 'pointer'});
+ },
+ thumb: function() {
+ return new uki.background.Css({border: '1px solid #CCC'});
+ },
+
+ 'button-normal': function() {
+ var prefix = "button/normal-";
+ return new uki.background.Sliced9({
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAYCAYAAAAoG9cuAAAA+0lEQVQokd1SPWuEQBAdP/C2MSciCPaCjVwj/oD7IanzE5Iq3B+4+qrAtdr4K6xsrW0sTyTYCLs6md2w4QhcFy5wDx477L73ZhbGAEJZlu+GYbyu68roBESEOI4hSZITY+zNJsHRcZznLMtYFEVAQhjHEZqmkf6XNE0RiqIQwzAgPeKyLCiEUOz7HquqkvezLeWe5wEJVBuNIAiAcw7UfqNEpmmqi1uwdXGdclMkB75j0kO108b/+t2fJH0S/N+iaZp+apM271zXNc7zrLaTVle6oOs6CMPwO4lmObiuu2/bdqedlmWB7/s8z3NOxkoPvSUeieKKF+IH8ekL3Lu8/RORc0sAAAAASUVORK5CYII=", u(prefix + "v.gif")],
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAYCAYAAABKtPtEAAAAT0lEQVRYw+3YQRUAAAQEUQcRtdRFI1aQHRH+m73I7lYYX1ZVWAPsrjfA3QFgDSCJAiiAAgBgAhQAABOgAACYAAVQAAUAwAS8AGbGG8D9K/wEDUNdqz8tggAAAABJRU5ErkJggg=="]
+ }, "0 5 0 4");
+ },
+ 'button-down': function() {
+ var prefix = "button/down-";
+ return new uki.background.Sliced9({
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAYCAYAAAAoG9cuAAAAw0lEQVQokWNkAIJVq1btB1L2QMzIgADngTggLCzsEdPKlSvPAjkOaApAwJCNjW3b////BZgYGRmNGHCAX79+aQGpehYQh5mZGauiv3//gkxPIKQIRAngVQQDVFbEwsJCT+uGpCJgKhhsgckEVPD/58+fYIXI+OvXrwhFfHx852/dugUWBHkCBD5//sxw9+5dBjExsZdg61hZWQO4ubk3X7lyRR+mE2S6kJDQKysrK04gdwFYEJgj+IG4/z8qeA/E80FyAL0dUKVpt05fAAAAAElFTkSuQmCC", u(prefix + "v.gif")],
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAYCAYAAABKtPtEAAAASUlEQVRYw+3WQQ0AUQhDwZ+ARFQiBFu7QjpPwqSH9u5+L7h+4QGoKgAAAADIBehuCwAAAAAAAAAAOEIWAAAAgDiAu8sGmJlogB+4uQdde/0uUgAAAABJRU5ErkJggg=="]
+ }, "0 5 0 4");
+ },
+ 'a-button-normal': function() {
+ var prefix = "button/a-normal-";
+ return new uki.background.Sliced9({
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAABWUlEQVQ4T6XVwYqCQBjAcZ9g26f0NfYNOu7e9raXktBLdDR6ALdLh0SRNJFSlEg0M7+db8Ddyc9gbQZ+INP0r2RyFIWN6XT6pmlaMZlMgF0Pgu+xLAuKovgAgFeMjQ3DiPf7PQwdt9sN4jiGxWLBo3VdvyvsE+okSaBpGr6ATQ4WBAHouo6NkgcxdL1eoaqqp5RlyX8+Dh7EC5yUQYLspkohwTzPpZDg+XyWQoKn00kKCWZZJoUE0zTlVFV9qF3ThwRxc7e6IXS5XDhxnYgEj8fjHTHW7rXuGhEJHg4HQox1X+siwSiKeuGm7c71wafOXTAMQykkiI8vGSTo+74UEtztdlJI0PM8KWIwwb+O67pPW6/Xf0E8U+bzebPZbMC2bXAc59+22y0/S/Dxv1wuf7/haLVafYsn2RCz2QxM06zYfs3Z+fKFp6jCwiNmzPD7OWDgehQzn8zLD1tEur3q1ZjQAAAAAElFTkSuQmCC", u(prefix + "v.gif")],
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAYCAYAAABKtPtEAAAAT0lEQVRYw+3YQRUAAAQEUQcRtdRFI1aQHRH+m73I7lYYX1ZVWAPsrjfA3QFgDSCJAiiAAgBgAhQAABOgAACYAAVQAAUAwAS8AGbGG8D9K/wEDUNdqz8tggAAAABJRU5ErkJggg=="]
+ }, "0 16 0 4");
+ },
+ 'a-button-down': function() {
+ var prefix = "button/a-down-";
+ return new uki.background.Sliced9({
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAABJUlEQVQ4y2NkAIJVq1btB1L2QMzIQB44D8QBYWFhj5hWrlx5FshxoMAwEDBkY2Pb9v//fwEmRkZGIwYqgF+/fmkBqXoWEIeZmZliA//+/QvyYQI1DQRRAlQzEAaGiIEsLCyD14VMMAOx4WXLljEwMTHhlEfGBA1cvHgxWMGSJUuIMhSvgQsWLEDxxsKFCwkaitPAuXPnYg2befPmEWUgRqRkZmYyyMvL4wz0hw8fkh7LT548wamBUIpgAZY2IyxhU99AoGH/f/78ycjFxUW2IZ8+fUKkQz4+vvO3bt1i+Pr1KwMsgojFIPD582eGu3fvMoiJib0Eu5CVlTWAm5t785UrV/TJcR3Ih0JCQq+srKw4gVxIFgPWVvxA3P+ffPAeiOeDzAEABYmSmnljhn4AAAAASUVORK5CYII=", u(prefix + "v.gif")],
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAYCAYAAABKtPtEAAAASUlEQVRYw+3WQQ0AUQhDwZ+ARFQiBFu7QjpPwqSH9u5+L7h+4QGoKgAAAADIBehuCwAAAAAAAAAAOEIWAAAAgDiAu8sGmJlogB+4uQdde/0uUgAAAABJRU5ErkJggg=="]
+ }, "0 16 0 4");
+ },
+ 'plus-button-normal': function() {
+ var prefix = "button/plus-normal-";
+ return new uki.background.Sliced9({
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAASCAYAAABB7B6eAAACcElEQVQ4T5WVWa4SURCG2YE7UFfgAozr4VFX4l2BvhtIgIR5uMxhbkBmDV6mMM8gc8Ox/krAa0OjnuRLh646f9WpqtNoNIpVKpVexWIxo9fr7RiNxpNOpxNqwA6/ZDL5CfuUWlcrEon4TCbTyeFwiGKxKKbTqdjv9+LWwvvxeMx+8Me+aDQaUhVHJm63W/R6PXE6nZjj8ShkWRaHw0EV2EGn0+FAlOT4SjwQCEgul0usVisWRna73e6/mc1mwmq1ikQiMbqIp1Kpd3Q8MZlMOOPtdis2m80VsOfzeX7esp/p9/voDcr35ZI91Y4zhwNOcYtcLie0Wi0HUfM54/P5RCaTkalVrzV0pPXT0xOXZblcqpLNZjkATQuL3PNF46mnmI6PGr1ez7Vbr9diPp//ARqeTqcZi8XCAdArBMM72JV7QLvdFtCl9cgB0CAYMJbPkSSJRdWgMnByyn2DweAcQOYAOBaah7l+DjJBpoVCQTidThbFE78BxIFyX7PZ/B2Ajr5utVocYDgcXjEajdhG08YBIIzT4h2AXbkHJbTZbBsO4PF4JLocnAlGTI14PH6ZImR5z5c0RSgU6lMACZ+HtwaDgRvW7XZVqdVquECXk6r5VatVvgfUhwwF+Hz+TBTsdruo1+tcdzXwOUCGeN6yNxoNnja/318m8RHx5nKj6XL8xDXHDKNJ6Mu/An/sgzixoa/BNxJ/0CgXTcwAnw2z2SyCwSDXG5cQmSnBacvlsgiHw+yPqaHMv5PwVyJNvLgKgLVYLB4qlcqOAsio5b3/A0DTMqf7UKF9P0j0cDNz5UJ04gNhIMbE8S94iffES6XWL+1RTS9sJ2DGAAAAAElFTkSuQmCC", u(prefix + "m.gif")]
+ }, "0 0 0 0");
+ },
+ 'plus-button-down': function() {
+ var prefix = "button/plus-down-";
+ return new uki.background.Sliced9({
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAASCAYAAABB7B6eAAACM0lEQVQ4T52U2Y4SQRSGeQPfQH0CH8D4PFzqkzj3JJpwwQX7vu9rWBuQEBx2AsSgmUkgMTNRxzn+f2UcTTf0TKaSLw3Vp/7/1KlTbbHohs/ne+FyuQJut/sLuAViwu1d3Aeu02sZBgILjxA9aQaTipk4MxGv1/skPB6PMgqHw5cGcQRoDAgEAhIMBp8M11MnkUhc/J/5G07CWaLR6Em42G63q6dZHHWot91uncrA7/drdE+lUqY4HA6xWq2COks2mzWNhabkcrkbEXnJ8lzF43FOmOJ0OpVBvV6XRqNhGhuLxSQSifyEwXuWSPL5vJRKJQOZTOa+S2w2mzLgblkGzvH9sXU04XuMnDKoVCpSq9UMcKsUPQUz5Y7066h3Z3CjDDjZbDYNMBAdIa1WS2VNUT75n+AgZTAYGNZVq9V/BuiKq3K5LN1u9yj9fl9Go5Gk02ll0Ol0ZDabqTnC9/o1hUJBQqHQtTLAAWvJZFJlYgZ3QgNN02Q8HpvGsnTopq8w0Cz48Zo3kc5/szpGr9dTme12O5nP5yfjqMNWRvl6MPio7gJMhtiScp9MJieZTqeyWq3U89h7GvCM0EWfIX4BXt3faNT4O01Y08ViIcvl8tEwnsnxJqP/rzHGED+z6Ac64Btbk1mwg4bDocp4s9kYWK/X6izYgRTm56FYLE4g/Al0wTODAcfhcDhDNj941Wn20GcaTXJot9vn+/1+DtFfRzPXD7qDd8APLsHvB8iDt+C5XusPyQ/RDOInM8kAAAAASUVORK5CYII=", u(prefix + "m.gif")]
+ }, "0 0 0 0");
+ },
+ 'plus-big-button-normal': function() {
+ var prefix = "button/plus-big-normal-";
+ return new uki.background.Sliced9({
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAYCAYAAAB0kZQKAAAC60lEQVRIx7VWW05aURS9M2hHUIfgv51AJ9D0z/TLz/rXYfSrP41tByABEcRH0KAxwSfFBxoBCY8IUhBfIAgX7ulaO16CjXI5CZxkRQ3uvRf7rL3ONoxXzunp6djOzs7M+vp6cmVlpe5yuZQOGMPYvb29n4buYfFwOBzyer3W8vKyikQi6vLyUj0+PirLstQgp16vq2w2q7a2tpTP51PMxZz7+/vvHAmg4KeFhQVzY2NDVSoVNYxD4qVSSQWDQXandXR09LkvATI+Pz/vBnc6naGBnTw+PpbOJBKJry9ewdzcnIWfQoBB7XZ7JDg8PFSLi4vszodnJCCgxObmphDgP7ZarZGBellbW1MQfQvl3ggBqPc9uqCur6+7bRs18vm8TBB+dwkJqNa9uroqGmg0GsJ0UExNTQl0YmwEAgFqg+P21oBq87FYTK6hVqtpwSZhmqZ27O7uroIE2iAxbfj9frNcLkub7u/vtWCT4F3rxnIKUbsDEh6Dd8P2kN3d3Z0WeknoxhYKBdEFTsqYnZ2Vdt7e3qqbm5u+sIs6wSkPwe4/kegICV4Fp4Mu2Q+Dkmg2m465+BR0ScDBzKurK/mA7JzQO2p20ZfG0ClPPB6ne5pCAn5eoFOyRfR4HfSS0I3d3t5WsIaKaAJu6ebjUq1WVbFY1IJNgv6iG0ufODg4OJPpgFlNuN1uuQ4qVge9ZqUTl0wmRQ+YkhRIfBHXRFvSfPvJ8OLiQgsPDw8CnRjuKaiZBQFqYsy27gk+49QGl5FcLjcyYLFRHo/HgiVEQeD3s5cUQvnOFkWjUSEybGQyGdq0EMDfP0Cg0u3Cf3vFzPz8vGxBXEDS6fRQwFwUIgnAH3woXgbGX92wINCP2LJMdgXerkKhkLSQV0W/T6VSfUHRnZycyAPFvYFfisWR5wyj/OepA+OOuyaXDYzsDFpocflYWloydbdt7KoNFC6CfBzFM8j5F/jWXWQGPQwAJoFfQISLlyYiT7GT/Yr/AxJ37qJFwFyvAAAAAElFTkSuQmCC", u(prefix + "m.gif")]
+ }, "0 0 0 0");
+ },
+ 'plus-big-button-down': function() {
+ var prefix = "button/plus-big-down-";
+ return new uki.background.Sliced9({
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAYCAYAAAB0kZQKAAAClUlEQVRIx72WyY5SQRSGeQN9AvsR3Lcv4AsYdx1XLHXnY7hyY1DXhHmewjyTMAToThqZBIIBZAoLJNB9y/9UKNIs6Et1oCv5EnK5p85/T52hNJoDy2w2X+j1ep3BYKiDJWCSLLe23zWyi5zDMAKUJzg+hLLd85WqALz0HmxO6HwPo9G4djgcH9QEKCaTiSEaZwEiOOFw+POhI1DoRZvNdlbIB31oo9F4uycCD3/Rn06n81kgEV6vd80YeyGi8IZC5HK5mMfjeRZICOXIYrEwchEWi8UMmN/vl0ar1XKeYkvRyGazCqLxUmO1WvsUhVAoJI0QMRgMpG1RJcztdt9BxCc6jk0wGGTRaFQaIWI4HErbbqNxDxEWKk0Wi8VYIpGQRogYjUbStpFIhOcFVpOLSKVSLJ1OqyKcqnHMXslkUoi45yLoYS6XU+VYEePxWHUv8rkTgcrYkKp8Pn8Uk8lkh3D68JlAbR86EvLNRaBm/6CNslKpJI0QMZ1OpW2pGFAdE54TgUDATM2jUqlII0TMZjNpW7vdTrl4y6sDpXJJjaNYLLKbmxsphIj5fC5lVygU+CBDBJsQ8ZF3TZ/P10ZEWK1WkwatlyNjQ60bH9+BAMqJCy4CHewSSaJkMhlWr9dpwp0NtGqapAqiUIKAn3uTFBXylUJEpdNut09Oq9Vi8XicKkLB728QMNlF4eGqVqs6zBKG4+Fn1+12TwLtRUdAAjqdjgPO/4LXB29YqPF3OJYNRYWqhtSXy2XWbDZZr9dj/X7/UegdCjuVIc0IGlT4MAVt+na1WhW3ETgsQCy6bCDZdEgiBU1ljXreiKvZsWAy/0P/GVxfX9eWy+Vv7DkEX3YXmWMXGYAr8AMUwJ0kha3t1WPO/wPYEPVpc+IT1gAAAABJRU5ErkJggg==", u(prefix + "m.gif")]
+ }, "0 0 0 0");
+ },
+ 'search-button-normal': function() {
+ var prefix = "button/search-button-normal-";
+ return new uki.background.Sliced9({
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAq0lEQVQoz5WQsQ7DIAxE+VpWWDPzR2Qk34HCysyERCYkV4cKoiZK25NOSQwvtk/UWqk750ze++a5zi3oLWstSSmHtdatdicxA8dx0HVdVEoZNefcCuFCB7gAouMChRAaBJgrpdTOcOdvKMa47qSUon3fb8fD2WMQeOLvcK9t27ZMMSJHEFh6jhwA3o0xH6Dgrc/zHDsgfgAdxPctxIUOHPwKcRBT/AR1sI/9AgMGWB/c+g4/AAAAAElFTkSuQmCC"]
+ }, "0 0 0 0");
+ },
+ 'toolbar-button-normal': function() {
+ var prefix = "button/toolbar-button-normal-";
+ return new uki.background.Sliced9({
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAWCAYAAADq8U2pAAAAS0lEQVQIW22LMQrAQAgEVzkIXGd1b/d7qZJPuClEC0k3zOzC3TfJvczsAMCKiAQACaqaQHIkERmmN51IXmXeGj8Fw5BsM9Lv/QaADwb7HmCzqwV5AAAAAElFTkSuQmCC", u(prefix + "v.gif")]
+ }, "0 2 0 0", { inset: '0 -2 0 0' });
+ },
+ 'toolbar-button-normal': function(params) {
+ if (params.view._viewIndex == 0) return new uki.background.Null();
+ var prefix = "button/toolbar-button-normal-";
+ return new uki.background.Sliced9({
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAWCAYAAADq8U2pAAAAS0lEQVQIW22LMQrAQAgEVzkIXGd1b/d7qZJPuClEC0k3zOzC3TfJvczsAMCKiAQACaqaQHIkERmmN51IXmXeGj8Fw5BsM9Lv/QaADwb7HmCzqwV5AAAAAElFTkSuQmCC", u(prefix + "v.gif")]
+ }, "0 0 0 1", { inset: '0 0 0 0' });
+ },
+ 'toolbar-button-hover': function() {
+ return new uki.background.CssBox('border:1px solid #666');
+ },
+ 'toolbar-button-down': function() {
+ return new uki.background.CssBox('border:1px solid #666;background:url(' + uki.theme.imageSrc('toolbar-button-down') + ')');
+ },
+ 'link-button-normal': function() {
+ return new uki.background.Css({color:'#003EA8', textShadow: 'none', textDecoration: 'underline', cursor: 'pointer', textIndent: '2px'});
+ },
+ 'toolbar-popup-button-normal': function() {
+ return new uki.background.Css({ textAlign: 'left', fontWeight: 'normal', fontSize: '11px' });
+ },
+ 'toolbar-popup-button-hover': function() {
+ return new uki.background.Css({ textAlign: 'left', fontWeight: 'normal', fontSize: '11px', background: '#4086FF', color: '#FFF' });
+ },
+
+
+ 'popup-normal': function() {
+ var prefix = "popup/normal-";
+ return new uki.background.Sliced9({
+ c: [u(prefix + "c.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAXCAYAAAAP6L+eAAABz0lEQVQ4y6WVz0sCQRTHv6Ora0uWRxGtMBQ7lEn9CVHQqUvQn9Ch+gOCrv0FHTp1q2tdQzt2LoqSgkJsqW4RmRnu7nRoht5Oswrug8fCMHzed9+vMQDg8Ox2/Kk1dFx/bs9+fbsMPWw6Zz2Mdu+XttaWn8QRJ+7KewYAPL4nqs9vncLGYhbz+ZFA6EXjA0fnr5MYKp4CKAuYR75+8HWzVdhemUB5PNlLLCoTSXgex17VzgOI6YA+MIC+UGlz+RG0Oy4DEBdAl6QiLgJ5BgY3U0AdAEzJNwsLllCuehhwXFEqc83CKo4RqAsgCiAiPFSOjQAo83XFABZVoIx6GDDTAf/1ccgAFPqn2EpE+VWzxWbGhvtSbuxPiWD9CoBS2rrcr9mV9YUsShkLcSOivXz30sZ+zcZUOmaTHUEdvj7uduqrmVTxdPekMdlLhWVGeC4VtasHO5tydIlT+K/ind8VWBa9aQJIiK8pzmjlJcghu+JfAFo8rkyQI4ASpoJdAF0SwKfa0IwkXSxyD8jmhya4CveoYqrWUSruBoCD4FwFe6QP1R3AlD/QwWm+tWBHecMi6lQFPEmBqQCBc6VgdKq4Jn28X1dIOCOKe4GhW/IA8AM1G+ei4X4vMgAAAABJRU5ErkJggg==", u(prefix + "c.gif")],
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAABkCAYAAACCXsDxAAAAVklEQVRoge3MoQFAUABAwRcVSVRFTTHJn8tsFmIF+t0AV9W47uePcd1PdVZHtVdbtVZLNVdTYrFYLBaLxWKxWCwWi8VisVgsFovFYrFYLBaLxWLxt/gFweGiHhjkmgQAAAAASUVORK5CYII=", u(prefix + "v.gif")],
+ h: [u(prefix + "h.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGUAAAAXCAYAAAASloEFAAAAX0lEQVRo3u3YoQ2FAABDwUoMColF4jBMAmvxV4OB+Gs05JrcBM81x3W/dMlrdRNFFBNFFBNFFBNFFBPFRBHFRPlslPP3eGbbXuIkO3WyUScrdbJQJzN1MlEnI3Uy0OUPS/P5ZrQwdlIAAAAASUVORK5CYII=", u(prefix + "h.gif")],
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGUAAABkCAYAAACfIP5qAAAAmklEQVR42u3RAQ0AAAgDIPf+nbXG56ACWepkqCNFClKkIEUKUqQgBSlSkCIFKVKQghQpSJGCFClIQYoUpEhBihSkIEUKUqQgRQpSkCIFKVKQIgUpSJGCFClIkYIUpEhBihSkSEEKUqQgRQpSpCAFKVKQIgUpUpCCFClIkYIUKUhBihSkSEGKFKQgRQpSpCBFClKkIAUpUpDy1QGga5NE1OzMgwAAAABJRU5ErkJggg=="]
+ }, "12 11 11 11", {inset: '-3 -9 -11 -2'});
+ },
+
+ 'toolbar-normal': function() {
+ var prefix = "toolbar/normal-";
+ return new uki.background.Sliced9({
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAYCAYAAABKtPtEAAAAT0lEQVRYw+3YUREAQAhCQb2xfxC7GEm5IDwi7DB8kN2tME5KsgZ4YR4AADBPmW9g1N0BYA2wuzQAAADYABoAAAAAMII0AAAA7MIhMjPWAB+KnTlLvIreawAAAABJRU5ErkJggg=="]
+ }, "0 0 0 0");
+ },
+
+ 'search-input': function() {
+ var prefix = "searchField/normal-";
+ return new uki.background.Sliced9({
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAYCAYAAADpnJ2CAAACpUlEQVRIx7VWiU4iQRDlq4X4QRAIp8h9GEQlcieAEO7TcHrgosxAqO1XzpAoCLsCL6kEpo/XVf2qqjWaHbi8vNTa7faExWIZGQwG+m56vZ4N45jn9XrPNL+B2+0+Fxv+ERtRMBikeDxODw8PVKlUqFarra1arVKxWKRUKkVXV1fkcDjIarVKPp9P989kgiRlNBopFotRuVymer1OrVaLOp0O9Xo9tsfHxw3D93a7TdlslpxOJ/n9/t5eMrPZ3PF4POwNPAARNhuNRvT09ESvr680nU5/NIxjHsjhsfBU3ukZTgayRqNB3W6XibDJbDaj+XxOsiyzLRaLDVPHMA/zh8Mh3d7eUjQalbeKQ8Se8vk8k8ErnBQLJUmi5XJJq9WKbRfUOZiPdZPJBKHF3X8Nr8lkeru7u1uTPT8/0/v7O598H8kucqzHtYTDYXw6ZzJI2WazsUAQRngGMtWrQ4D1CPHNzQ32lpjw4uIiiBPgJLgzhPEQz7aRwhmkj8CZRtxdM5PJcCghEMT+WGQqxuMxpdNp/AxqUDGQ0FAVvEMojw2E9fr6Gj9bTNhsNvnuMHBs7wA4oRCSBlUFSf7y8nKScALYd00o6l+rUChwpUDingKIXi6X+yQU1SWIHAQh1HkKqMVeoInOoHW5XBzSU3iI+0smk6xUVikgwiohV05xh4PBgNubgs9+GQgEdKh5yMNjEn58fDCZ4t3bl3oqqnoPvQxl7Vi5B6Gg+yjQbnQN0U5kdG9MPjQNUMrggILUj31RlCAZYej3+/+tWggEFUt9kijo7O38orJ37+/vKZFIcNlDX9smKPxX+x5kj/kgQxPY69l3IOZioVQqlfiRhEoh7nltoVAITwiKRCJcmKFyRRwsEGG6X73gIGVh0PVoT0RHyrydT8W/5PlZWCStrIUAAAAASUVORK5CYII=", u(prefix + "v.gif")],
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATYAAAAYCAYAAABwbdFbAAAAdklEQVQYGe3BMY3FUAADsAxZnlQ8ncq3RMrr3+GIbPd9318AhvS+7wAs6TknAEt6XVcAlvScE4Al/ReAJQ3AmAZgTAMwpgEY0wCMaQDGNABjGoAxDcCYBmBMAzCmARjTAIxpAMY0AGMagDH9vi8AS/o8TwCW/AEmCwddLATtyQAAAABJRU5ErkJggg=="]
+ }, "0 14 0 14", {inset: '0 -24 0 -8'});
+ },
+ 'search-input-focus': function() {
+ var prefix = "searchField/focus-";
+ return new uki.background.Sliced9({
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAYCAYAAADpnJ2CAAAD5klEQVRIx61Vi0+TdxTtH7UZBXQLZOFhMpgmGzHb1LklZi6Zc7Ch9GGdpQjIY0VYS4tACwUpopRXnM4NJiogaheYFFkHbLUP2lrGV/rk7Lu/ytYiFoSe5Cb9ve7pua9PIEiAJqOwpLrtE7NUk8edrNmFl+1NfFnzBs6qc7kq/bEZui/YDuihUJkZ/Ip3WlibhqL6dAhVmRCrciBp2P+f0Zr26bxAkQK6L1ZlR16LmBTRw9O8k9KWfKi6C9E3rMHE5BAs8zN49swKm83GbGHhT5im72Lgjgbq6wUo1ebjjDIdpxS7oLx60rUpWWnT+56vv98DefMHaO2X4f7jHzHPOyXnDocDi4uLcLlccLvdL5lz0YHH00PovFWG8rZDKKxLQaX+aCShMiIr132M67frMWt5woicTidz6PV6sby8DJ/Pl9CcbituT7RC0fUpvv0hFc39xZENc0ZFQMoofHO8KrvdztQsLS0xR4FAAKFQCOFwmNlGWDvzB1bw8yMdqg0foki1B2NTA/HhFSkzQ5R4bZ+UKSMyUkWK/H4/I4pEIlhdXcVWQPeWOBeMd6vwnTYL8rY82o4WkuaaSEZFckF7iM/ZjTgyUvU6ROsxax1Hfe8xCBv3wjR7KxpaRcfnDwpr90LTU4S/rX+xMMaS7QTBsB/dd0og1WXwaitpSyaQt+S7T9dn4OY9PSsQyhmFcadka3gw04uS9myoB06wpYCmBTUv9ROFkgqEcrbdMK6H1TWNC1fehagplZZuRihSZcNsMbHST6Y6gpdzoLzzPQibU9g6StiQhd+mR1jugsFg0tRFFZpRdiX3f0LKYbEyAz+NtYLjOBbOZGLcbIRMnwXN4BdRQqrSb+r2QTcoxnOv65VNvR2EwgFc/VWGc60Z6B+tieawsVd8vkCxG5UdH2HKMpJUwjm7ifWhuCUNU/ND0SolSNQ5EZH6HVwbrsA/Pk9SyJZXPBgcr4W8fT8uGg6ubcsY4eUeiaygbjeq+Nk3ZGpFIOjbWcOHVnDv9y7UGY/GqgvFzdMG4ynXGXUalMbjuP+kG5z/+TaVuTEy1QFV/3Gc1b7N5/B8vLpYKLo+iwgv78OlniMYGFNgwTnJt8jWejIUDsJie4i+0Wr+/WFItG/xlXli7dj8yu+i/qYkUtyYihJ9DguJYfgcJp72we75g4UqFv4gB5v7KUanu2EYkrL7NMZEzWmxyjybfvkfzd5wVXQeYA+ppOXtOfy0yEOF4QAudh1kRr/JyjpzGYlUl87uU4G8yFliZetBMZ+c+yVCfXTJeIR3lhpnNDnWrJZPASmKIQptmLOtEtM/5Y3bJI3ci3sJif4Fqpeom/ECPK8AAAAASUVORK5CYII=", u(prefix + "v.gif")],
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATYAAAAYCAYAAABwbdFbAAAAo0lEQVR42u3XIQ7CABBE0T0VSeEGVHIRfEuQKAQa0zoM96qqrGqyWBwK0c17yb/CJBPnxy4lqVJxfbYpSZWKaZpSkioV8zynJFUqlmVJSapUrOuakrSlfokEKMawAYYNwLABGDYAwwZg2ADDBmDYAAwbgGEDMGyAYQMwbACGDeBvw3Z/n1KSttztdfyqzbiMh5SkLdeP++yGJruhyX5oXFGgng9Zp0b7vJwDoAAAAABJRU5ErkJggg=="]
+ }, "0 14 0 14", {inset: '0 -24 0 -8'});
+ },
+
+ 'panel-white': function() {
+ var prefix = "panel/white-";
+ return new uki.background.Sliced9({
+ c: [u(prefix + "c.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAjCAYAAACZ6FpfAAACI0lEQVRIx+WUv4sTQRiG39lcIoe33qJos+JVB2kC9vkHhBRqe9WeB4IiaGHhwf0hdlZ7G7TwbLWwS5HmCqtcd1cEjuRisiy6tz/ms3AnmZlsblYEGwde2MDk4XlnPsaCtjw/9Lzu9Hg3CGk3CMkLwiPv8PsjGJYl/9gLpv7t69m7rQ1+f9tJse2k2LKzh7fW6eNeMPUrgZ52J8/ubuQ7mw1CGAMnFwwnFwynUyC6BG408p3n/vlrAEzKEojdWac39RpwNgMmPwlEi8QpYfIDSLB2oEHm35b4uFbHvfOIEKccROVJcr4p/UcBzo1qDIjiHCB+dYBaEavMiAFAlnMQvzoA1kpACyMAyrmsCoB6CUw1Mtb6XU2ABGxuxMTtrTpkOQAaBUwYWcsgXumM9GoKqKhG5iwgyoEroIrVarpNya1VAlk6RJlsAADn5pgm+w/mSF9s6RmpWI2VvQAKqOJAmh+2inNkBv3N+h9A+w9u4v3LljH/xIgAUJqm30ybx+PxVwC5FF6EhBGNRqO3JlC/3z/SAGKwaG7kuq4fRVF3FWQ4HH7qdDpfSmy4Ug0At237xWAweDWbzT4LQBRFg16vd+C67j6AtEgmwUg2EuS82WweOo7zhDHWYoy1bNt+3G63PwBIighQpp+RAio2JABiKZdFEslKVFSMSIKIjXEJLCmppt6aZJRrINkmKbPRjUirp9dJpLNRbOTJphVW+i3pAPH20i/DUWKmoE/7VQAAAABJRU5ErkJggg==", u(prefix + "c.gif")],
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAA+CAYAAAAmoEsaAAAAPklEQVRYhe3MoRGAMAAAsUhMHbKysvuvB4YBeof9DBC4MJ5D2FiYuDG+o6ioqKioqKioqKioqKioqKjob/QC+8jQBMwfUwoAAAAASUVORK5CYII=", u(prefix + "v.gif")],
+ h: [u(prefix + "h.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEUAAAAjCAYAAADCIMduAAAAs0lEQVRo3u3XsRGCQBCF4X+BAizBxMKszrosQSMR5AzEmeMkctDk/k3Jvnlv2Yvj6ZpwFtMddoMKJcr5EvSjEAuU22B7PlBSmlQoURBlJSmTKCv1cadYHxetO2XL+rhTrI8o39bHneKdYn083rxTfjqNBKKIIsqGE8lDxaSIIoooovz97wPsgQ5oZ6Qm+1bpgxDuwCNDiZpB3ih9kZIwKa+ktFlCRAHGuT5hdZYoeTqqR3kC7uQ+Qe6nFrEAAAAASUVORK5CYII=", u(prefix + "h.gif")],
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEUAAAA+CAYAAAB9aNYrAAAAYUlEQVR42u3QMQEAAAwCIPuX1gALsAcikHJEgRQpUqRIkSJFihQpUqRIQYoUKVKkSJEiRYoUKVKkSEGKFClSpEiRIkWKFClSpCBFihQpUqRIkSJFihQpUqQgRYoUKVKk/BpMKpkHG71QjgAAAABJRU5ErkJggg=="]
+ }, "23 12 12 6", {inset: '0 -6 -6 -2'});
+ },
+ 'panel-blue': function() {
+ var prefix = "panel/blue-";
+ return new uki.background.Sliced9({
+ c: [u(prefix + "c.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAjCAYAAACZ6FpfAAACNElEQVRIx92WPW8TQRCGn72POA4FCQURTf4BEg2FayrELyBpLJCQqKBBAil/gTYdUpoAZVJTQIcEEt9FoAQFKUJxEsuYs+9uh8K7ZLw5myNQMdJqb9c3z747sztnQ2DtjW6b2N4yEl0AENhCyvX15YVNppjRg+uPDjbONO3yXAKNWAAYlIZeDgdZ9PDB1fmV34JuPO7cPHdK1tIY9vqG/ezopUYCc6kwyIo7ayuL95W/+IfIA8825W4aw+dD6PwQRI5algudPgxJVt3iRgkxAIl/aKQs7fZGTpNsWHLaLS6BKpN4cmygl5Xjr1Rb7JytAkqi5RWlpYYlDoLqSXTQRaQOKAVKNbbHFCG2LshUxcj47Ek90Izz8XGKtKIRyNZWJG57pfO1wdakbrBLl73I+4+Bam4tVpAxEH8IikLI2MkeJbI2yIRX5STnqPLiJ3qm5tZMhaJxUM0DOTGVinNyUMQ/sv8YZIBZIBWRbi0HY84DmWoDIE/UxF9ZAjSAdKcr7BxOT//+3renqnyUrh5ZQKJfVc4OP82m01fdfvtqMwD4lcV/WuTL9utr8w1TRKYa0tn9unW7feVJhRrrsyaAtFqtdx9ePru02By8b6ZSeEC///3jmxfPVy9fXLoH5K4VCiaAGBen2PWpazPAgmPpmOSqDR2w8KVWlMRS3ehMgfxv3jFXcPHFX1QxR41DkFXORZi1RDnr3GuQVbEIoRIqQjn5fhAotBN6geN/UfScVquBYQOQn78pGo/9qNZzAAAAAElFTkSuQmCC", u(prefix + "c.gif")],
+ v: [u(prefix + "v.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAA/CAYAAADt/Ji/AAAAPUlEQVRYhe3MoQGAIAAAwYsWmpFIZP/1tDgA0fA3wMGF8RzCxsLEjfEdRUVFRUVFRUVFRUVFRUVFRUW/iV5Lw/iG3LBuegAAAABJRU5ErkJggg==", u(prefix + "v.gif")],
+ h: [u(prefix + "h.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAjCAYAAAApF3xtAAAAv0lEQVRo3u3WvQ3CMBRF4ePEAzACDYMxHbuwBWICqAj5MQWJhIhTIAiNz5PSpPx07/ML+8M14cwm7jatCjmY0yXQdELMYG6tTcrCpDSokINBmIXEDMIsVMkdY5Vcvu6YNavkjrFKwvyiSu4Y7xir5IHnHfP3qSQQRhhhVpyQPGRMzEfP9fHcq2BihPkepgoiZF8lYAtEoH75N33FpioCd6DPwFA6TDOiVMLME1O/YQgDdGOVlmBCyTBTfZIwz3kANglB8L0CtWIAAAAASUVORK5CYII=", u(prefix + "h.gif")],
+ m: [u(prefix + "m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAA/CAYAAABdA76NAAAAY0lEQVR42u3QMQEAAAwCIPuX1gILsAMikHKKAjFixIgRI0aMGDFixCBGjBgxYsSIESNGjBjEiBEjRowYMWLEiBGDGDFixIgRI0aMGDFiECNGjBgxYsSIESNGjBjEiBEjRswTA4O7pxWjdTIcAAAAAElFTkSuQmCC"]
+ }, "23 12 12 6", {inset: '0 -6 -6 -2'});
+ },
+ 'box-lblue': function() {
+ return new uki.background.CssBox('background:#C9E2FC;border-left:1px solid #E4F1FE');
+ },
+ 'box-lblue-bottom': function() {
+ return new uki.background.CssBox('background:#C9E2FC;border-left:1px solid #E4F1FE;border-top:1px solid #B8C6D9');
+ },
+ 'box-lblue-top': function() {
+ return new uki.background.CssBox('background:#C9E2FC;border-left:1px solid #E4F1FE;border-bottom:1px solid #B8C6D9');
+ },
+ list: function(rowHeight) {
+ return new uki.background.Rows(rowHeight, '#EDF3FE');
+ }
+ },
+ imageSrcs: {
+ 'icons-sprite': function() {
+ var prefix = "icons/sprite-";
+ return [u(prefix + "m.png"), "data:image/png;base64,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", u(prefix + "m.gif")];
+ },
+ x: function() {
+ return [u("x.gif"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIHWNgAAIAAAUAAY27m/MAAAAASUVORK5CYII="];
+ },
+ body: function() {
+ return [u("body/normal-m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABMCAYAAACs0907AAAARklEQVQYV2P4DwRMDEAAIYA8IAHmglhQMRDBAOKis8Da/kOVYGfBDMVgYdFBhBJiDYV7AcrC6QUUz2A1FN0okoxHVYfiGQDA5GssMx8/9wAAAABJRU5ErkJggg=="];
+ },
+ unknown: function() {
+ return [u("icons/unknown.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAEIElEQVRIx52Wy28cRRDGf9U9O/uyHRwnJCIhvIQjQIEgLogT4o/mxgGEBAcOSIggJwRC/Ei88Xq9r9l5dRWHmZ3YieKs0yvNzO501Vdb9VV9LWZmrLRKzACJwAKCgAggrLocF9gqEgEQRLAGSFf2EL12h4EBhQmDo2PGoxmTtMALbG10effmNeIIVBXnzo9dVkljkhf88XCP4fEcbx6ziDxfMBkPWV/r8N03X7DW7wJSZXb1NNqpm6Jm7DwacDRKwbcx30IiI4o97X6P/cNn/PTrb6iBoM/tV62ZNVdlPEt5ejTDi0dUEbGqSiI4ccStDvf/2efg6bOaMBcEkwbMcXwyQ1UREZxzmFnDP5EqbSEoj3f3a0u5CJg0N0NI0gJxDkRYllfqwqhqE9ZwNDprf1HqK7BIMzBDgzZAZoYZmBmqihks0vTN+8wwBCFuR2dYZmaVkSpaBkIZAOjE7TcHExwC9DoxZqca1wwzpQwFRZFThoKyLNhYXz/L5gux0QQB+t32S+9UA3mek+UZRZFjKFtXLr8W7PwJYsZ6v4MTanIIqkqRZ2TpgixLKcuCdtzi6tWtc4FeCSanLv1um64vmCSKuBYh5CSLhEUyp0xTLA9cv77J1uZGRSlzryTkawexF+HWO1eZnBwzm42ZjE+YTcbMk4QszzEtuHvnE2Lv36TPXl63blzjyuYaR88OmYxHJLMpeVEQLHB7+z0+vf3hSu5WAFMi7/j8s21MS5JkTihzTBXvhK++vIP3riqXnS9v7qWi1tSu6G6UauwOjrm3s0u/f4mo1SLUQ7ooA9//8DM7Dx+hZiCGacDQxqvVnxck5nRoQlYqw9GM3SdHjCYJRSks0oTxZEgynVIUJSJCFEWsr/XY/uh9Pv7gJlfeWsd7afwZrp6yIKZmiKEEwFMG48nTIfuDMZO5ouJBqhCKIiXNZmTJgjzPEYROt0O7t0EcRUQE1joRN65vcuvm20ReoAaTs2BGmin3HuwxOJkjziOu1Wx0YmgIoEpe5LUSQNRq4V2E9x5VJcsyptMJly+1+Pbru3Tb7SZhzur8m8H9fw8ZjBZI1AZxmAWEgGmJaTUDnY+I2x063R6dbh/vW4gT1Ko6RXFM3Ovx+GDIj7/8XitDNe6c1M17PJoxGE6RyFd/vNYtU6skRRw4V5VeqpNVRYrqndWnLXGOduTodfvc//sx/+0dsJziDgPFcTAYo/V0t1osAZxzzTMv6FnTHPpcfgQQcXjvEXH8+dcDlnLrEMiKwHiWg4vqdEljXOmVVQpdgywJvDxNvfi7qeGcx7ViDg6PKk2swJQ0y0nLUB1aXM2+GqiS/ufK3DisAzCzBrT57j1GZbtY5Exn82VTC3leoBZwvpKWpuNPp/CMSlvz7JxrgljuNwNzijgoS2M6nQLwPw59cHxcVdIaAAAAAElFTkSuQmCC"];
+ },
+ 'toolbar-button-down': function() {
+ return [u("button/toolbar-button-down-m.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAYCAYAAABKtPtEAAAASElEQVRYw+3UAQ0AQQgDQdLzbwQzSPoX0iFZA4Qhu/s1lymfJJnq3nvTnAuwAD/AD0AAAQQQQAABBBBAAAEEEEAAgTYCdzfN/XZrf4Cm0hHTAAAAAElFTkSuQmCC"];
+ }
+
+ },
+ doms: {
+ 'splitPane-vertical': function(params) {
+ var commonVerticalStyle = 'cursor:row-resize;cursor:ns-resize;z-index:200;overflow:hidden;',
+ handle = params.handleWidth == 1 ?
+ uki.createElement('div',
+ defaultCss + 'width:100%;height:5px;margin-top:-2px;' +
+ commonVerticalStyle + 'background: url(' + uki.theme.imageSrc('x') + ')',
+ '<div style="' +
+ defaultCss + 'background:#999;width:100%;height:1px;left:0px;top:2px;overflow:hidden;' +
+ '"></div>') :
+ uki.createElement('div',
+ defaultCss + 'width:100%;height:' + (params.handleWidth) + 'px;' + commonVerticalStyle +
+ 'background: url(' + uki.theme.imageSrc('x') + ')');
+
+ if (!handle.style.cursor || window.opera) handle.style.cursor = 'n-resize';
+ return handle;
+ },
+
+ 'splitPane-horizontal': function(params) {
+ var commonHorizontalStyle = 'cursor:col-resize;cursor:ew-resize;z-index:200;overflow:hidden;',
+ handle = params.handleWidth == 1 ?
+ uki.createElement('div',
+ defaultCss + 'height:100%;width:5px;margin-left:-2px;' +
+ commonHorizontalStyle + 'background: url(' + uki.theme.imageSrc('x') + ')',
+ '<div style="' +
+ defaultCss + 'background:#999;height:100%;width:1px;top:0px;left:2px;overflow:hidden;' +
+ '"></div>') :
+ uki.createElement('div',
+ defaultCss + 'height:100%;width:' + (params.handleWidth) + 'px;' + commonHorizontalStyle +
+ 'background: url(' + uki.theme.imageSrc('x') + ');');
+ if (!handle.style.cursor || window.opera) handle.style.cursor = 'e-resize';
+ return handle;
+ }
+ },
+ templates: {
+ 'contacts-render': function() {
+ return [
+ '<div style="height:28px;text-align:left;font-size:12px;margin:4px 0 4px 39px;position:relative"><img style="position:absolute;left:-33px;top:-2px;border:1px solid #CCC;width:27px;height:27px;" src="',
+ T, '" />', T, '</div>'
+ ];
+ },
+ 'wave-render': function() {
+ return [
+ '<div style="height:35px;text-align:left;font-size:13px;line-height:16px;margin:2px 0;position:relative;border-bottom:1px solid #EEE;color:#333">' +
+ '<img style="position:absolute;left:7px;top:2px;border:1px solid #CCC;width:27px;height:27px;" src="',T ,'" />' +
+ '<div style="margin:0 116px 0 104px;height:32px;overflow:hidden;">',T,' &ndash; <span style="color:#999">',T,'</span></div>' +
+ '<div style="position:absolute;right:0;width:88px;top:0;">',T,'<div style="color:#999">',T,'</div></div></div>'
+ ];
+ },
+ 'toolbar-button': function(params) {
+ return [
+ T, '<div style="background:',T,';width:', params.size.width, 'px;height:', params.size.height,
+ 'px;position:absolute;top:', (params.height - params.size.height)/2, 'px;left:-',params.size.width + 4,'px"></div>'
+ ];
+ }
+ },
+ styles: {
+ base: function() {
+ return 'font-family:Arial,Helvetica,sans-serif;';
+ },
+ 'label': function() {
+ return 'font-size:12px;'
+ },
+ 'button': function() {
+ return 'color:#333;text-align:center;'
+ }
+ }
+
+ });
+ uki.theme.wave.backgrounds['button-hover'] = uki.theme.wave.backgrounds['button-normal'];
+ uki.theme.wave.backgrounds['a-button-hover'] = uki.theme.wave.backgrounds['a-button-normal'];
+ uki.theme.wave.backgrounds['plus-button-hover'] = uki.theme.wave.backgrounds['plus-button-normal'];
+ uki.theme.wave.backgrounds['plus-big-button-hover'] = uki.theme.wave.backgrounds['plus-big-button-normal'];
+ uki.theme.wave.backgrounds['search-button-down'] = uki.theme.wave.backgrounds['search-button-hover'] = uki.theme.wave.backgrounds['search-button-normal'];
+ uki.theme.wave.backgrounds['link-button-down'] = uki.theme.wave.backgrounds['link-button-hover'] = uki.theme.wave.backgrounds['link-button-normal'];
+ uki.theme.wave.backgrounds['toolbar-popup'] = uki.theme.wave.backgrounds['popup-normal'];
+ uki.theme.wave.backgrounds['toolbar-popup-button-down'] = uki.theme.wave.backgrounds['toolbar-popup-button-hover'];
+
+ uki.theme.register(uki.theme.wave);
+})();
29 examples/core-examples/wave/wave.html
View
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html>
+ <head>
+ <title>UKI replica of Wave</title>
+ <script src='/src/uki-theamless.cjs'></script>
+ </head>
+ <body style='overflow:hidden;margin:0;padding:0;background:#D9DDE0;background-repeat:repeat-x;min-height:400px'>
+ <div id='message' style='display:none'>
+ <h2>Wave layout in <a href="http://github.com/voloko/ukijs.org/blob/master/examples/core-examples/wave/wave.js" target="_blank">100 lines</a> of js code with <a href="http://ukijs.org">ukijs</a></h2>
+ <p><b>Disclamer</b>. Author of this page has no connection to Google. No code from original Wave is used here.</p>
+ <p>The purpose of this page is to prove that you don't have to use complex frameworks to build layout as complex as this. The only library used here is 21Kb <a href="http://ukijs.org"><strong>ukijs</strong></a>.</p>
+ <p>And yes, it's written (images excluded) in 100 lines of code. It took several hours to build. Hours, not months.</p>
+ <h3>Try it:</h3>
+ <ul>
+ <li>Resize the panels</li>
+ <li>Use tab to focus on search fields and lists</li>
+ <li>Use arrows to navigate through lists</li>
+ <li>Most text is made unselectable (buttons, lists).</li>
+ </ul>
+ <p>PS: and it works in IE and Opera</p>
+ </div>
+ <script>
+ var contacts = [["Ryder Mccarty", "mattis.Cras@Donec.ca"], ["Curran Bender", "feugiat@convallisante.org"], ["Malik Roberts", "amet.lorem@acrisusMorbi.ca"], ["Lester Love", "Nam@Nullamscelerisque.org"], ["Jackson Dillon", "mus.Proin.vel@tinciduntaliquamarcu.ca"], ["Vaughan Dalton", "eu.eleifend.nec@arcu.com"], ["Rudyard Cole", "semper@nectempusmauris.org"], ["Mason Brown", "eu.arcu@dolorFusce.edu"], ["Benjamin Graves", "orci.quis.lectus@eleifendCras.ca"], ["Hamilton Kemp", "ullamcorper.viverra.Maecenas@etrutrumeu.org"], ["Zane Decker", "eget@tacitisociosqu.com"], ["Gareth Alvarez", "sed@odio.com"], ["Porter Wells", "volutpat.Nulla@egestas.com"], ["Tucker Larsen", "consectetuer.rhoncus@Sed.org"], ["Norman Peterson", "turpis@orcitinciduntadipiscing.org"], ["Fritz Lucas", "nunc.nulla.vulputate@Aliquamerat.ca"], ["Merrill Garrison", "odio@ligula.com"], ["Lamar Morrow", "parturient.montes.nascetur@Mauris.ca"], ["Cedric Hess", "Vestibulum.accumsan@mauris.org"], ["Basil Bray", "elementum@ategestas.edu"], ["Christopher Valencia", "Quisque@elit.com"], ["Joel Perry", "dictum.sapien.Aenean@molestietortor.org"], ["Jonah Norton", "Nam.ac@Nam.org"], ["Colt Terry", "ligula@arcuCurabiturut.ca"], ["Louis Jones", "non.quam.Pellentesque@adipiscinglacus.org"], ["Logan Colon", "consequat@ipsumSuspendissesagittis.com"], ["Demetrius Delaney", "fringilla.purus.mauris@Utsagittislobortis.org"], ["Aaron Martin", "posuere@Phasellusdolor.org"], ["Hilel Solis", "ipsum.non@sedpede.ca"], ["Odysseus Gay", "Vivamus.nisi.Mauris@egetipsum.org"], ["Harlan Kramer", "semper.pretium.neque@lacusQuisqueimperdiet.org"], ["Magee Fields", "bibendum@intempuseu.ca"], ["Dylan Mills", "facilisis.lorem@odioEtiam.ca"], ["Rooney Brewer", "malesuada.malesuada.Integer@ametorci.ca"], ["Wang Deleon", "Nam.porttitor@Duismienim.edu"], ["Ivor Burch", "ut.cursus@vestibulumlorem.ca"], ["Dalton Stokes", "et.ipsum.cursus@dictumsapien.com"], ["Zane Turner", "eu@purus.com"], ["Hashim Jensen", "turpis@Etiamligulatortor.ca"], ["Hilel Boyd", "non.lobortis.quis@felis.edu"], ["Lance Charles", "scelerisque.neque.sed@tincidunt.com"], ["Justin Pitts", "iaculis.nec.eleifend@Suspendissenon.com"], ["Lyle Walter", "Aenean.eget.metus@ascelerisque.com"], ["Brendan Saunders", "id@enimSuspendissealiquet.org"], ["Bradley Morin", "condimentum.Donec@Etiamgravidamolestie.org"], ["Shad Burton", "urna@nuncnullavulputate.ca"], ["Jack Owen", "id@sedsapien.edu"], ["Amir Bowen", "aliquet.vel.vulputate@tellusimperdietnon.ca"], ["Richard Bush", "justo@Vestibulumaccumsanneque.org"], ["Kennan Hopkins", "orci@Fuscemollis.ca"], ["Hakeem Woodard", "accumsan.neque.et@nonummyipsumnon.edu"], ["Eaton Campos", "Sed@dui.org"], ["Brett Winters", "ac@Nam.ca"], ["Stone Kane", "eu.augue@interdumfeugiatSed.ca"], ["Jack Abbott", "nunc.Quisque.ornare@idblanditat.ca"], ["Marshall Mcmillan", "euismod.in.dolor@Maurisblanditenim.com"], ["Xanthus Chapman", "nunc.est.mollis@augue.edu"], ["Dale Ratliff", "Donec.fringilla.Donec@quis.org"], ["Camden Davidson", "tempus.lorem@tempor.org"], ["Clayton Pate", "a.ultricies@Mauris.ca"], ["Armand Huff", "metus@Donecegestas.edu"], ["Phelan Ewing", "at@Donec.edu"], ["Davis Mcclure", "arcu.Curabitur.ut@cursusNuncmauris.edu"], ["Ali Gutierrez", "lorem.luctus.ut@non.edu"], ["Gavin Hahn", "Sed.auctor.odio@euismodmauriseu.com"], ["Henry Frederick", "facilisi.Sed@variusultrices.edu"], ["Len Watson", "eget.mollis@ultricesiaculis.com"], ["Ethan Edwards", "volutpat.Nulla@egestasa.org"], ["Nero Conrad", "est.mollis.non@vitaediam.org"], ["Giacomo Wiley", "et@tortor.edu"], ["Steven Kramer", "egestas@anteblandit.com"], ["Zeph Quinn", "Quisque.ac.libero@Donec.org"], ["Lucius Delaney", "urna.Nullam@noncursus.com"], ["Zeus Stafford", "augue@IntegermollisInteger.edu"], ["Brady Richard", "sit@lobortis.com"], ["Oren Ellison", "tincidunt.Donec.vitae@iaculis.edu"], ["Aidan Nguyen", "Donec.tempus.lorem@massaIntegervitae.edu"], ["Elvis Dominguez", "et.magnis@enim.org"], ["Wade Mcdaniel", "netus.et.malesuada@orcitincidunt.edu"], ["Lewis Sykes", "nisi.Mauris@Mauris.edu"], ["Calvin Valencia", "interdum@maurisut.ca"], ["Ignatius Browning", "ultricies.ornare.elit@quama.edu"], ["Honorato Stark", "sem.eget.massa@elementumlorem.com"], ["Reese Burris", "felis.orci@orci.ca"], ["Camden Holden", "tristique.pharetra.Quisque@Nuncut.org"], ["Ulysses Black", "semper.egestas@luctus.edu"], ["John Mcmillan", "laoreet.posuere@molestiein.com"], ["Vance Barry", "elit.sed.consequat@Suspendisse.edu"], ["Carter James", "velit@necanteMaecenas.org"], ["Cyrus Banks", "a@hendrerit.org"], ["Dexter Sharpe", "eu.sem.Pellentesque@tempordiam.ca"], ["Tyrone Gilliam", "sed@Vivamussit.org"], ["Kadeem Knight", "ultrices.posuere.cubilia@fermentumrisusat.edu"], ["Talon Prince", "ante.Vivamus.non@risusodioauctor.com"], ["Tanek Malone", "est.congue.a@Donectempus.ca"], ["Ryder Roth", "Proin.dolor.Nulla@non.org"], ["Jerry Burch", "odio@magnaCras.ca"], ["Lamar Sharp", "Aenean.egestas.hendrerit@Aeneaneget.org"], ["Ferdinand Michael", "mollis.Duis.sit@et.com"], ["Kelly Huber", "aliquet.libero@vel.edu"]];
+ var waves = [["lacinia. Sed","pede. Suspendisse dui. Fusce diam nunc, ullamcorper eu, euismod ac, fermentum","Aug 12","17"],["nonummy","purus, in molestie tortor nibh sit","Feb 26","2"],["Quisque fringilla","auctor, nunc nulla vulputate dui, nec tempus mauris erat eget ipsum. Suspendisse sagittis. Nullam vitae diam. Proin dolor. Nulla semper","Jun 3","14"],["luctus sit amet,","laoreet posuere, enim nisl elementum purus, accumsan interdum libero dui","Dec 29","14"],["mi eleifend","et, rutrum non, hendrerit id, ante. Nunc","Dec 13","2"],["tellus","congue, elit sed consequat auctor, nunc nulla vulputate dui, nec tempus mauris","Feb 6","4"],["Cras sed leo.","ac risus. Morbi metus. Vivamus euismod urna. Nullam lobortis quam a felis ullamcorper viverra. Maecenas iaculis aliquet diam.","Jul 13","12"],["Cum sociis","nibh lacinia orci, consectetuer euismod est arcu ac orci. Ut semper pretium","Jun 8","5"],["penatibus et","enim. Etiam imperdiet dictum magna. Ut tincidunt orci quis lectus. Nullam suscipit, est ac","May 27","3"],["malesuada.","consectetuer, cursus et, magna. Praesent interdum ligula eu enim. Etiam imperdiet","Sep 18","17"],["adipiscing lacus. Ut","Morbi vehicula. Pellentesque tincidunt tempus risus. Donec egestas.","Jan 6","18"],["eu enim.","sollicitudin a, malesuada id, erat. Etiam vestibulum","Mar 10","11"],["malesuada vel,","ultricies dignissim lacus. Aliquam rutrum lorem ac risus. Morbi metus. Vivamus euismod urna. Nullam lobortis quam","Aug 21","7"],["tortor,","Nulla eu neque pellentesque massa lobortis ultrices. Vivamus rhoncus. Donec est. Nunc ullamtortor,","Jul 12","28"],["ut aliquam iaculis,","sed, est. Nunc laoreet lectus quis massa. Mauris vestibulum, neque","May 11","13"],["malesuada","Nulla tincidunt, neque vitae semper egestas, urna justo faucibus","Dec 25","21"],["iaculis,","nisi. Mauris nulla. Integer urna.iaculis","Feb 19","19",""],["sodales. Mauris","vel, convallis in, cursus et, eros. Proin ultrices. Duis","Jan 19","18"],["libero lacus, varius","Morbi slibero lacus, varius","Feb 5","14"],["risus. Donec nibh","amet ultricies sem magna","Dec 29","15"],["x = %q(lacinia. Sed","pede. Suspendisse dui. Fusce diam nunc, ullamcorper eu, euismod ac, fermentum","Aug 12","17"],["nonummy","purus, in molestie tortor nibh sit","Feb 26","2"],["Quisque fringilla","auctor, nunc nulla vulputate dui, nec tempus mauris erat eget ipsum. Suspendisse sagittis. Nullam vitae diam. Proin dolor. Nulla semper","Jun 3","14"],["luctus sit amet,","laoreet posuere, enim nisl elementum purus, accumsan interdum libero dui","Dec 29","14"],["mi eleifend","et, rutrum non, hendrerit id, ante. Nunc","Dec 13","2"],["tellus","congue, elit sed consequat auctor, nunc nulla vulputate dui, nec tempus mauris","Feb 6","4"],["Cras sed leo.","ac risus. Morbi metus. Vivamus euismod urna. Nullam lobortis quam a felis ullamcorper viverra. Maecenas iaculis aliquet diam.","Jul 13","12"],["Cum sociis","nibh lacinia orci, consectetuer euismod est arcu ac orci. Ut semper pretium","Jun 8","5"],["penatibus et","enim. Etiam imperdiet dictum magna. Ut tincidunt orci quis lectus. Nullam suscipit, est ac","May 27","3"],["malesuada.","consectetuer, cursus et, magna. Praesent interdum ligula eu enim. Etiam imperdiet","Sep 18","17"],["adipiscing lacus. Ut","Morbi vehicula. Pellentesque tincidunt tempus risus. Donec egestas.","Jan 6","18"],["eu enim.","sollicitudin a, malesuada id, erat. Etiam vestibulum","Mar 10","11"],["malesuada vel,","ultricies dignissim lacus. Aliquam rutrum lorem ac risus. Morbi metus. Vivamus euismod urna. Nullam lobortis quam","Aug 21","7"],["tortor,","Nulla eu neque pellentesque massa lobortis ultrices. Vivamus rhoncus. Donec est. Nunc ullamtortor,","Jun 3","7"],["Suspendisse aliquet molestie","pharetra, felis eget varius ultrices, maurisSuspendisse aliquet molestie","Feb 19","19"],["sodales. Mauris","vel, convallis in, cursus et, eros. Proin ultrices. Duis","Jan 19","18"],["libero lacus, varius","Morbi slibero lacus, varius","Aug 30","24"],["at pretium","enim. Mauris quis turpis vitae purus gravida","Feb 14","10"],["in","malesuada. Integer id magna et ipsum cursus vestibulum. Mauris magna. Duis dignissim tempor arcu. Vestibulum ut eros non enim commodo","Feb 16","20"],["eget odio.","nonummy ultricies ornare, elit elit fermentum risus, at fringilla purus mauris a nunc. In at pede. Cras","Nov 28","5"],["eget,","erat, in consectetuer ipsum nunc id enim. Curabitur massa. Vestibulum accumsan neque","Dec 2","6"],["ante. Vivamus non","non, egestas a, dui. Cras pellentesque. Sed dictum. Proin eget","Feb 25","10"],["in","non, lobortis quis, pede.","May 19","7"],["Cras eget nisi","at auctor ullamcorper, nisl arcu iaculis enim, sit amet ornare lectus justo eu arcu. Morbi sit amet","Jan 22","22"],["mattis","cursus a, enim. Suspendisse aliquet, sem ut cursus luctus, ipsum leo elementum sem,","Jan 7","2"],["lectus.","odio semper cursus. Integer","Jul 21","13"],["aliquet","ut dolor dapibus gravida.","Jul 8","9"],["ultrices, mauris","metus. In lorem. Donec elementum, lorem ut aliquam","Dec 18","29"],["nulla. Integer vulputate,","ut dolor dapibus gravida. Aliquam tincidunt, nunc ac mattis ornare, lectus","Apr 25","25"],["erat, in consectetuer","Duis cursus, diam at pretium aliquet, metus urna","Oct 25","6"],["tristique","euismod est arcu ac orci. Ut semper pretium neque. Morbi quis urna. Nunc quis","Jan 3","5"],["sed dolor. Fusce","a neque. Nullam ut nisi a odio semper sed dolor. Fusce","Jul 19","12"],["penatibus","suscipit nonummy. Fusce fermentum","Apr 21","30"],["molestie in, tempus","placerat velit. Quisque varius. Nam porttitor scelerisque neque. Nullam nisl. Maecenas malesuada fringilla","Mar 12","18"],["eget","Sed pharetra, felis eget varius ultrices, mauris ipsum porta elit, a feugiat tellus lorem eu metus. In lorem.","Aug 19","18"],["quam vel sapien","nunc ac mattis ornare, lectus ante dictum mi,","Apr 15","28"],["dolor quam, elementum","amet","Nov 23","10"],["tincidunt. Donec vitae","tempus scelerisque, lorem ipsum sodales purus, in molestie tortor nibh sit amet orci. Ut sagittis lobortis mauris. Suspendisse aliquet molestie","Nov 14","9"],["lacus. Etiam","nec, diam. Duis mi enim, condimentum eget, volutpat","Aug 2","20"],["dictum eu, eleifend","ligula. Nullam feugiat placerat velit. Quisque varius. Nam porttitor scelerisque neque. Nullam nisl. Maecenas malesuada fringilla est. Mauris","Apr 22","18"],["magnis dis parturient","a","Jan 15","27"],["ipsum primis in","id magna et ipsum cursus ipsum primis in","Sep 11","24"],["est","posuere, enim nisl","Apr 26","8"],["cursus purus. Nullam","velit justo nec ante. Maecenas cursus purus. Nullam","Sep 1","4"],["Fusce","amet orci. Ut sagittis lobortis mauris. Suspendisse aliquet molestie tellus. Aenean","Feb 5","14"],["risus. Donec nibh","amet ultricies sem magna","Dec 29","15"]];
+ </script>
+ <script src='wave-theme.js'></script>
+ <script src='wave.js'></script>
+ </body>
+</html>
102 &#