{"id":265029,"date":"2015-09-06T18:27:02","date_gmt":"2015-09-06T14:27:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=265029"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=265029","title":{"rendered":"Tabris.js \u2014 \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0438 \u043f\u0438\u0448\u0435\u043c Hello World"},"content":{"rendered":"<p>     \t<img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/367\/f11\/c85\/367f11c85b834c48a3caee5449a47974.png\" align=\"left\"\/><br \/>  <a href=\"https:\/\/tabrisjs.com\/\">Tabris.js<\/a> \u2014 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 (Android, IOS) \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a. \u041e\u0442 \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0438\u043b\u0438 Chrome-based WebView. Tabris \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0438\u0437 javascript. \u0411\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438 \u0438\u0437 \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u044d\u0442\u043e: <a href=\"http:\/\/www.telerik.com\/nativescript\">Telerik Native Script<\/a>, <a href=\"http:\/\/www.appcelerator.com\/\">Appcelerator<\/a> \u0438 <a href=\"https:\/\/facebook.github.io\/react-native\/\">React Native<\/a>.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u0418\u0442\u0430\u043a, Tabris \u0443\u0448\u0435\u043b \u043e\u0442 \u043c\u0430\u043b\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e (\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e) HTML5 + WebView \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430 javascript \u0441 \u0435\u0434\u0438\u043d\u043e\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u043e\u0439 \u0434\u043b\u044f IOS \u0438 Android \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c JS-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, npm-\u043c\u043e\u0434\u0443\u043b\u0438 \u0438 Cordova plugins \u2014 \u043d\u043e \u043b\u0438\u0448\u044c \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 DOM, \u0432\u0435\u0434\u044c \u0435\u0433\u043e-\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438 \u043d\u0435\u0442\u0443.<\/p>\n<p>  \u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e:  <\/p>\n<ul>\n<li> \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e: \u0441 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043d\u0430 GitHub<\/li>\n<li>\u0417\u0430 5$\/\u043c\u0435\u0441\u044f\u0446: \u0441 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e\/\u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043d\u0430 GitHub<\/li>\n<li>\u0417\u0430 50$\/\u043c\u0435\u0441\u044f\u0446: GitHub + \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043b\u0434\u044b<\/li>\n<\/ul>\n<p>  \u0412 \u043b\u044e\u0431\u043e\u043c \u0442\u0430\u0440\u0438\u0444\u043d\u043e\u043c \u043f\u043b\u0430\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439, \u043d\u0430 \u043a\u043e\u0434 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442, \u0432\u043b\u0438\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0430\u043a \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043b\u0434, \u043d\u043e \u0438\u0445 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043a\u0430\u043a \u043f\u043e \u043c\u043d\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" width=\"320\" src=\"https:\/\/habrastorage.org\/files\/2cb\/518\/e65\/2cb518e654124185894bb34a732c705e.png\" \/><\/div>\n<p>  \u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0434\u0435\u0431\u0430\u0433\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f <a href=\"https:\/\/itunes.apple.com\/de\/app\/tabris.js\/id939600018?l=en&amp;mt=8\">IOS<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.eclipsesource.tabris.js\">Android<\/a>. \u0412\u0445\u043e\u0434 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 GitHub, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0412\u0430\u0448 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Tabris. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 Cordova-\u043f\u043b\u0430\u0433\u0438\u043d\u044b: camera, dialogs, device-motion, barcodescanner \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u0435 \u0437\u0430\u0431\u043e\u0442\u044f\u0441\u044c \u0438\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438. <\/p>\n<h3>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435<\/h3>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u0447\u0442\u043e \u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 <a href=\"https:\/\/tabrisjs.com\/documentation\/latest\/\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439<\/a>. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u0434\u043b\u044f \u043d\u0430\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0412\u0438\u0434\u0436\u0435\u0442\u044b (Widgets), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 (Page), \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0436\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043a \u043d\u0435\u0439, \u0431\u0443\u0434\u044c-\u0442\u043e TextView \u0438\u043b\u0438 ScrollView \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438.<\/p>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u00abHello World!!\u00bb. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u043d\u043e\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0441 HTML5-based \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e Flickr.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e <i>package.json<\/i>:<\/p>\n<pre><code class=\"javascript\">{   &quot;name&quot;: &quot;flickr-search&quot;,   &quot;description&quot;: &quot;Search Flickr public images by tag&quot;,   &quot;main&quot;: &quot;app.js&quot;,   &quot;dependencies&quot;: {     &quot;tabris&quot;: &quot;^1.2.0&quot;   } } <\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a API Flickr, \u0438 \u0445\u043e\u0442\u044f Tabris \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u044f\u0434\u0440\u0435 <a href=\"https:\/\/tabrisjs.com\/snippets\/#xmlhttprequesthttp:\/\/\">XMLHttpRequest<\/a>, \u044f \u0432\u0441\u0435 \u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0443 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f <a href=\"https:\/\/www.npmjs.com\/package\/fetch\">fetch<\/a>, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c Promise. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, <i>package.json<\/i> \u043f\u0440\u0438\u043c\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434:<\/p>\n<pre><code class=\"javascript\">{   &quot;name&quot;: &quot;flickr-search&quot;,   &quot;description&quot;: &quot;Search Flickr public images by tag&quot;,   &quot;main&quot;: &quot;app.js&quot;,   &quot;dependencies&quot;: {     &quot;tabris&quot;: &quot;^1.2.0&quot;,     &quot;promise&quot;: &quot;^6.1.0&quot;,     &quot;whatwg-fetch&quot;: &quot;^0.9.0&quot;   } } <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443\u0435\u043c <i>npm install<\/i> \u0438 \u043c\u044b \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043a\u043e\u0434\u0430. \u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0432\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441 \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 url \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Tabris. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430. \u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d <i>node http-server<\/i>, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0432\u0430\u0442\u044c <i>http-server<\/i> \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c, \u043b\u0438\u0431\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Apache \u0438 \u0442.\u043f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" width=\"320\"  src=\"https:\/\/habrastorage.org\/files\/9fc\/454\/ecc\/9fc454ecca854b59b0bff257075c19ce.png\"\/><\/div>\n<p>  \u041d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u043c, \u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u0435\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430, \u0430 \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 + \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435. \u0414\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <i>TextInput<\/i>, \u0430 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 <i>CollectionView<\/i>. \u041f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0442 Flickr (\u0431\u0435\u0437 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0442\u0435\u0433\u0443), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <i>CollectionView with Pull-to-Refresh<\/i> \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0434\u0430\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0433 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.<\/p>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0443: <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Scratch app.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">Promise = require(&quot;promise&quot;); require(&quot;whatwg-fetch&quot;);  var page = tabris.create(&quot;Page&quot;, {     title: &quot;Flickr Search&quot;,     topLevel: true });  var tagInput = tabris.create(&quot;TextInput&quot;, {     layoutData: {         left: 8,         right: 8,         top: 8     },     message: &quot;Search...&quot; }).on(&quot;accept&quot;, loadItems).appendTo(page);  var view = tabris.create(&quot;CollectionView&quot;, {     layoutData: {         left: 0,         top: [tagInput, 8],         right: 0,         bottom: 0     },     itemHeight: 200,     refreshEnabled: true,     initializeCell: function(cell) {         var imageView = tabris.create(&quot;ImageView&quot;, {             layoutData: {                 top: 0,                 left: 0,                 right: 0,                 bottom: 0             },             scaleMode: 'fill'         }).appendTo(cell);         var titleComposite = tabris.create(&quot;Composite&quot;, {             background: &quot;rgba(0,0,0,0.8)&quot;,             top: 0,             right: 0,             left: 0         }).appendTo(cell);         var textView = tabris.create(&quot;TextView&quot;, {             layoutData: {                 left: 30,                 top: 5,                 bottom: 5,                 right: 30             },             alignment: &quot;center&quot;,             font: &quot;16px Roboto, sans-serif&quot;,             textColor: &quot;#fff&quot;         }).appendTo(titleComposite);         cell.on(&quot;change:item&quot;, function(widget, item) {             imageView.set(&quot;image&quot;, {                 src: item.media.m             });             item.title ? textView.set(&quot;text&quot;, item.title) : textView.set(&quot;text&quot;, 'No Title');         });     } }).on(&quot;refresh&quot;, function() {     loadItems(); }).appendTo(page); page.open();  function loadItems() {     view.set({         refreshIndicator: true,         refreshMessage: &quot;loading...&quot;     }); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u0438 \u044f\u0441\u043d\u043e \u0438\u0437 \u043a\u043e\u0434\u0430 \u2014 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (Page), \u043e\u0437\u0430\u0433\u043b\u0430\u0432\u0438\u043b\u0438 \u0435\u0451, \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u043f\u0443\u0442 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 <i>CollectionView<\/i>, \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0432 \u0435\u0433\u043e \u043f\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043f\u043e\u0438\u0441\u043a\u0430. <\/p>\n<p>  \u041a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 <i>CollectionView<\/i> \u0437\u0430\u0434\u0430\u043b\u0438 \u0432\u044b\u0441\u043e\u0442\u0443 \u0438 \u0432 \u044f\u0447\u0435\u0439\u043a\u0443 \u00ab\u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u00bb \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <i>\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 (ImageView)<\/i>, <i>\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u044b\u0439 (Composite)<\/i> \u0438 <i>\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 (TextView)<\/i> \u0441\u043b\u043e\u0438.<\/p>\n<p>  <i>ImageView<\/i> \u043c\u044b \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b\u0438 \u0432\u043e \u0432\u0441\u044e \u0448\u0438\u0440\u0438\u043d\u0443 \u0438 \u0432\u044b\u0441\u043e\u0442\u0443 \u044f\u0447\u0435\u0439\u043a\u0438 (\u0437\u0430\u0434\u0430\u0432 {left: 0, right: 0, top: 0, bottom: 0}), \u0437\u0430\u0434\u0430\u043b\u0438 \u0440\u0435\u0436\u0438\u043c \u00ab\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u00bb \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 ({scaleMode: &#8216;fill&#8217;}). <\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u043c\u043e \u043d\u0430 \u0435\u0451 \u0444\u043e\u043d\u0435, \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u044b\u0439 \u0441\u043b\u043e\u0439 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c\u044e ({background: \u00abrgba(0,0,0,0.8)\u00bb}) \u0438 \u0443\u0436\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u0435\u043a\u0441\u0442, \u0437\u0430\u0434\u0430\u0432 \u0435\u0433\u043e \u0446\u0432\u0435\u0442, \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 <i>change:item<\/i> \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0434\u043b\u044f \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 API.<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <i>loadItems()<\/i> \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0438\u0434\u0438\u043c\u044b\u043c \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 <i>Pull-to-Refresh<\/i>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u043a\u0440\u044b\u0432 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u00ab\u0441\u0432\u0430\u0439\u043f\u043d\u0443\u0432\u00bb \u0432\u043d\u0438\u0437 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" width=\"320\"  src=\"https:\/\/habrastorage.org\/files\/0c9\/a22\/815\/0c9a2281510d40749748c1966d7147c8.png\"\/><\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u00ab\u043e\u0436\u0438\u0432\u0438\u0442\u044c\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a Flickr API. Flickr \u0443\u043c\u0435\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445, \u0438 \u043c\u044b \u0431\u044b \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0445\u043e\u0442\u044c Atom Feed, \u0445\u043e\u0442\u044c CSV. <\/p>\n<p>  \u041d\u043e \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 JSON, \u0434\u0430 \u0438 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u044f\u043d\u0443\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041d\u0435\u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Flickr \u043e\u0442\u0434\u0430\u0435\u0442 JSON-P. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043d\u0435 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 &lt;head\/&gt; \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <i>eval()<\/i> \u2014 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p>  \u0412 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 <i>eval()<\/i> \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u00ab\u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e\u00bb \u043a\u043e\u0434\u0430 \u043e\u0442 Flickr \u043d\u0438\u0437\u043a\u0430, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u043e\u0436\u0435 \u0432\u0440\u044f\u0434\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u043f\u0430\u0434\u0435\u0442 (\u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439). <br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0442\u043e\u043d\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 <i>Function<\/i>, \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439\/\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0438 \u043f\u043b\u044e\u0441\u043e\u043c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0441<i> try..catch<\/i> \u2014 \u0430 \u044d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0438 \u0436\u0438\u0437\u043d\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u0446\u0435\u043b\u043e\u043c. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>loadItems()<\/i> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0438\u0434: <\/p>\n<pre><code class=\"javascript\">function loadItems() {     view.set({         refreshIndicator: true,         refreshMessage: &quot;loading...&quot;     });     fetch(&quot;https:\/\/api.flickr.com\/services\/feeds\/photos_public.gne?format=json&jsoncallback=JSON_CALLBACK&tags=&quot; + tagInput.get('text')).then(function(response) {         var dyn_function = new Function(&quot;JSON_CALLBACK&quot;, response._bodyInit);         dyn_function(function(json) {             if (json.items && json.items.length) {                 view.set({                     items: json.items,                     refreshIndicator: false,                     refreshMessage: &quot;refreshed&quot;                 });             } else {                 navigator.notification.alert('Nothing found with tag: ' + tagInput.get('text'), null, 'Result');                 view.set({                     refreshIndicator: false,                     refreshMessage: &quot;refreshed&quot;                 });             }         })     }).catch(function(error) {     console.log('request failed:', error)   }) } <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <i>navigator.notification.alert()<\/i>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Tabris \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 <i>org.apache.cordova.dialogs<\/i>. \u041f\u0440\u0438 \u0431\u0438\u043b\u0434\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044f loadItems() \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d \u043f\u043e\u0438\u0441\u043a \u0441 \u043f\u0443\u0441\u0442\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 (\u0438 \u0442\u0430\u043a \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u0435\u0444\u0440\u0435\u0448\u0435 \u0441 \u043f\u0443\u0441\u0442\u044b\u043c \u0442\u0435\u0433\u043e\u043c). <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" width=\"320\"  src=\"https:\/\/habrastorage.org\/files\/ec8\/8f9\/ce7\/ec88f9ce76a34902bff320170841a996.png\"\/><\/div>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0430\u043d\u0438\u043c\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u043d\u0433\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b) \u043d\u0430 HTML5 \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u00ab\u043f\u043b\u0430\u0432\u043d\u043e\u00bb \u2014 \u0432\u043e\u0442 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0440\u0430\u0432\u0430 \u0441 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"javascript\">function animateFadeInFromRight(widget, delay) {     widget.set({         opacity: 0.0,         transform: {             translationX: 150         }     });     widget.animate({         opacity: 1.0,         transform: {             translationX: 0         }     }, {         duration: 500,         delay: delay,         easing: &quot;ease-out&quot;     }); } <\/code><\/pre>\n<p>  \u0418 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u0444\u0444\u0435\u043a\u0442 \u043a \u044f\u0447\u0435\u0439\u043a\u0430\u043c <i>CollectionView<\/i>:<\/p>\n<pre><code class=\"javascript\">cell.on(&quot;change:item&quot;, function(widget, item) {             animateFadeInFromRight(widget, 500);             imageView.set(&quot;image&quot;, {                 src: item.media.m             });             item.title ? textView.set(&quot;text&quot;, item.title) : textView.set(&quot;text&quot;, 'No Title');         }); <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c:  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" width=\"320\"  src=\"https:\/\/habrastorage.org\/files\/a82\/7d6\/524\/a827d65242c348d4aea25ce619a5b703.png\"\/><\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043b\u0438\u0441\u0442\u0438\u043d\u0433 app.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">Promise = require(&quot;promise&quot;); require(&quot;whatwg-fetch&quot;);  var page = tabris.create(&quot;Page&quot;, {     title: &quot;Flickr Search&quot;,     topLevel: true });  var tagInput = tabris.create(&quot;TextInput&quot;, {     layoutData: {         left: 8,         right: 8,         top: 8     },     message: &quot;Search...&quot; }).on(&quot;accept&quot;, loadItems).appendTo(page);  var view = tabris.create(&quot;CollectionView&quot;, {     layoutData: {         left: 0,         top: [tagInput, 8],         right: 0,         bottom: 0     },     itemHeight: 200,     refreshEnabled: true,     initializeCell: function(cell) {         var imageView = tabris.create(&quot;ImageView&quot;, {             layoutData: {                 top: 0,                 left: 0,                 right: 0,                 bottom: 0             },             scaleMode: 'fill'         }).appendTo(cell);         var titleComposite = tabris.create(&quot;Composite&quot;, {             background: &quot;rgba(0,0,0,0.8)&quot;,             top: 0,             right: 0,             left: 0         }).appendTo(cell);         var textView = tabris.create(&quot;TextView&quot;, {             layoutData: {                 left: 30,                 top: 5,                 bottom: 5,                 right: 30             },             alignment: &quot;center&quot;,             font: &quot;16px Roboto, sans-serif&quot;,             textColor: &quot;#fff&quot;         }).appendTo(titleComposite);         cell.on(&quot;change:item&quot;, function(widget, item) {             animateFadeInFromRight(widget, 500);             imageView.set(&quot;image&quot;, {                 src: item.media.m             });             item.title ? textView.set(&quot;text&quot;, item.title) : textView.set(&quot;text&quot;, 'No Title');         });     } }).on(&quot;refresh&quot;, function() {     loadItems(); }).appendTo(page);  function loadItems() {     view.set({         refreshIndicator: true,         refreshMessage: &quot;loading...&quot;     });     fetch(&quot;https:\/\/api.flickr.com\/services\/feeds\/photos_public.gne?format=json&jsoncallback=JSON_CALLBACK&tags=&quot; + tagInput.get('text')).then(function(response) {         var dyn_function = new Function(&quot;JSON_CALLBACK&quot;, response._bodyInit);         dyn_function(function(json) {             if (json.items && json.items.length) {                 view.set({                     items: json.items,                     refreshIndicator: false,                     refreshMessage: &quot;refreshed&quot;                 });             } else {                 navigator.notification.alert('Nothing found with tag: ' + tagInput.get('text'), null, 'Result');                 view.set({                     refreshIndicator: false,                     refreshMessage: &quot;refreshed&quot;                 });             }         })     }).catch(function(error) {         console.log('request failed:', error)     }) }  function animateFadeInFromRight(widget, delay) {     widget.set({         opacity: 0.0,         transform: {             translationX: 150         }     });     widget.animate({         opacity: 1.0,         transform: {             translationX: 0         }     }, {         duration: 500,         delay: delay,         easing: &quot;ease-out&quot;     }); } loadItems(); page.open(); <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0431\u0438\u043b\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 Cordova <i>config.xml<\/i>, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b (\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u0441\u0430\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, npm-\u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0438\u0437 package.json ): <\/p>\n<pre><code class=\"xml\">&lt;?xml version='1.0' encoding='utf-8'?&gt; &lt;widget id=&quot;my.flickr_search.app&quot; version=&quot;1.0.0&quot;&gt;   &lt;name&gt;Flickr Search&lt;\/name&gt;   &lt;description&gt;     Search Flickr public images by tag   &lt;\/description&gt;   &lt;preference name=&quot;Fullscreen&quot; value=&quot;true&quot; \/&gt;   &lt;plugin name=&quot;cordova-plugin-dialogs&quot; version=&quot;1.1.1&quot; \/&gt; &lt;\/widget&gt; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0448\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 Github \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 Tabris, \u0432\u044b\u0431\u0440\u0430\u0432 \u043d\u0430\u0448 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Create App<\/b><\/p>\n<div class=\"spoiler_text\">\n<div style=\"text-align:center;\"><img decoding=\"async\" width=\"800\"  src=\"https:\/\/habrastorage.org\/files\/33e\/857\/03a\/33e85703acf24483adfdf6f34142da92.jpeg\"\/><\/div>\n<\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u0438\u043b\u0434\u0430: <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Build App<\/b><\/p>\n<div class=\"spoiler_text\">\n<div style=\"text-align:center;\"><img decoding=\"async\" width=\"800\"  src=\"https:\/\/habrastorage.org\/files\/382\/8f2\/54a\/3828f254ab8542398f883faddc9c8629.jpeg\"\/><\/div>\n<\/div>\n<\/div>\n<p>  <a href=\"https:\/\/github.com\/michaeleparkour\/flickr-search\">\u041a\u043e\u0434 \u043d\u0430 Github<\/a><\/p>\n<p>  \u0424\u0430\u0439\u043b .apk \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 10\u041c\u0431 \u2014 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0433\u043e\u043b\u0430\u044f Cordova (~2-3\u041c\u0431), \u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 Chrome WebView (~19\u041c\u0431). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445.<\/p>\n<p>  \u041a \u043f\u043b\u044e\u0441\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043d\u0435\u0441\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 <i>js-\u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438 cordova plugins<\/i>. \u0412 React Native, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0441\u0435 \u0435\u0449\u0435 \u043c\u0430\u043b\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u00ab\u0436\u0435\u043b\u0435\u0437\u043e\u043c\u00bb. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 Tabris \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u043d\u0430 Cordova, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u00ab\u0443\u0437\u043a\u0438\u0445\u00bb \u043c\u0435\u0441\u0442\u0430\u0445 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432.<\/p>\n<p>  \u0416\u0430\u043b\u044c, \u0447\u0442\u043e \u0437\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0438\u043b\u0434\u0430 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c 50$, \u043d\u043e \u0435\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043d\u0435 \u043e\u0431 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0442\u043e \u0434\u0443\u043c\u0430\u044e \u0441\u043c\u044b\u0441\u043b \u0432\u043f\u043e\u043b\u043d\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0431\u0438\u043b\u0434\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0441\u0435 \u0441 \u0442\u0435\u043c \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c.<br \/>  \u041a\u043e\u043c\u043c\u044c\u044e\u043d\u0438\u0442\u0438 Tabris \u043d\u0435 \u0442\u0430\u043a \u0432\u0435\u043b\u0438\u043a\u043e, \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0440\u043e\u0441 \u2014 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438.<\/p>\n<p>  \u0412 \u0446\u0435\u043b\u043e\u043c \u2014 \u0438\u043c\u0435\u0435\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0438\u0433\u0440, \u0441 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0435\u043c\u043e\u043a \u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432, \u0430 \u0442\u043e \u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/266301\/\"> http:\/\/habrahabr.ru\/post\/266301\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t<img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/367\/f11\/c85\/367f11c85b834c48a3caee5449a47974.png\" align=\"left\"\/><br \/>  <a href=\"https:\/\/tabrisjs.com\/\">Tabris.js<\/a> \u2014 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 (Android, IOS) \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a. \u041e\u0442 \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0438\u043b\u0438 Chrome-based WebView. Tabris \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0438\u0437 javascript. \u0411\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438 \u0438\u0437 \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u044d\u0442\u043e: <a href=\"http:\/\/www.telerik.com\/nativescript\">Telerik Native Script<\/a>, <a href=\"http:\/\/www.appcelerator.com\/\">Appcelerator<\/a> \u0438 <a href=\"https:\/\/facebook.github.io\/react-native\/\">React Native<\/a>.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-265029","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/265029","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=265029"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/265029\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=265029"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=265029"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=265029"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}