Upload 94 files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitignore +6 -0
- .travis.yml +11 -0
- 404.html +12 -0
- Gemfile +14 -0
- LICENSE +201 -0
- README.md +2 -10
- Rakefile +184 -0
- _config-test.yml +22 -0
- _config.yml +31 -0
- _includes/analytics.html +14 -0
- _includes/app.sass +101 -0
- _includes/footer.html +74 -0
- _includes/head.html +32 -0
- _includes/header.html +25 -0
- _includes/images/android.svg +1 -0
- _includes/images/apple.svg +1 -0
- _includes/images/arrow-right.svg +1 -0
- _includes/images/pg-desktop.svg +1 -0
- _includes/images/pg-mobile.svg +1 -0
- _includes/images/phonegap-logo.svg +1 -0
- _includes/images/speeder.svg +1 -0
- _includes/images/windows.svg +1 -0
- _includes/subfooter.html +8 -0
- _includes/subheader.html +6 -0
- _layouts/compress.html +11 -0
- _layouts/default.html +23 -0
- _layouts/home.html +52 -0
- _layouts/post.html +64 -0
- _post.txt +9 -0
- _posts/2011-04-27-logitech-squeezeboxe284a2-controller-2.html +26 -0
- _posts/2011-09-23-metar-reader.html +34 -0
- _posts/2012-03-21-bit-timer.html +42 -0
- _posts/2012-04-30-untappd.html +44 -0
- _posts/2012-05-08-hockey-community.html +35 -0
- _posts/2012-08-01-healthtap-find-doctors-and-free-answers.md +35 -0
- _posts/2013-03-01-tripcase.md +28 -0
- _posts/2013-06-24-my-heart-camera.md +31 -0
- _posts/2013-06-29-yoga-travel.md +25 -0
- _posts/2013-08-12-browser-quest.md +33 -0
- _posts/2015-06-10-snowbuddy.md +27 -0
- _posts/2015-06-11-sworkit.md +33 -0
- _posts/2015-11-12-localeur.md +22 -0
- _posts/2016-07-20-fanreact.md +21 -0
- feed.xml +30 -0
- index.html +29 -19
- scripts/app-showcase.js +34 -0
- uploads/book/2012-06/2012-06-15-phonegap-essentials-1.jpeg +0 -0
- uploads/book/2012-06/2012-06-15-phonegap-essentials.jpeg +0 -0
- uploads/book/2012-07/2012-02-22-beginning-phonegap-mobile-web-framework-for-javascript-and-html5.jpg +0 -0
- uploads/book/2012-09/2012-01-23-manual-del-guerrero-m-vil-phonegap.jpg +0 -0
.gitignore
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
_site
|
| 2 |
+
.sass-cache
|
| 3 |
+
.jekyll-metadata
|
| 4 |
+
tmp
|
| 5 |
+
Gemfile.lock
|
| 6 |
+
_site-test
|
.travis.yml
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
language: ruby
|
| 2 |
+
rvm:
|
| 3 |
+
- 2.2.3
|
| 4 |
+
script: bundle exec rake test
|
| 5 |
+
sudo: false
|
| 6 |
+
env:
|
| 7 |
+
global:
|
| 8 |
+
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
| 9 |
+
notifications:
|
| 10 |
+
slack:
|
| 11 |
+
secure: I9s8EUh0KTrrXiiq1d0BvDeU+RRQhMt2yVnsys1Tc9W3v495hAh2HxzPCa3F78jVCK3eTs2nscTe68w9nPar446Gh8Th9/MM6D7DAQsn5Z4bhMS3iiN+O242nKJ2BULEh5RKxbCLwSSySR/NxWBfNHYaXAMIAhCETC/Twzm+SzLturODSz3pGhg9/ERWcpC+4yrfuE9rwPM1cat6506Oir+FHErd5rlkDkfq8jT6BpR4lqIBVgox09uMX2CP7TSZOEVWRahmSrHL/K4fZTfAapAmHiWDG9KNDQp0mK9nZcG/ABVSWwvkygQURu6QlkHeLhK9ex41yTJ5WzDowS3SLVzIAHozthc6gYIgl4CQnwukUwODOGcUAU9PSjWiAiuBhGBUf+Ol61qjj5uep/alWqnXEA3fZBOPc1nwCQOK3OH9oh615tBQn5XYNVs5QRwxWx/AkUr7xFaFRZl8+gp7zpI5ijXTL/5GfQ627BHsol4Ty0OGajB5XCE/69pVh6m3Jq92GCpeQ9BeNA2pHAtxGjCxLetRA4EXiQ+CJfX5RSXtzLbRQFocfAoLwzalzhch22CWZU67sWr9P9x5NW/qroP8vmxo3RVu+hlyYcxhkCrDZ5UYwnTGdejbZlRt+rjolvdwLXaAOKQqafDt4RcbhDMpa60NsUb8xCCdBWd9Tmc=
|
404.html
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
permalink: /404.html
|
| 3 |
+
title: Page not found
|
| 4 |
+
layout: default
|
| 5 |
+
body-class: no-subheader
|
| 6 |
+
---
|
| 7 |
+
<div class="four-oh-four">
|
| 8 |
+
<h1 class="four-oh-four-title">404</h1>
|
| 9 |
+
<p class="four-oh-four-description">Sorry, the page you are looking for does not exist.</p>
|
| 10 |
+
<div class="four-oh-four-image"><img src="http://phonegap.com/images/landspeeder_white_border.png" alt="Landspeeder"/></div>
|
| 11 |
+
<a href="/getstarted/" class="button--cta">Speed to the homepage</a>
|
| 12 |
+
</div>
|
Gemfile
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
source 'https://rubygems.org'
|
| 2 |
+
gem 'github-pages'
|
| 3 |
+
|
| 4 |
+
# Test the build
|
| 5 |
+
group :test, :development do
|
| 6 |
+
gem 'rake'
|
| 7 |
+
gem 'html-proofer'
|
| 8 |
+
end
|
| 9 |
+
|
| 10 |
+
# Live Reload for local development
|
| 11 |
+
group :development do
|
| 12 |
+
gem 'guard'
|
| 13 |
+
gem 'guard-livereload'
|
| 14 |
+
end
|
LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Apache License
|
| 2 |
+
Version 2.0, January 2004
|
| 3 |
+
http://www.apache.org/licenses/
|
| 4 |
+
|
| 5 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 6 |
+
|
| 7 |
+
1. Definitions.
|
| 8 |
+
|
| 9 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
| 10 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
| 11 |
+
|
| 12 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
| 13 |
+
the copyright owner that is granting the License.
|
| 14 |
+
|
| 15 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
| 16 |
+
other entities that control, are controlled by, or are under common
|
| 17 |
+
control with that entity. For the purposes of this definition,
|
| 18 |
+
"control" means (i) the power, direct or indirect, to cause the
|
| 19 |
+
direction or management of such entity, whether by contract or
|
| 20 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 21 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 22 |
+
|
| 23 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
| 24 |
+
exercising permissions granted by this License.
|
| 25 |
+
|
| 26 |
+
"Source" form shall mean the preferred form for making modifications,
|
| 27 |
+
including but not limited to software source code, documentation
|
| 28 |
+
source, and configuration files.
|
| 29 |
+
|
| 30 |
+
"Object" form shall mean any form resulting from mechanical
|
| 31 |
+
transformation or translation of a Source form, including but
|
| 32 |
+
not limited to compiled object code, generated documentation,
|
| 33 |
+
and conversions to other media types.
|
| 34 |
+
|
| 35 |
+
"Work" shall mean the work of authorship, whether in Source or
|
| 36 |
+
Object form, made available under the License, as indicated by a
|
| 37 |
+
copyright notice that is included in or attached to the work
|
| 38 |
+
(an example is provided in the Appendix below).
|
| 39 |
+
|
| 40 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
| 41 |
+
form, that is based on (or derived from) the Work and for which the
|
| 42 |
+
editorial revisions, annotations, elaborations, or other modifications
|
| 43 |
+
represent, as a whole, an original work of authorship. For the purposes
|
| 44 |
+
of this License, Derivative Works shall not include works that remain
|
| 45 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
| 46 |
+
the Work and Derivative Works thereof.
|
| 47 |
+
|
| 48 |
+
"Contribution" shall mean any work of authorship, including
|
| 49 |
+
the original version of the Work and any modifications or additions
|
| 50 |
+
to that Work or Derivative Works thereof, that is intentionally
|
| 51 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
| 52 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
| 53 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
| 54 |
+
means any form of electronic, verbal, or written communication sent
|
| 55 |
+
to the Licensor or its representatives, including but not limited to
|
| 56 |
+
communication on electronic mailing lists, source code control systems,
|
| 57 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
| 58 |
+
Licensor for the purpose of discussing and improving the Work, but
|
| 59 |
+
excluding communication that is conspicuously marked or otherwise
|
| 60 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
| 61 |
+
|
| 62 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
| 63 |
+
on behalf of whom a Contribution has been received by Licensor and
|
| 64 |
+
subsequently incorporated within the Work.
|
| 65 |
+
|
| 66 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
| 67 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 68 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 69 |
+
copyright license to reproduce, prepare Derivative Works of,
|
| 70 |
+
publicly display, publicly perform, sublicense, and distribute the
|
| 71 |
+
Work and such Derivative Works in Source or Object form.
|
| 72 |
+
|
| 73 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
| 74 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 75 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 76 |
+
(except as stated in this section) patent license to make, have made,
|
| 77 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
| 78 |
+
where such license applies only to those patent claims licensable
|
| 79 |
+
by such Contributor that are necessarily infringed by their
|
| 80 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
| 81 |
+
with the Work to which such Contribution(s) was submitted. If You
|
| 82 |
+
institute patent litigation against any entity (including a
|
| 83 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
| 84 |
+
or a Contribution incorporated within the Work constitutes direct
|
| 85 |
+
or contributory patent infringement, then any patent licenses
|
| 86 |
+
granted to You under this License for that Work shall terminate
|
| 87 |
+
as of the date such litigation is filed.
|
| 88 |
+
|
| 89 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
| 90 |
+
Work or Derivative Works thereof in any medium, with or without
|
| 91 |
+
modifications, and in Source or Object form, provided that You
|
| 92 |
+
meet the following conditions:
|
| 93 |
+
|
| 94 |
+
(a) You must give any other recipients of the Work or
|
| 95 |
+
Derivative Works a copy of this License; and
|
| 96 |
+
|
| 97 |
+
(b) You must cause any modified files to carry prominent notices
|
| 98 |
+
stating that You changed the files; and
|
| 99 |
+
|
| 100 |
+
(c) You must retain, in the Source form of any Derivative Works
|
| 101 |
+
that You distribute, all copyright, patent, trademark, and
|
| 102 |
+
attribution notices from the Source form of the Work,
|
| 103 |
+
excluding those notices that do not pertain to any part of
|
| 104 |
+
the Derivative Works; and
|
| 105 |
+
|
| 106 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
| 107 |
+
distribution, then any Derivative Works that You distribute must
|
| 108 |
+
include a readable copy of the attribution notices contained
|
| 109 |
+
within such NOTICE file, excluding those notices that do not
|
| 110 |
+
pertain to any part of the Derivative Works, in at least one
|
| 111 |
+
of the following places: within a NOTICE text file distributed
|
| 112 |
+
as part of the Derivative Works; within the Source form or
|
| 113 |
+
documentation, if provided along with the Derivative Works; or,
|
| 114 |
+
within a display generated by the Derivative Works, if and
|
| 115 |
+
wherever such third-party notices normally appear. The contents
|
| 116 |
+
of the NOTICE file are for informational purposes only and
|
| 117 |
+
do not modify the License. You may add Your own attribution
|
| 118 |
+
notices within Derivative Works that You distribute, alongside
|
| 119 |
+
or as an addendum to the NOTICE text from the Work, provided
|
| 120 |
+
that such additional attribution notices cannot be construed
|
| 121 |
+
as modifying the License.
|
| 122 |
+
|
| 123 |
+
You may add Your own copyright statement to Your modifications and
|
| 124 |
+
may provide additional or different license terms and conditions
|
| 125 |
+
for use, reproduction, or distribution of Your modifications, or
|
| 126 |
+
for any such Derivative Works as a whole, provided Your use,
|
| 127 |
+
reproduction, and distribution of the Work otherwise complies with
|
| 128 |
+
the conditions stated in this License.
|
| 129 |
+
|
| 130 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
| 131 |
+
any Contribution intentionally submitted for inclusion in the Work
|
| 132 |
+
by You to the Licensor shall be under the terms and conditions of
|
| 133 |
+
this License, without any additional terms or conditions.
|
| 134 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
| 135 |
+
the terms of any separate license agreement you may have executed
|
| 136 |
+
with Licensor regarding such Contributions.
|
| 137 |
+
|
| 138 |
+
6. Trademarks. This License does not grant permission to use the trade
|
| 139 |
+
names, trademarks, service marks, or product names of the Licensor,
|
| 140 |
+
except as required for reasonable and customary use in describing the
|
| 141 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
| 142 |
+
|
| 143 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
| 144 |
+
agreed to in writing, Licensor provides the Work (and each
|
| 145 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
| 146 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
| 147 |
+
implied, including, without limitation, any warranties or conditions
|
| 148 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 149 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 150 |
+
appropriateness of using or redistributing the Work and assume any
|
| 151 |
+
risks associated with Your exercise of permissions under this License.
|
| 152 |
+
|
| 153 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
| 154 |
+
whether in tort (including negligence), contract, or otherwise,
|
| 155 |
+
unless required by applicable law (such as deliberate and grossly
|
| 156 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
| 157 |
+
liable to You for damages, including any direct, indirect, special,
|
| 158 |
+
incidental, or consequential damages of any character arising as a
|
| 159 |
+
result of this License or out of the use or inability to use the
|
| 160 |
+
Work (including but not limited to damages for loss of goodwill,
|
| 161 |
+
work stoppage, computer failure or malfunction, or any and all
|
| 162 |
+
other commercial damages or losses), even if such Contributor
|
| 163 |
+
has been advised of the possibility of such damages.
|
| 164 |
+
|
| 165 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
| 166 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
| 167 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
| 168 |
+
or other liability obligations and/or rights consistent with this
|
| 169 |
+
License. However, in accepting such obligations, You may act only
|
| 170 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
| 171 |
+
of any other Contributor, and only if You agree to indemnify,
|
| 172 |
+
defend, and hold each Contributor harmless for any liability
|
| 173 |
+
incurred by, or claims asserted against, such Contributor by reason
|
| 174 |
+
of your accepting any such warranty or additional liability.
|
| 175 |
+
|
| 176 |
+
END OF TERMS AND CONDITIONS
|
| 177 |
+
|
| 178 |
+
APPENDIX: How to apply the Apache License to your work.
|
| 179 |
+
|
| 180 |
+
To apply the Apache License to your work, attach the following
|
| 181 |
+
boilerplate notice, with the fields enclosed by brackets "{}"
|
| 182 |
+
replaced with your own identifying information. (Don't include
|
| 183 |
+
the brackets!) The text should be enclosed in the appropriate
|
| 184 |
+
comment syntax for the file format. We also recommend that a
|
| 185 |
+
file or class name and description of purpose be included on the
|
| 186 |
+
same "printed page" as the copyright notice for easier
|
| 187 |
+
identification within third-party archives.
|
| 188 |
+
|
| 189 |
+
Copyright {yyyy} {name of copyright owner}
|
| 190 |
+
|
| 191 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
| 192 |
+
you may not use this file except in compliance with the License.
|
| 193 |
+
You may obtain a copy of the License at
|
| 194 |
+
|
| 195 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
| 196 |
+
|
| 197 |
+
Unless required by applicable law or agreed to in writing, software
|
| 198 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
| 199 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 200 |
+
See the License for the specific language governing permissions and
|
| 201 |
+
limitations under the License.
|
README.md
CHANGED
|
@@ -1,10 +1,2 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
emoji: 🐢
|
| 4 |
-
colorFrom: pink
|
| 5 |
-
colorTo: purple
|
| 6 |
-
sdk: static
|
| 7 |
-
pinned: false
|
| 8 |
-
---
|
| 9 |
-
|
| 10 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 1 |
+
# App Showcase [](https://travis-ci.org/phonegap/app/)
|
| 2 |
+
http://phonegap.com/app/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rakefile
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# == Dependencies ==============================================================
|
| 2 |
+
|
| 3 |
+
require 'rake'
|
| 4 |
+
require 'yaml'
|
| 5 |
+
require 'fileutils'
|
| 6 |
+
require 'rbconfig'
|
| 7 |
+
require 'html-proofer'
|
| 8 |
+
|
| 9 |
+
# == Configuration =============================================================
|
| 10 |
+
|
| 11 |
+
# Set "rake watch" as default task
|
| 12 |
+
task :default => :watch
|
| 13 |
+
|
| 14 |
+
# Load the configuration file
|
| 15 |
+
CONFIG = YAML.load_file("_config.yml")
|
| 16 |
+
|
| 17 |
+
# Get and parse the date
|
| 18 |
+
DATE = Time.now.strftime("%Y-%m-%d")
|
| 19 |
+
|
| 20 |
+
# Directories
|
| 21 |
+
POSTS = "_posts/"
|
| 22 |
+
RESOURCES = "resources/_posts/"
|
| 23 |
+
DRAFTS = "_drafts"
|
| 24 |
+
|
| 25 |
+
# == Helpers ===================================================================
|
| 26 |
+
|
| 27 |
+
# Execute a system command
|
| 28 |
+
def execute(command)
|
| 29 |
+
system "#{command}"
|
| 30 |
+
end
|
| 31 |
+
|
| 32 |
+
# Check the title
|
| 33 |
+
def check_title(title)
|
| 34 |
+
if title.nil? or title.empty?
|
| 35 |
+
raise "Please add a title to your file."
|
| 36 |
+
end
|
| 37 |
+
end
|
| 38 |
+
|
| 39 |
+
# Transform the filename and date to a slug
|
| 40 |
+
def transform_to_slug(title, extension)
|
| 41 |
+
characters = /("|'|!|\?|:|\s\z)/
|
| 42 |
+
whitespace = /\s/
|
| 43 |
+
"#{title.gsub(characters,"").gsub(whitespace,"-").downcase}.#{extension}"
|
| 44 |
+
end
|
| 45 |
+
|
| 46 |
+
# Read the template file
|
| 47 |
+
def read_file(template)
|
| 48 |
+
File.read(template)
|
| 49 |
+
end
|
| 50 |
+
|
| 51 |
+
# Save the file with the title in the YAML front matter
|
| 52 |
+
def write_file(content, title, directory, filename)
|
| 53 |
+
parsed_content = "#{content.sub("title:", "title: \"#{title}\"")}"
|
| 54 |
+
File.write("#{directory}/#{filename}", parsed_content)
|
| 55 |
+
puts "#{filename} was created in '#{directory}'."
|
| 56 |
+
end
|
| 57 |
+
|
| 58 |
+
# Create the file with the slug and open the default editor
|
| 59 |
+
def create_file(directory, filename, content, title, editor)
|
| 60 |
+
if File.exists?("#{directory}/#{filename}")
|
| 61 |
+
raise "The file already exists."
|
| 62 |
+
else
|
| 63 |
+
write_file(content, title, directory, filename)
|
| 64 |
+
if editor && !editor.nil?
|
| 65 |
+
sleep 1
|
| 66 |
+
execute("#{editor} #{directory}/#{filename}")
|
| 67 |
+
end
|
| 68 |
+
end
|
| 69 |
+
end
|
| 70 |
+
|
| 71 |
+
# Get the "open" command
|
| 72 |
+
def open_command
|
| 73 |
+
if RbConfig::CONFIG["host_os"] =~ /mswin|mingw/
|
| 74 |
+
"start"
|
| 75 |
+
elsif RbConfig::CONFIG["host_os"] =~ /darwin/
|
| 76 |
+
"open"
|
| 77 |
+
else
|
| 78 |
+
"xdg-open"
|
| 79 |
+
end
|
| 80 |
+
end
|
| 81 |
+
|
| 82 |
+
# == Tasks =====================================================================
|
| 83 |
+
|
| 84 |
+
# rake post["Title"]
|
| 85 |
+
desc "Create a post in _posts/"
|
| 86 |
+
task :post, :title do |t, args|
|
| 87 |
+
title = args[:title]
|
| 88 |
+
template = CONFIG["post"]["template"]
|
| 89 |
+
extension = CONFIG["post"]["extension"]
|
| 90 |
+
editor = CONFIG["editor"]
|
| 91 |
+
check_title(title)
|
| 92 |
+
filename = "#{DATE}-#{transform_to_slug(title, extension)}"
|
| 93 |
+
content = read_file(template)
|
| 94 |
+
create_file(POSTS, filename, content, title, editor)
|
| 95 |
+
end
|
| 96 |
+
|
| 97 |
+
# rake draft["Title"]
|
| 98 |
+
desc "Create a post in _drafts"
|
| 99 |
+
task :draft, :title do |t, args|
|
| 100 |
+
title = args[:title]
|
| 101 |
+
template = CONFIG["post"]["template"]
|
| 102 |
+
extension = CONFIG["post"]["extension"]
|
| 103 |
+
editor = CONFIG["editor"]
|
| 104 |
+
check_title(title)
|
| 105 |
+
filename = transform_to_slug(title, extension)
|
| 106 |
+
content = read_file(template)
|
| 107 |
+
create_file(DRAFTS, filename, content, title, editor)
|
| 108 |
+
end
|
| 109 |
+
|
| 110 |
+
# rake publish
|
| 111 |
+
desc "Move a post from _drafts to _posts"
|
| 112 |
+
task :publish do
|
| 113 |
+
extension = CONFIG["post"]["extension"]
|
| 114 |
+
files = Dir["#{DRAFTS}/*.#{extension}"]
|
| 115 |
+
files.each_with_index do |file, index|
|
| 116 |
+
puts "#{index + 1}: #{file}".sub("#{DRAFTS}/", "")
|
| 117 |
+
end
|
| 118 |
+
print "> "
|
| 119 |
+
number = $stdin.gets
|
| 120 |
+
if number =~ /\D/
|
| 121 |
+
filename = files[number.to_i - 1].sub("#{DRAFTS}/", "")
|
| 122 |
+
FileUtils.mv("#{DRAFTS}/#{filename}", "#{POSTS}/#{DATE}-#{filename}")
|
| 123 |
+
puts "#{filename} was moved to '#{POSTS}'."
|
| 124 |
+
else
|
| 125 |
+
puts "Please choose a draft by the assigned number."
|
| 126 |
+
end
|
| 127 |
+
end
|
| 128 |
+
|
| 129 |
+
# rake build
|
| 130 |
+
desc "Build the site"
|
| 131 |
+
task :build do
|
| 132 |
+
execute("jekyll build")
|
| 133 |
+
end
|
| 134 |
+
|
| 135 |
+
# rake watch
|
| 136 |
+
# rake watch[number]
|
| 137 |
+
# rake watch["drafts"]
|
| 138 |
+
desc "Serve and watch the site (with post limit or drafts)"
|
| 139 |
+
task :watch, :option do |t, args|
|
| 140 |
+
option = args[:option]
|
| 141 |
+
if option.nil? or option.empty?
|
| 142 |
+
execute("jekyll serve --watch")
|
| 143 |
+
else
|
| 144 |
+
if option == "drafts"
|
| 145 |
+
execute("jekyll serve --watch --drafts")
|
| 146 |
+
else
|
| 147 |
+
execute("jekyll serve --watch --limit_posts #{option}")
|
| 148 |
+
end
|
| 149 |
+
end
|
| 150 |
+
end
|
| 151 |
+
|
| 152 |
+
# rake test
|
| 153 |
+
desc "build and test website"
|
| 154 |
+
task :test do
|
| 155 |
+
sh "bundle exec jekyll build --config _config-test.yml"
|
| 156 |
+
HTMLProofer.check_directory("./_site", {
|
| 157 |
+
:empty_alt_ignore => true,
|
| 158 |
+
:url_ignore => [
|
| 159 |
+
/\/app\/?/,
|
| 160 |
+
/\/blog\/?/,
|
| 161 |
+
'/book/',
|
| 162 |
+
'/tool/',
|
| 163 |
+
'/event/',
|
| 164 |
+
'/getstarted/',
|
| 165 |
+
'/products/',
|
| 166 |
+
'/about/',
|
| 167 |
+
'/about/faq/',
|
| 168 |
+
'/about/license/',
|
| 169 |
+
'/about/logos/',
|
| 170 |
+
'/about/contact/',
|
| 171 |
+
/\/getstarted\/?/,
|
| 172 |
+
/\/products\/?/,
|
| 173 |
+
'http://untappd.com/'
|
| 174 |
+
],
|
| 175 |
+
:cache => {
|
| 176 |
+
:timeframe => '1d'
|
| 177 |
+
},
|
| 178 |
+
:typhoeus => {
|
| 179 |
+
:followlocation => true,
|
| 180 |
+
:ssl_verifypeer => false,
|
| 181 |
+
:headers => { 'User-Agent' => 'html-proofer' }
|
| 182 |
+
}
|
| 183 |
+
}).run
|
| 184 |
+
end
|
_config-test.yml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
title: App Showcase
|
| 2 |
+
description: Ever wondered who is building amazing apps using PhoneGap?
|
| 3 |
+
baseurl: "" # the subpath of your site, e.g. /blog
|
| 4 |
+
url: "http://phonegap.com" # the base hostname & protocol for your site
|
| 5 |
+
|
| 6 |
+
gems:
|
| 7 |
+
- jekyll-paginate
|
| 8 |
+
- jekyll-coffeescript
|
| 9 |
+
- jekyll-sitemap
|
| 10 |
+
|
| 11 |
+
paginate: 10
|
| 12 |
+
paginate_list_count: 7
|
| 13 |
+
paginate_path: "/blog/page:num/"
|
| 14 |
+
|
| 15 |
+
post:
|
| 16 |
+
template: _post.txt
|
| 17 |
+
extension: md
|
| 18 |
+
|
| 19 |
+
markdown: kramdown
|
| 20 |
+
|
| 21 |
+
kramdown:
|
| 22 |
+
input: GFM
|
_config.yml
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
title: App Showcase
|
| 2 |
+
description: Ever wondered who is building amazing apps using PhoneGap?
|
| 3 |
+
baseurl: "/app" # the subpath of your site, e.g. /blog
|
| 4 |
+
url: "" # the base hostname & protocol for your site
|
| 5 |
+
|
| 6 |
+
gems:
|
| 7 |
+
- jekyll-paginate
|
| 8 |
+
- jekyll-coffeescript
|
| 9 |
+
- jekyll-sitemap
|
| 10 |
+
|
| 11 |
+
exclude:
|
| 12 |
+
- vendor
|
| 13 |
+
- Gemfile
|
| 14 |
+
- Gemfile.lock
|
| 15 |
+
- LICENSE
|
| 16 |
+
- Rakefile
|
| 17 |
+
- README.md
|
| 18 |
+
- post.txt
|
| 19 |
+
|
| 20 |
+
paginate: 10
|
| 21 |
+
paginate_list_count: 7
|
| 22 |
+
paginate_path: "/blog/page:num/"
|
| 23 |
+
|
| 24 |
+
post:
|
| 25 |
+
template: _post.txt
|
| 26 |
+
extension: md
|
| 27 |
+
|
| 28 |
+
markdown: kramdown
|
| 29 |
+
|
| 30 |
+
kramdown:
|
| 31 |
+
input: GFM
|
_includes/analytics.html
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script type="text/javascript">
|
| 2 |
+
|
| 3 |
+
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
| 4 |
+
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
| 5 |
+
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
| 6 |
+
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
| 7 |
+
|
| 8 |
+
ga('create', 'UA-94271-11', {
|
| 9 |
+
cookieDomain: 'phonegap.com',
|
| 10 |
+
legacyCookieDomain: 'phonegap.com'
|
| 11 |
+
});
|
| 12 |
+
ga('send', 'pageview');
|
| 13 |
+
|
| 14 |
+
</script>
|
_includes/app.sass
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.app
|
| 2 |
+
&-list
|
| 3 |
+
list-style: none
|
| 4 |
+
display: -webkit-box
|
| 5 |
+
display: -webkit-flex
|
| 6 |
+
display: -ms-flexbox
|
| 7 |
+
display: flex
|
| 8 |
+
-webkit-flex-wrap: wrap
|
| 9 |
+
-ms-flex-wrap: wrap
|
| 10 |
+
flex-wrap: wrap
|
| 11 |
+
margin: 0
|
| 12 |
+
-webkit-box-pack: center
|
| 13 |
+
-webkit-justify-content: center
|
| 14 |
+
-ms-flex-pack: center
|
| 15 |
+
justify-content: center
|
| 16 |
+
padding: 0 0 100px 0
|
| 17 |
+
&__thumbnail
|
| 18 |
+
flex-basis: 200px
|
| 19 |
+
min-height: 225px
|
| 20 |
+
text-align: center
|
| 21 |
+
&__title
|
| 22 |
+
margin-bottom: 2px
|
| 23 |
+
&__thumbnail__image
|
| 24 |
+
border-radius: 16px
|
| 25 |
+
box-shadow: 0px 2px 1px 1px rgba(0,0,0,0.3)
|
| 26 |
+
.hidden
|
| 27 |
+
display: none
|
| 28 |
+
.app-filters
|
| 29 |
+
background: #f2f2f2
|
| 30 |
+
box-sizing: border-box
|
| 31 |
+
padding: 2px 10px
|
| 32 |
+
margin-bottom: 40px
|
| 33 |
+
color: #111
|
| 34 |
+
label
|
| 35 |
+
font-size: .875rem
|
| 36 |
+
text-transform: uppercase
|
| 37 |
+
margin-left: 5px
|
| 38 |
+
.app-filter
|
| 39 |
+
display: block
|
| 40 |
+
.app-filter__input
|
| 41 |
+
margin-left: 20px
|
| 42 |
+
.app-description
|
| 43 |
+
max-width: 700px
|
| 44 |
+
position: relative
|
| 45 |
+
margin: 0 auto
|
| 46 |
+
padding: 0
|
| 47 |
+
.app-screenshots
|
| 48 |
+
display: block
|
| 49 |
+
text-align: center
|
| 50 |
+
img
|
| 51 |
+
margin: 0 15px 30px
|
| 52 |
+
width: 100%
|
| 53 |
+
max-width: 320px
|
| 54 |
+
height: auto
|
| 55 |
+
&:nth-child(2n-1)
|
| 56 |
+
margin-right: 15px
|
| 57 |
+
.app-description__header
|
| 58 |
+
display: flex
|
| 59 |
+
align-content: flex-end
|
| 60 |
+
img
|
| 61 |
+
margin-right: 24px
|
| 62 |
+
& > div:last-child
|
| 63 |
+
align-self: flex-end
|
| 64 |
+
.app-description__title
|
| 65 |
+
font-size: 1.875rem
|
| 66 |
+
margin: 0
|
| 67 |
+
.app--page__nav
|
| 68 |
+
text-align: center
|
| 69 |
+
.button--pill
|
| 70 |
+
margin: 0 20px 0
|
| 71 |
+
margin-bottom: 60px
|
| 72 |
+
.app-stores
|
| 73 |
+
margin-bottom: 30px
|
| 74 |
+
svg
|
| 75 |
+
height: 20px
|
| 76 |
+
vertical-align: text-top
|
| 77 |
+
margin-right: 5px
|
| 78 |
+
a
|
| 79 |
+
margin: 0 30px 30px 0
|
| 80 |
+
&:last-child
|
| 81 |
+
margin-right: 0
|
| 82 |
+
h4
|
| 83 |
+
margin-bottom: 15px
|
| 84 |
+
@media (min-width: 480px)
|
| 85 |
+
.app-list
|
| 86 |
+
-webkit-box-pack: start
|
| 87 |
+
-webkit-justify-content: flex-start
|
| 88 |
+
-ms-flex-pack: start
|
| 89 |
+
justify-content: flex-start
|
| 90 |
+
padding: 0 0 100px 0
|
| 91 |
+
.app-filter
|
| 92 |
+
display: inline-block
|
| 93 |
+
@media (min-width: 710px)
|
| 94 |
+
.app-screenshots
|
| 95 |
+
display: flex
|
| 96 |
+
flex-wrap: wrap
|
| 97 |
+
justify-content: space-between
|
| 98 |
+
img
|
| 99 |
+
margin: 0 0 30px
|
| 100 |
+
&:nth-child(2n-1)
|
| 101 |
+
margin-right: 30px
|
_includes/footer.html
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<footer class="site-footer">
|
| 2 |
+
<div class="bounds">
|
| 3 |
+
<div class="site-footer__top">
|
| 4 |
+
<div class="site-footer__messages">
|
| 5 |
+
<div class="site-footer__message">
|
| 6 |
+
<h2 class="site-footer__message__title">
|
| 7 |
+
<a class="site-footer__message__link" href="http://docs.phonegap.com/getting-started/1-install-phonegap/desktop/">Get Started Now</a>
|
| 8 |
+
</h2>
|
| 9 |
+
<div class="site-footer__message__description">
|
| 10 |
+
<p>Find out how to install PhoneGap, then create and preview an app on your device — almost as fast as a robot could do it.</p>
|
| 11 |
+
</div>
|
| 12 |
+
</div>
|
| 13 |
+
<div class="site-footer__message">
|
| 14 |
+
<h2 class="site-footer__message__title">
|
| 15 |
+
<a class="site-footer__message__link" href="https://blog.phonegap.com/">Read Our Blog</a>
|
| 16 |
+
</h2>
|
| 17 |
+
<div class="site-footer__messages__description">
|
| 18 |
+
<p>Have you read our latest blog post yet? If not, go now…there is solid gold in that post.</p>
|
| 19 |
+
</div>
|
| 20 |
+
</div>
|
| 21 |
+
</div>
|
| 22 |
+
<div class="site-footer__lists">
|
| 23 |
+
<nav class="site-footer__list">
|
| 24 |
+
<h4 class="site-footer__title">About</h2>
|
| 25 |
+
<ul>
|
| 26 |
+
<li><a href="/about/">Project Overview</a></li>
|
| 27 |
+
<li><a href="/about/license/">License</a></li>
|
| 28 |
+
<li><a href="/about/faq/">FAQs</a></li>
|
| 29 |
+
<li><a href="https://cordova.apache.org/">Apache Cordova</a></li>
|
| 30 |
+
<li><a href="/about/logos/">Logo</a></li>
|
| 31 |
+
<li><a href="https://www.stickermule.com/user/1070635098/stickers">Stickers</a></li>
|
| 32 |
+
<li><a href="/about/contact/">Contact Us</a></li>
|
| 33 |
+
</ul>
|
| 34 |
+
</nav>
|
| 35 |
+
<nav class="site-footer__list">
|
| 36 |
+
<h4 class="site-footer__title">Docs & Resources</h2>
|
| 37 |
+
<ul>
|
| 38 |
+
<li><a href="http://docs.phonegap.com">Documentation</a></li>
|
| 39 |
+
<li><a href="https://forums.adobe.com/community/phonegap">Community Forum</a></li>
|
| 40 |
+
<li><a href="/tool/">Third Party Tools</a></li>
|
| 41 |
+
<li><a href="/event/">Events</a></li>
|
| 42 |
+
<li><a href="/book/">Books</a></li>
|
| 43 |
+
<li><a href="http://plugins.cordova.io/">Plugin Library</a></li>
|
| 44 |
+
</ul>
|
| 45 |
+
</nav>
|
| 46 |
+
<nav class="site-footer__list">
|
| 47 |
+
<h4 class="site-footer__title">We're Everywhere</h2>
|
| 48 |
+
<ul>
|
| 49 |
+
<li><a href="https://github.com/phonegap/">GitHub</a></li>
|
| 50 |
+
<li><a href="http://webchat.freenode.net/?randomnick=1&channels=%23phonegap&uio=d4">IRC</a></li>
|
| 51 |
+
<li><a href="http://twitter.com/phonegap">Twitter</a></li>
|
| 52 |
+
<li><a href="http://www.facebook.com/PhoneGap">Facebook</a></li>
|
| 53 |
+
<li><a href="https://plus.google.com/107288580261563461427/posts">Google+</a></li>
|
| 54 |
+
<li><a href="https://www.youtube.com/user/phonegap">YouTube</a></li>
|
| 55 |
+
<li><a href="https://instagram.com/phonegap/">Instagram</a></li>
|
| 56 |
+
</ul>
|
| 57 |
+
</nav>
|
| 58 |
+
</div>
|
| 59 |
+
</div>
|
| 60 |
+
<div class="subscribe">
|
| 61 |
+
<div class="subscribe__description">
|
| 62 |
+
<h4 class="site-footer__title">Stay Connected to PhoneGap</h2>
|
| 63 |
+
<div>If you'd like us to keep in touch with the latest news and updates, subscribe now.</div>
|
| 64 |
+
</div>
|
| 65 |
+
<form class="subscribe__form" action="https://nitobi.createsend.com/t/y/s/htjuyh/" method="post">
|
| 66 |
+
<input class="subscribe__form__text-input" type="email" name="cm-htjuyh-htjuyh" id="htjuyh-htjuyh" placeholder="Enter your email address" required/>
|
| 67 |
+
<input class="subscribe__form__submit" type="submit" value="Sign up"/>
|
| 68 |
+
</form>
|
| 69 |
+
</div>
|
| 70 |
+
<hr>
|
| 71 |
+
<div class="site-footer__copyright">Copyright © 2016 Adobe Systems Inc. All rights reserved. <br>Use of this website signifies your agreement to the <a href="http://www.adobe.com/legal/general-terms.html">Terms of Use</a> and <a href="http://adobe.com/privacy">Privacy Policy and Cookies</a>.</div>
|
| 72 |
+
</div>
|
| 73 |
+
</footer>
|
| 74 |
+
{% include analytics.html %}
|
_includes/head.html
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<head>
|
| 2 |
+
<meta charset="utf-8">
|
| 3 |
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
| 4 |
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 5 |
+
|
| 6 |
+
<title>{% if page.title %}{{ page.title | xml_escape }}{% else %}{{ site.title | xml_escape }}{% endif %}</title>
|
| 7 |
+
<meta name="description" content="{% if page.excerpt %}{{ page.excerpt | xml_escape | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description | strip_html | strip_newlines | xml_escape }}{% endif %}">
|
| 8 |
+
|
| 9 |
+
<script src="//use.typekit.net/exp7awb.js"></script>
|
| 10 |
+
<script src="//assets.adobedtm.com/659ec8ada5450db95675e43beaaae92399591a11/satelliteLib-46e65db5bb0c375f8f64619be31cc9b29acf4867.js"></script>
|
| 11 |
+
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/sizzle/2.3.0/sizzle.min.js"></script>
|
| 12 |
+
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
|
| 13 |
+
{% if jekyll.environment == "production" %}
|
| 14 |
+
<script src="/scripts/home.js"></script>
|
| 15 |
+
<script src="/scripts/mobile_nav.js"></script>
|
| 16 |
+
{% else %}
|
| 17 |
+
<script src="{{ '/scripts/home.js' | prepend: site.url }}"></script>
|
| 18 |
+
<script src="{{ '/scripts/mobile_nav.js' | prepend: site.url }}"></script>
|
| 19 |
+
{% endif %}
|
| 20 |
+
|
| 21 |
+
{% for js_name in page.extra_js %}
|
| 22 |
+
<script src="{{ js_name | prepend: '/app/scripts/' }}"></script>
|
| 23 |
+
{% endfor %}
|
| 24 |
+
<link rel="stylesheet" type="text/css" href="{{ '/styles/main.css' | prepend: site.url }}"/>
|
| 25 |
+
<link rel="icon" type="image/png" href="{{ '/favicon.ico' | prepend: site.url }}">
|
| 26 |
+
<style type="text/css">
|
| 27 |
+
{% capture include_to_sassify %}{% include app.sass %}{% endcapture %}
|
| 28 |
+
{{ include_to_sassify | sassify }}
|
| 29 |
+
</style>
|
| 30 |
+
<link rel="canonical" data-proofer-ignore href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
|
| 31 |
+
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" />
|
| 32 |
+
</head>
|
_includes/header.html
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<header id="site-header" class="site-header">
|
| 2 |
+
<div class="bounds">
|
| 3 |
+
<div class="site-header__logo">
|
| 4 |
+
<h1>
|
| 5 |
+
<a href="/">
|
| 6 |
+
{% include images/phonegap-logo.svg %}
|
| 7 |
+
<span>Adobe PhoneGap</span>
|
| 8 |
+
</a>
|
| 9 |
+
</h1>
|
| 10 |
+
</div>
|
| 11 |
+
<nav class="site-header__nav">
|
| 12 |
+
<ul>
|
| 13 |
+
<li><a href="/products" {% if current[1] == 'products' %}class='current'{% endif %}>Products</a></li>
|
| 14 |
+
<li><a href="/getstarted" {% if current[1] == 'getstarted' %}class="current"{% endif %}>Get Started</a></li>
|
| 15 |
+
<li><a href="http://docs.phonegap.com">Docs</a></li>
|
| 16 |
+
<li><a href="/app" class='current'>App Showcase</a></li>
|
| 17 |
+
<li><a href="https://blog.phonegap.com/" {% if current[1] == 'blog' %}class='current'{% endif %}>Blog</a></li>
|
| 18 |
+
</ul>
|
| 19 |
+
<button class="site-header__expand-button" id="site-header__expand-button">Site Menu</button>
|
| 20 |
+
<a class="adobe-logo" href="http://adobe.com">
|
| 21 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="70" height="16" viewBox="0 0 70 16"><path fill="#fff" d="M12.1 0h7.1v16l-7.1-16zm-5 0h-7.1v16l7.1-16zm2.5 5.9l4.5 10.1h-3l-1.3-3.2h-3.3l3.1-6.9zm19.4 3.9l-1.2 3.3c0 .1-.1.1-.1.1h-1.1c-.1 0-.1-.1-.1-.1 1-2.5 2.6-6.9 3.7-9.7.1-.1.1-.3.1-.7 0-.1 0-.1.1-.1h1.6c.1 0 .1 0 .1.1l3.9 10.4c0 .1 0 .1-.1.1h-1.3c-.1 0-.1 0-.1-.1l-1.3-3.4-4.2.1zm3.8-1.2c-.4-1-1.3-3.8-1.7-4.9-.3 1-1.1 3.1-1.6 4.9h3.3zm3.9.8c0-2.4 1.8-4.1 4.4-4.1.5 0 .9 0 1.3.2v-3.7c0-.1 0-.1.1-.1h1.3c.1 0 .1 0 .1.1v10.7c0 .1 0 .1-.1.2-1 .5-2 .8-3 .8-2.4-.1-4.1-1.5-4.1-4.1zm5.7-2.8c-.3-.2-.8-.2-1.3-.2-1.8 0-2.9 1.2-2.9 2.9 0 2.2 1.3 2.9 2.7 2.9.6 0 1.1-.1 1.4-.2l.1-5.4zm10.7 2.7c0 2.4-1.5 4-3.9 4-2.8 0-3.9-2.1-3.9-4 0-2.4 1.5-4 3.9-4 2.6 0 3.9 1.7 3.9 4zm-6.2 0c0 1.7.9 3 2.5 3 1.2 0 2.3-.8 2.3-2.9 0-1.6-.7-3-2.4-3-1.4-.1-2.4 1-2.4 2.9zm9.2-7.6l.1 4c.7-.3 1.3-.5 2-.5 2.2 0 3.6 1.6 3.6 3.7 0 2.8-2.2 4.4-4.6 4.4-.9 0-1.5-.1-2.3-.4-.1 0-.1-.1-.1-.2v-11c0-.1 0-.1.1-.1h1.2v.1zm1.8 4.7c-.7 0-1.3.1-1.7.4v5.3c.4.1.8.1 1.2.1 1.4 0 3-1 3-3.2 0-1.6-.9-2.6-2.5-2.6zm6.7 3c0 1.6.9 2.7 2.7 2.7.7 0 1.3-.1 2-.5.1 0 .1 0 .1.1v.9c0 .1 0 .1-.1.2-.6.3-1.3.5-2.3.5-2.9 0-3.9-2-3.9-4 0-2.4 1.3-4 3.7-4 2.3 0 3.2 1.8 3.2 3.1 0 .7-.1.8-.1.9-.3.1-.9.1-1.7.1h-3.6zm3-.8c.8 0 1-.1 1-.1v-.3c0-.6-.4-1.9-1.9-1.9-1.3 0-2 1-2.1 2.3h3z"/></svg>
|
| 22 |
+
</a>
|
| 23 |
+
</nav>
|
| 24 |
+
</div>
|
| 25 |
+
</header>
|
_includes/images/android.svg
ADDED
|
|
_includes/images/apple.svg
ADDED
|
|
_includes/images/arrow-right.svg
ADDED
|
|
_includes/images/pg-desktop.svg
ADDED
|
|
_includes/images/pg-mobile.svg
ADDED
|
|
_includes/images/phonegap-logo.svg
ADDED
|
|
_includes/images/speeder.svg
ADDED
|
|
_includes/images/windows.svg
ADDED
|
|
_includes/subfooter.html
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="sub-footer">
|
| 2 |
+
<div class="bounds">
|
| 3 |
+
<h3 class="sub-footer__title">Dig into documentation</h3>
|
| 4 |
+
<div class="sub-footer__description">
|
| 5 |
+
Whether you’re looking for <a href="http://docs.phonegap.com/getting-started/1-install-phonegap/desktop/">in-depth guides</a> on how to get started creating PhoneGap apps or <a href="http://docs.phonegap.com/references/desktop-app/">helpful references</a> for using the PhoneGap tools, this is the place to go. How could you go wrong?
|
| 6 |
+
</div>
|
| 7 |
+
</div>
|
| 8 |
+
</div>
|
_includes/subheader.html
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div class="subheader">
|
| 2 |
+
<div class="bounds">
|
| 3 |
+
<h2 class="subheader__title">{{ site.title }}</h2>
|
| 4 |
+
<div class="subheader__description">{{ site.description }}</div>
|
| 5 |
+
</div>
|
| 6 |
+
</div>
|
_layouts/compress.html
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
#
|
| 3 |
+
# Jekyll layout that compresses HTML
|
| 4 |
+
# v1.1.1
|
| 5 |
+
# http://jch.penibelst.de/
|
| 6 |
+
# © 2015 Anatol Broder
|
| 7 |
+
# MIT License
|
| 8 |
+
#
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
+
{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd p rt rp optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if site.compress_html.comments.size == 2 %}{% assign _comment_befores = _content | split: site.compress_html.comments.first %}{% for _comment_before in _comment_befores %}{% assign _comment_content = _comment_before | split: site.compress_html.comments.last | first %}{% if _comment_content %}{% capture _comment %}{{ site.compress_html.comments.first }}{{ _comment_content }}{{ site.compress_html.comments.last }}{% endcapture %}{% assign _content = _content | remove: _comment %}{% endif %}{% endfor %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% case _pres.size %}{% when 2 %}{% capture _content %}{{ _content }}<pre{{ _pres.first }}</pre>{{ _pres.last | split: " " | join: " " }}{% endcapture %}{% when 1 %}{% capture _content %}{{ _content }}{{ _pres.last | split: " " | join: " " }}{% endcapture %}{% endcase %}{% endfor %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{{ _content }}{% endif %}
|
_layouts/default.html
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
layout: compress
|
| 3 |
+
---
|
| 4 |
+
<!DOCTYPE html>
|
| 5 |
+
<html>
|
| 6 |
+
|
| 7 |
+
{% include head.html %}
|
| 8 |
+
|
| 9 |
+
<body>
|
| 10 |
+
|
| 11 |
+
{% include header.html %}
|
| 12 |
+
|
| 13 |
+
<div class="page-content">
|
| 14 |
+
<div class="wrapper">
|
| 15 |
+
{{ content }}
|
| 16 |
+
</div>
|
| 17 |
+
</div>
|
| 18 |
+
|
| 19 |
+
{% include footer.html %}
|
| 20 |
+
|
| 21 |
+
</body>
|
| 22 |
+
|
| 23 |
+
</html>
|
_layouts/home.html
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
layout: compress
|
| 3 |
+
---
|
| 4 |
+
<!DOCTYPE html>
|
| 5 |
+
<html>
|
| 6 |
+
|
| 7 |
+
{% include head.html %}
|
| 8 |
+
|
| 9 |
+
<body>
|
| 10 |
+
|
| 11 |
+
<header class="home-header">
|
| 12 |
+
<div class="bounds">
|
| 13 |
+
<div class="site-header__logo">
|
| 14 |
+
<h1>
|
| 15 |
+
<a href="{{ site.url }}">
|
| 16 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="44" viewBox="0 0 40 44">
|
| 17 |
+
<g fill="#fff">
|
| 18 |
+
<path d="M11.8 28.4l-1.6.1v.7c0 1.9 1.1 2.3 2 2.3h.2l2.6-.2c.1-.3.1-.5.1-.5s-.3-16.3-.4-18.3c0-.5-.1-.8-.3-1.1-.9-.1-1.8-.1-2.4-.2h-.3c-.6 0-1.1.2-1.4.5-.5.5-.4 1.2-.4 1.2v1.2c1.3.1 2.2.1 2.2.1s1.4.3 1.5 1.8c.1 1.6.1 10.6.1 10.6s.1 1.5-1.9 1.8zM6.8 28.8l-2.5.2s-2.1.3-2.2-2c0-1.7-.2-11.5-.2-11.5s-.1-1.8 2.1-1.7c.7 0 1.6.1 2.7.2 0-1.6-.1-3-.1-4.1-1.5-.2-2.8-.3-3.7-.4-2.9-.3-2.8 2.1-2.8 2.1s.3 17.9.4 20.1c.1 2.6 2.9 2.2 2.9 2.2l3.5-.4c0-1.2 0-2.9-.1-4.7zM37.9 6.5c-.1-3.4-3.1-4.1-3.1-4.1s-10.2-1.5-14.7-2.1c-4.5-.6-4.2 3.8-4.2 3.8s1 31.7 1.1 35.6c.1 4.7 4.5 3.9 4.5 3.9l15.4-2.6c2.8-.6 2.9-4.1 2.9-4.1s-1.8-26.7-1.9-30.4zm-3.4 26.9l-11.5 1.2s-3.3.5-3.4-3.6c-.1-3-.7-20.1-.7-20.1s-.2-3.1 3.2-2.9c3.5.3 11.9 1 11.9 1s2.2.5 2.3 3.1c.1 2.8 1.1 18.3 1.1 18.3s.2 2.5-2.9 3zM22.9 34l4.4-.5c-.2-4.5-1-22-1.1-24.5-1.6-.1-3.1-.2-4.2-.3h-.3c-.7 0-1.3.2-1.7.6-.6.6-.6 1.7-.6 1.7v.3c1.8.2 3.2.3 3.2.3s1.9.4 2 2.5c.1 2.3.6 14.7.6 14.7s.2 2.1-2.5 2.5l-2.6.2c.2 2.1 1.4 2.6 2.4 2.6.3-.1.4-.1.4-.1zM16.2 31.8l-3.6.3s-2.9.4-2.9-2.9c0-2.4-.3-16.3-.3-16.3s-.2-2.6 2.8-2.4c.9.1 2.1.2 3.4.3-.1-2.6-.2-4.7-.2-5.8-1.7-.2-3.4-.3-4.6-.5-3.9-.4-3.7 3-3.7 3s.4 25.5.5 28.6c.1 3.7 3.9 3.1 3.9 3.1l4.9-.6c-.1-1.4-.1-3.8-.2-6.8z"></path>
|
| 19 |
+
</g>
|
| 20 |
+
</svg>
|
| 21 |
+
<span>Adobe PhoneGap</span>
|
| 22 |
+
</a>
|
| 23 |
+
</h1>
|
| 24 |
+
</div>
|
| 25 |
+
<nav class="site-header__nav">
|
| 26 |
+
<ul>
|
| 27 |
+
<li><a href="/">Products</a></li>
|
| 28 |
+
<li><a href="/">Get Started</a></li>
|
| 29 |
+
<li><a href="/">Docs</a></li>
|
| 30 |
+
<li><a href="/">App Showcase</a></li>
|
| 31 |
+
<li><a href="/">Blog</a></li>
|
| 32 |
+
</ul>
|
| 33 |
+
</nav>
|
| 34 |
+
</div>
|
| 35 |
+
</header>
|
| 36 |
+
<div class="home-hero">
|
| 37 |
+
<div class="bounds">
|
| 38 |
+
<h1>Build amazing mobile apps<br/>powered by open web tech.</h1>
|
| 39 |
+
</div>
|
| 40 |
+
</div>
|
| 41 |
+
|
| 42 |
+
<div class="page-content">
|
| 43 |
+
<div class="wrapper">
|
| 44 |
+
{{ content }}
|
| 45 |
+
</div>
|
| 46 |
+
</div>
|
| 47 |
+
|
| 48 |
+
{% include footer.html %}
|
| 49 |
+
|
| 50 |
+
</body>
|
| 51 |
+
|
| 52 |
+
</html>
|
_layouts/post.html
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
layout: default
|
| 3 |
+
---
|
| 4 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/aja/0.4.1/aja.min.js"></script>
|
| 5 |
+
<script>
|
| 6 |
+
document.addEventListener("DOMContentLoaded", function(event) {
|
| 7 |
+
aja()
|
| 8 |
+
.url('https://itunes.apple.com/lookup?id={{ page.itunes_id }}')
|
| 9 |
+
.type('jsonp')
|
| 10 |
+
.on('success', function(data){
|
| 11 |
+
console.log(data.results);
|
| 12 |
+
var screenshotUrls = data.results[0].screenshotUrls;
|
| 13 |
+
var screenshotsDiv = document.getElementById('screenshots');
|
| 14 |
+
screenshotUrls.forEach(function(screenshotUrl){
|
| 15 |
+
var image = document.createElement("img");
|
| 16 |
+
var div = document.createElement("div");
|
| 17 |
+
div.appendChild(image);
|
| 18 |
+
image.src = screenshotUrl;
|
| 19 |
+
screenshotsDiv.appendChild(div);
|
| 20 |
+
});
|
| 21 |
+
})
|
| 22 |
+
.go();
|
| 23 |
+
});
|
| 24 |
+
</script>
|
| 25 |
+
{% include subheader.html %}
|
| 26 |
+
<div class="bounds">
|
| 27 |
+
<article class="app-description">
|
| 28 |
+
<header class="app-description__header">
|
| 29 |
+
<div>
|
| 30 |
+
<img class="app__thumbnail__image" src="{{ page.thumb | prepend: site.baseurl }}" width="100" alt="{{ page.title }}"/>
|
| 31 |
+
</div>
|
| 32 |
+
<div>
|
| 33 |
+
<h2 class="app-description__title">{{ page.title }}</h2>
|
| 34 |
+
<div>by <a href="{{ page.developer_link }}">{{ page.developer }}</a> | Added {{ page.date | date: "%-d %b %Y" }}</div>
|
| 35 |
+
</div>
|
| 36 |
+
</header>
|
| 37 |
+
{{ content }}
|
| 38 |
+
<div id="screenshots" class="app-screenshots"></div>
|
| 39 |
+
<div class="app-stores">
|
| 40 |
+
<h4>Download this app from:</h4>
|
| 41 |
+
{% for device in page.devices %}
|
| 42 |
+
{% if device == 'ios' %}
|
| 43 |
+
<a href="{{ page.ios_link }}" class="button--cta">{% include images/apple.svg %} The App Store</a>
|
| 44 |
+
{% endif %}
|
| 45 |
+
{% if device == 'android' %}
|
| 46 |
+
<a href="{{ page.android_link }}" class="button--cta">{% include images/android.svg %} Google Play</a>
|
| 47 |
+
{% endif %}
|
| 48 |
+
{% if device == 'windows_phone' %}
|
| 49 |
+
<a href="{{ page.windows_phone_link }}" class="button--cta">{% include images/windows.svg %} The Windows Store</a>
|
| 50 |
+
{% endif %}
|
| 51 |
+
{% endfor %}
|
| 52 |
+
</div>
|
| 53 |
+
</article>
|
| 54 |
+
<footer class="app--page__nav">
|
| 55 |
+
{% if page.next.url %}
|
| 56 |
+
<a class="button--pill--prev--gray" href="{{ page.next.url| prepend: site.baseurl }}">{{page.next.title}}</a>
|
| 57 |
+
{% endif %}
|
| 58 |
+
<a class="button--pill--gray" href="{{ site.baseurl }}">App Showcase</a>
|
| 59 |
+
{% if page.previous.url %}
|
| 60 |
+
<a class="button--pill--next--gray" href="{{ page.previous.url| prepend: site.baseurl }}">{{page.previous.title}}</a>
|
| 61 |
+
{% endif %}
|
| 62 |
+
</footer>
|
| 63 |
+
</div>
|
| 64 |
+
{% include subfooter.html %}
|
_post.txt
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title:
|
| 3 |
+
layout: post
|
| 4 |
+
author:
|
| 5 |
+
thumb:
|
| 6 |
+
publisher:
|
| 7 |
+
link:
|
| 8 |
+
type: book
|
| 9 |
+
---
|
_posts/2011-04-27-logitech-squeezeboxe284a2-controller-2.html
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
android_link: https://market.android.com/details?id=com.logitech.squeezeboxremote
|
| 3 |
+
author: admin
|
| 4 |
+
categories: app
|
| 5 |
+
contact: [email protected]
|
| 6 |
+
date: '2011-04-27 20:40:52'
|
| 7 |
+
developer: Logitech Inc.
|
| 8 |
+
developer_link: http://www.logitech.com/en-us/speakers-audio/wireless-music-systems/devices/7979
|
| 9 |
+
devices:
|
| 10 |
+
- ios
|
| 11 |
+
- android
|
| 12 |
+
feature: 'true'
|
| 13 |
+
feature_image: /uploads/feature/squeezebox.jpg
|
| 14 |
+
ios_link: http://itunes.apple.com/ch/app/logitech-squeezebox-controller/id431302899
|
| 15 |
+
permalink: /logitech-squeezebox%e2%84%a2-controller-2/
|
| 16 |
+
slug: logitech-squeezebox%e2%84%a2-controller-2
|
| 17 |
+
status: publish
|
| 18 |
+
targetMarket: Personal
|
| 19 |
+
thumb: /uploads/v2/4db83ba1d7a6fsqueezebox.png
|
| 20 |
+
title: Logitech Squeezebox™ Controller
|
| 21 |
+
type: app
|
| 22 |
+
layout: post
|
| 23 |
+
itunes_id: 431302899
|
| 24 |
+
---
|
| 25 |
+
|
| 26 |
+
Logitech Squeezebox™ Controller puts a fully featured Squeezebox remote where you want it: on your smartphone or tablet. It uses your home Wi-Fi to control all your Squeezebox players, whether you have one Squeezebox Radio or a house full of Squeezebox Boom, Squeezebox Touch and Squeezebox Duet. Built by Squeezebox for Squeezebox, it gives you intuitive, seamless control and all the options you have on your Squeezebox players on every screen. You’ll have full command of your Squeezebox on the smart screen at your fingertips with the Logitech Squeezebox Controller App.
|
_posts/2011-09-23-metar-reader.html
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
author: Colene Chow
|
| 3 |
+
categories: app
|
| 4 |
+
contact: [email protected]
|
| 5 |
+
date: '2011-09-23 21:23:10'
|
| 6 |
+
developer: Ferdi Willemse
|
| 7 |
+
developer_link: http://www.metarreader.com/app
|
| 8 |
+
devices:
|
| 9 |
+
- ios
|
| 10 |
+
feature: 'true'
|
| 11 |
+
feature_image: /uploads/feature/metar.jpg
|
| 12 |
+
ios_link: http://itunes.apple.com/us/app/metar-reader/id465765574?mt=8
|
| 13 |
+
itunes_id: '465765574'
|
| 14 |
+
permalink: /metar-reader/
|
| 15 |
+
slug: metar-reader
|
| 16 |
+
status: publish
|
| 17 |
+
targetMarket: Business
|
| 18 |
+
thumb: /uploads/v2/4e7c3c1639401Metar.png
|
| 19 |
+
title: METAR Reader
|
| 20 |
+
type: app
|
| 21 |
+
layout: post
|
| 22 |
+
---
|
| 23 |
+
|
| 24 |
+
The #1 website for aviators and enthusiasts now fits in your pocket and offers even more features!<br />
|
| 25 |
+
<br />
|
| 26 |
+
KEY FEATURES:<br />
|
| 27 |
+
* Fetch METAR reports by ICAO code.<br />
|
| 28 |
+
* Decode METAR reports into a readable format.<br />
|
| 29 |
+
* Search for METAR weather stations and airports.<br />
|
| 30 |
+
* Find airports and METAR weather stations near your GPS location.<br />
|
| 31 |
+
* Add favorites 'on the fly'.<br />
|
| 32 |
+
* Add shortcuts to METAR reports to the main screen.<br />
|
| 33 |
+
<br />
|
| 34 |
+
Flight schools all around the world use METAR Reader to teach their students how to read METAR reports
|
_posts/2012-03-21-bit-timer.html
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
author: admin
|
| 3 |
+
categories: app
|
| 4 |
+
contact: [email protected]
|
| 5 |
+
date: '2012-03-21 23:42:19'
|
| 6 |
+
developer: Peiter Buick
|
| 7 |
+
developer_link: http://www.bittimerapp.com
|
| 8 |
+
devices:
|
| 9 |
+
- ios
|
| 10 |
+
feature: 'true'
|
| 11 |
+
feature_image: /uploads/feature/bittimer.jpg
|
| 12 |
+
ios_link: http://itunes.apple.com/us/app/bit-timer/id505848680?mt=8
|
| 13 |
+
itunes_id: '505848680'
|
| 14 |
+
permalink: /bit-timer/
|
| 15 |
+
slug: bit-timer
|
| 16 |
+
status: publish
|
| 17 |
+
targetMarket: Personal
|
| 18 |
+
thumb: /uploads/v2/icon175x175.jpeg
|
| 19 |
+
title: Bit Timer
|
| 20 |
+
type: app
|
| 21 |
+
layout: post
|
| 22 |
+
---
|
| 23 |
+
|
| 24 |
+
This app is designed for the no-frills, hard-core workout. This is the first interval timer you’ll see with a set up that is this fast and easy. Your workout should be intense, not your workout set up. <br />
|
| 25 |
+
<br />
|
| 26 |
+
1. Super Simple Set up. <br />
|
| 27 |
+
Get to your workout in no time with a clean, simple, no-frills design.<br /><br />
|
| 28 |
+
|
| 29 |
+
2. Distinct tones that guide you through your workout. <br />
|
| 30 |
+
We chose clear, easy-to-distinguish tones for each portion of your workout.<br /><br />
|
| 31 |
+
|
| 32 |
+
3. Work out to music with out missing a beat. <br />
|
| 33 |
+
Music automatically fades, allowing you to hear interval tones.
|
| 34 |
+
<br /><br />
|
| 35 |
+
<strong>Features:</strong><br />
|
| 36 |
+
- Press and Drag to set Work, Rest, and Repeat.<br />
|
| 37 |
+
- Work Periods: 5s to 2min. Rest Periods: 0s (no rest) to 2min. Up to 40 repeats.<br />
|
| 38 |
+
- 10 second count down allows you to get into place before your workout starts.<br />
|
| 39 |
+
- Three distinct sounds to designate where you are in your workout.<br />
|
| 40 |
+
- Countdown tone gives warning before Work starts.<br />
|
| 41 |
+
- Pause your workout at any time and restart right where you left off.<br />
|
| 42 |
+
- Music automatically fades, allowing you to hear interval tones.<br />
|
_posts/2012-04-30-untappd.html
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
android_link: https://play.google.com/store/apps/details?id=com.untappdllc.app
|
| 3 |
+
author: admin
|
| 4 |
+
categories: app
|
| 5 |
+
contact: [email protected]
|
| 6 |
+
date: '2012-07-17 22:30:26'
|
| 7 |
+
developer: Untappd LLC
|
| 8 |
+
developer_link: http://untappd.com/
|
| 9 |
+
devices:
|
| 10 |
+
- ios
|
| 11 |
+
- android
|
| 12 |
+
- blackberry
|
| 13 |
+
- windows_phone
|
| 14 |
+
feature: 'true'
|
| 15 |
+
feature_image: /uploads/feature/untapped2.jpg
|
| 16 |
+
windows_phone_link: http://www.windowsphone.com/en-us/store/app/untappd/2b72bcab-ae88-4134-9f19-dd47e77cd64a?appid=2b72bcab-ae88-4134-9f19-dd47e77cd64a
|
| 17 |
+
ios_link: http://itunes.apple.com/us/app/untappd/id449141888?ls=1%26mt=8
|
| 18 |
+
blackberry_link: http://appworld.blackberry.com/webstore/content/21866709/
|
| 19 |
+
itunes_id: '449141888'
|
| 20 |
+
permalink: /untappd/
|
| 21 |
+
slug: untappd
|
| 22 |
+
sticky: 5
|
| 23 |
+
status: publish
|
| 24 |
+
targetMarket: Personal
|
| 25 |
+
thumb: /uploads/v2/mza_6671297576364283745175x175_75.png
|
| 26 |
+
title: Untappd
|
| 27 |
+
type: app
|
| 28 |
+
layout: post
|
| 29 |
+
---
|
| 30 |
+
|
| 31 |
+
Untappd is a mobile app that allows you to socially share the brew you're currently enjoying, as well as where you're enjoying it, with your friends! <br />
|
| 32 |
+
<br />
|
| 33 |
+
Our mobile and web applications allow users to share, discovery and engage each other within the world of beer. Known as "the Foursquare for beer,” user can check-in to what they’re drinking and where and share with their friends on Untappd, Twitter, Facebook, & Foursquare.<br />
|
| 34 |
+
|
| 35 |
+
FEATURES
|
| 36 |
+
|
| 37 |
+
- Easily discover new beers and bars near your location
|
| 38 |
+
- See where you’re friends are drinking and meet up with them
|
| 39 |
+
- Personalized beer recommendations based on the tastes of you and your friends
|
| 40 |
+
- Find where you can get a specific beer nearby
|
| 41 |
+
- Share ratings, reviews and photos of your favorite beers with your friends
|
| 42 |
+
- Post your activity and photos to your Twitter, Facebook and Foursquare
|
| 43 |
+
- Create a wish list of beers you want to try in the future
|
| 44 |
+
- Unlock a variety of badges for trying different styles and places
|
_posts/2012-05-08-hockey-community.html
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
author: admin
|
| 3 |
+
android_link: https://play.google.com/store/apps/details?id=com.hockeycommunity.hc_app
|
| 4 |
+
categories: app
|
| 5 |
+
contact: [email protected]
|
| 6 |
+
date: '2012-05-08 22:55:38'
|
| 7 |
+
developer: Oki Technologies Inc.
|
| 8 |
+
developer_link: http://hockey-community.com/
|
| 9 |
+
devices:
|
| 10 |
+
- ios
|
| 11 |
+
- android
|
| 12 |
+
feature: 'true'
|
| 13 |
+
feature_image: /uploads/feature/hockycommunity-v3.jpg
|
| 14 |
+
ios_link: http://itunes.apple.com/app/hockey-community/id513748078
|
| 15 |
+
permalink: /hockey-community/
|
| 16 |
+
slug: hockey-community
|
| 17 |
+
status: publish
|
| 18 |
+
targetMarket: Business
|
| 19 |
+
thumb: /uploads/v2/4f99585ab70c8hc-icon-100.png
|
| 20 |
+
title: Hockey Community
|
| 21 |
+
type: app
|
| 22 |
+
layout: post
|
| 23 |
+
itunes_id: 513748078
|
| 24 |
+
---
|
| 25 |
+
|
| 26 |
+
Hockey Community's goal is to make hockey more social and accessible around the world. We help anyone in the hockey industry connecting with players, rinks, games and more! <br />
|
| 27 |
+
<br />
|
| 28 |
+
- Create a page for all of the teams you belong to and connect with all its members in one place.<br />
|
| 29 |
+
- Arrive at your rink and get the option to Check-In with the team you are playing with.<br />
|
| 30 |
+
- Discover the rinks around you and CHECK-IN. HC will then keep track of how many times you've played hockey around the world!
|
| 31 |
+
<br />
|
| 32 |
+
<br />
|
| 33 |
+
<b>New!</b> As of November 2012, the latest version of Hockey Community allows players to track how often they play, share events, check-ins or photos, and see what other people are doing with a newsfeed.<br />
|
| 34 |
+
<br />
|
| 35 |
+
"PhoneGap has pushed us to learn and embrace HTML5 at its best, " said Amrit Kahlon, Software Engineer. "Today we're able to work on one source code for one iPhone app, one iPad app, our mobile site and soon an Android app.
|
_posts/2012-08-01-healthtap-find-doctors-and-free-answers.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
itunes_id: "466079030"
|
| 3 |
+
title: HealthTap - find doctors and free answers
|
| 4 |
+
date: 2012-08-04 02:29:39.466144 +00:00
|
| 5 |
+
email: [email protected]
|
| 6 |
+
android_link: https://play.google.com/store/apps/details?id=com.healthtap.userhtexpress
|
| 7 |
+
ios_link: http://itunes.apple.com/us/app/healthtap-find-doctors-free/id466079030
|
| 8 |
+
devices:
|
| 9 |
+
- ios
|
| 10 |
+
- android
|
| 11 |
+
targetMarket: Personal
|
| 12 |
+
thumb: /uploads/v2/2012-08-01-healthtap-find-doctors-and-free-answers.png
|
| 13 |
+
permalink: /healthtap-find-doctors-and-free-answers/
|
| 14 |
+
type: app
|
| 15 |
+
status: publish
|
| 16 |
+
developer_link: https://www.healthtap.com/
|
| 17 |
+
developer: HealthTap
|
| 18 |
+
feature: true
|
| 19 |
+
sticky: 5
|
| 20 |
+
feature_image: /uploads/feature/healthtap.jpg
|
| 21 |
+
layout: post
|
| 22 |
+
---
|
| 23 |
+
|
| 24 |
+
HealthTap is the best way to quickly find, trusted, reputable doctor answers to health questions anytime, anywhere for free!
|
| 25 |
+
|
| 26 |
+
✓ Get fast, free, trustworthy health answers
|
| 27 |
+
on any symptom, condition, medication or health concern from over 14,000 of the best U.S. doctors
|
| 28 |
+
|
| 29 |
+
✓ Connect with doctors
|
| 30 |
+
by starting private conversations in a safe, HIPAA-secure environment
|
| 31 |
+
|
| 32 |
+
✓ Share securely with doctors
|
| 33 |
+
Privately share scans, images and other health related documents with doctors
|
| 34 |
+
|
| 35 |
+
✓ and more, for FREE!
|
_posts/2013-03-01-tripcase.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
permalink: /tripcase/
|
| 3 |
+
type: app
|
| 4 |
+
devices:
|
| 5 |
+
- ios
|
| 6 |
+
- android
|
| 7 |
+
developer_link: http://travel.tripcase.com/
|
| 8 |
+
developer: Sabre
|
| 9 |
+
android_link: https://play.google.com/store/apps/details?id=com.sabre.tripcase.android
|
| 10 |
+
email: ""
|
| 11 |
+
status: publish
|
| 12 |
+
title: TripCase
|
| 13 |
+
targetMarket: Business
|
| 14 |
+
itunes_id: "309620151"
|
| 15 |
+
highlight: true
|
| 16 |
+
feature: true
|
| 17 |
+
feature_image: /uploads/feature/tripcase.jpg
|
| 18 |
+
date: 2013-03-01 16:28:13.523310 +00:00
|
| 19 |
+
ios_link: https://itunes.apple.com/us/app/tripcase/id309620151?mt=8
|
| 20 |
+
thumb: /uploads/v2/tripcase.png
|
| 21 |
+
layout: post
|
| 22 |
+
---
|
| 23 |
+
|
| 24 |
+
TripCase is an intelligent, all-knowing mobile app that guides you through every stage of your trip, making you the smartest, smoothest traveler around. With TripCase, you’ll be:
|
| 25 |
+
|
| 26 |
+
**PREPARED**: Save time and end confusion with all your trip details located in one spot.
|
| 27 |
+
**CONNECTED**: Rest easy knowing you have the latest info or alerts about your trip (and that important contacts are kept in the loop, too).
|
| 28 |
+
**BRILLIANT**: Travel smarter and experience more thanks to relevant and timely messages and alerts.
|
_posts/2013-06-24-my-heart-camera.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
itunes_id: "657224393"
|
| 3 |
+
ios_link: https://itunes.apple.com/us/app/my-heart-camera-lovely-cute/id657224393?l=ja&ls=1%26mt=8
|
| 4 |
+
title: My Heart Camera
|
| 5 |
+
type: app
|
| 6 |
+
email: [email protected]
|
| 7 |
+
permalink: /my-heart-camera/
|
| 8 |
+
status: publish
|
| 9 |
+
devices:
|
| 10 |
+
- ios
|
| 11 |
+
developer: ANDG CO., LTD.
|
| 12 |
+
date: 2013-06-24 06:22:06.582604 +00:00
|
| 13 |
+
thumb: /uploads/v2/2013-06-24-my-heart-camera.png
|
| 14 |
+
developer_link: http://apmaga.heteml.jp/_app/heartcamera/
|
| 15 |
+
targetMarket: Personal
|
| 16 |
+
feature_image: /uploads/feature/myheartcamera.jpg
|
| 17 |
+
feature: true
|
| 18 |
+
layout: post
|
| 19 |
+
---
|
| 20 |
+
|
| 21 |
+
Let's decorate your photos with lovely hearts!
|
| 22 |
+
|
| 23 |
+
Cute Stickers of hearts - You can use many cute heart stickers.
|
| 24 |
+
|
| 25 |
+
Filters like Instagram - You can use photo filter effects similar to Instagram.
|
| 26 |
+
|
| 27 |
+
Auto Decorating - Once you bring a device close to your heart for 3 seconds, your photo will be decorated automatically! It's amazing, try it!
|
| 28 |
+
|
| 29 |
+
Share - You can share your cute photos on Instagram, Tumblr, Facebook, Twitter, LINE.
|
| 30 |
+
|
| 31 |
+
"The culture of "Deco" (photo-decoration) is a big part of Japanese youth culture. With that in mind, we decided to create a photo editing app witha simple heart theme. We added an auto-decoration function that is amazing and heart warming to this app," said Ryo Kawanobe, creator of My Heart Camera. "As we are web developers, we choose PhoneGap because we wanted the flexibility to release on both iOS and Android while also being able to easily access plugins."
|
_posts/2013-06-29-yoga-travel.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Yoga+Travel
|
| 3 |
+
itunes_id: "630781473"
|
| 4 |
+
targetMarket: Personal
|
| 5 |
+
windows_phone_link: http://www.windowsphone.com/en-us/store/app/yoga-travel/b085d205-079c-448d-8b5f-c7840dd572ae
|
| 6 |
+
status: publish
|
| 7 |
+
type: app
|
| 8 |
+
ios_link: https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=630781473&mt=8
|
| 9 |
+
thumb: /uploads/v2/2013-06-29-yoga-travel.png
|
| 10 |
+
devices:
|
| 11 |
+
- ios
|
| 12 |
+
- windows_phone
|
| 13 |
+
email: [email protected]
|
| 14 |
+
developer_link: http://www.yogabyallison.com/www/index.php?/default/action/products/
|
| 15 |
+
permalink: /yoga-travel/
|
| 16 |
+
developer: Velkat IT Solutions Inc. / Yoga By Allison
|
| 17 |
+
date: 2013-05-20 20:32:47.695260 +00:00
|
| 18 |
+
feature: true
|
| 19 |
+
feature_image: /uploads/feature/yoga_travel.jpg
|
| 20 |
+
layout: post
|
| 21 |
+
---
|
| 22 |
+
|
| 23 |
+
Do you ever leave home for business or leisure travel and miss your favorite yoga class? In a new city and don’t know where to take class or can’t fit class into your busy schedule? This is the app for you! Yoga+Travel is the ideal app to take your yoga practice with you on the road. With safe, fun and effective sequenced classes for all levels, you never have to leave home without taking your yoga with you.
|
| 24 |
+
|
| 25 |
+
Winner of the <a href="http://www.phonegapwpchallenge.com/" data-proofer-ignore>Windows Phone App Porting Challenge</a>
|
_posts/2013-08-12-browser-quest.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
ios_link: https://itunes.apple.com/app/browserquest/id627657887?l=da&ls=1%26mt=8
|
| 3 |
+
type: app
|
| 4 |
+
email: [email protected]
|
| 5 |
+
date: 2013-08-12 21:17:07.494938 +00:00
|
| 6 |
+
developer: Mads & Peter Sandberg Brun
|
| 7 |
+
title: BrowserQuest
|
| 8 |
+
devices:
|
| 9 |
+
- ios
|
| 10 |
+
- windows_phone
|
| 11 |
+
permalink: /browserquest/
|
| 12 |
+
developer_link: http://mpbrun.dk/
|
| 13 |
+
targetMarket: Personal
|
| 14 |
+
windows_phone_link: http://www.windowsphone.com/en-us/store/app/browserquest/9df4ba1e-fa73-40d1-b391-4773d287db35
|
| 15 |
+
thumb: /uploads/v2/browserquest_thumb.png
|
| 16 |
+
status: publish
|
| 17 |
+
feature: true
|
| 18 |
+
feature_image: /uploads/feature/browserquest.jpg
|
| 19 |
+
layout: post
|
| 20 |
+
itunes_id: 627657887
|
| 21 |
+
---
|
| 22 |
+
|
| 23 |
+
BrowserQuest is a small multiplayer game inviting you to explore a world of adventure from your Windows Phone.
|
| 24 |
+
|
| 25 |
+
You play as a young warrior driven by the thrill of adventure. No princess to save here, just a dangerous world filled with treasures to discover. As you discover more of the world, you can try to complete the built in quests/achievements or fight against other players.
|
| 26 |
+
|
| 27 |
+
So what are you waiting for? Download the game right now and start your journey into the unknown and mysterious world.
|
| 28 |
+
|
| 29 |
+
Note: This version of BrowserQuest is a extended version, which has been extended with a player level system and PvP fights, so the game feels a little bit longer.
|
| 30 |
+
|
| 31 |
+
Support: If you experience any errors, then please contact us by e-mail ([email protected]), as we cannot contact you through a review. We can then fix possible errors very quickly.
|
| 32 |
+
|
| 33 |
+
Winner of the <a href="http://www.phonegapwpchallenge.com/" data-proofer-ignore>Windows Phone App Porting Challenge</a>
|
_posts/2015-06-10-snowbuddy.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
sticky: 5
|
| 3 |
+
highlight: true
|
| 4 |
+
feature: true
|
| 5 |
+
feature_image: /uploads/feature/snowbuddy-banner.jpg
|
| 6 |
+
developer_link: http://snowbuddyhq.com/
|
| 7 |
+
permalink: /snowbuddy/
|
| 8 |
+
thumb: /uploads/v2/2015-06-10-snowbuddy.png
|
| 9 |
+
targetMarket: Personal
|
| 10 |
+
itunes_id: "932977366"
|
| 11 |
+
ios_link: https://itunes.apple.com/us/app/snowbuddy/id932977366?ls=1&mt=8
|
| 12 |
+
status: publish
|
| 13 |
+
devices:
|
| 14 |
+
- ios
|
| 15 |
+
- android
|
| 16 |
+
email: ""
|
| 17 |
+
date: 2015-06-10 23:04:40.306459 +00:00
|
| 18 |
+
android_link: https://play.google.com/store/apps/details?id=it.wemakeawesomesh.skitracker
|
| 19 |
+
title: snowbuddy
|
| 20 |
+
type: app
|
| 21 |
+
developer: We Make Awesome Sh
|
| 22 |
+
layout: post
|
| 23 |
+
---
|
| 24 |
+
|
| 25 |
+
During our second alpine company meeting, we were looking for ski apps to use on the mountain. After downloading and testing a few of the ‘top apps’, we discovered some major flaws and omissions. These apps only really tracked speed, distance and calories and although some apps give you other useful data such as resort information and weather there was a serious lack of design and fun. Constantly competing to beat yours and your friends’ top speeds is not only challenging (most people can only hit a certain top speed and can rarely exceed it, particularly on a weeks’ ski trip) but it is also dangerous. It’s not about pushing yourself to the point of losing control, it’s about riding the mountain in perfect control, and having fun while doing it. For us, being on the mountain with your mates was more about having fun. So that’s what we made snowbuddy all about.
|
| 26 |
+
|
| 27 |
+
We used PhoneGap for snowbuddy as we wanted to develop the application quickly and have it on both Android & iOS. As it was originally for internal use, speed of development was crucial to us as well as cross platform support. For this, we believe PhoneGap was the best solution for us to use. We are really happy with how the app has turned out, and especially how well it performs on iOS. We’ve even had some developers question whether we were using Swift or Objective-C for it… Well no, we are using PhoneGap, but we do have some custom native plugins that we’ve used, both open source and ones we have made ourselves. We decided that other people might also enjoy using snowbuddy, so we released it to the public.
|
_posts/2015-06-11-sworkit.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
targetMarket: Personal
|
| 3 |
+
type: app
|
| 4 |
+
status: publish
|
| 5 |
+
author: admin
|
| 6 |
+
android_link: https://play.google.com/store/apps/details?id=sworkitapp.sworkit.com
|
| 7 |
+
title: Sworkit
|
| 8 |
+
date: 2015-06-10 12:24:21
|
| 9 |
+
permalink: /sworkit/
|
| 10 |
+
itunes_id: "527219710"
|
| 11 |
+
highlight: true
|
| 12 |
+
feature: true
|
| 13 |
+
feature_image: /uploads/feature/sworkit-pg-feature.png
|
| 14 |
+
sticky: 5
|
| 15 |
+
devices:
|
| 16 |
+
- ios
|
| 17 |
+
- android
|
| 18 |
+
developer_link: http://sworkit.com
|
| 19 |
+
categories: app
|
| 20 |
+
thumb: /uploads/v2/4fc4bff54b9a1phonegap.jpg
|
| 21 |
+
slug: None
|
| 22 |
+
contact: [email protected]
|
| 23 |
+
ios_link: http://itunes.apple.com/us/app/sworkit/id527219710?ls=1%26mt=8
|
| 24 |
+
developer: Nexercise Inc
|
| 25 |
+
layout: post
|
| 26 |
+
---
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
Sworkit is a workout app that provides guided, video-based workouts that you can do anywhere and anytime. Sworkit dynamically assembles exercise routines that can fit any time constraint from as little as 5 minutes to over 60 minutes, by merging high quality video content with audio guidance recorded in 13 different languages. Without needing to think heavily, users can easily follow along to the professional video and audio, and even skip an exercise they find challenging while still maintaining the length of their workout.
|
| 30 |
+
|
| 31 |
+
At Sworkit, PhoneGap and hybrid development is overwhelming regarded as a competitive advantage. Originally created by just a single developer, Sworkit has been downloaded over 4 million times with users completing over of 7 million minutes of exercise each month. This exceptional growth is credited to the rapid development, testing and distribution that hybrid development provides this very small team compared to its competitors.
|
| 32 |
+
|
| 33 |
+
Sworkit has been featured by the Apple App Store, Google Play, Amazon Appstore, Samsung Apps and Xiaomi Market.
|
_posts/2015-11-12-localeur.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
permalink: /localeur/
|
| 3 |
+
status: publish
|
| 4 |
+
devices:
|
| 5 |
+
- ios
|
| 6 |
+
- android
|
| 7 |
+
highlight: true
|
| 8 |
+
type: app
|
| 9 |
+
developer_link: http://www.localeur.com/
|
| 10 |
+
developer: Localeur
|
| 11 |
+
targetMarket: Personal
|
| 12 |
+
date: 2015-11-12 17:33:46.884778 +00:00
|
| 13 |
+
thumb: /uploads/v2/2015-11-12-localeur.png
|
| 14 |
+
itunes_id: "777769897"
|
| 15 |
+
email: [email protected]
|
| 16 |
+
ios_link: https://itunes.apple.com/us/app/localeur-recommendations-from/id777769897?mt=8
|
| 17 |
+
android_link: https://play.google.com/store/apps/details?id=com.localeur.release1&hl=en
|
| 18 |
+
title: Localeur
|
| 19 |
+
layout: post
|
| 20 |
+
---
|
| 21 |
+
|
| 22 |
+
Localeur provides free access to a community of locals who share their favorite places to eat, drink and play wherever you go. Localeur is live in 20 major US cities, and unlike review sites like Yelp and TripAdvisor, focuses on authenticity and trust. Localeur allows you to add your favorite local places, vote for places added by other locals, and save favorites so you and your friends on Localeur will have on-the-go access to the best places in your home city or the cities you visit.
|
_posts/2016-07-20-fanreact.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
permalink: /fanreact/
|
| 3 |
+
status: publish
|
| 4 |
+
devices:
|
| 5 |
+
- ios
|
| 6 |
+
- android
|
| 7 |
+
highlight: true
|
| 8 |
+
type: app
|
| 9 |
+
developer_link: http://fanreact.com/
|
| 10 |
+
developer: FanReact
|
| 11 |
+
targetMarket: Personal
|
| 12 |
+
thumb: /uploads/v2/FanReact-App-Icon.jpg
|
| 13 |
+
itunes_id: "947998588"
|
| 14 |
+
email: [email protected]
|
| 15 |
+
ios_link: https://itunes.apple.com/us/app/fanreact/id947998588?mt=8
|
| 16 |
+
android_link: https://play.google.com/store/apps/details?id=com.fanreact.app
|
| 17 |
+
title: FanReact
|
| 18 |
+
layout: post
|
| 19 |
+
---
|
| 20 |
+
|
| 21 |
+
FanReact is a sports social media mobile application that allows fans to talk sports and upload reaction videos and photos of themselves with friends and family as the game unfolds. Share your thoughts, reactions, and more so you never miss a moment. "Phone Gap's large selection of free open-source plugins provide you with multiple options. As a result, development is easier and quite honestly, more fun."
|
feed.xml
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
layout: null
|
| 3 |
+
---
|
| 4 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 5 |
+
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
| 6 |
+
<channel>
|
| 7 |
+
<title>{{ site.title | xml_escape }}</title>
|
| 8 |
+
<description>{{ site.description | xml_escape }}</description>
|
| 9 |
+
<link>{{ site.url }}{{ site.baseurl }}/</link>
|
| 10 |
+
<atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml"/>
|
| 11 |
+
<pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
|
| 12 |
+
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
|
| 13 |
+
<generator>Jekyll v{{ jekyll.version }}</generator>
|
| 14 |
+
{% for post in site.posts limit:10 %}
|
| 15 |
+
<item>
|
| 16 |
+
<title>{{ post.title | xml_escape }}</title>
|
| 17 |
+
<description>{{ post.content | xml_escape }}</description>
|
| 18 |
+
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
|
| 19 |
+
<link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
|
| 20 |
+
<guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
|
| 21 |
+
{% for tag in post.tags %}
|
| 22 |
+
<category>{{ tag | xml_escape }}</category>
|
| 23 |
+
{% endfor %}
|
| 24 |
+
{% for cat in post.categories %}
|
| 25 |
+
<category>{{ cat | xml_escape }}</category>
|
| 26 |
+
{% endfor %}
|
| 27 |
+
</item>
|
| 28 |
+
{% endfor %}
|
| 29 |
+
</channel>
|
| 30 |
+
</rss>
|
index.html
CHANGED
|
@@ -1,19 +1,29 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
layout: default
|
| 3 |
+
title: PhoneGap App Showcase
|
| 4 |
+
extra_js:
|
| 5 |
+
- app-showcase.js
|
| 6 |
+
---
|
| 7 |
+
{% include subheader.html %}
|
| 8 |
+
<div class="bounds">
|
| 9 |
+
<!-- This loops through the posts -->
|
| 10 |
+
<div class="app-filters">
|
| 11 |
+
Narrow by platform: <span class="app-filter"><input class="app-filter__input" data-device="ios" type="checkbox" name="ios-filter" id="ios-filter" checked> <label for="ios-filter">IOS</label></span> <span class="app-filter"><input class="app-filter__input" data-device="android" type="checkbox" name="android-filter" id="android-filter" checked> <label for="android-filter">Android</label></span> <span class="app-filter"><input class="app-filter__input" data-device="windows_phone" type="checkbox" name="windows-filter" id="windows-filter" checked> <label for="windows-filter">Windows</label></span>
|
| 12 |
+
</div>
|
| 13 |
+
<ul class="app-list">
|
| 14 |
+
{% for post in site.posts %}
|
| 15 |
+
{% assign device_tags = '' %}
|
| 16 |
+
{% for device in post.devices %}
|
| 17 |
+
{% assign device_tags = device_tags | append: ' ' | append: device %}
|
| 18 |
+
{% endfor %}
|
| 19 |
+
<li class="app__thumbnail {{ device_tags }}">
|
| 20 |
+
<a href="{{ post.url | prepend: site.baseurl }}">
|
| 21 |
+
<img class="app__thumbnail__image" src="{{ post.thumb | prepend: site.baseurl }}" width="100" alt="{{ post.title }}"/>
|
| 22 |
+
<h3 class="app__title">{{ post.title }}</h3>
|
| 23 |
+
</a>
|
| 24 |
+
<div class="app__author">by {{ post.developer }}</div>
|
| 25 |
+
</li>
|
| 26 |
+
{% endfor %}
|
| 27 |
+
</ul>
|
| 28 |
+
</div>
|
| 29 |
+
{% include subfooter.html %}
|
scripts/app-showcase.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
document.addEventListener("DOMContentLoaded", function(event) {
|
| 2 |
+
var checkboxArray = Sizzle('.app-filter__input');
|
| 3 |
+
var filterObj = {
|
| 4 |
+
windows_phone: true,
|
| 5 |
+
android: true,
|
| 6 |
+
ios: true
|
| 7 |
+
}
|
| 8 |
+
var filterItems = function(){
|
| 9 |
+
checkboxArray.forEach(function(checkbox){
|
| 10 |
+
filterObj[checkbox.dataset.device] = checkbox.checked;
|
| 11 |
+
});
|
| 12 |
+
var thumbnailArray = Sizzle('.app__thumbnail');
|
| 13 |
+
|
| 14 |
+
thumbnailArray.forEach(function(thumbnail){
|
| 15 |
+
var visible = Object.keys(filterObj).some(function(key){
|
| 16 |
+
if(filterObj[key]){
|
| 17 |
+
return thumbnail.classList.contains(key);
|
| 18 |
+
} else {
|
| 19 |
+
return false;
|
| 20 |
+
}
|
| 21 |
+
});
|
| 22 |
+
if(visible){
|
| 23 |
+
thumbnail.classList.remove('hidden');
|
| 24 |
+
} else {
|
| 25 |
+
thumbnail.classList.add('hidden');
|
| 26 |
+
}
|
| 27 |
+
});
|
| 28 |
+
}
|
| 29 |
+
checkboxArray.forEach(function(checkbox){
|
| 30 |
+
checkbox.onchange=function(){
|
| 31 |
+
filterItems();
|
| 32 |
+
};
|
| 33 |
+
});
|
| 34 |
+
});
|
uploads/book/2012-06/2012-06-15-phonegap-essentials-1.jpeg
ADDED
|
uploads/book/2012-06/2012-06-15-phonegap-essentials.jpeg
ADDED
|
uploads/book/2012-07/2012-02-22-beginning-phonegap-mobile-web-framework-for-javascript-and-html5.jpg
ADDED
|
uploads/book/2012-09/2012-01-23-manual-del-guerrero-m-vil-phonegap.jpg
ADDED
|