From de8f409e84c4b2c428cba3f2845f2658d3db9b90 Mon Sep 17 00:00:00 2001
From: Pascal Kriete
Date: Wed, 29 Jul 2009 13:46:37 +0000
Subject: Updating the smiley helper to work with more than one field.
Also changing insertion position to be at the cursor and using ids instead of form names.
---
system/helpers/smiley_helper.php | 140 +++++++++++++++++++++++++++++-----
user_guide/changelog.html | 2 +
user_guide/helpers/smiley_helper.html | 43 +++++++----
3 files changed, 148 insertions(+), 37 deletions(-)
diff --git a/system/helpers/smiley_helper.php b/system/helpers/smiley_helper.php
index f9a2cf2b0..f085e53b1 100644
--- a/system/helpers/smiley_helper.php
+++ b/system/helpers/smiley_helper.php
@@ -28,29 +28,91 @@
// ------------------------------------------------------------------------
/**
- * JS Insert Smiley
+ * Smiley Javascript
*
- * Generates the javascrip function needed to insert smileys into a form field
+ * Returns the javascript required for the smiley insertion. Optionally takes
+ * an array of aliases to loosely couple the smiley array to the view.
*
* @access public
- * @param string form name
- * @param string field name
- * @return string
+ * @param mixed alias name or array of alias->field_id pairs
+ * @param string field_id if alias name was passed in
+ * @return array
*/
-if ( ! function_exists('js_insert_smiley'))
+if ( ! function_exists('smiley_js'))
{
- function js_insert_smiley($form_name = '', $form_field = '')
- {
- return <<
- function insert_smiley(smiley)
+ function smiley_js($alias = '', $field_id = '')
{
- document.{$form_name}.{$form_field}.value += " " + smiley;
- }
-
+ static $do_setup = TRUE;
+
+ $r = '';
+
+ if ($alias != '' && ! is_array($alias))
+ {
+ $alias = array($alias => $field_id);
+ }
+
+ if ($do_setup === TRUE)
+ {
+ $do_setup = FALSE;
+
+ $m = array();
+
+ if (is_array($alias))
+ {
+ foreach($alias as $name => $id)
+ {
+ $m[] = '"'.$name.'" : "'.$id.'"';
+ }
+ }
+
+ $m = '{'.implode(',', $m).'}';
+
+ $r .= << $id)
+ {
+ $r .= 'smiley_map["'.$name.'"] = "'.$id.'";'."\n";
+ }
+ }
+ }
+
+ return '';
}
}
+
// ------------------------------------------------------------------------
/**
@@ -65,8 +127,15 @@ EOF;
*/
if ( ! function_exists('get_clickable_smileys'))
{
- function get_clickable_smileys($image_url = '', $smileys = NULL)
+ function get_clickable_smileys($image_url, $alias = '', $smileys = NULL)
{
+ // For backward compatibility with js_insert_smiley
+
+ if (is_array($alias))
+ {
+ $smileys = $alias;
+ }
+
if ( ! is_array($smileys))
{
if (FALSE === ($smileys = _get_smiley_array()))
@@ -76,8 +145,8 @@ if ( ! function_exists('get_clickable_smileys'))
}
// Add a trailing slash to the file path if needed
- $image_url = preg_replace("/(.+?)\/*$/", "\\1/", $image_url);
-
+ $image_url = rtrim($image_url, '/').'/';
+
$used = array();
foreach ($smileys as $key => $val)
{
@@ -89,12 +158,12 @@ if ( ! function_exists('get_clickable_smileys'))
{
continue;
}
-
- $link[] = "
";
-
+
+ $link[] = "
";
+
$used[$smileys[$key][0]] = TRUE;
}
-
+
return $link;
}
}
@@ -170,6 +239,35 @@ if ( ! function_exists('_get_smiley_array'))
}
}
+// ------------------------------------------------------------------------
+
+/**
+ * JS Insert Smiley
+ *
+ * Generates the javascript function needed to insert smileys into a form field
+ *
+ * DEPRECATED as of version 1.7.2, use smiley_js instead
+ *
+ * @access public
+ * @param string form name
+ * @param string field name
+ * @return string
+ */
+if ( ! function_exists('js_insert_smiley'))
+{
+ function js_insert_smiley($form_name = '', $form_field = '')
+ {
+ return <<
+ function insert_smiley(smiley)
+ {
+ document.{$form_name}.{$form_field}.value += " " + smiley;
+ }
+
+EOF;
+ }
+}
+
/* End of file smiley_helper.php */
/* Location: ./system/helpers/smiley_helper.php */
\ No newline at end of file
diff --git a/user_guide/changelog.html b/user_guide/changelog.html
index 1de9effe6..354652fd0 100644
--- a/user_guide/changelog.html
+++ b/user_guide/changelog.html
@@ -85,6 +85,7 @@ SVN Revision:
Modified form_prep() in the Form helper to keep track of prepped fields to avoid multiple prep/mutation from subsequent calls which can occur when using Form Validation
and form helper functions to output form fields.
Modified directory_map() in the Directory helper to allow the inclusion of hidden files, and to return FALSE on failure to read directory.
+ Modified the Smiley helper to work with multiple fields and insert the smiley at the last known cursor position.
General
@@ -110,6 +111,7 @@ SVN Revision:
Fixed a bug that would cause PHP errors in XML-RPC data if the PHP data type did not match the specified XML-RPC type.
Fixed a bug in the XML-RPC class with parsing dateTime.iso8601 data types.
Fixed a case sensitive string replacement in xss_clean()
+ Fixed a bug in form_textarea() where form data was not prepped correctly.
Fixed a bug in form_prep() causing it to not preserve entities in the user's original input when called back into a form element
Fixed a bug in _protect_identifiers() where the swap prefix ($swap_pre) was not being observed.
Fixed a bug where the 400 status header sent with the 'disallowed URI characters' was not compatible with CGI environments.
diff --git a/user_guide/helpers/smiley_helper.html b/user_guide/helpers/smiley_helper.html
index 3c88bcf74..8c85cb3f2 100644
--- a/user_guide/helpers/smiley_helper.html
+++ b/user_guide/helpers/smiley_helper.html
@@ -111,10 +111,10 @@ class Smileys extends Controller {
$this->load->helper('smiley');
$this->load->library('table');
- $image_array = get_clickable_smileys('http://example.com/images/smileys/');
-
- $col_array = $this->table->make_columns($image_array, 8);
-
+ $image_array = get_clickable_smileys('http://example.com/images/smileys/', 'comments');
+
+ $col_array = $this->table->make_columns($image_array, 8);
+
$data['smiley_table'] = $this->table->generate($col_array);
$this->load->view('smiley_view', $data);
@@ -126,19 +126,18 @@ class Smileys extends Controller {
In your application/views/ folder, create a file called smiley_view.php and place this code in it:
-
-When you have created the above controller and view, load it by visiting http://www.your=site.com/index.php/smileys/
+When you have created the above controller and view, load it by visiting http://www.example.com/index.php/smileys/
-Function Reference
+Field Aliases
+
+When making changes to a view it can be inconvenient to have the field id in the controller. To work around this,
+you can give your smiley links a generic name that will be tied to a specific id in your view.
+$image_array = get_smiley_links("http://example.com/images/smileys/", "comment_textarea_alias");
+
+To map the alias to the field id, pass them both into the smiley_js function:
+$image_array = smiley_js("comment_textarea_alias", "comments");
+
+
+Function Reference
get_clickable_smileys()
Returns an array containing your smiley images wrapped in a clickable link. You must supply the URL to your smiley folder
-via the first parameter:
+and a field id or field alias.
-$image_array = get_clickable_smileys("http://example.com/images/smileys/");
+$image_array = get_smiley_links("http://example.com/images/smileys/", "comment");
+Note: Usage of this function without the second parameter, in combination with js_insert_smiley has been deprecated.
-js_insert_smiley()
+smiley_js()
Generates the JavaScript that allows the images to be clicked and inserted into a form field.
-The first parameter must contain the name of your form, the second parameter must contain the name of the
-form field. This function is designed to be placed into the <head> area of your web page.
+If you supplied an alias instead of an id when generating your smiley links, you need to pass the
+alias and corresponding form id into the function.
+This function is designed to be placed into the <head> area of your web page.
-<?php echo js_insert_smiley('blog', 'comments'); ?>
+<?php echo smiley_js(); ?>
+Note: This function replaces js_insert_smiley, which has been deprecated.
parse_smileys()
@@ -178,7 +190,6 @@ form field. This function is designed to be placed into the <head> area of
equivalent. The first parameter must contain your string, the second must contain the URL to your smiley folder:
-
$str = 'Here are some simileys: :-) ;-)';
$str = parse_smileys($str, "http://example.com/images/smileys/");
--
cgit v1.2.3-24-g4f1b