├── .gitignore ├── .gitmodules ├── .sizecache.json ├── Gruntfile.js ├── LICENSE.txt ├── README.md ├── apple-touch-icon-precomposed.png ├── demo.css ├── index.html ├── index.min.html ├── package.json ├── ptr.coffee ├── ptr.css ├── ptr.js ├── ptr.min.css ├── ptr.min.js ├── qr.png └── random ├── hashes.php ├── html.php └── numbers.php /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimonWaldherr/PullToRefresh/0b9e913474662736a527831e13a670b5c86249bb/.gitmodules -------------------------------------------------------------------------------- /.sizecache.json: -------------------------------------------------------------------------------- 1 | {"":{"version":0.4,"tips":{"master":"3575af9787e58ada497cf882c37e6bff279a9780"}}," last run":{"ptr.js":{"":10878,"gz":2130},"ptr.min.js":{"":7011,"gz":1685},"ptr.css":{"":10727,"gz":7479},"ptr.min.css":{"":10396,"gz":7415}},"master":{"ptr.js":{"":10878,"gz":2130},"ptr.min.js":{"":7011,"gz":1685},"ptr.css":{"":10727,"gz":7479},"ptr.min.css":{"":10396,"gz":7415}}} -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | gzip = require("gzip-js"); 3 | grunt.initConfig({ 4 | pkg: grunt.file.readJSON('package.json'), 5 | compare_size: { 6 | files: [ "ptr.js", "ptr.min.js", "ptr.css", "ptr.min.css" ], 7 | options: { 8 | compress: { 9 | gz: function( contents ) { 10 | return gzip.zip( contents, {} ).length; 11 | } 12 | }, 13 | cache: ".sizecache.json" 14 | } 15 | }, 16 | uglify: { 17 | options: { 18 | banner: '/* * * * * * * * *\n' + 19 | ' * PullToRefresh *\n' + 20 | ' * Version <%= pkg.version %> *\n' + 21 | ' * License: MIT *\n' + 22 | ' * SimonWaldherr *\n' + 23 | ' * * * * * * * * */\n\n', 24 | footer: '\n\n\n\n /* foo */' 25 | }, 26 | dist: { 27 | files: { 28 | './ptr.min.js': ['./ptr.js'] 29 | } 30 | } 31 | }, 32 | cssmin: { 33 | add_banner: { 34 | options: { 35 | banner: '/* * * * * * * * *\n' + 36 | ' * PullToRefresh *\n' + 37 | ' * Version <%= pkg.version %> *\n' + 38 | ' * License: MIT *\n' + 39 | ' * SimonWaldherr *\n' + 40 | ' * * * * * * * * */\n\n' 41 | }, 42 | files: { 43 | './ptr.min.css': ['./ptr.css'] 44 | } 45 | } 46 | }, 47 | compress: { 48 | main: { 49 | options: { 50 | mode: 'gzip' 51 | }, 52 | files: [ 53 | {expand: true, src: 'ptr.min.js', dest: '/', ext: '.gz.js'} 54 | ] 55 | } 56 | } 57 | }); 58 | grunt.loadNpmTasks("grunt-compare-size"); 59 | grunt.loadNpmTasks('grunt-contrib-uglify'); 60 | grunt.loadNpmTasks('grunt-contrib-cssmin'); 61 | grunt.registerTask('default', ['uglify', 'cssmin', 'compare_size']); 62 | }; 63 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Simon Waldherr 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PullToRefresh 2 | 3 | 4 | 5 | a JavaScript implementation of PullToRefresh **without jQuery or other Frameworks** and under the **MIT-License** 6 | 7 | ## about 8 | 9 | License: MIT 10 | Version: 0.1.2 11 | Date: 11.2014 12 | 13 | ## howto 14 | 15 | take a look at the index.html file and use it as a reference on how to integrate PullToRefresh into your project. 16 | 17 | ## demo 18 | 19 | scan this QR-Code with your iPhone to open the PullToRefresh example 20 | http://cdn.simon.waldherr.eu/projects/PTR/ 21 | 22 | ## contact 23 | 24 | Feel free to contact me via [eMail](mailto:contact@simonwaldherr.de) or on [Twitter](http://twitter.com/simonwaldherr). This software will be continually developed. Suggestions and tips are always welcome. 25 | -------------------------------------------------------------------------------- /apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SimonWaldherr/PullToRefresh/0b9e913474662736a527831e13a670b5c86249bb/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /demo.css: -------------------------------------------------------------------------------- 1 | body{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}header,footer{text-align:center}header{position:fixed;right:0;left:0;z-index:10;height:44px;padding:5px;box-sizing:border-box;top:0;display:block;background-color:#1eb0e9;background-image:-webkit-linear-gradient(top,#1eb0e9 0,#109adc 100%);background-image:linear-gradient(to bottom,#1eb0e9 0,#109adc 100%);border-bottom:1px solid #0e5895;box-shadow:inset 0 1px 1px -1px rgba(255,255,255,.8);-webkit-box-orient:horizontal;box-orient:horizontal;}h1{position:absolute;top:0;left:0;display:block;width:100%;font-size:30px;font-weight:bold;line-height:0px;color:#fff;text-align:center;text-shadow:0 -1px rgba(0,0,0,.5);white-space:nowrap;font-family:"Helvetica Neue",sans-serif;}.notouch header p{padding:0.5em 3em}.touch{padding-bottom:30px}.touch .content > li.error,.touch .content > li.error{display:none}#demo-window{position:absolute;top:43px;left:0px;right:0px;bottom:50px;}footer{position:fixed;right:0;left:0;z-index:10;padding:5px;box-sizing:border-box;bottom:0;height:50px;padding:0;background-color:#393939;background-image:-webkit-linear-gradient(top,#393939 0,#2b2b2b 100%);background-image:linear-gradient(to bottom,#393939 0,#2b2b2b 100%);border-top:1px solid #000;border-bottom-width:0;box-shadow:inset 0 1px 1px -1px rgba(255,255,255,.6);}footer ul,footer ol{display:-webkit-box;display:box;list-style:none;-webkit-box-orient:horizontal;box-orient:horizontal;top:0px;bottom:0px;position:relative;height:300px;padding:0px;margin:0px;line-height:50px;}footer ul li,footer ol li{height:100%;text-align:center;box-sizing:border-box;-webkit-box-flex:1;box-flex:1;top:0px;bottom:0px;position:relative;}footer ul li a,footer ul li a:visited,footer ol li a,footer ol li a:visited{color:white;text-decoration:none;font-weight:bolder;font-family:"Helvetica Neue",Arial,Helvetica,sans-serif;}footer ul li:active,footer ol li:active,footer ul li.active,footer ol li.active{color:#3573ac;box-shadow:inset 0px 0px 13px 0px #000000;-webkit-box-shadow:inset 0px 0px 13px 0px #000000;}footer ul li.active a:visited,footer ol li.active a:visited,footer ul li.active a,footer ol li.active a{color:#2295ff}.content,.content{border-top:1px solid #0a0a0a;list-style-type:none;padding:0;margin:0;}.content > li,.content > li{border-bottom:1px solid #0a0a0a;color:#0A0A0A;font-size:80%;line-height:30px;padding:0 5px;}.content > li.error,.content > li.error{color:red;font-weight:bold;}.content > li,.content > li{border-bottom:initial;font-weight:bolder;line-height:40px;background:-moz-linear-gradient(top,#ffffff 0%,#f2f2f2 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ffffff),color-stop(100%,#f2f2f2));background:-webkit-linear-gradient(top,#ffffff 0%,#f2f2f2 100%);background:-o-linear-gradient(top,#ffffff 0%,#f2f2f2 100%);background:-ms-linear-gradient(top,#ffffff 0%,#f2f2f2 100%);background:linear-gradient(to bottom,#ffffff 0%,#f2f2f2 100%);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;}.ptr_scrollable{position:absolute;top:0px;bottom:0px;height:auto;width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch;} 2 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | PullToRefresh 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |

PullToRefresh

19 |
20 |
21 |
22 |
23 |
24 |
    25 |
  1. only works on touch devices, here you can put a refresh button for desktop browsers
  2. 26 |
  3. Pull here to try
  4. 27 |
  5. Lorem ipsum dolor sit amet,
  6. 28 |
  7. consectetur adipisici elit,
  8. 29 |
  9. sed eiusmod tempor incidunt ut
  10. 30 |
  11. labore et dolore magna aliqua.
  12. 31 |
  13. Ut enim ad minim veniam,
  14. 32 |
  15. quis nostrud exercitation ullamco
  16. 33 |
  17. laboris nisi ut aliquid ex ea commodi consequat.
  18. 34 |
  19. Quis aute iure reprehenderit in voluptate
  20. 35 |
  21. velit esse cillum dolore eu fugiat nulla pariatur.
  22. 36 |
  23. Excepteur sint obcaecat cupiditat non proident,
  24. 37 |
  25. sunt in culpa qui officia deserunt mollit anim id est laborum.
  26. 38 |
  27. Duis autem vel eum iriure dolor in
  28. 39 |
  29. hendrerit in vulputate velit esse molestie consequat,
  30. 40 |
  31. vel illum dolore eu feugiat nulla
  32. 41 |
  33. facilisis at vero eros et accumsan et iusto
  34. 42 |
  35. odio dignissim qui blandit praesent luptatum zzril
  36. 43 |
  37. delenit augue duis dolore te feugait nulla facilisi.
  38. 44 |
  39. Lorem ipsum dolor sit amet,
  40. 45 |
  41. consectetuer adipiscing elit,
  42. 46 |
  43. sed diam nonummy nibh euismod tincidunt
  44. 47 |
  45. ut laoreet dolore magna aliquam erat volutpat.
  46. 48 |
  47. Ut wisi enim ad minim veniam,
  48. 49 |
  49. quis nostrud exerci tation ullamcorper
  50. 50 |
  51. suscipit lobortis nisl ut aliquip ex ea commodo consequat.
  52. 51 |
  53. Duis autem vel eum iriure dolor in hendrerit
  54. 52 |
  55. in vulputate velit esse molestie consequat,
  56. 53 |
  57. vel illum dolore eu feugiat nulla facilisis
  58. 54 |
  59. at vero eros et accumsan et iusto odio dignissim
  60. 55 |
  61. qui blandit praesent luptatum zzril delenit
  62. 56 |
  63. augue duis dolore te feugait nulla facilisi.
  64. 57 |
  65. Nam liber tempor cum soluta nobis eleifend
  66. 58 |
  67. option congue nihil imperdiet doming id
  68. 59 |
  69. quod mazim placerat facer possim assum.
  70. 60 |
  71. Lorem ipsum dolor sit amet,
  72. 61 |
  73. consectetuer adipiscing elit,
  74. 62 |
  75. sed diam nonummy nibh euismod tincidunt
  76. 63 |
  77. ut laoreet dolore magna aliquam erat volutpat.
  78. 64 |
  79. Ut wisi enim ad minim veniam,
  80. 65 |
  81. quis nostrud exerci tation ullamcorper suscipit
  82. 66 |
  83. lobortis nisl ut aliquip ex ea commodo consequat.
  84. 67 |
  85. Duis autem vel eum iriure dolor in hendrerit
  86. 68 |
  87. in vulputate velit esse molestie consequat,
  88. 69 |
  89. vel illum dolore eu feugiat nulla facilisis.
  90. 70 |
  91. At vero eos et accusam et justo duo dolores et ea rebum.
  92. 71 |
  93. Stet clita kasd gubergren,
  94. 72 |
  95. no sea takimata sanctus est Lorem ipsum dolor sit amet.
  96. 73 |
  97. Lorem ipsum dolor sit amet,
  98. 74 |
  99. consetetur sadipscing elitr,
  100. 75 |
  101. sed diam nonumy eirmod tempor invidunt ut
  102. 76 |
  103. labore et dolore magna aliquyam erat,
  104. 77 |
  105. sed diam voluptua.
  106. 78 |
  107. At vero eos et accusam et justo duo dolores et ea rebum.
  108. 79 |
  109. Stet clita kasd gubergren,
  110. 80 |
  111. no sea takimata sanctus est Lorem ipsum dolor sit amet.
  112. 81 |
  113. Lorem ipsum dolor sit amet,
  114. 82 |
  115. consetetur sadipscing elitr,
  116. 83 |
  117. At accusam aliquyam diam diam dolore dolores duo eirmod eos erat,
  118. 84 |
  119. et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren,
  120. 85 |
  121. kasd magna no rebum.
  122. 86 |
  123. sanctus sea sed takimata ut vero voluptua.
  124. 87 |
  125. est Lorem ipsum dolor sit amet.
  126. 88 |
  127. Lorem ipsum dolor sit amet,
  128. 89 |
  129. consetetur sadipscing elitr,
  130. 90 |
  131. sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.
  132. 91 |
  133. Consetetur sadipscing elitr,
  134. 92 |
  135. sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
  136. 93 |
  137. sed diam voluptua.
  138. 94 |
  139. At vero eos et accusam et justo duo dolores et ea rebum.
  140. 95 |
  141. Stet clita kasd gubergren,
  142. 96 |
  143. no sea takimata sanctus est Lorem ipsum dolor sit amet.
  144. 97 |
  145. Lorem ipsum dolor sit amet,
  146. 98 |
  147. consetetur sadipscing elitr,
  148. 99 |
  149. sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
  150. 100 |
  151. sed diam voluptua.
  152. 101 |
  153. At vero eos et accusam et justo duo dolores et ea rebum.
  154. 102 |
  155. Stet clita kasd gubergren,
  156. 103 |
  157. no sea takimata sanctus est Lorem ipsum dolor sit amet.
  158. 104 |
  159. Lorem ipsum dolor sit amet,
  160. 105 |
  161. consetetur sadipscing elitr,
  162. 106 |
  163. sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
  164. 107 |
  165. sed diam voluptua.
  166. 108 |
  167. At vero eos et accusam et justo duo dolores et ea rebum.
  168. 109 |
  169. Stet clita kasd gubergren,
  170. 110 |
  171. no sea takimata sanctus est Lorem ipsum dolor sit amet.
  172. 111 |
112 |
113 |
114 |
115 |
116 | 124 |
125 | 126 | 156 | 157 | 158 | -------------------------------------------------------------------------------- /index.min.html: -------------------------------------------------------------------------------- 1 | PullToRefresh

PullToRefresh

  1. only works on touch devices, here you can put a refresh button for desktop browsers
  2. Pull here to try
  3. Lorem ipsum dolor sit amet,
  4. consectetur adipisici elit,
  5. sed eiusmod tempor incidunt ut
  6. labore et dolore magna aliqua.
  7. Ut enim ad minim veniam,
  8. quis nostrud exercitation ullamco
  9. laboris nisi ut aliquid ex ea commodi consequat.
  10. Quis aute iure reprehenderit in voluptate
  11. velit esse cillum dolore eu fugiat nulla pariatur.
  12. Excepteur sint obcaecat cupiditat non proident,
  13. sunt in culpa qui officia deserunt mollit anim id est laborum.
  14. Duis autem vel eum iriure dolor in
  15. hendrerit in vulputate velit esse molestie consequat,
  16. vel illum dolore eu feugiat nulla
  17. facilisis at vero eros et accumsan et iusto
  18. odio dignissim qui blandit praesent luptatum zzril
  19. delenit augue duis dolore te feugait nulla facilisi.
  20. Lorem ipsum dolor sit amet,
  21. consectetuer adipiscing elit,
  22. sed diam nonummy nibh euismod tincidunt
  23. ut laoreet dolore magna aliquam erat volutpat.
  24. Ut wisi enim ad minim veniam,
  25. quis nostrud exerci tation ullamcorper
  26. suscipit lobortis nisl ut aliquip ex ea commodo consequat.
  27. Duis autem vel eum iriure dolor in hendrerit
  28. in vulputate velit esse molestie consequat,
  29. vel illum dolore eu feugiat nulla facilisis
  30. at vero eros et accumsan et iusto odio dignissim
  31. qui blandit praesent luptatum zzril delenit
  32. augue duis dolore te feugait nulla facilisi.
  33. Nam liber tempor cum soluta nobis eleifend
  34. option congue nihil imperdiet doming id
  35. quod mazim placerat facer possim assum.
  36. Lorem ipsum dolor sit amet,
  37. consectetuer adipiscing elit,
  38. sed diam nonummy nibh euismod tincidunt
  39. ut laoreet dolore magna aliquam erat volutpat.
  40. Ut wisi enim ad minim veniam,
  41. quis nostrud exerci tation ullamcorper suscipit
  42. lobortis nisl ut aliquip ex ea commodo consequat.
  43. Duis autem vel eum iriure dolor in hendrerit
  44. in vulputate velit esse molestie consequat,
  45. vel illum dolore eu feugiat nulla facilisis.
  46. At vero eos et accusam et justo duo dolores et ea rebum.
  47. Stet clita kasd gubergren,
  48. no sea takimata sanctus est Lorem ipsum dolor sit amet.
  49. Lorem ipsum dolor sit amet,
  50. consetetur sadipscing elitr,
  51. sed diam nonumy eirmod tempor invidunt ut
  52. labore et dolore magna aliquyam erat,
  53. sed diam voluptua.
  54. At vero eos et accusam et justo duo dolores et ea rebum.
  55. Stet clita kasd gubergren,
  56. no sea takimata sanctus est Lorem ipsum dolor sit amet.
  57. Lorem ipsum dolor sit amet,
  58. consetetur sadipscing elitr,
  59. At accusam aliquyam diam diam dolore dolores duo eirmod eos erat,
  60. et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren,
  61. kasd magna no rebum.
  62. sanctus sea sed takimata ut vero voluptua.
  63. est Lorem ipsum dolor sit amet.
  64. Lorem ipsum dolor sit amet,
  65. consetetur sadipscing elitr,
  66. sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.
  67. Consetetur sadipscing elitr,
  68. sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
  69. sed diam voluptua.
  70. At vero eos et accusam et justo duo dolores et ea rebum.
  71. Stet clita kasd gubergren,
  72. no sea takimata sanctus est Lorem ipsum dolor sit amet.
  73. Lorem ipsum dolor sit amet,
  74. consetetur sadipscing elitr,
  75. sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
  76. sed diam voluptua.
  77. At vero eos et accusam et justo duo dolores et ea rebum.
  78. Stet clita kasd gubergren,
  79. no sea takimata sanctus est Lorem ipsum dolor sit amet.
  80. Lorem ipsum dolor sit amet,
  81. consetetur sadipscing elitr,
  82. sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
  83. sed diam voluptua.
  84. At vero eos et accusam et justo duo dolores et ea rebum.
  85. Stet clita kasd gubergren,
  86. no sea takimata sanctus est Lorem ipsum dolor sit amet.
2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pulltorefresh", 3 | "title": "PullToRefresh", 4 | "description": "a JavaScript implementation of PullToRefresh without jQuery or other Frameworks under MIT-License", 5 | "version": "0.1.2", 6 | "homepage": "https://github.com/SimonWaldherr/PullToRefresh", 7 | "author": { 8 | "name": "Simon Waldherr", 9 | "email": "contact@simonwaldherr.de", 10 | "url": "http://simon.waldherr.eu/" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/SimonWaldherr/PullToRefresh.git" 15 | }, 16 | "bugs": { 17 | "url": "https://github.com/SimonWaldherr/PullToRefresh/issues" 18 | }, 19 | "licenses": [ 20 | { 21 | "type": "MIT", 22 | "url": "http://simon.waldherr.eu/license/mit/" 23 | } 24 | ], 25 | "dependencies": {}, 26 | "devDependencies": { 27 | "grunt": ">= 0.4.1", 28 | "grunt-compare-size": ">= 0.0.0", 29 | "grunt-contrib-concat": ">= 0.3.0", 30 | "grunt-contrib-uglify": ">= 0.2.2", 31 | "grunt-contrib-cssmin": ">= 0.6.0", 32 | "gzip-js": ">= 0.3.1" 33 | }, 34 | "keywords": [ 35 | "webkit", 36 | "mobile", 37 | "scroll", 38 | "webapp", 39 | "css3", 40 | "html5" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /ptr.coffee: -------------------------------------------------------------------------------- 1 | # * * * * * * * * 2 | # * PullToRefresh * 3 | # * Version 0.1.2 * 4 | # * License: MIT * 5 | # * SimonWaldherr * 6 | # * * * * * * * * 7 | 8 | #jslint browser: true, indent: 2 9 | 10 | #global ActiveXObject 11 | ptr = [] 12 | ptr_settings = 13 | mlang: "en" 14 | mode: "mail" 15 | 16 | ptr_messages = 17 | en: 18 | pulltorefresh: "Pull to refresh" 19 | loading: "Loading ..." 20 | 21 | de: 22 | pulltorefresh: "ziehen zum aktualisieren" 23 | loading: "laden ..." 24 | 25 | ptr_init = (language) -> 26 | "use strict" 27 | i = 0 28 | ptr_settings.mlang = language if language isnt `undefined` 29 | ptr.scrollable_parent = false 30 | ptr.scrollables = document.getElementsByClassName("ptr_scrollable") 31 | if (window.hasOwnProperty("ontouchstart")) or (window.navigator.msPointerEnabled) 32 | document.getElementsByTagName("body")[0].className += " touch" 33 | else 34 | document.getElementsByTagName("body")[0].className += " notouch" 35 | i = 0 36 | while i < ptr.scrollables.length 37 | if ptr.scrollables[i].hasAttribute("data-url") isnt false 38 | ptr.box = document.createElement("div") 39 | ptr.container = document.createElement("div") 40 | ptr.image = document.createElement("div") 41 | ptr.text = document.createElement("div") 42 | ptr.box.appendChild ptr.container 43 | ptr.container.appendChild ptr.image 44 | ptr.container.appendChild ptr.text 45 | ptr.text.innerHTML = ptr_messages[ptr_settings.mlang].pulltorefresh 46 | ptr.box.className = "ptr_box" 47 | ptr.box.style.right = "99%" 48 | ptr.container.className = "ptr_container" 49 | ptr.image.className = "ptr_image" 50 | ptr.text.className = "ptr_text" 51 | ptr.scrollables[i].firstElementChild.insertBefore ptr.box, ptr.scrollables[i].firstElementChild.firstChild 52 | i += 1 53 | document.addEventListener "touchstart", (e) -> 54 | parent = e.target 55 | return false if parent.className is `undefined` 56 | i = 0 57 | while i < 10 58 | if parent.className isnt `undefined` 59 | if parent.className.match("ptr_scrollable") 60 | ptr.scrollable_parent = i 61 | i = 10 62 | if parent.hasAttribute("data-url") isnt false 63 | if parent.getElementsByClassName("ptr_box")[0] is `undefined` 64 | ptr.box = document.createElement("div") 65 | ptr.container = document.createElement("div") 66 | ptr.image = document.createElement("div") 67 | ptr.text = document.createElement("div") 68 | ptr.box.appendChild ptr.container 69 | ptr.container.appendChild ptr.image 70 | ptr.container.appendChild ptr.text 71 | ptr.text.innerHTML = ptr_messages[ptr_settings.mlang].pulltorefresh 72 | ptr.box.className = "ptr_box" 73 | ptr.box.style.right = "99%" 74 | ptr.container.className = "ptr_container" 75 | ptr.image.className = "ptr_image" 76 | ptr.text.className = "ptr_text" 77 | parent.firstElementChild.insertBefore ptr.box, parent.firstElementChild.firstChild 78 | else 79 | parent.getElementsByClassName("ptr_box")[0].style.opacity = 1.0 80 | parent.getElementsByClassName("ptr_text")[0].innerHTML = ptr_messages[ptr_settings.mlang].pulltorefresh if parent.getElementsByClassName("ptr_text")[0].innerHTML isnt ptr_messages[ptr_settings.mlang].loading 81 | else parent.removeChild parent.getElementsByClassName("ptr_box")[0] if parent.getElementsByClassName("ptr_box")[0] isnt `undefined` 82 | if parent.scrollTop is 0 83 | parent.scrollTop = 1 84 | parent.getElementsByClassName("ptr_wrap")[0].style.top = "1px" 85 | else parent.scrollTop = parent.scrollTop - 1 if (parent.scrollTop + parent.offsetHeight) is parent.scrollHeight 86 | if parent.parentNode.tagName is `undefined` 87 | i = 10 88 | return false 89 | if (parent.parentNode.tagName is "BODY") or (parent.parentNode.tagName is "HTML") 90 | i = 10 91 | return false 92 | parent = parent.parentNode 93 | i += 1 94 | return 95 | 96 | document.addEventListener "touchmove", (e) -> 97 | parent = e.target 98 | scroll = false 99 | rotate = 90 100 | top = undefined 101 | time = undefined 102 | insert = undefined 103 | inserted = undefined 104 | ajax = undefined 105 | ajaxTimeout = undefined 106 | requrl = undefined 107 | if ptr.scrollable_parent is false 108 | e.preventDefault() 109 | return false 110 | i = 0 111 | while i < ptr.scrollable_parent 112 | parent = parent.parentNode 113 | i += 1 114 | if (ptr.scrollable_parent isnt false) and (parent.hasAttribute("data-url") isnt false) 115 | scroll = true 116 | ptr.element = parent 117 | ptr.wrapelement = ptr.element.getElementsByClassName("ptr_wrap")[0] 118 | top = ptr.element.scrollTop 119 | ptr.box = ptr.element.getElementsByClassName("ptr_box")[0] 120 | if (ptr.wrapelement.className.indexOf(" active") is -1) and (not ptr.wrapelement.getElementsByClassName("ptr_image")[0].className.match("ptr_loading")) and (ptr.element.scrollTop < 1) 121 | rotate = (if (top < -40) then -90 else 130 + parseInt(top * 12 + 270, 10)) if ptr.element.scrollTop < -25 122 | if ptr.element.scrollTop < 0 123 | ptr.box.style.right = "0px" 124 | ptr.wrapelement.getElementsByClassName("ptr_image")[0].style["-webkit-transform"] = "scale(1) rotate(" + rotate + "deg)" 125 | if ptr.element.scrollTop < -51 126 | if ptr.wrapelement.className.indexOf(" ptr_active") is -1 127 | ptr.box.style.right = "0px" 128 | ptr.wrapelement.className += " ptr_active" 129 | ptr.wrapelement.getElementsByClassName("ptr_text")[0].innerHTML = ptr_messages[ptr_settings.mlang].loading 130 | ptr.wrapelement.getElementsByClassName("ptr_image")[0].className += " ptr_loading" 131 | if parent.getAttribute("data-url") is "reload" 132 | window.location.reload true 133 | return false 134 | ptr.element = parent 135 | ptr.wrapelement = ptr.element.getElementsByClassName("ptr_wrap")[0] 136 | ptr.eleId = parent.id 137 | time = new Date() 138 | ajax = (if (window.ActiveXObject) then new ActiveXObject("Microsoft.XMLHTTP") else (XMLHttpRequest and new XMLHttpRequest()) or null) 139 | ajaxTimeout = window.setTimeout(-> 140 | ajax.abort() 141 | ptr.wrapelement.getElementsByClassName("ptr_text")[0].innerHTML = "" 142 | ptr.wrapelement.className = ptr.wrapelement.className.replace(" ptr_active", "") 143 | ptr.wrapelement.style.top = "0px" 144 | ptr.box = document.getElementById(ptr.eleId).getElementsByClassName("ptr_box")[0] 145 | ptr.box.getElementsByClassName("ptr_image")[0].className = ptr.box.getElementsByClassName("ptr_image")[0].className.replace(" ptr_loading", "") 146 | return 147 | , 6000) 148 | ajax.onreadystatechange = -> 149 | if ajax.readyState is 4 150 | if ajax.status is 200 151 | clearTimeout ajaxTimeout 152 | if ajax.status isnt 200 153 | ptr.wrapelement.style.top = "0px" 154 | ptr.box.getElementsByClassName("ptr_image")[0].className = ptr.getElementsByClassName("ptr_image")[0].className.replace(" loading", "") 155 | ptr.wrapelement.className = ptr.wrapelement.className.replace(" ptr_active", "") 156 | else 157 | ptr.box = document.getElementById(ptr.eleId).getElementsByClassName("ptr_box")[0] 158 | insert = document.createElement("div") 159 | insert.innerHTML = ajax.responseText 160 | insert.className = "ptr_inserted" 161 | ptr.wrapelement.insertBefore insert, ptr.box.nextSibling 162 | ptr.wrapelement.style.top = "0px" 163 | ptr.box.getElementsByClassName("ptr_image")[0].className = ptr.box.getElementsByClassName("ptr_image")[0].className.replace(" ptr_loading", "") 164 | ptr.wrapelement.className = ptr.wrapelement.className.replace(" ptr_active", "") 165 | inserted = document.getElementsByClassName("ptr_inserted")[0] 166 | ptr.element.scrollTop = inserted.clientHeight - 51 167 | ptr.wrapelement.getElementsByClassName("ptr_text")[0].innerHTML = "" 168 | ptr.box.style.right = "99%" 169 | ptr.wrapelement.getElementsByClassName("ptr_image")[0].className = ptr.wrapelement.getElementsByClassName("ptr_image")[0].className.replace(" ptr_loading", "") 170 | ptr.scrollable_parent = false 171 | return 172 | 173 | requrl = parent.getAttribute("data-url") + "?rt=" + time.getTime() 174 | ajax.open "POST", requrl, true 175 | ajax.setRequestHeader "Content-type", "application/x-www-form-urlencoded" 176 | ajax.send() 177 | else if ptr.element.scrollTop isnt 0 178 | if ptr.wrapelement.className.indexOf(" active") isnt -1 179 | ptr.wrapelement.className = ptr.wrapelement.className.replace(" ptr_active", "") 180 | ptr.wrapelement.getElementsByClassName("ptr_text")[0].innerHTML = ptr_messages[ptr_settings.mlang].pulltorefresh 181 | else scroll = true if ptr.scrollable_parent isnt false 182 | e.preventDefault() if scroll is false 183 | return 184 | 185 | document.addEventListener "touchend", (e) -> 186 | parent = e.target 187 | i = 0 188 | while i < ptr.scrollable_parent 189 | parent = parent.parentNode 190 | i += 1 191 | if (parent.hasAttribute("data-url") isnt false) and (ptr.scrollable_parent isnt false) 192 | if parent.hasAttribute("data-url") isnt false 193 | ptr.element = parent 194 | ptr.wrapelement = ptr.element.getElementsByClassName("ptr_wrap")[0] 195 | ptr.eleId = parent.id 196 | ptr.box = ptr.element.getElementsByClassName("ptr_box")[0] 197 | if ptr.wrapelement.getElementsByClassName("ptr_image")[0].className.match("ptr_loading") 198 | ptr.wrapelement.className = ptr.wrapelement.className.replace(" ptr_active", "") 199 | ptr.wrapelement.style.top = "51px" 200 | else 201 | ptr.box.style.right = "99%" 202 | ptr.scrollable_parent = false 203 | return 204 | 205 | return -------------------------------------------------------------------------------- /ptr.css: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * PullToRefresh 4 | * Version 0.1.2 5 | * License: MIT 6 | * SimonWaldherr 7 | * 8 | */ 9 | 10 | .ptr_scrollable { 11 | overflow-y: auto; 12 | height: auto; 13 | -webkit-overflow-scrolling: touch; 14 | position: absolute; 15 | } 16 | 17 | .ptr_scrollable .ptr_wrap { 18 | min-height: 100%; 19 | padding-bottom: 1px; 20 | background: #f5f5f5; 21 | -webkit-transform: translateZ(0); 22 | -webkit-user-select: none; 23 | -moz-user-select: none; 24 | user-select: none; 25 | } 26 | 27 | .ptr_wrap { 28 | position: relative; 29 | } 30 | 31 | .ptr_box { 32 | position: absolute; 33 | top: -55px; 34 | line-height: 55px; 35 | display: block; 36 | text-align: center; 37 | height: 55px; 38 | left: 0px; 39 | right: 0px; 40 | overflow: hidden; 41 | } 42 | 43 | .ptr_container { 44 | position: relative; 45 | width: 230px; 46 | margin: auto; 47 | height: 40px; 48 | top: 10px; 49 | } 50 | 51 | .ptr_image { 52 | margin: 5px; 53 | margin-top: 20px; 54 | margin-left: 10px; 55 | margin-right: 10px; 56 | height: 30px; 57 | width: 40px; 58 | zoom: 0.5; 59 | background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAACACAYAAAD03Gy6AAALsUlEQVR4Ae2dDZBWVRnH34Xlo2XTtDDCKRYtA6KdZphmw4ixDRZIFlAUiMEETMQwZhiUqCQnAvGTnAwQLYQUEDQEt4AEoXEsXCowp2EYhg8/po1VQqBkl49d+v23vQTvfrz3+5574Jn5z91z33Oe83+e5733nvOcc9/NZOKRz9HNTjBA3ZWUlGTOnDlzEfigjRwSsVyD/nXgS2AluA5clEYP5EfsiT7ol/OvbOznExzX19bWjtu3b9+aurq6hqug8bNAB11RRUVFmY4dOwbSY1Pjr2PMYXAmG3l5eXVt27adDDJhoE2b/13IlZWVqbutRXUFjMDpy0EBaCJ8W9vw7V/EB5eBeU0qXEAnongGjMd/z4NmnZ/l2/spP5R17oIqhh2AaXjvaeDlyrqH+k+BsLmg0nwJ0+jZmDvfp8nfod0qcME9QcMKwOM4b5ZP5zvNbuKPl8ClzokL4Rg0AO1w0jPgrpCcNRA9vwddQtJnvJogASjEujVgXMhWlqDvFXB1yHqNVOc3AA0TKiwaGpFVvdC7BRRHpN8YtX4C8GnYbwJfi9iKz6BfV0K/iPtJVL3XAPSArb6ZyuvEIbrSNoBvxtFZEn14CcCXISjnfzZmonrWvAjGxtxvLN25DcA3YPMy+FQsrJp20p5TSm1MafpRus+4CcBITKwAHzPA1F/A4V4DeIRGIVcAJtKTZqgfCa3H4Ip+iopHgqsxQ0NrAZgOxV+BtmZQPY+FydzOI5qr0FIA5tDQ9G+Zrs7VwKSrM5e/m3yeHYA8aiwAP2pS08wTN0LLlOeTLw+dGwCNNJ4F3/WlKblGSY/QAlme39haY209bNM64WmYo1RUVJTv2bNn78mTJwM5paXG9fX1meHDh2c6d+7cUhVf57vSaitosnabwnPvwDnSWfq2bdtCXXfWLWgZuA7YIMpTbQb902KMAjAJbEsLYRc8P06d9aDcRd3EqygAB4Du/crz2CKdMOQ3IOy1itD9owBIjoChQAsstoizWvc9kw1yAiCONWAU0K4Gm+TnGPNjUw06NwDiWAcmgodVsEh+gi1+d2xE6obsADidzeAPwSbxs2cpcvtbCoA61lWgEVK9CpbIeOx4HhSYYk9rARBH7VgbA2pVsERGYMdvweUm2JMrAOKob8wwcFQFS0Q7t7XCd2XS9rgJgDhqF8QgcFAFS6QPdmjXxTVJ2uM2AOJYCZR53K+CJfJ57FAeTJvBEhEvARDBXaAUvKmCJaJkpLZDliVhj9cAiOPbYAB4TQVLRBuC14Gb47bHTwDE8X0wBKxXwRLR1vjngIbesYnfAIjgf8ANYIUKloj8sRjENgkNEgD5XEtPyjguVMEieRBbYnl3LWgA5HOtpE0Bc1WwSGZiyxMgDB+16JYwlWvH2t0t9pTOD+6Atm6xHaKiH2YAxPFRcBtQVtUWGY0hGiFdEoVBYQdAHJeAUUDrC7bIIAzZCK4I26D8kSNHetLZrl27zPbt2zP797c6IdbKmtZkXwAmbOr1ZGMLlfty/pWtW7eWHzp06K0TJ05ktE2lsLAwU1ZW1vDGfwvtWj/t51dLJk+e3LrS/3+q/TpVQA9qW3AAW3qDBunWrVumpqbG91aVKG5BDjcd/wxKwV4VLJEi7FAS79ow7Ik6AOK4GygIb6hgiehZsAEMDmqPszUxqJ5c7d+lgt4B1laR/rkqp+RzjYrW8hy49dixY6v00zuCV4krAOJ1CGj/0UqgB7QN0qGqqmplcXHxZfwEjyZtniXOAIjch0DDLg1Vjd80Bcecwrc+r7q6ehEVNdp7IGeDrApxPAOyusyc4sQt4PHsD1Jengd/5ZA8SRIBcAhO5Y/ZTsGS4wzseBK49qvrihE56D70TotId1Jqb6djrSt0dEMg6QCI42NgAjitgiWilbWXQM6f3jEhAPL5UiDSx4EtomG31pq7tGaQKQEQx7VAO7Q/UMESKcEOzZqvaskekwIgjluBtr5o4d8W6YUhW0BxcwaZFgBx3AlKwS4VLJFu2LEZ9Mu2x8QAiKNy3boSXlfBEumMHeuBsgFnxdQAiOBBMBi8rIIl8lHseBGMdewxOQDieBQMB9ogbIu0x5BnwZ0yyPQAiGMtGAX0qpEtkochC8GDaQiA4/Rq5w+LjkVpCcDPcPpcixwvUx4Bo+NOR3v1ofjpLZ3xXhsaXv9e+DV8oUwOgN7jWg5GGO5ML/TqqXwH+KXTyNQAaMz8AujvELXgqMGE1kFk11kxMQCaNSqT2OzU/SzzdP2h4bSSjXrV6zwxLQBfgF0F6H4ey3QXNKHUbbSyOTNMGgV9BYLKHNrk/H3Yo5RKs87nvDETsTK4KHf+SZGyRP6GHaWg1aSiCVeAZrm652ufjS3yGoYMAO/kMijpAEyCoPYJdchFNEWf/w6uQ8AhN5yTDMAMCOp9rCQ5uPGRlzorqHwj0PtzriQp433toXFlUXKVFtD1OHDSC4W4h6EKuLKAmg1aIWxJzPDOxByMmeXHoDgDoPv8MjDaD1FT23Tt2nX6pk2b5hcUFBi9OVcjnNVgkKmO9MGrjjaT8vPzl3Tv3t33PxGN4wrQ2F7LcHrFxxapwRDd79cENSjqAGhWqzF+76BEDWp/BC43Ac3aA0uUAfgi7OT8osAszVHwT6hojVqvXoUiUQ1Dr4XdZlAUCkszlOyFRikIzfkyK4oAaCvJRnCFOrBE3sAOOX932PaEHYAxEFwHtP/FFnkVQwaAd6MwKMwATIagpuLtoyCakE6tTWgn27+i6j+sAPwAgotAXlREE9D7DH3qfbYPo+w7jAA8BMH7oySZgG69v/ZtoPfZIpUgAVDbJ8E9kTKMX/lsupwaV7d+5wEdIfhrcHNcRGPqZxr9PBZTXw3d5JeXl3vqj8zfpTt27NBmWb2CY4ucHjhw4O0zZ85cevz4cdc26ddSOnXqlGnfPr5xRxfYvQ7OWAQ9ZEdMnDjR9y+e+PnFGaeNl1vQVRDVsKwXsEUOY4hGOn9IyiC3ASiGoPI62jRli/wDQ5TX+WuSBmkkk0v6UUF5HZucvwd7SkGizqf/nLkgzQI3gM6qbInswA45X0FIXFq7AsbCTgsphYmzDI+A9mYqr6PbjxHSUgA0HtbW8PjGV9G7YzVdDAMfRN+V+x6aC8Bsms93ryIVNTVj/xaoNY1t9ihIOZC7TCMZkI9yVd8PqCOy5k4A2tHDEjAusp6SUaws7QPJdO2uVwXgErAMaA+7LaKZ+p1gsekGKQDK65SZTtQDvxPUvRWs8tAmsap6CM8Ef0+MQbgdH0OdZrepcL5M1xWwE2jHmlINfUBa5T0SaiP4KeFtp055W0fR70D37ds3cbsvh8EWoPtn2rAfzr0rKysTyWg6mU0/x3PnAYcxYihYC9Ikun2WglTeRs8NgJyu1Qitci0FaZA/QVIvwb2VBrLNccwOgOqcBhNArEtz6tijbKT+YPCex3ZGVW8uAA5B5YPucwqGHZ+Dj+Yt/zaMl2c6rQVAymaDqZ61RtvgCdQrU6vxfuolVwBkoPJDseyRceHNedTRDFejNCvETQBkaCy7xHJ4VAm1H+aok7qP3QZAhlUArZBFtk9SnTQj9ZybBJTVtE68BEDGvwoGgkh2CquDLFH+fgx4Kuu8NUWvAZDhSl2Ugt0qRChH0T0MKFlorfgJgJyxF2gC9BcVIpCD6FR+Smu4VovfAMgpVUBp7FBeVpPCRlFeR8GtdE7YfAwSAPlFC9zaXLpGhRDkTXTo9rYrBF2pUBE0ADKyBowCS1QIIH+k7QDwdgAdqWsaRgBktN4avw3MV8GHrKfNEPC+j7apbhJWABwnTOePWU7B5XEF9W4Aqc/ruLT3vGphB0DK5wBtbXGTLlhIPe3EOAkuSIkiAHLkAnALaM2xc/l8CnATKKrZKVoTjkqWo/gIUOq48NxOevbseffixYsf1f9e1DJeGCI9PXr0CEOVdTq+ikXVQJ7WavmEkpKS1K3d+lnvddMmqlsQfj4rGl5eDw6A8eBpcFEaPfBfsmYf8GNO7mUAAAAASUVORK5CYII='); 60 | -webkit-background-size: 50% 100%; 61 | -moz-background-size: 50% 100%; 62 | background-size: 50% 100%; 63 | background-repeat: repeat-x; 64 | display: inline-block; 65 | background-position: left center; 66 | float: left; 67 | position: relative; 68 | bottom: 0px; 69 | -webkit-backface-visibility: hidden 70 | } 71 | 72 | .ptr_image.ptr_loading { 73 | margin-left: 15px; 74 | margin-right: 15px; 75 | height: 30px; 76 | width: 30px; 77 | background-image: url('data:image/png;base64,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'); 78 | -webkit-background-size: 100% 100%; 79 | -moz-background-size: 100% 100%; 80 | background-size: 100% 100%; 81 | background-repeat: no-repeat; 82 | -webkit-animation-name: rotate; 83 | -webkit-animation-duration:0.5s; 84 | -webkit-animation-timing-function:linear; 85 | -webkit-animation-iteration-count:infinite; 86 | -webkit-animation-play-state:running; 87 | } 88 | 89 | .ptr_text { 90 | position: relative; 91 | top: -10px; 92 | left: 20px; 93 | float: left; 94 | font-size: 20px; 95 | } 96 | 97 | .ptr_inserted { 98 | border-top: 1px solid #0a0a0a; 99 | list-style-type: none; 100 | padding: 0; 101 | margin: 0; 102 | } 103 | 104 | .ptr_inserted ul { 105 | padding: 0px; 106 | margin: 0px; 107 | } 108 | 109 | @-webkit-keyframes rotate { 110 | from { 111 | -webkit-transform: rotate(0deg); 112 | } 113 | to { 114 | -webkit-transform: rotate(360deg); 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /ptr.js: -------------------------------------------------------------------------------- 1 | /* * * * * * * * * 2 | * PullToRefresh * 3 | * Version 0.1.2 * 4 | * License: MIT * 5 | * SimonWaldherr * 6 | * * * * * * * * */ 7 | 8 | /*jslint browser: true, indent: 2 */ 9 | /*global ActiveXObject */ 10 | 11 | var ptr = [], 12 | ptr_settings = {mlang : 'en', mode : 'mail'}, 13 | ptr_messages = { 14 | en : {pulltorefresh : 'Pull to refresh', 'loading' : 'Loading ...'}, 15 | de : {pulltorefresh : 'ziehen zum aktualisieren', 'loading' : 'laden ...'} 16 | }, 17 | ptr_init = function (language) { 18 | "use strict"; 19 | var i = 0; 20 | if (language !== undefined) { 21 | ptr_settings.mlang = language; 22 | } 23 | ptr.scrollable_parent = false; 24 | ptr.scrollables = document.getElementsByClassName('ptr_scrollable'); 25 | if ((window.hasOwnProperty('ontouchstart')) || (window.navigator.msPointerEnabled)) { 26 | document.getElementsByTagName('body')[0].className += ' touch'; 27 | } else { 28 | document.getElementsByTagName('body')[0].className += ' notouch'; 29 | } 30 | 31 | for (i = 0; i < ptr.scrollables.length; i += 1) { 32 | if (ptr.scrollables[i].hasAttribute('data-url') !== false) { 33 | ptr.box = document.createElement('div'); 34 | ptr.container = document.createElement('div'); 35 | ptr.image = document.createElement('div'); 36 | ptr.text = document.createElement('div'); 37 | 38 | ptr.box.appendChild(ptr.container); 39 | ptr.container.appendChild(ptr.image); 40 | ptr.container.appendChild(ptr.text); 41 | ptr.text.innerHTML = ptr_messages[ptr_settings.mlang].pulltorefresh; 42 | 43 | ptr.box.className = 'ptr_box'; 44 | ptr.box.style.right = '99%'; 45 | ptr.container.className = 'ptr_container'; 46 | ptr.image.className = 'ptr_image'; 47 | ptr.text.className = 'ptr_text'; 48 | 49 | ptr.scrollables[i].firstElementChild.insertBefore(ptr.box, ptr.scrollables[i].firstElementChild.firstChild); 50 | } 51 | } 52 | 53 | document.addEventListener('touchstart', function (e) { 54 | var parent = e.target; 55 | 56 | if (parent.className === undefined) { 57 | return false; 58 | } 59 | 60 | for (i = 0; i < 10; i += 1) { 61 | if (parent.className !== undefined) { 62 | 63 | if (parent.className.match('ptr_scrollable')) { 64 | 65 | ptr.scrollable_parent = i; 66 | i = 10; 67 | 68 | if (parent.hasAttribute('data-url') !== false) { 69 | if (parent.getElementsByClassName('ptr_box')[0] === undefined) { 70 | ptr.box = document.createElement('div'); 71 | ptr.container = document.createElement('div'); 72 | ptr.image = document.createElement('div'); 73 | ptr.text = document.createElement('div'); 74 | 75 | ptr.box.appendChild(ptr.container); 76 | ptr.container.appendChild(ptr.image); 77 | ptr.container.appendChild(ptr.text); 78 | ptr.text.innerHTML = ptr_messages[ptr_settings.mlang].pulltorefresh; 79 | 80 | ptr.box.className = 'ptr_box'; 81 | ptr.box.style.right = '99%'; 82 | ptr.container.className = 'ptr_container'; 83 | ptr.image.className = 'ptr_image'; 84 | ptr.text.className = 'ptr_text'; 85 | 86 | parent.firstElementChild.insertBefore(ptr.box, parent.firstElementChild.firstChild); 87 | } else { 88 | parent.getElementsByClassName('ptr_box')[0].style.opacity = 1.0; 89 | if (parent.getElementsByClassName('ptr_text')[0].innerHTML !== ptr_messages[ptr_settings.mlang].loading) { 90 | parent.getElementsByClassName('ptr_text')[0].innerHTML = ptr_messages[ptr_settings.mlang].pulltorefresh; 91 | } 92 | } 93 | } else if (parent.getElementsByClassName('ptr_box')[0] !== undefined) { 94 | parent.removeChild(parent.getElementsByClassName('ptr_box')[0]); 95 | } 96 | 97 | if (parent.scrollTop === 0) { 98 | parent.scrollTop = 1; 99 | parent.getElementsByClassName('ptr_wrap')[0].style.top = '1px'; 100 | } else if ((parent.scrollTop + parent.offsetHeight) === parent.scrollHeight) { 101 | parent.scrollTop = parent.scrollTop - 1; 102 | } 103 | } 104 | } 105 | 106 | if ((parent.parentNode.tagName === undefined)) { 107 | i = 10; 108 | return false; 109 | } 110 | if ((parent.parentNode.tagName === 'BODY') || (parent.parentNode.tagName === 'HTML')) { 111 | i = 10; 112 | return false; 113 | } 114 | 115 | parent = parent.parentNode; 116 | } 117 | }); 118 | 119 | document.addEventListener('touchmove', function (e) { 120 | var parent = e.target, 121 | scroll = false, 122 | rotate = 90, 123 | top, 124 | time, 125 | insert, 126 | inserted, 127 | ajax, 128 | ajaxTimeout, 129 | requrl; 130 | 131 | if (ptr.scrollable_parent === false) { 132 | e.preventDefault(); 133 | return false; 134 | } 135 | 136 | for (i = 0; i < ptr.scrollable_parent; i += 1) { 137 | parent = parent.parentNode; 138 | } 139 | 140 | if ((ptr.scrollable_parent !== false) && (parent.hasAttribute('data-url') !== false)) { 141 | scroll = true; 142 | ptr.element = parent; 143 | ptr.wrapelement = ptr.element.getElementsByClassName('ptr_wrap')[0]; 144 | top = ptr.element.scrollTop; 145 | ptr.box = ptr.element.getElementsByClassName('ptr_box')[0]; 146 | if ((ptr.wrapelement.className.indexOf(' active') === -1) && (!ptr.wrapelement.getElementsByClassName('ptr_image')[0].className.match('ptr_loading')) && (ptr.element.scrollTop < 1)) { 147 | if (ptr.element.scrollTop < -25) { 148 | rotate = (top < -40) ? -90 : 130 + parseInt(top * 12 + 270, 10); 149 | } 150 | 151 | if (ptr.element.scrollTop < 0) { 152 | ptr.box.style.right = '0px'; 153 | ptr.wrapelement.getElementsByClassName('ptr_image')[0].style['-webkit-transform'] = 'scale(1) rotate(' + rotate + 'deg)'; 154 | } 155 | 156 | if (ptr.element.scrollTop < -51) { 157 | if (ptr.wrapelement.className.indexOf(' ptr_active') === -1) { 158 | ptr.box.style.right = '0px'; 159 | ptr.wrapelement.className += ' ptr_active'; 160 | ptr.wrapelement.getElementsByClassName('ptr_text')[0].innerHTML = ptr_messages[ptr_settings.mlang].loading; 161 | ptr.wrapelement.getElementsByClassName('ptr_image')[0].className += ' ptr_loading'; 162 | 163 | if (parent.getAttribute('data-url') === 'reload') { 164 | window.location.reload(true); 165 | return false; 166 | } 167 | 168 | ptr.element = parent; 169 | ptr.wrapelement = ptr.element.getElementsByClassName('ptr_wrap')[0]; 170 | ptr.eleId = parent.id; 171 | time = new Date(); 172 | 173 | ajax = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : (XMLHttpRequest && new XMLHttpRequest()) || null; 174 | ajaxTimeout = window.setTimeout(function () { 175 | ajax.abort(); 176 | ptr.wrapelement.getElementsByClassName('ptr_text')[0].innerHTML = ''; 177 | ptr.wrapelement.className = ptr.wrapelement.className.replace(' ptr_active', ''); 178 | ptr.wrapelement.style.top = '0px'; 179 | ptr.box = document.getElementById(ptr.eleId).getElementsByClassName('ptr_box')[0]; 180 | ptr.box.getElementsByClassName('ptr_image')[0].className = ptr.box.getElementsByClassName('ptr_image')[0].className.replace(' ptr_loading', ''); 181 | }, 6000); 182 | ajax.onreadystatechange = function () { 183 | 184 | if (ajax.readyState === 4) { 185 | if (ajax.status === 200) { 186 | clearTimeout(ajaxTimeout); 187 | if (ajax.status !== 200) { 188 | ptr.wrapelement.style.top = '0px'; 189 | ptr.box.getElementsByClassName('ptr_image')[0].className = ptr.getElementsByClassName('ptr_image')[0].className.replace(' loading', ''); 190 | ptr.wrapelement.className = ptr.wrapelement.className.replace(' ptr_active', ''); 191 | } else { 192 | ptr.box = document.getElementById(ptr.eleId).getElementsByClassName('ptr_box')[0]; 193 | insert = document.createElement('div'); 194 | insert.innerHTML = ajax.responseText; 195 | insert.className = 'ptr_inserted'; 196 | 197 | ptr.wrapelement.insertBefore(insert, ptr.box.nextSibling); 198 | ptr.wrapelement.style.top = '0px'; 199 | ptr.box.getElementsByClassName('ptr_image')[0].className = ptr.box.getElementsByClassName('ptr_image')[0].className.replace(' ptr_loading', ''); 200 | ptr.wrapelement.className = ptr.wrapelement.className.replace(' ptr_active', ''); 201 | inserted = document.getElementsByClassName('ptr_inserted')[0]; 202 | ptr.element.scrollTop = inserted.clientHeight - 51; 203 | ptr.wrapelement.getElementsByClassName('ptr_text')[0].innerHTML = ''; 204 | ptr.box.style.right = '99%'; 205 | 206 | ptr.wrapelement.getElementsByClassName('ptr_image')[0].className = ptr.wrapelement.getElementsByClassName('ptr_image')[0].className.replace(' ptr_loading', ''); 207 | 208 | ptr.scrollable_parent = false; 209 | } 210 | } 211 | } 212 | }; 213 | requrl = parent.getAttribute('data-url') + '?rt=' + time.getTime(); 214 | ajax.open("POST", requrl, true); 215 | ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 216 | ajax.send(); 217 | } 218 | } else if (ptr.element.scrollTop !== 0) { 219 | if (ptr.wrapelement.className.indexOf(' active') !== -1) { 220 | ptr.wrapelement.className = ptr.wrapelement.className.replace(' ptr_active', ''); 221 | ptr.wrapelement.getElementsByClassName('ptr_text')[0].innerHTML = ptr_messages[ptr_settings.mlang].pulltorefresh; 222 | } 223 | } 224 | } 225 | } else if ((ptr.scrollable_parent !== false)) { 226 | scroll = true; 227 | } 228 | 229 | if (scroll === false) { 230 | e.preventDefault(); 231 | } 232 | }); 233 | 234 | document.addEventListener('touchend', function (e) { 235 | var parent = e.target; 236 | 237 | for (i = 0; i < ptr.scrollable_parent; i += 1) { 238 | parent = parent.parentNode; 239 | } 240 | 241 | if ((parent.hasAttribute('data-url') !== false) && (ptr.scrollable_parent !== false)) { 242 | if ((parent.hasAttribute('data-url') !== false)) { 243 | ptr.element = parent; 244 | ptr.wrapelement = ptr.element.getElementsByClassName('ptr_wrap')[0]; 245 | ptr.eleId = parent.id; 246 | ptr.box = ptr.element.getElementsByClassName('ptr_box')[0]; 247 | 248 | if (ptr.wrapelement.getElementsByClassName('ptr_image')[0].className.match('ptr_loading')) { 249 | ptr.wrapelement.className = ptr.wrapelement.className.replace(' ptr_active', ''); 250 | ptr.wrapelement.style.top = '51px'; 251 | } else { 252 | ptr.box.style.right = '99%'; 253 | } 254 | } 255 | } 256 | 257 | ptr.scrollable_parent = false; 258 | }); 259 | }; 260 | -------------------------------------------------------------------------------- /ptr.min.css: -------------------------------------------------------------------------------- 1 | /* * * * * * * * * 2 | * PullToRefresh * 3 | * Version 0.1.2 * 4 | * License: MIT * 5 | * SimonWaldherr * 6 | * * * * * * * * */ 7 | 8 | 9 | .ptr_scrollable{overflow-y:auto;height:auto;-webkit-overflow-scrolling:touch;position:absolute}.ptr_scrollable .ptr_wrap{min-height:100%;padding-bottom:1px;background:#f5f5f5;-webkit-transform:translateZ(0);-webkit-user-select:none;-moz-user-select:none;user-select:none}.ptr_wrap{position:relative}.ptr_box{position:absolute;top:-55px;line-height:55px;display:block;text-align:center;height:55px;left:0;right:0;overflow:hidden}.ptr_container{position:relative;width:230px;margin:auto;height:40px;top:10px}.ptr_image{margin:5px;margin-top:20px;margin-left:10px;margin-right:10px;height:30px;width:40px;zoom:.5;background-image:url('data:image/png;base64,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');-webkit-background-size:50% 100%;-moz-background-size:50% 100%;background-size:50% 100%;background-repeat:repeat-x;display:inline-block;background-position:left center;float:left;position:relative;bottom:0;-webkit-backface-visibility:hidden}.ptr_image.ptr_loading{margin-left:15px;margin-right:15px;height:30px;width:30px;background-image:url('data:image/png;base64,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');-webkit-background-size:100% 100%;-moz-background-size:100% 100%;background-size:100% 100%;background-repeat:no-repeat;-webkit-animation-name:rotate;-webkit-animation-duration:.5s;-webkit-animation-timing-function:linear;-webkit-animation-iteration-count:infinite;-webkit-animation-play-state:running}.ptr_text{position:relative;top:-10px;left:20px;float:left;font-size:20px}.ptr_inserted{border-top:1px solid #0a0a0a;list-style-type:none;padding:0;margin:0}.ptr_inserted ul{padding:0;margin:0}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}} -------------------------------------------------------------------------------- /ptr.min.js: -------------------------------------------------------------------------------- 1 | /* * * * * * * * * 2 | * PullToRefresh * 3 | * Version 0.1.2 * 4 | * License: MIT * 5 | * SimonWaldherr * 6 | * * * * * * * * */ 7 | 8 | var ptr=[],ptr_settings={mlang:"en",mode:"mail"},ptr_messages={en:{pulltorefresh:"Pull to refresh",loading:"Loading ..."},de:{pulltorefresh:"ziehen zum aktualisieren",loading:"laden ..."}},ptr_init=function(a){"use strict";var b=0;for(void 0!==a&&(ptr_settings.mlang=a),ptr.scrollable_parent=!1,ptr.scrollables=document.getElementsByClassName("ptr_scrollable"),document.getElementsByTagName("body")[0].className+=window.hasOwnProperty("ontouchstart")||window.navigator.msPointerEnabled?" touch":" notouch",b=0;bb;b+=1){if(void 0!==c.className&&c.className.match("ptr_scrollable")&&(ptr.scrollable_parent=b,b=10,c.hasAttribute("data-url")!==!1?void 0===c.getElementsByClassName("ptr_box")[0]?(ptr.box=document.createElement("div"),ptr.container=document.createElement("div"),ptr.image=document.createElement("div"),ptr.text=document.createElement("div"),ptr.box.appendChild(ptr.container),ptr.container.appendChild(ptr.image),ptr.container.appendChild(ptr.text),ptr.text.innerHTML=ptr_messages[ptr_settings.mlang].pulltorefresh,ptr.box.className="ptr_box",ptr.box.style.right="99%",ptr.container.className="ptr_container",ptr.image.className="ptr_image",ptr.text.className="ptr_text",c.firstElementChild.insertBefore(ptr.box,c.firstElementChild.firstChild)):(c.getElementsByClassName("ptr_box")[0].style.opacity=1,c.getElementsByClassName("ptr_text")[0].innerHTML!==ptr_messages[ptr_settings.mlang].loading&&(c.getElementsByClassName("ptr_text")[0].innerHTML=ptr_messages[ptr_settings.mlang].pulltorefresh)):void 0!==c.getElementsByClassName("ptr_box")[0]&&c.removeChild(c.getElementsByClassName("ptr_box")[0]),0===c.scrollTop?(c.scrollTop=1,c.getElementsByClassName("ptr_wrap")[0].style.top="1px"):c.scrollTop+c.offsetHeight===c.scrollHeight&&(c.scrollTop=c.scrollTop-1)),void 0===c.parentNode.tagName)return b=10,!1;if("BODY"===c.parentNode.tagName||"HTML"===c.parentNode.tagName)return b=10,!1;c=c.parentNode}}),document.addEventListener("touchmove",function(a){var c,d,e,f,g,h,i,j=a.target,k=!1,l=90;if(ptr.scrollable_parent===!1)return a.preventDefault(),!1;for(b=0;bc?-90:130+parseInt(12*c+270,10)),ptr.element.scrollTop<0&&(ptr.box.style.right="0px",ptr.wrapelement.getElementsByClassName("ptr_image")[0].style["-webkit-transform"]="scale(1) rotate("+l+"deg)"),ptr.element.scrollTop<-51){if(-1===ptr.wrapelement.className.indexOf(" ptr_active")){if(ptr.box.style.right="0px",ptr.wrapelement.className+=" ptr_active",ptr.wrapelement.getElementsByClassName("ptr_text")[0].innerHTML=ptr_messages[ptr_settings.mlang].loading,ptr.wrapelement.getElementsByClassName("ptr_image")[0].className+=" ptr_loading","reload"===j.getAttribute("data-url"))return window.location.reload(!0),!1;ptr.element=j,ptr.wrapelement=ptr.element.getElementsByClassName("ptr_wrap")[0],ptr.eleId=j.id,d=new Date,g=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):XMLHttpRequest&&new XMLHttpRequest||null,h=window.setTimeout(function(){g.abort(),ptr.wrapelement.getElementsByClassName("ptr_text")[0].innerHTML="",ptr.wrapelement.className=ptr.wrapelement.className.replace(" ptr_active",""),ptr.wrapelement.style.top="0px",ptr.box=document.getElementById(ptr.eleId).getElementsByClassName("ptr_box")[0],ptr.box.getElementsByClassName("ptr_image")[0].className=ptr.box.getElementsByClassName("ptr_image")[0].className.replace(" ptr_loading","")},6e3),g.onreadystatechange=function(){4===g.readyState&&200===g.status&&(clearTimeout(h),200!==g.status?(ptr.wrapelement.style.top="0px",ptr.box.getElementsByClassName("ptr_image")[0].className=ptr.getElementsByClassName("ptr_image")[0].className.replace(" loading",""),ptr.wrapelement.className=ptr.wrapelement.className.replace(" ptr_active","")):(ptr.box=document.getElementById(ptr.eleId).getElementsByClassName("ptr_box")[0],e=document.createElement("div"),e.innerHTML=g.responseText,e.className="ptr_inserted",ptr.wrapelement.insertBefore(e,ptr.box.nextSibling),ptr.wrapelement.style.top="0px",ptr.box.getElementsByClassName("ptr_image")[0].className=ptr.box.getElementsByClassName("ptr_image")[0].className.replace(" ptr_loading",""),ptr.wrapelement.className=ptr.wrapelement.className.replace(" ptr_active",""),f=document.getElementsByClassName("ptr_inserted")[0],ptr.element.scrollTop=f.clientHeight-51,ptr.wrapelement.getElementsByClassName("ptr_text")[0].innerHTML="",ptr.box.style.right="99%",ptr.wrapelement.getElementsByClassName("ptr_image")[0].className=ptr.wrapelement.getElementsByClassName("ptr_image")[0].className.replace(" ptr_loading",""),ptr.scrollable_parent=!1))},i=j.getAttribute("data-url")+"?rt="+d.getTime(),g.open("POST",i,!0),g.setRequestHeader("Content-type","application/x-www-form-urlencoded"),g.send()}}else 0!==ptr.element.scrollTop&&-1!==ptr.wrapelement.className.indexOf(" active")&&(ptr.wrapelement.className=ptr.wrapelement.className.replace(" ptr_active",""),ptr.wrapelement.getElementsByClassName("ptr_text")[0].innerHTML=ptr_messages[ptr_settings.mlang].pulltorefresh)}else ptr.scrollable_parent!==!1&&(k=!0);k===!1&&a.preventDefault()}),document.addEventListener("touchend",function(a){var c=a.target;for(b=0;b'; 6 | while($i < $lines) { 7 | echo '
  • '.md5(rand(111,99999).$i.$lines.$_GET['rt']).'
  • '."\n"; 8 | time_nanosleep(0, 100000000); 9 | $i++; 10 | } 11 | echo ''; 12 | 13 | ?> -------------------------------------------------------------------------------- /random/html.php: -------------------------------------------------------------------------------- 1 | bold', 'code', 'italic', '
    div
    ', 'big', 'sup', 'sub', 'small', 'span', 'strong'); 7 | 8 | echo '
      '; 9 | while($i < $lines) { 10 | $htmlr = rand(0,9); 11 | echo '
    1. '.$html[$htmlr].'
    2. '."\n"; 12 | time_nanosleep(0, 100000000); 13 | $i++; 14 | } 15 | echo '
    '; 16 | 17 | ?> -------------------------------------------------------------------------------- /random/numbers.php: -------------------------------------------------------------------------------- 1 | '; 6 | while($i < $lines) { 7 | echo '
  • '.rand(111,99999).$i.rand(111,99999).$lines.rand(111,99999).rand(111,99999).'
  • '."\n"; 8 | time_nanosleep(0, 100000000); 9 | $i++; 10 | } 11 | echo ''; 12 | 13 | ?> --------------------------------------------------------------------------------