Fixed various Unicode text handling.
Moved example folder inside the library, and renamed it "demo" Improved example code.
This commit is contained in:
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
@@ -0,0 +1,154 @@
|
||||
note
|
||||
description: "Summary description for {FLAG_AUTOCOMPLETION}."
|
||||
author: ""
|
||||
date: "$Date$"
|
||||
revision: "$Revision$"
|
||||
|
||||
class
|
||||
FLAG_AUTOCOMPLETION
|
||||
|
||||
inherit
|
||||
|
||||
WSF_AUTOCOMPLETION
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature {NONE} -- Initialization
|
||||
|
||||
make
|
||||
-- Initialize
|
||||
do
|
||||
template := "<img src=%"http://www.famfamfam.com/lab/icons/flags/icons/gif/{{=flag}}.gif%"> {{=value}}";
|
||||
end
|
||||
|
||||
feature -- Implementation
|
||||
|
||||
autocompletion (input: STRING_32): JSON_ARRAY
|
||||
-- Implementation
|
||||
local
|
||||
list: ITERABLE [TUPLE [short: READABLE_STRING_8; name: READABLE_STRING_32]]
|
||||
o: JSON_OBJECT
|
||||
do
|
||||
list := <<["AF", {STRING_32} "Afghanistan"], ["AX", {STRING_32} "<22>land Islands"], ["AL", {STRING_32} "Albania"],
|
||||
["DZ", {STRING_32} "Algeria"], ["AS", {STRING_32} "American Samoa"],
|
||||
["AD", {STRING_32} "Andorra"], ["AO", {STRING_32} "Angola"], ["AI", {STRING_32} "Anguilla"],
|
||||
["AQ", {STRING_32} "Antarctica"], ["AG", {STRING_32} "Antigua and Barbuda"],
|
||||
["AR", {STRING_32} "Argentina"], ["AM", {STRING_32} "Armenia"], ["AW", {STRING_32} "Aruba"],
|
||||
["AU", {STRING_32} "Australia"], ["AT", {STRING_32} "Austria"], ["AZ", {STRING_32} "Azerbaijan"],
|
||||
["BS", {STRING_32} "Bahamas"], ["BH", {STRING_32} "Bahrain"], ["BD", {STRING_32} "Bangladesh"],
|
||||
["BB", {STRING_32} "Barbados"], ["BY", {STRING_32} "Belarus"], ["BE", {STRING_32} "Belgium"],
|
||||
["BZ", {STRING_32} "Belize"], ["BJ", {STRING_32} "Benin"], ["BM", {STRING_32} "Bermuda"],
|
||||
["BT", {STRING_32} "Bhutan"], ["BO", {STRING_32} "Bolivia, Plurinational State of"],
|
||||
["BQ", {STRING_32} "Bonaire, Sint Eustatius and Saba"], ["BA", {STRING_32} "Bosnia and Herzegovina"],
|
||||
["BW", {STRING_32} "Botswana"], ["BV", {STRING_32} "Bouvet Island"],
|
||||
["BR", {STRING_32} "Brazil"], ["IO", {STRING_32} "British Indian Ocean Territory"],
|
||||
["BN", {STRING_32} "Brunei Darussalam"], ["BG", {STRING_32} "Bulgaria"],
|
||||
["BF", {STRING_32} "Burkina Faso"], ["BI", {STRING_32} "Burundi"], ["KH", {STRING_32} "Cambodia"],
|
||||
["CM", {STRING_32} "Cameroon"], ["CA", {STRING_32} "Canada"], ["CV", {STRING_32} "Cape Verde"],
|
||||
["KY", {STRING_32} "Cayman Islands"], ["CF", {STRING_32} "Central African Republic"],
|
||||
["TD", {STRING_32} "Chad"], ["CL", {STRING_32} "Chile"], ["CN", {STRING_32} "China"],
|
||||
["CX", {STRING_32} "Christmas Island"], ["CC", {STRING_32} "Cocos (Keeling) Islands"],
|
||||
["CO", {STRING_32} "Colombia"], ["KM", {STRING_32} "Comoros"], ["CG", {STRING_32} "Congo"],
|
||||
["CD", {STRING_32} "Congo, the Democratic Republic of the"], ["CK", {STRING_32} "Cook Islands"],
|
||||
["CR", {STRING_32} "Costa Rica"], ["CI", {STRING_32} "C<>te d'Ivoire"],
|
||||
["HR", {STRING_32} "Croatia"], ["CU", {STRING_32} "Cuba"], ["CW", {STRING_32} "Cura<72>ao"],
|
||||
["CY", {STRING_32} "Cyprus"], ["CZ", {STRING_32} "Czech Republic"], ["DK", {STRING_32} "Denmark"],
|
||||
["DJ", {STRING_32} "Djibouti"], ["DM", {STRING_32} "Dominica"], ["DO", {STRING_32} "Dominican Republic"],
|
||||
["EC", {STRING_32} "Ecuador"], ["EG", {STRING_32} "Egypt"], ["SV", {STRING_32} "El Salvador"],
|
||||
["GQ", {STRING_32} "Equatorial Guinea"], ["ER", {STRING_32} "Eritrea"], ["EE", {STRING_32} "Estonia"],
|
||||
["ET", {STRING_32} "Ethiopia"], ["FK", {STRING_32} "Falkland Islands (Malvinas)"],
|
||||
["FO", {STRING_32} "Faroe Islands"], ["FJ", {STRING_32} "Fiji"], ["FI", {STRING_32} "Finland"],
|
||||
["FR", {STRING_32} "France"], ["GF", {STRING_32} "French Guiana"],
|
||||
["PF", {STRING_32} "French Polynesia"], ["TF", {STRING_32} "French Southern Territories"],
|
||||
["GA", {STRING_32} "Gabon"], ["GM", {STRING_32} "Gambia"], ["GE", {STRING_32} "Georgia"],
|
||||
["DE", {STRING_32} "Germany"], ["GH", {STRING_32} "Ghana"], ["GI", {STRING_32} "Gibraltar"],
|
||||
["GR", {STRING_32} "Greece"], ["GL", {STRING_32} "Greenland"], ["GD", {STRING_32} "Grenada"],
|
||||
["GP", {STRING_32} "Guadeloupe"], ["GU", {STRING_32} "Guam"], ["GT", {STRING_32} "Guatemala"],
|
||||
["GG", {STRING_32} "Guernsey"], ["GN", {STRING_32} "Guinea"], ["GW", {STRING_32} "Guinea-Bissau"],
|
||||
["GY", {STRING_32} "Guyana"], ["HT", {STRING_32} "Haiti"], ["HM", {STRING_32} "Heard Island and McDonald Islands"],
|
||||
["VA", {STRING_32} "Holy See (Vatican City State)"],
|
||||
["HN", {STRING_32} "Honduras"], ["HK", {STRING_32} "Hong Kong"], ["HU", {STRING_32} "Hungary"],
|
||||
["IS", {STRING_32} "Iceland"], ["IN", {STRING_32} "India"], ["ID", {STRING_32} "Indonesia"],
|
||||
["IR", {STRING_32} "Iran, Islamic Republic of"], ["IQ", {STRING_32} "Iraq"], ["IE", {STRING_32} "Ireland"],
|
||||
["IM", {STRING_32} "Isle of Man"], ["IL", {STRING_32} "Israel"],
|
||||
["IT", {STRING_32} "Italy"], ["JM", {STRING_32} "Jamaica"], ["JP", {STRING_32} "Japan"], ["JE", {STRING_32} "Jersey"],
|
||||
["JO", {STRING_32} "Jordan"], ["KZ", {STRING_32} "Kazakhstan"],
|
||||
["KE", {STRING_32} "Kenya"], ["KI", {STRING_32} "Kiribati"], ["KP", {STRING_32} "Korea, Democratic People's Republic of"],
|
||||
["KR", {STRING_32} "Korea, Republic of"],
|
||||
["KW", {STRING_32} "Kuwait"], ["KG", {STRING_32} "Kyrgyzstan"], ["LA", {STRING_32} "Lao People's Democratic Republic"],
|
||||
["LV", {STRING_32} "Latvia"], ["LB", {STRING_32} "Lebanon"],
|
||||
["LS", {STRING_32} "Lesotho"], ["LR", {STRING_32} "Liberia"], ["LY", {STRING_32} "Libya"],
|
||||
["LI", {STRING_32} "Liechtenstein"], ["LT", {STRING_32} "Lithuania"], ["LU", {STRING_32} "Luxembourg"],
|
||||
["MO", {STRING_32} "Macao"], ["MK", {STRING_32} "Macedonia, the former Yugoslav Republic of"],
|
||||
["MG", {STRING_32} "Madagascar"], ["MW", {STRING_32} "Malawi"],
|
||||
["MY", {STRING_32} "Malaysia"], ["MV", {STRING_32} "Maldives"], ["ML", {STRING_32} "Mali"],
|
||||
["MT", {STRING_32} "Malta"], ["MH", {STRING_32} "Marshall Islands"], ["MQ", {STRING_32} "Martinique"],
|
||||
["MR", {STRING_32} "Mauritania"], ["MU", {STRING_32} "Mauritius"], ["YT", {STRING_32} "Mayotte"],
|
||||
["MX", {STRING_32} "Mexico"], ["FM", {STRING_32} "Micronesia, Federated States of"],
|
||||
["MD", {STRING_32} "Moldova, Republic of"], ["MC", {STRING_32} "Monaco"], ["MN", {STRING_32} "Mongolia"],
|
||||
["ME", {STRING_32} "Montenegro"], ["MS", {STRING_32} "Montserrat"],
|
||||
["MA", {STRING_32} "Morocco"], ["MZ", {STRING_32} "Mozambique"], ["MM", {STRING_32} "Myanmar"],
|
||||
["NA", {STRING_32} "Namibia"], ["NR", {STRING_32} "Nauru"], ["NP", {STRING_32} "Nepal"],
|
||||
["NL", {STRING_32} "Netherlands"], ["NC", {STRING_32} "New Caledonia"], ["NZ", {STRING_32} "New Zealand"],
|
||||
["NI", {STRING_32} "Nicaragua"], ["NE", {STRING_32} "Niger"],
|
||||
["NG", {STRING_32} "Nigeria"], ["NU", {STRING_32} "Niue"], ["NF", {STRING_32} "Norfolk Island"],
|
||||
["MP", {STRING_32} "Northern Mariana Islands"], ["NO", {STRING_32} "Norway"],
|
||||
["OM", {STRING_32} "Oman"], ["PK", {STRING_32} "Pakistan"], ["PW", {STRING_32} "Palau"],
|
||||
["PS", {STRING_32} "Palestinian Territory, Occupied"], ["PA", {STRING_32} "Panama"],
|
||||
["PG", {STRING_32} "Papua New Guinea"], ["PY", {STRING_32} "Paraguay"], ["PE", {STRING_32} "Peru"],
|
||||
["PH", {STRING_32} "Philippines"], ["PN", {STRING_32} "Pitcairn"],
|
||||
["PL", {STRING_32} "Poland"], ["PT", {STRING_32} "Portugal"], ["PR", {STRING_32} "Puerto Rico"],
|
||||
["QA", {STRING_32} "Qatar"], ["RE", {STRING_32} "R<>union"], ["RO", {STRING_32} "Romania"],
|
||||
["RU", {STRING_32} "Russian Federation"], ["RW", {STRING_32} "Rwanda"], ["BL", {STRING_32} "Saint Barth<74>lemy"],
|
||||
["SH", {STRING_32} "Saint Helena, Ascension and Tristan da Cunha"],
|
||||
["KN", {STRING_32} "Saint Kitts and Nevis"], ["LC", {STRING_32} "Saint Lucia"], ["MF", {STRING_32} "Saint Martin (French part)"],
|
||||
["PM", {STRING_32} "Saint Pierre and Miquelon"],
|
||||
["VC", {STRING_32} "Saint Vincent and the Grenadines"], ["WS", {STRING_32} "Samoa"],
|
||||
["SM", {STRING_32} "San Marino"], ["ST", {STRING_32} "Sao Tome and Principe"],
|
||||
["SA", {STRING_32} "Saudi Arabia"], ["SN", {STRING_32} "Senegal"], ["RS", {STRING_32} "Serbia"],
|
||||
["SC", {STRING_32} "Seychelles"], ["SL", {STRING_32} "Sierra Leone"],
|
||||
["SG", {STRING_32} "Singapore"], ["SX", {STRING_32} "Sint Maarten (Dutch part)"], ["SK", {STRING_32} "Slovakia"],
|
||||
["SI", {STRING_32} "Slovenia"], ["SB", {STRING_32} "Solomon Islands"],
|
||||
["SO", {STRING_32} "Somalia"], ["ZA", {STRING_32} "South Africa"], ["GS", {STRING_32} "South Georgia and the South Sandwich Islands"],
|
||||
["SS", {STRING_32} "South Sudan"],
|
||||
["ES", {STRING_32} "Spain"], ["LK", {STRING_32} "Sri Lanka"], ["SD", {STRING_32} "Sudan"], ["SR", {STRING_32} "Suriname"],
|
||||
["SJ", {STRING_32} "Svalbard and Jan Mayen"],
|
||||
["SZ", {STRING_32} "Swaziland"], ["SE", {STRING_32} "Sweden"], ["CH", {STRING_32} "Switzerland"],
|
||||
["SY", {STRING_32} "Syrian Arab Republic"],
|
||||
["TW", {STRING_32} "Taiwan, Province of China"], ["TJ", {STRING_32} "Tajikistan"],
|
||||
["TZ", {STRING_32} "Tanzania, United Republic of"], ["TH", {STRING_32} "Thailand"],
|
||||
["TL", {STRING_32} "Timor-Leste"], ["TG", {STRING_32} "Togo"], ["TK", {STRING_32} "Tokelau"],
|
||||
["TO", {STRING_32} "Tonga"], ["TT", {STRING_32} "Trinidad and Tobago"],
|
||||
["TN", {STRING_32} "Tunisia"], ["TR", {STRING_32} "Turkey"], ["TM", {STRING_32} "Turkmenistan"],
|
||||
["TC", {STRING_32} "Turks and Caicos Islands"], ["TV", {STRING_32} "Tuvalu"],
|
||||
["UG", {STRING_32} "Uganda"], ["UA", {STRING_32} "Ukraine"], ["AE", {STRING_32} "United Arab Emirates"],
|
||||
["GB", {STRING_32} "United Kingdom"], ["US", {STRING_32} "United States"],
|
||||
["UM", {STRING_32} "United States Minor Outlying Islands"], ["UY", {STRING_32} "Uruguay"],
|
||||
["UZ", {STRING_32} "Uzbekistan"], ["VU", {STRING_32} "Vanuatu"],
|
||||
["VE", {STRING_32} "Venezuela, Bolivarian Republic of"], ["VN", {STRING_32} "Viet Nam"],
|
||||
["VG", {STRING_32} "Virgin Islands, British"],
|
||||
["VI", {STRING_32} "Virgin Islands, U.S."], ["WF", {STRING_32} "Wallis and Futuna"],
|
||||
["EH", {STRING_32} "Western Sahara"], ["YE", {STRING_32} "Yemen"],
|
||||
["ZM", {STRING_32} "Zambia"], ["ZW", {STRING_32} "Zimbabwe"]
|
||||
>>
|
||||
|
||||
create Result.make_array
|
||||
across
|
||||
list as c
|
||||
loop
|
||||
if
|
||||
attached c.item.short as first and
|
||||
attached c.item.name as second
|
||||
then
|
||||
if second.as_lower.has_substring (input.as_lower) then
|
||||
create o.make
|
||||
o.put (create {JSON_STRING}.make_json (first.as_lower), "flag")
|
||||
o.put (create {JSON_STRING}.make_json_from_string_32 (second), "value")
|
||||
Result.add (o)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -33,24 +33,31 @@ feature -- Implementation
|
||||
o: JSON_OBJECT
|
||||
json_parser: JSON_PARSER
|
||||
query_str: STRING_32
|
||||
ctx: HTTP_CLIENT_REQUEST_CONTEXT
|
||||
do
|
||||
query_str := input
|
||||
query_str.replace_substring_all (" ", "+")
|
||||
create cl.make
|
||||
sess := cl.new_session ("http://google.com")
|
||||
if attached sess.get ("/complete/search?client=chrome&q=" + query_str, Void) as resp and then not resp.error_occurred then
|
||||
create ctx.make
|
||||
ctx.add_query_parameter ("q", query_str)
|
||||
if attached sess.get ("/complete/search?client=chrome", ctx) as resp and then not resp.error_occurred then
|
||||
l_json := resp.body
|
||||
end
|
||||
create Result.make_array
|
||||
if l_json /= Void and then not l_json.is_empty then
|
||||
create json_parser.make_parser (l_json)
|
||||
if attached {JSON_ARRAY} json_parser.parse_json as data and then attached {JSON_ARRAY} data.i_th (2) as list then
|
||||
if
|
||||
attached {JSON_ARRAY} json_parser.parse_json as data and then
|
||||
data.valid_index (2) and then
|
||||
attached {JSON_ARRAY} data.i_th (2) as list
|
||||
then
|
||||
across
|
||||
1 |..| list.count as c
|
||||
loop
|
||||
if attached {JSON_STRING} list.i_th (c.item) as row then
|
||||
create o.make
|
||||
o.put (create {JSON_STRING}.make_json (row.unescaped_STRING_32), "value")
|
||||
o.put (create {JSON_STRING}.make_with_escaped_json (row.item), "value")
|
||||
Result.add (o)
|
||||
end
|
||||
end
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<system xmlns="http://www.eiffel.com/developers/xml/configuration-1-11-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.eiffel.com/developers/xml/configuration-1-11-0 http://www.eiffel.com/developers/xml/configuration-1-11-0.xsd" name="widgetapp" uuid="C28C4F53-9963-46C0-A080-8F13E94E7486" library_target="widgetapp">
|
||||
<system xmlns="http://www.eiffel.com/developers/xml/configuration-1-11-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.eiffel.com/developers/xml/configuration-1-11-0 http://www.eiffel.com/developers/xml/configuration-1-11-0.xsd" name="demo" uuid="C28C4F53-9963-46C0-A080-8F13E94E7486" library_target="demo">
|
||||
<target name="common" abstract="true">
|
||||
<file_rule>
|
||||
<exclude>/EIFGENs$</exclude>
|
||||
@@ -10,36 +10,36 @@
|
||||
<assertions precondition="true" postcondition="true" check="true" invariant="true" loop="true" supplier_precondition="true"/>
|
||||
</option>
|
||||
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
|
||||
<library name="http" location="..\..\library\network\protocol\http\http-safe.ecf"/>
|
||||
<library name="http" location="..\..\..\..\..\library\network\protocol\http\http-safe.ecf"/>
|
||||
<library name="http_client" location="$ISE_LIBRARY\contrib\library\network\http_client\http_client-safe.ecf"/>
|
||||
<library name="wsf" location="..\..\library\server\wsf\wsf-safe.ecf"/>
|
||||
<library name="wsf_js_widget" location="..\..\draft\library\wsf_js_widget\wsf_js_widget-safe.ecf" readonly="false"/>
|
||||
<library name="wsf" location="..\..\..\..\..\library\server\wsf\wsf-safe.ecf"/>
|
||||
<library name="wsf_js_widget" location="..\..\wsf_js_widget-safe.ecf" readonly="false"/>
|
||||
</target>
|
||||
<target name="widgetapp_nino" extends="common">
|
||||
<target name="demo_nino" extends="common">
|
||||
<root class="APPLICATION" feature="make_and_launch"/>
|
||||
<option warning="true" is_attached_by_default="true" void_safety="transitional" syntax="transitional">
|
||||
<assertions precondition="true" postcondition="true" check="true" invariant="true" loop="true" supplier_precondition="true"/>
|
||||
</option>
|
||||
<library name="default_nino" location="..\..\library\server\wsf\default\nino-safe.ecf"/>
|
||||
<library name="json" location="..\..\contrib\library\text\parser\json\library\json-safe.ecf"/>
|
||||
<cluster name="widgetapp" location=".\" recursive="true"/>
|
||||
<library name="default_nino" location="..\..\..\..\..\library\server\wsf\default\nino-safe.ecf"/>
|
||||
<library name="json" location="..\..\..\..\..\contrib\library\text\parser\json\library\json-safe.ecf"/>
|
||||
<cluster name="demo" location=".\" recursive="true"/>
|
||||
</target>
|
||||
<target name="widgetapp_cgi" extends="common">
|
||||
<target name="demo_cgi" extends="common">
|
||||
<root class="APPLICATION" feature="make_and_launch"/>
|
||||
<option warning="true" is_attached_by_default="true" void_safety="transitional" syntax="transitional">
|
||||
<assertions precondition="true" postcondition="true" check="true" invariant="true" loop="true" supplier_precondition="true"/>
|
||||
</option>
|
||||
<library name="default_cgi" location="..\..\library\server\wsf\default\cgi-safe.ecf"/>
|
||||
<cluster name="widgetapp" location=".\" recursive="true"/>
|
||||
<library name="default_cgi" location="..\..\..\..\..\library\server\wsf\default\cgi-safe.ecf"/>
|
||||
<cluster name="demo" location=".\" recursive="true"/>
|
||||
</target>
|
||||
<target name="widgetapp_libfcgi" extends="common">
|
||||
<target name="demo_libfcgi" extends="common">
|
||||
<root class="APPLICATION" feature="make_and_launch"/>
|
||||
<option warning="true" is_attached_by_default="true" void_safety="transitional" syntax="transitional">
|
||||
<assertions precondition="true" postcondition="true" check="true" invariant="true" loop="true" supplier_precondition="true"/>
|
||||
</option>
|
||||
<library name="default_libfcgi" location="..\..\library\server\wsf\default\libfcgi-safe.ecf"/>
|
||||
<cluster name="widgetapp" location=".\" recursive="true"/>
|
||||
<library name="default_libfcgi" location="..\..\..\..\..\library\server\wsf\default\libfcgi-safe.ecf"/>
|
||||
<cluster name="demo" location=".\" recursive="true"/>
|
||||
</target>
|
||||
<target name="widgetapp" extends="widgetapp_nino">
|
||||
<target name="demo" extends="demo_nino">
|
||||
</target>
|
||||
</system>
|
||||
@@ -19,16 +19,16 @@ feature {NONE}
|
||||
make_from_json (json: JSON_OBJECT)
|
||||
do
|
||||
if attached {JSON_STRING} json.item ("title") as l_title then
|
||||
title := l_title.unescaped_STRING_32
|
||||
title := l_title.unescaped_string_32
|
||||
end
|
||||
if attached {JSON_STRING} json.item ("content") as l_content then
|
||||
content := l_content.unescaped_STRING_32
|
||||
content := l_content.unescaped_string_32
|
||||
end
|
||||
if
|
||||
attached {JSON_OBJECT} json.item ("image") as img and then
|
||||
attached {JSON_STRING} img.item ("url") as l_image
|
||||
then
|
||||
image := l_image.item
|
||||
image := l_image.unescaped_string_32
|
||||
end
|
||||
end
|
||||
|
||||
@@ -34,14 +34,14 @@ feature -- States
|
||||
-- Return state which contains the current html and if there is an event handle attached
|
||||
do
|
||||
Result := Precursor
|
||||
Result.put_string (query, create {JSON_STRING}.make_json ("query"))
|
||||
Result.put_string (query, "query")
|
||||
end
|
||||
|
||||
set_state (new_state: JSON_OBJECT)
|
||||
do
|
||||
Precursor (new_state)
|
||||
if attached {JSON_STRING} new_state.item (create {JSON_STRING}.make_json ("query")) as new_query then
|
||||
query := new_query.item
|
||||
if attached {JSON_STRING} new_state.item ("query") as new_query then
|
||||
query := new_query.unescaped_string_32
|
||||
end
|
||||
end
|
||||
|
||||
@@ -49,22 +49,24 @@ feature -- Access
|
||||
|
||||
data: ITERABLE [GOOGLE_NEWS]
|
||||
local
|
||||
list: LINKED_LIST [GOOGLE_NEWS]
|
||||
list: detachable ARRAYED_LIST [GOOGLE_NEWS]
|
||||
l_json: detachable READABLE_STRING_8
|
||||
json_parser: JSON_PARSER
|
||||
query_str: STRING_32
|
||||
cl: LIBCURL_HTTP_CLIENT
|
||||
sess: HTTP_CLIENT_SESSION
|
||||
ctx: HTTP_CLIENT_REQUEST_CONTEXT
|
||||
do
|
||||
create list.make
|
||||
row_count := 0
|
||||
query_str := query.out
|
||||
query_str.replace_substring_all (" ", "+")
|
||||
query_str := query
|
||||
query_str.replace_substring_all ({STRING_32} " ", {STRING_32} "+")
|
||||
create cl.make
|
||||
sess := cl.new_session ("https://ajax.googleapis.com/ajax/services/search")
|
||||
sess.set_is_insecure (True)
|
||||
if sess.is_available then
|
||||
if attached {HTTP_CLIENT_RESPONSE} sess.get ("/news?v=1.0&q=" + query_str + "&rsz=" + page_size.out + "&start=" + (page_size * (page - 1)).out, Void) as l_response then
|
||||
create ctx.make
|
||||
ctx.add_query_parameter ("q", query_str)
|
||||
if attached {HTTP_CLIENT_RESPONSE} sess.get ("/news?v=1.0&rsz=" + page_size.out + "&start=" + (page_size * (page - 1)).out, ctx) as l_response then
|
||||
if not l_response.error_occurred then
|
||||
l_json := l_response.body
|
||||
end
|
||||
@@ -73,10 +75,18 @@ feature -- Access
|
||||
if l_json /= Void and then not l_json.is_empty then
|
||||
create json_parser.make_parser (l_json)
|
||||
if attached {JSON_OBJECT} json_parser.parse_json as sp then
|
||||
if attached {JSON_OBJECT} sp.item (create {JSON_STRING}.make_json ("responseData")) as responsedata and then attached {JSON_ARRAY} responsedata.item (create {JSON_STRING}.make_json ("results")) as results then
|
||||
if attached {JSON_OBJECT} responsedata.item (create {JSON_STRING}.make_json ("cursor")) as cursor and then attached {JSON_STRING} cursor.item (create {JSON_STRING}.make_json ("estimatedResultCount")) as count then
|
||||
if
|
||||
attached {JSON_OBJECT} sp.item ("responseData") as responsedata and then
|
||||
attached {JSON_ARRAY} responsedata.item ("results") as results
|
||||
then
|
||||
row_count := 0
|
||||
if
|
||||
attached {JSON_OBJECT} responsedata.item ("cursor") as cursor and then
|
||||
attached {JSON_STRING} cursor.item ("estimatedResultCount") as count
|
||||
then
|
||||
row_count := count.item.to_integer.min (64)
|
||||
end
|
||||
create list.make (results.count)
|
||||
across
|
||||
1 |..| results.count as c
|
||||
loop
|
||||
@@ -87,6 +97,9 @@ feature -- Access
|
||||
end
|
||||
end
|
||||
end
|
||||
if list = Void then
|
||||
create list.make (0)
|
||||
end
|
||||
Result := list
|
||||
end
|
||||
|
||||
@@ -43,7 +43,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
|
||||
update
|
||||
-- Send new renederd control to client on update
|
||||
do
|
||||
state_changes.replace (create {JSON_STRING}.make_json (render), "_html")
|
||||
state_changes.replace (create {JSON_STRING}.make_json_from_string_32 (render), "_html")
|
||||
end
|
||||
|
||||
feature --Event handling
|
||||
|
||||
@@ -37,9 +37,9 @@ feature {NONE} -- Initialization
|
||||
feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
|
||||
|
||||
update
|
||||
-- Send new renederd control to client on update
|
||||
-- Send new rendered control to client on update
|
||||
do
|
||||
state_changes.replace (create {JSON_STRING}.make_json (render_body), "_body")
|
||||
state_changes.replace (create {JSON_STRING}.make_json_from_string_32 (render_body), "_body")
|
||||
state_changes.replace (datasource.state, "datasource")
|
||||
end
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ feature -- Change
|
||||
do
|
||||
if not t.same_string (text) then
|
||||
text := t
|
||||
state_changes.replace (create {JSON_STRING}.make_json (text), "text")
|
||||
state_changes.replace (create {JSON_STRING}.make_json_from_string_32 (t), "text")
|
||||
end
|
||||
ensure
|
||||
text_same_string_as_t: text.same_string (t)
|
||||
|
||||
@@ -163,7 +163,7 @@ feature
|
||||
if items_changed then
|
||||
new_state := state
|
||||
create sub_state.make
|
||||
read_subcontrol_state (sub_state)
|
||||
add_sub_controls_states_to (sub_state)
|
||||
new_state.put (sub_state, "newstate")
|
||||
new_state.put_string (render, "render")
|
||||
states.put (new_state, control_name)
|
||||
|
||||
@@ -209,7 +209,7 @@ feature -- Validation
|
||||
-- Set the error message that will be displayed upon failure of client side validation
|
||||
do
|
||||
error := e
|
||||
state_changes.replace (create {JSON_STRING}.make_json (e), "error")
|
||||
state_changes.replace (create {JSON_STRING}.make_json_from_string_32 (e), "error")
|
||||
ensure
|
||||
error_set: error.same_string (e)
|
||||
end
|
||||
|
||||
@@ -78,25 +78,27 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
|
||||
full_state: WSF_JSON_OBJECT
|
||||
-- Read states in subcontrols
|
||||
local
|
||||
controls_state: WSF_JSON_OBJECT
|
||||
l_state: WSF_JSON_OBJECT
|
||||
do
|
||||
Result := Precursor
|
||||
create controls_state.make
|
||||
read_subcontrol_state (controls_state)
|
||||
Result.put (controls_state, "controls")
|
||||
create l_state.make
|
||||
add_sub_controls_states_to (l_state)
|
||||
Result.put (l_state, "controls")
|
||||
end
|
||||
|
||||
read_subcontrol_state (controls_state: JSON_OBJECT)
|
||||
-- Read add subcontrol state in to the controls_state json object.
|
||||
-- If the subcontrol is a stateless multicontrol x. We add the state of the subcontrols of x directly to controls_state. (Stateless multi controls do not add a hierarchy level)
|
||||
add_sub_controls_states_to (a_controls_state: JSON_OBJECT)
|
||||
-- Read add subcontrol state in to the `a_controls_state' json object.
|
||||
-- If the subcontrol is a stateless multicontrol x,
|
||||
-- the states of the subcontrols of x are directly added to `a_controls_state'.
|
||||
-- (Stateless multi controls do not add a hierarchy level)
|
||||
do
|
||||
across
|
||||
controls as c
|
||||
loop
|
||||
if attached {WSF_STATELESS_MULTI_CONTROL [WSF_STATELESS_CONTROL]} c.item as mcont then
|
||||
mcont.read_subcontrol_state (controls_state)
|
||||
mcont.add_sub_controls_states_to (a_controls_state)
|
||||
elseif attached {WSF_CONTROL} c.item as cont then
|
||||
controls_state.put (cont.full_state, cont.control_name)
|
||||
a_controls_state.put (cont.full_state, cont.control_name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -80,7 +80,7 @@ feature -- Implementation
|
||||
event := get_parameter ("event")
|
||||
event_parameter := get_parameter ("event_parameter")
|
||||
if attached event and attached event_control_name and attached control then
|
||||
if not event.is_equal ("uploadfile") then
|
||||
if not event.same_string_general ("uploadfile") then
|
||||
create states.make_empty
|
||||
request.read_input_data_into (states)
|
||||
create json_parser.make_parser (states)
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
<library name="time" location="$ISE_LIBRARY\library\time\time-safe.ecf"/>
|
||||
<library name="uri_template" location="..\..\..\library\text\parser\uri_template\uri_template-safe.ecf"/>
|
||||
<library name="wsf" location="..\..\..\library\server\wsf\wsf-safe.ecf"/>
|
||||
<cluster name="kernel" location=".\kernel\" recursive="true"/>
|
||||
<cluster name="kernel" location=".\kernel\" recursive="true">
|
||||
<file_rule>
|
||||
<exclude>/examples$</exclude>
|
||||
</file_rule>
|
||||
</cluster>
|
||||
</target>
|
||||
</system>
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
<library name="pcre" location="$ISE_LIBRARY\unstable\library\text\regexp\pcre\pcre.ecf"/>
|
||||
<library name="uri_template" location="..\..\..\library\text\parser\uri_template\uri_template.ecf"/>
|
||||
<library name="wsf" location="..\..\..\library\server\wsf\wsf.ecf"/>
|
||||
<cluster name="kernel" location=".\kernel\" recursive="true"/>
|
||||
<cluster name="kernel" location=".\kernel\" recursive="true">
|
||||
<file_rule>
|
||||
<exclude>/examples$</exclude>
|
||||
</file_rule>
|
||||
</cluster>
|
||||
</target>
|
||||
</system>
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user