[Isocial-svn] SF.net SVN: isocial: [53] public
Status: Pre-Alpha
Brought to you by:
aguidrevitch
From: <agu...@us...> - 2008-03-09 16:40:04
|
Revision: 53 http://isocial.svn.sourceforge.net/isocial/?rev=53&view=rev Author: aguidrevitch Date: 2008-03-09 09:40:08 -0700 (Sun, 09 Mar 2008) Log Message: ----------- various city/common autocompletion improvements Modified Paths: -------------- app/application_controller.php app/helpers/city_helper.php app/views/layouts/application.tpl app/views/profile/basic.tpl app/views/shared/loggedin/pageheader.tpl public/javascripts/autocomplete.js public/stylesheets/autocomplete.css Added Paths: ----------- app/helpers/auto_complete_helper.php public/images/spinner-faded.gif public/images/spinner.gif Modified: app/application_controller.php =================================================================== --- app/application_controller.php 2008-03-09 14:40:12 UTC (rev 52) +++ app/application_controller.php 2008-03-09 16:40:08 UTC (rev 53) @@ -20,7 +20,7 @@ var $_errors = array(); var $models = array('User'); - var $app_helpers = array('City'); + var $app_helpers = array('AutoComplete', 'City'); var $current_user; function beforeAction ( $method = '' ) { Added: app/helpers/auto_complete_helper.php =================================================================== --- app/helpers/auto_complete_helper.php (rev 0) +++ app/helpers/auto_complete_helper.php 2008-03-09 16:40:08 UTC (rev 53) @@ -0,0 +1,57 @@ +<?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 AutoCompleteHelper extends JavascriptMacrosHelper { + + function auto_complete_field($field_id, $options = array()) + { + $function = "var {$field_id}_auto_completer = new Ajax.IAutocompleter("; + $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($entries, $phrase = null) + { + if (empty($entres)) { + return ''; + } + foreach ($entries as $entry) { + $name = !empty($phrase) + ? TextHelper::highlight( TextHelper::h($entry->name), $phrase) + : TextHelper::h($entry->name); + $item = TagHelper::content_tag('div', $name); + $items[] = TagHelper::content_tag('li', $item); + } + return TagHelper::content_tag('ul', join('', array_unique($items))); + } + + function text_field_with_auto_complete($object, $method, $tag_options = array(), $completion_options = array()) + { + $completion_options['indicator'] = "'{$object}_{$method}'"; + return parent::text_field_with_auto_complete($object, $method, $tag_options, $completion_options); + } +} + +?> \ No newline at end of file Modified: app/helpers/city_helper.php =================================================================== --- app/helpers/city_helper.php 2008-03-09 14:40:12 UTC (rev 52) +++ app/helpers/city_helper.php 2008-03-09 16:40:08 UTC (rev 53) @@ -1,38 +1,11 @@ <?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 +class CityHelper extends AutoCompleteHelper { - 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)) { @@ -61,7 +34,8 @@ 'skip_style' => true, 'url' => array('action' => 'auto_complete_for_city'), 'frequency' => 0.4, - 'afterUpdateElement' => "function (text, li) { $('{$object}_{$method}').value = li.id; $('{$object}_{$method}_prev').value = text.value; }" + 'indicator' => "'auto_{$object}_{$method}'", + '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); @@ -72,6 +46,7 @@ return $hidden . $hidden_prev . $text_field . $div . $javascript; } + } ?> Modified: app/views/layouts/application.tpl =================================================================== --- app/views/layouts/application.tpl 2008-03-09 14:40:12 UTC (rev 52) +++ app/views/layouts/application.tpl 2008-03-09 16:40:08 UTC (rev 53) @@ -7,8 +7,22 @@ <link href="/stylesheets/Application.css" rel="stylesheet" type="text/css"> <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/scriptaculous.js?load=effects,controls,autocomplete" type="text/javascript"></script> <script src="/javascripts/autocomplete.js" type="text/javascript"></script> +<script type="text/javascript"> + function push_onload_handler (func) { + if (!window._onload) window._onload = []; + window._onload.push(func); + } + + window.onload = function (event) { + if (window._onload) { + for (var i = 0; i < window._onload.length; i++) { + window._onload[i](event); + } + } + } +</script> </head> <body id="application"> <div id="main"> Modified: app/views/profile/basic.tpl =================================================================== --- app/views/profile/basic.tpl 2008-03-09 14:40:12 UTC (rev 52) +++ app/views/profile/basic.tpl 2008-03-09 16:40:08 UTC (rev 53) @@ -15,7 +15,7 @@ </div> <div class="formrow"> <label>_{Hometown}:</label> - <?= $city_helper->city_field('basic', 'city', array('class' => 'shorttextinput')); ?> + <?= $city_helper->city_field('basic', 'city', array('class' => 'autocomplete')); ?> </div> <div id="basic_country_div" class="formrow" style="display:none"> <label>_{Country}:</label> @@ -27,7 +27,7 @@ </div> <div class="formrow"> <label>_{Religious views}:</label> - <?= $javascript_macros_helper->text_field_with_auto_complete('basic', 'religious_view', array('autocomplete' => 'on', 'class' => 'shorttextinput'), array('skip_style' => true) )?> + <?= $auto_complete_helper->text_field_with_auto_complete('basic', 'religious_view', array('autocomplete' => 'on', 'class' => 'autocomplete'), array('skip_style' => true) )?> </div> <div class="formrow"> <label></label> @@ -37,30 +37,3 @@ </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> Modified: app/views/shared/loggedin/pageheader.tpl =================================================================== --- app/views/shared/loggedin/pageheader.tpl 2008-03-09 14:40:12 UTC (rev 52) +++ app/views/shared/loggedin/pageheader.tpl 2008-03-09 16:40:08 UTC (rev 53) @@ -8,9 +8,11 @@ </ul> <script> -window.onload = function () { - new Ajax.PeriodicalUpdater('messages_count', '/message/inbox_count', { - method: 'get', frequency: 3, decay: 0 - }); -} + push_onload_handler( + function (event) { + new Ajax.PeriodicalUpdater('messages_count', '/message/inbox_count', { + method: 'get', frequency: 3, decay: 0 + }); + } + ); </script> Added: public/images/spinner-faded.gif =================================================================== (Binary files differ) Property changes on: public/images/spinner-faded.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: public/images/spinner.gif =================================================================== (Binary files differ) Property changes on: public/images/spinner.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: public/javascripts/autocomplete.js =================================================================== --- public/javascripts/autocomplete.js 2008-03-09 14:40:12 UTC (rev 52) +++ public/javascripts/autocomplete.js 2008-03-09 16:40:08 UTC (rev 53) @@ -1,3 +1,13 @@ +Ajax.IAutocompleter = Class.create(Ajax.Autocompleter, { + startIndicator: function() { + if(this.options.indicator) Element.addClassName(this.options.indicator, 'loading'); + }, + + stopIndicator: function() { + if(this.options.indicator) Element.removeClassName(this.options.indicator, 'loading'); + }, +}); + function city_updated (input, prev, hidden) { if ($F(input)) { if ($F(input) != $F(prev)) { @@ -3,9 +13,10 @@ $(input).value = ''; $(hidden).value = ''; - $(prev).value = ''; - new Effect.Highlight(input, { startcolor: '#ff0000'}); + $(prev).value = ''; + new Effect.Highlight(input, { keepBackgroundImage: true, startcolor: '#ff0000', afterFinish: function (obj) { obj.element.setStyle('') } }); } } else { $(hidden).value = ''; } } + Modified: public/stylesheets/autocomplete.css =================================================================== --- public/stylesheets/autocomplete.css 2008-03-09 14:40:12 UTC (rev 52) +++ public/stylesheets/autocomplete.css 2008-03-09 16:40:08 UTC (rev 53) @@ -3,6 +3,15 @@ margin-left: 4px; } +input.autocomplete { + padding-right: 18px; + background: url('/images/spinner-faded.gif') no-repeat right; +} + +input.autocomplete.loading { + background-image: url('/images/spinner.gif'); +} + span.indicator img { vertical-align: middle; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |