[Isocial-svn] SF.net SVN: isocial: [41]
Status: Pre-Alpha
Brought to you by:
aguidrevitch
From: <agu...@us...> - 2008-03-05 20:19:44
|
Revision: 41 http://isocial.svn.sourceforge.net/isocial/?rev=41&view=rev Author: aguidrevitch Date: 2008-03-05 12:19:44 -0800 (Wed, 05 Mar 2008) Log Message: ----------- minimal city autocompletion helper added Modified Paths: -------------- app/application_controller.php app/controllers/profile_controller.php app/installers/city_installer.php app/installers/country_installer.php app/locales/profile/ru.php app/models/city.php app/views/layouts/application.tpl app/views/profile/basic.tpl public/stylesheets/autocomplete.css Added Paths: ----------- README.txt app/helpers/city_helper.php app/installers/religious_view_installer.php app/models/religious_view.php localities_to_sql.pl Added: README.txt =================================================================== --- README.txt (rev 0) +++ README.txt 2008-03-05 20:19:44 UTC (rev 41) @@ -0,0 +1,6 @@ +City/Country databases: + + * http://www.world-gazetteer.com/wg.php?x=1129163518&men=stdl&lng=en&gln=xx&dat=32&srt=npan&col=aohdq + * http://www.world-gazetteer.com/dataen.zip + * http://earth-info.nga.mil/gns/html/namefiles.htm + * http://www.maxmind.com/app/worldcities Modified: app/application_controller.php =================================================================== --- app/application_controller.php 2008-03-05 18:39:57 UTC (rev 40) +++ app/application_controller.php 2008-03-05 20:19:44 UTC (rev 41) @@ -1,6 +1,7 @@ <?php require_once(AK_LIB_DIR.DS.'AkActionController.php'); +require_once(AK_APP_DIR.DS.'vendor'.DS.'utf8_to_ascii'.DS.'utf8_to_ascii.php'); /** * This file is application-wide controller file. You can put all @@ -19,6 +20,7 @@ var $_errors = array(); var $models = array('User'); + var $app_helpers = array('City'); var $current_user; function beforeAction ( $method = '' ) { @@ -171,6 +173,52 @@ return "=?utf-8?B?" . base64_encode($value) . "?="; } + + function auto_complete_for_city () { + if (empty($this->params['city'])) { + $this->renderNothing(); + } else { + $query = $this->params['city']; + + $entries = $this->City->find('all', + array('conditions' => + array( + 'first_id IS NOT NULL AND name LIKE ?', $query . '%' + ), + 'include' => 'country', + 'limit' => 10 + ) + ); + + $limit = empty($entries) ? 10 : 10 - count($entries); + if ($limit) { + $aquery = utf8_to_ascii($query); + if ($aquery != $query) { + $asciied = $this->City->find('all', + array('conditions' => + array( + 'first_id IS NOT NULL AND name LIKE ?', $aquery . '%' + ), + 'include' => 'country', + 'limit' => $limit + ) + ); + } + } + + if (empty($entries) && empty($asciied)) { + $entries = array(); + } else if (empty($entries)) { + $entries = $asciied; + } else if (empty($asciied)) { + $entries = $entries; + } else { + $entries = array_merge($entries, $asciied); + } + $this->renderText( $this->city_helper->auto_complete_result($entries, $query) ); + } + } + function _auto_complete_result ($items, $field, $phrase = '') { // converting to an array $entries = array(); Modified: app/controllers/profile_controller.php =================================================================== --- app/controllers/profile_controller.php 2008-03-05 18:39:57 UTC (rev 40) +++ app/controllers/profile_controller.php 2008-03-05 20:19:44 UTC (rev 41) @@ -2,7 +2,7 @@ class ProfileController extends ApplicationController { - var $models = 'user, basic_profile, sex, country, city, political_view'; + var $models = 'user, basic_profile, sex, country, city, political_view, religious_view'; function index () { } @@ -10,15 +10,65 @@ function basic () { } - function auto_complete_for_basic_hometown () { - if (!empty($this->params['basic']['country_id'])) { - $conditions = array('country_id = ? AND name LIKE ?', $this->params['basic']['country_id'], '%' . $this->params['basic']['hometown'] . '%' ); + function auto_complete_for_basic_city () { + if (empty($this->params['basic']['city'])) { + $this->renderNothing(); } else { - $conditions = array('name LIKE ?', '%' . $this->params['basic']['hometown'] . '%' ); + $query = $this->params['basic']['city']; + + $entries = $this->City->find('all', + array('conditions' => + array( + 'first_id IS NOT NULL AND name LIKE ?', $query . '%' + ), + 'include' => 'country', + 'limit' => 10 + ) + ); + + $limit = empty($entries) ? 10 : 10 - count($entries); + if ($limit) { + $aquery = utf8_to_ascii($query); + if ($aquery != $query) { + $asciied = $this->City->find('all', + array('conditions' => + array( + 'first_id IS NOT NULL AND name LIKE ?', $aquery . '%' + ), + 'include' => 'country', + 'limit' => $limit + ) + ); + } + } + + if (empty($entries) && empty($asciied)) { + $entries = array(); + } else if (empty($entries)) { + $entries = $asciied; + } else if (empty($asciied)) { + $entries = $entries; + } else { + $entries = array_merge($entries, $asciied); + } + $this->renderText( $this->_city_auto_complete_result($entries, $query) ); } - $entries = $this->City->find('all', array('conditions' => $conditions)); - $this->renderText( $this->_auto_complete_result($entries, 'name', $this->params['basic']['hometown']) ); } + + function auto_complete_for_basic_religious_view () { + if (empty($this->params['basic']['religious_view'])) { + $this->renderNothing(); + } else { + $entries = $this->ReligiousView->find('all', + array('conditions' => + array( + 'name LIKE ?', '%' . $this->params['basic']['religious_view'] . '%' + ), + ) + ); + $this->renderText( $this->_auto_complete_result($entries, 'name', $this->params['basic']['religious_view']) ); + } + } function contact () { } Added: app/helpers/city_helper.php =================================================================== --- app/helpers/city_helper.php (rev 0) +++ app/helpers/city_helper.php 2008-03-05 20:19:44 UTC (rev 41) @@ -0,0 +1,79 @@ +<?php + +require_once(AK_LIB_DIR.DS.'AkActionView'.DS.'helpers'.DS.'javascript_helper.php'); +require_once(AK_LIB_DIR.DS.'AkActionView'.DS.'helpers'.DS.'tag_helper.php'); +require_once(AK_LIB_DIR.DS.'AkActionView'.DS.'helpers'.DS.'form_helper.php'); + +class CityHelper extends AkActionViewHelper +{ + + function auto_complete_field($field_id, $options = array()) + { + $function = "var {$field_id}_auto_completer = new Ajax.Autocompleter("; + $function .= "'{$field_id}', "; + $function .= !empty($options['update']) ? "'{$options['update']}', " : "'{$field_id}_auto_complete', "; + $function .= "'".UrlHelper::url_for($options['url'])."'"; + + $js_options = array(); + foreach (array('paramName', + 'tokens', + 'frequency', + 'minChars', + 'indicator', + 'updateElement', + 'afterUpdateElement', + 'callback', + 'parameters') as $key) { + if (!empty($options[$key])) { + $js_options[$key] = $options[$key]; + } + } + + $function .= ', '.JavaScriptHelper::_options_for_javascript($js_options).')'; + return JavaScriptHelper::javascript_tag($function); + } + + function auto_complete_result($cities, $phrase = null) + { + if (empty($cities)) { + return ''; + } + foreach ($cities as $city) { + $name = !empty($phrase) + ? TextHelper::highlight( TextHelper::h($city->name), $phrase) + : TextHelper::h($city->name); + $item = TagHelper::content_tag('div', $name) ; + $comment = TagHelper::content_tag('div', $city->country->name, array('class' => 'informal')) ; + $items[] = TagHelper::content_tag('li', $name . $comment, array('id' => $city->getId())); + } + return TagHelper::content_tag('ul', join('', array_unique($items))); + } + + function city_field($object, $method, $tag_options = array(), $completion_options = array()) + { + $tag_options = array_merge(array( + 'name' => "city", + 'id' => "auto_{$object}_{$method}", + 'onblur' => "if (!$('{$object}_{$method}').value || \$F(this.id) != \$F('{$object}_{$method}_prev')) { $(this.id).value = ''; $('{$object}_{$method}').value = null; $('{$object}_{$method}_prev').value = null; new Effect.Highlight(this.id, { startcolor: '#ff0000'})}", + 'autocomplete' => 'on', + ), $tag_options); + $completion_options = array_merge(array( + 'skip_style' => true, + 'url' => array('action' => 'auto_complete_for_city'), + 'minChars' => 3, + 'frequency' => 0.4, + 'callback' => "function (element, value) { $('{$object}_{$method}').value = null; return value} ", + 'afterUpdateElement' => "function (text, li) { $('{$object}_{$method}').value = li.id; $('{$object}_{$method}_prev').value = text.value; } " + ), $completion_options); + + $hidden = $this->_controller->form_helper->hidden_field($object, $method); + $hidden_prev = $this->_controller->form_helper->hidden_field($object, $method, array('id' => "{$object}_{$method}_prev", 'name' => "{$object}_{$method}_prev")); + $text_field = $this->_controller->form_helper->text_field($object, $method, $tag_options); + $div = TagHelper::content_tag('div', '', array('id' => "auto_{$object}_{$method}_auto_complete", 'class' => 'auto_complete')); + $javascript = $this->auto_complete_field("auto_{$object}_{$method}", $completion_options); + + return $hidden . $hidden_prev . $text_field . $div . $javascript; + } +} + +?> Modified: app/installers/city_installer.php =================================================================== --- app/installers/city_installer.php 2008-03-05 18:39:57 UTC (rev 40) +++ app/installers/city_installer.php 2008-03-05 20:19:44 UTC (rev 41) @@ -6,8 +6,13 @@ $this->execute( "CREATE TABLE `cities` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, + `oid` int(11), `country_id` int(11), + `first_id` int(11), + `second_id` int(11), + `third_id` int(11), `name` char(100) NOT NULL DEFAULT '', + INDEX oid_idx (oid), FOREIGN KEY (country_id) REFERENCES countries(id) ) ENGINE=InnoDB"); Modified: app/installers/country_installer.php =================================================================== --- app/installers/country_installer.php 2008-03-05 18:39:57 UTC (rev 40) +++ app/installers/country_installer.php 2008-03-05 20:19:44 UTC (rev 41) @@ -5,257 +5,12 @@ { $this->execute( "CREATE TABLE `countries` ( - `id` int(11) PRIMARY KEY + `id` int(11) PRIMARY KEY, + `oid` int(11), + `name` char(255), + UNIQUE name_idx (name), + INDEX oid_idx (oid) ) ENGINE=InnoDB"); - - $fields = array(); - foreach (Ak::langs() as $lang) { - $fields[] = $lang . "_name"; - $this->execute("ALTER TABLE countries ADD column ${lang}_name char(255) NOT NULL DEFAULT \"\""); - } - $fields = join(", ", $fields); - - foreach (array(1 => "Åland Islands", - 2 => "Afghanistan", - 3 => "Albania", - 4 => "Algeria", - 5 => "American Samoa", - 6 => "Andorra", - 7 => "Angola", - 8 => "Anguilla", - 9 => "Antigua and Barbuda", - 10 => "Argentina", - 11 => "Armenia", - 12 => "Aruba", - 13 => "Australia", - 14 => "Austria", - 15 => "Azerbaijan", - 16 => "Bahamas", - 17 => "Bahrain", - 18 => "Bangladesh", - 19 => "Barbados", - 20 => "Belarus", - 21 => "Belgium", - 22 => "Belize", - 23 => "Benin", - 24 => "Bermuda", - 25 => "Bhutan", - 26 => "Bolivia", - 27 => "Bosnia and Herzegovina", - 28 => "Botswana", - 29 => "Brazil", - 30 => "British Virgin Islands", - 31 => "Brunei Darussalam", - 32 => "Bulgaria", - 33 => "Burkina Faso", - 34 => "Burundi", - 35 => "Côte d'Ivoire", - 36 => "Cambodia", - 37 => "Cameroon", - 38 => "Canada", - 39 => "Cape Verde", - 40 => "Cayman Islands", - 41 => "Central African Republic", - 42 => "Chad", - 43 => "Chile", - 44 => "China", - 45 => "Colombia", - 46 => "Comoros", - 47 => "Congo, Democratic Republic", - 48 => "Congo", - 49 => "Cook Islands", - 50 => "Costa Rica", - 51 => "Croatia", - 52 => "Cuba", - 53 => "Cyprus", - 54 => "Czech Republic", - 55 => "Denmark", - 56 => "Djibouti", - 57 => "Dominican Republic", - 58 => "Dominica", - 59 => "Ecuador", - 60 => "Egypt", - 61 => "El Salvador", - 62 => "Equatorial Guinea", - 63 => "Eritrea", - 64 => "Estonia", - 65 => "Ethiopia", - 66 => "Faeroe Islands", - 67 => "Falkland Islands (Malvinas)", - 68 => "Fiji", - 69 => "Finland", - 70 => "France", - 71 => "French Guiana", - 72 => "French Polynesia", - 73 => "Gabon", - 74 => "Gambia", - 75 => "Georgia", - 76 => "Germany", - 77 => "Ghana", - 78 => "Gibraltar", - 79 => "Greece", - 80 => "Greenland", - 81 => "Grenada", - 82 => "Guadeloupe", - 83 => "Guam", - 84 => "Guatemala", - 85 => "Guinea-Bissau", - 86 => "Guinea", - 87 => "Guyana", - 88 => "Haiti", - 89 => "Honduras", - 90 => "Hong Kong", - 91 => "Hungary", - 92 => "Iceland", - 93 => "India", - 94 => "Indonesia", - 95 => "Iran (Islamic Republic of)", - 96 => "Iraq", - 97 => "Ireland", - 98 => "Isle of Man", - 99 => "Israel", - 100 => "Italy", - 101 => "Jamaica", - 102 => "Japan", - 103 => "Jordan", - 104 => "Kazakhstan", - 105 => "Kenya", - 106 => "Kiribati", - 107 => "Korea, Republic of", - 108 => "Korea, South", - 109 => "Kuwait", - 110 => "Kyrgyzstan", - 111 => "Lao People's Democratic Republic", - 112 => "Latvia", - 113 => "Lebanon", - 114 => "Lesotho", - 115 => "Liberia", - 116 => "Libyan Arab Jamahiriya", - 117 => "Liechtenstein", - 118 => "Lithuania", - 119 => "Luxembourg", - 120 => "Macao", - 121 => "Macedonia", - 122 => "Madagascar", - 123 => "Malawi", - 124 => "Malaysia", - 125 => "Maldives", - 126 => "Mali", - 127 => "Malta", - 128 => "Marshall Islands", - 129 => "Martinique", - 130 => "Mauritania", - 131 => "Mauritius", - 132 => "Mayotte", - 133 => "Mexico", - 134 => "Micronesia", - 135 => "Monaco", - 136 => "Mongolia", - 137 => "Montserrat", - 138 => "Morocco", - 139 => "Mozambique", - 140 => "Myanmar", - 141 => "Namibia", - 142 => "Nauru", - 143 => "Nepal", - 144 => "Netherlands Antilles", - 145 => "Netherlands", - 146 => "New Caledonia", - 147 => "New Zealand", - 148 => "Nicaragua", - 149 => "Nigeria", - 150 => "Niger", - 151 => "Niue", - 152 => "Norfolk Island", - 153 => "Northern Mariana Islands", - 154 => "Norway", - 155 => "Occupied Palestinian Territory", - 156 => "Oman", - 157 => "Pakistan", - 158 => "Palau", - 159 => "Panama", - 160 => "Papua New Guinea", - 161 => "Paraguay", - 162 => "Peru", - 163 => "Philippines", - 164 => "Pitcairn", - 165 => "Poland", - 166 => "Portugal", - 167 => "Puerto Rico", - 168 => "Qatar", - 169 => "Réunion", - 170 => "Republic of Moldova", - 171 => "Romania", - 172 => "Russian Federation", - 173 => "Rwanda", - 174 => "Saint Helena", - 175 => "Saint Kitts and Nevis", - 176 => "Saint Lucia", - 177 => "Saint Pierre and Miquelon", - 178 => "Saint Vincent and the Grenadines", - 179 => "Samoa", - 180 => "San Marino", - 181 => "Sao Tome and Principe", - 182 => "Saudi Arabia", - 183 => "Senegal", - 184 => "Serbia and Montenegro", - 185 => "Seychelles", - 186 => "Sierra Leone", - 187 => "Singapore", - 188 => "Slovakia", - 189 => "Slovenia", - 190 => "Solomon Islands", - 191 => "Somalia", - 192 => "South Africa", - 193 => "Spain", - 194 => "Sri Lanka", - 195 => "Sudan", - 196 => "Suriname", - 197 => "Svalbard and Jan Mayen Islands", - 198 => "Swaziland", - 199 => "Sweden", - 200 => "Switzerland", - 201 => "Syrian Arab Republic", - 202 => "Tajikistan", - 203 => "Tanzania", - 204 => "Thailand", - 205 => "Timor-Leste", - 206 => "Togo", - 207 => "Tokelau", - 208 => "Tonga", - 209 => "Trinidad and Tobago", - 210 => "Tunisia", - 211 => "Turkey", - 212 => "Turkmenistan", - 213 => "Turks and Caicos Islands", - 214 => "Tuvalu", - 215 => "Uganda", - 216 => "Ukraine", - 217 => "United Arab Emirates", - 218 => "United Kingdom", - 219 => "United States Virgin Islands", - 220 => "United States", - 221 => "Uruguay", - 222 => "Uzbekistan", - 223 => "Vanuatu", - 224 => "Vatican City State (Holy See)", - 225 => "Venezuela", - 226 => "Viet Nam", - 227 => "Wallis and Futuna Islands", - 228 => "Western Sahara", - 229 => "Yemen", - 230 => "Zambia", - 231 => "Zimbabwe") as $id => $country) - { - - $values = array(); - foreach (Ak::langs() as $lang) { - Ak::lang($lang); - $values[] = '"' . Ak::t($country) . '"'; - } - $values = join(", ", $values); - $this->execute("INSERT INTO countries (id, $fields) VALUES ($id, $values)"); - } } function down_1() Added: app/installers/religious_view_installer.php =================================================================== --- app/installers/religious_view_installer.php (rev 0) +++ app/installers/religious_view_installer.php 2008-03-05 20:19:44 UTC (rev 41) @@ -0,0 +1,22 @@ +<?php +class ReligiousViewInstaller extends AkInstaller +{ + function up_1() + { + $this->execute( + "CREATE TABLE `religious_views` ( + `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, + `name` char(100) NOT NULL DEFAULT '' + ) ENGINE=InnoDB"); + + } + + function down_1() + { + /**/ + $this->dropTable('religious_view'); + /**/ + } +} + +?> Modified: app/locales/profile/ru.php =================================================================== --- app/locales/profile/ru.php 2008-03-05 18:39:57 UTC (rev 40) +++ app/locales/profile/ru.php 2008-03-05 20:19:44 UTC (rev 41) @@ -15,14 +15,14 @@ $dictionary['Select Sex:'] = 'Выберите пол:'; $dictionary['Birthday'] = 'Дата рождения'; -$dictionary['Country'] = 'Страна'; +$dictionary['Country of birth'] = 'Страна рождения'; $dictionary['Select Country:'] = 'Выберите страну:'; $dictionary['Hometown'] = 'Родной город'; $dictionary['Political views'] = 'Политические взгляды'; $dictionary['Select Political Views:'] = 'Выберите политические взгляды:'; -$dictionary['Religious views'] = 'Религия'; +$dictionary['Religious views'] = 'Вероисповедание'; $dictionary['Only my friends'] = 'Только для друзей'; $dictionary['Emails'] = 'Адреса Email'; Modified: app/models/city.php =================================================================== --- app/models/city.php 2008-03-05 18:39:57 UTC (rev 40) +++ app/models/city.php 2008-03-05 20:19:44 UTC (rev 41) @@ -2,6 +2,7 @@ class City extends ActiveRecord { + var $belongs_to = array('country'); } ?> Added: app/models/religious_view.php =================================================================== --- app/models/religious_view.php (rev 0) +++ app/models/religious_view.php 2008-03-05 20:19:44 UTC (rev 41) @@ -0,0 +1,7 @@ +<?php + +class ReligiousView extends ActiveRecord +{ +} + +?> Modified: app/views/layouts/application.tpl =================================================================== --- app/views/layouts/application.tpl 2008-03-05 18:39:57 UTC (rev 40) +++ app/views/layouts/application.tpl 2008-03-05 20:19:44 UTC (rev 41) @@ -8,6 +8,7 @@ <link href="/stylesheets/<?= $controller->getControllerName() ?>.css" rel="stylesheet" type="text/css"> <script src="/javascripts/prototype.js" type="text/javascript"></script> <script src="/javascripts/scriptaculous.js" type="text/javascript"></script> +<script src="/javascripts/autocomplete.js" type="text/javascript"></script> </head> <body id="application"> <div id="main"> Modified: app/views/profile/basic.tpl =================================================================== --- app/views/profile/basic.tpl 2008-03-05 18:39:57 UTC (rev 40) +++ app/views/profile/basic.tpl 2008-03-05 20:19:44 UTC (rev 41) @@ -2,6 +2,7 @@ <?= $controller->renderErrors() ?> + <form action="/profile/basic" method="post"> <div class="editform"> <div class="formrow"> @@ -13,26 +14,53 @@ <?= $date_helper->date_select('basic', 'birthdate', array('start_year' => 1940) )?> </div> <div class="formrow"> + <label>_{Hometown}:</label> + <?= $city_helper->city_field('basic', 'city', array('class' => 'shorttextinput')); ?> + </div> + <div id="basic_country_div" class="formrow" style="display:none"> <label>_{Country}:</label> - <?= $form_options_helper->select('basic', 'country_id', $Country->collect($Country->find(), 'name', 'id'), array(), array('prompt' => $controller->t('Select Country:')) )?> + <?= $form_options_helper->select('basic', 'country_id', $Country->collect($Country->find('all', array('order' => 'name')), 'name', 'id'), array(), array('prompt' => $controller->t('Select Country:')) )?> </div> <div class="formrow"> - <label>_{Hometown}:</label> - <?= $javascript_macros_helper->text_field_with_auto_complete('basic', 'hometown', array('autocomplete' => 'on', 'class' => 'shorttextinput'), array('skip_style' => true, 'with' => '"basic%5Bcountry_id%5D=" + $F("basic_country_id") + "&" + value') )?> - </div> - <div class="formrow"> <label>_{Political views}:</label> <?= $form_options_helper->select('basic', 'political_view_id', $PoliticalView->collect($PoliticalView->find(), 'name', 'id'), array(), array('prompt' => $controller->t('Select Political Views:')) )?> </div> <div class="formrow"> <label>_{Religious views}:</label> - <?= $form_helper->text_field('basic', 'religious_views', array('class' => 'shorttextinput') ) ?> + <?= $javascript_macros_helper->text_field_with_auto_complete('basic', 'religious_view', array('autocomplete' => 'on', 'class' => 'shorttextinput'), array('skip_style' => true) )?> </div> <div class="formrow"> <label></label> <input class="submitinput" type="submit" value="_{Save Changes}"> <input class="cancelinput" type="button" value="_{Cancel}"> + <a href="javascript: alert($F('basic_city') + ':' + $F('basic_city_prev'))">asdfsadf</a> </div> </div> </form> +<script type="text/javascript"> + + + function city_changed () { + if (!$F('basic_city')) { + $('basic_country_div').hide(); + } + } + + function city_blurred () { + // check city existence + if ($F('basic_city')) { + // order is important !!! + $('basic_country_id').focus(); + $('basic_country_div').show(); + } + } + + /* + window.onload = function () { + $('basic_city').observe("keyup", city_changed); + $('auto_basic_city').observe("change", city_blurred); + } + */ + +</script> Added: localities_to_sql.pl =================================================================== --- localities_to_sql.pl (rev 0) +++ localities_to_sql.pl 2008-03-05 20:19:44 UTC (rev 41) @@ -0,0 +1,44 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use File::Slurp; + +my $id = 1; +my %countries; +my %other; +foreach( read_file($ARGV[0]) ) { + chomp(); + my @data = split /\t/; + + my $oid = $data[0]; + my $name = $data[1]; + if ($data[4] eq 'country') { + + $countries{$name} = $id; + print "INSERT INTO countries VALUES ($id, $oid, '$name');\n"; + $id++; + } else { + $other{$name} = $oid; + } +} + +$id = 1; +foreach ( read_file($ARGV[0]) ) { + chomp(); + my @data = split /\t/; + if ($data[4] ne 'country' && defined $data[8]) { + my $oid = $data[0]; + my $country_id = defined $data[8] && $countries{$data[8]} ? $countries{$data[8]} : 'NULL'; + my $first_id = defined $data[9] && $other{$data[9]} ? $other{$data[9]} : 'NULL'; + my $second_id = defined $data[10] && $other{$data[10]} ? $other{$data[10]} : 'NULL'; + my $third_id = defined $data[11] && $other{$data[11]} ? $other{$data[11]} : 'NULL'; + + my @names = ($data[1], split(/\s*,\s*/, $data[2]), split(/\s*,\s*/, $data[3])); + foreach my $name (@names) { + $name =~ s/\"/'/g; + print "INSERT INTO cities VALUES ($id, $oid, $country_id, $first_id, $second_id, $third_id, \"$name\");\n"; + $id++; + } + } +} Property changes on: localities_to_sql.pl ___________________________________________________________________ Name: svn:executable + * Modified: public/stylesheets/autocomplete.css =================================================================== --- public/stylesheets/autocomplete.css 2008-03-05 18:39:57 UTC (rev 40) +++ public/stylesheets/autocomplete.css 2008-03-05 20:19:44 UTC (rev 41) @@ -1,3 +1,10 @@ +span.indicator { + display: none; +} +span.indicator img { + vertical-align: middle +} + div.auto_complete { margin-top: -1px; background: #ffffff; @@ -22,6 +29,11 @@ padding: 4px; cursor: pointer; } +div.auto_complete ul li .informal { + color: #bdc7d8; + font-weight: bold; + padding-left: 6px; +} div.auto_complete ul li.selected { background-color: #3b5998; @@ -40,3 +52,4 @@ margin:0; padding:0; } + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |