Posted on: 11/26/06 03:43pm
By: jmucchiello
Announcing a new plugin: Autotags 1.0.
Allows the site administrator to create autotags from the admin interface. The plugin features:
- Text substitution autotags.
- PHP based autotags using specially named function: phpautotags_yourtag
- PHP based autotag creation restricted to users with autotags.PHP feature (similar to the staticpages.PHP feature).
- Autotags can be enabled or disabled individually. (Makes it easier to test them.)
- Text based autotags use predefined substitution values to make "dynamic" autotags easier to construct. In a tag like this: [yourtag:id Other text] the text autotag can contain #1 and #2 to be replaced by "id" and "Other text" respectively. Other substitutions in #U as your site url and #0 which contains everything after the colon.
- A userland list of autotags can be attached to the main menu. This list contains all active autotags (including those created by other plugins) with a description of the autotag. The idea is for this to be used as a "help" screen for autotags. Plugins can support this create by creating a plugin_autotag_description_$plugin function to return autotag descriptions. V1.0 of the autotag plugin include description function for the plugins that ship with geeklog.
- Comes with 4 sample autotags, each initially disabled:
- poll: links to a poll on the local website
- topic[*1] : a PHP link to a topic on your website, pulls the link text from the database. Also checks that the user seeing the link has access to topic. Otherwise prints Unknown Topic.
- youtube[*2] : duplicates the youtube plugin submitted about a month or two ago.
- cipher: a PHP letter substitution cipher that shows how rediculous autotags can get. The sample implements rot13. But any letter substitution cipher can be done.
Re: Autotag plugin
Posted on: 11/26/06 08:34pm
By: jmucchiello
Can't edit the post above. Here's a to the download.
Re: Autotag plugin
Posted on: 12/05/06 01:51pm
By: jmucchiello
Hi, just wondering if anyone's actually using this. Is anything obvious is missing from it? I'm curious as to what kinds of autotags people have come up with.
Re: Autotag plugin
Posted on: 12/26/06 07:23pm
By: Anonymous (kazuhiro)
Thank you to provide this useful plugin. I use it to create tags for content (not a link) of $_CONF['site_url'] and link to user's profiles.
BTW, I found a bug that plugin can't be enabled to use a function for tags. Because, in function plugin_getListField_autotags, $_AUTO_CONF is not declared as global variable.
Re: Re: Autotag plugin
Posted on: 12/26/06 09:27pm
By: jmucchiello
Quote by: kazuhiroBTW, I found a bug that plugin can't be enabled to use a function for tags. Because, in function plugin_getListField_autotags, $_AUTO_CONF is not declared as global variable.
Dang, the zip has the wrong version of the function.inc file. I'll post a true fix in a couple days but yeah just add $_AUTO_CONF to the list of globals. Glad you like it.
Re: Autotag plugin
Posted on: 03/06/07 12:01pm
By: samstone
The plugin doesn't seem to work properly with GL 1.4.1
1) it adds a back slash \ before every double quote or single quote. This can be by passed by use the html code "
2) it addess unwanted url infront of the intended url. Can't find where it comes from.
I just want to create send email like to user to user using "email" as a tag and couldn't acommplish the job.
Sam
Re: Autotag plugin
Posted on: 03/06/07 09:17pm
By: jmucchiello
Quote by: samstone1) it adds a back slash before every double quote or single quote. This can be by passed by use the html code "
Yeah, there's a missing stripslashes around line 281 of functions.inc.
Text Formatted Code
$subject = stripslashes($record['replacement']);
Re: Autotag plugin
Posted on: 03/06/07 10:05pm
By: samstone
Thist still add the slash.
The second problem is not yet resolve, which is the main reason it doesn't work. the tag came out to be something like this:
http://www.domain.com%20"http://www.domain.com/user.php...etc."
Sam
Re: Autotag plugin
Posted on: 03/07/07 01:41am
By: jmucchiello
You will have to post your function or replacement text if you want me to help solve the problem. Use the [ code ] tags to post it.
Re: Autotag plugin
Posted on: 03/07/07 12:26pm
By: samstone
I don't need help at this time. My purpose of posting is just to let you know that the plugin doesn't work with GL 1.4.1, at least with url rewrite on. What I have posted so far should give you enough hints to fix the bugs. The preinstalled tags, like YouTube, work.
Thanks,
Sam
Re: Autotag plugin
Posted on: 03/07/07 04:31pm
By: jmucchiello
Quote by: samstoneI don't need help at this time.
But I do. I need to know what exactly you are doing that causes my plugin to fail.
My purpose of posting is just to let you know that the plugin doesn't work with GL 1.4.1, at least with url rewrite on.
Why? What happens? Post a full example.
What I have posted so far should give you enough hints to fix the bugs.
Thank you for your faith in my mind reading abilities but frankly I must admit they are not that strong. I can't fix anything based on what you've said so far. I'm asking you for more details.
Here's what I know about the second problem:
2) it addess unwanted url infront of the intended url. Can't find where it comes from.
There are a few words missing there. I understand English may or may not be your first language but I do not understand a word of that.
The second problem is not yet resolve, which is the main reason it doesn't work. the tag came out to be something like this:
http://www.domain.com%20"http://www.domain.com/user.php...etc."
Well, if you enter "$U%20$U/user.php...etc." into the replacement text, you will get that exact result. Since I don't think that's what you entered, I need to know what you did enter in order to get the unexpected result.
Thanks for your help.
Re: Autotag plugin
Posted on: 03/08/07 02:14pm
By: samstone
Sorry jmucchiello,
I just don't have time to post the details here. As you see, I didn't even have time to proofread my post.
First, I just needed a simple [email:#] tag and I got it accomplished through hacking lib-plugin.php, with Mark Evens' help.
Second, after trying out your plugin, I found it to be too premature and quite tedious to decribe the bugs in detail.
Third, until your last post, I didn't even know if you are serious about your plugin enough to test it out yourself on a GL1.4.1, as you said you didn't. Some bugs are too obvious that all you need is to drop your plugin in GL1.4.1 by yourself and create a few tags and you will see what I mean. Otherwise, we have to be back and fort forever. Plus, you are not able see the picture from the clues in my posts.
It's not all your fault. I just don't have time to play with it at this time. In any case, you have a neat plugin that has a lot of potential. I hope someone else will have you test it out.
Sam
Re: Autotag plugin
Posted on: 07/07/07 04:37pm
By: kahall
I have tried 3 different times to install the autotags plugin and I have installed a few plugins before, but I am not following the INSTALL doc with this one.
So one at a time if you will. I am stuck at step 5 for now.
What exactly do I do with the config.php file that is in the autotags directory?
Do I just insert the code from it into the public_html/config.php?
Re: Autotag plugin
Posted on: 07/08/07 01:31am
By: jmucchiello
You leave it in the autotags directory just like every other plugins. Every plugin has its own config.php. They are independent of the global config.php.
I'll be releasing an update to the autotags plugin in a few days/weeks when I get the time.
Re: Autotag plugin
Posted on: 07/09/07 01:25am
By: jmucchiello
Okay, I finally submitted the 1.01 revision of Autotags. It should be available in a little while.
Fixes the known edit bug.
Adds a new builtin autotag: lang, which grants access to the global LANG variables in your system. Not sure if that's useful but it is amusing inside templates. Not really recommended for general use though as autotags are slower than the template system. It's more of a proof of concept tag.
Re: Autotag plugin
Posted on: 07/10/07 10:53pm
By: Laugh
I just downloaded the new plugin, thanks for the work.
Two small things:
I have a simple autotag I created that I use in plain text stories for linking to sites.
Text Formatted Code
<a href="http://#1" target="_blank">#2</a>
For the first tag, as long as the URL does not have www. at the begining it will work, if it does the autotag is returned all screwed. Not sure why.
The second thing, I notice was that the Enabled checkbox in the Admin interface allows you to enable it but you can't disable it from here.
Re: Autotag plugin
Posted on: 07/10/07 11:39pm
By: jmucchiello
That's an interesting bug. The first thing the story code does when you post a new story (or edit an existing story) is pass the title, intro and content through COM_makeClickableLink(). That function sees www. and assumes you want to turn that into <a href="www. etc.
Later when it calls PLG_replaceTags() to display the content, the autotag receives <a href="www.example.com"></a> in #1 instead of www.example.com. Should I call COM_undoClickableLinks() inside my autotag function? I don't think that will always be correct either.
All I can say is the autotag feature is supposed to make links not parse links. <shrug>
Re: Autotag plugin
Posted on: 11/15/07 06:43pm
By: ronack
I'm going to try and explane samstone a little better. I just installed Autotags 1.0.1 and am trying to make a tag for Wikipedia like this. I haven't done any editing of the Plugin.
Tag = wikipedia
Description = Wikipedia entries
Replace with
Text Formatted Code
<a href="http://en.wikipedia.org/wiki/#1">#2</a>
Then I put the tag in a story like so [wikipedia:interestingstuff Some Interesting Page]
The link looks good and comes up
Some Interesting Page
However the URL looks like this
Text Formatted Code
http://www.nc-emt.com/"http://en.wikipedia.org/wiki/iraq/"
As you can see it created the proper link but threw in the extra slashes which I think your code change from above should fix. However it also thows in extra URL info for my site which shouldn't be there.
See it in action
http://www.nc-emt.com/article.php?story=20071115180224368[*3]
Am I not using it properly or is there a problem?
Re: Autotag plugin
Posted on: 11/16/07 05:31pm
By: jmucchiello
I've seen this before but I forget the fix. I'll look into it.
Re: Autotag plugin
Posted on: 11/16/07 10:59pm
By: ronack
Cool, thanks!
If you need me to test it just let me know.
Ron
Re: Autotag plugin
Posted on: 11/17/07 04:44am
By: jmucchiello
Actually, I need you to look at your database because when I put
Text Formatted Code
<a href="http://en.wikipedia.org/wiki/#1">#2</a>
into the replacement text of an autotag, it behaves as one would expect. So the first question is, is that what yours looks like or is yours somehow different?
Re: Autotag plugin
Posted on: 11/17/07 09:18am
By: ronack
Here is what I type in
Text Formatted Code
<a href="http://en.wikipedia.org/wiki/#1">#2</a>
I save it then it looks like this
Text Formatted Code
<a href=\"http://en.wikipedia.org/wiki/#1\">#2</a>
I'm pretty sure the extra slashes are because of Magic Quotes which it didn't seem to matter where I put this
Text Formatted Code
$subject = stripslashes($record['replacement']);
I can't get rid of them. I think maybe my line numbers aren't matching up. So if you give me the line number also tell me what should be above or below.
Re: Autotag plugin
Posted on: 11/17/07 09:23am
By: ronack
I tried to use actual screen shots but it kept telling me my post was spam.
Re: Autotag plugin
Posted on: 11/17/07 01:28pm
By: jmucchiello
Quote by: ronack
Text Formatted Code
<a href=\"http://en.wikipedia.org/wiki/#1\">#2</a>
That is the source of the weirdness. If you look at the page source the backslash and quote are ascii-fied as &5c;&22;
Do you have magic quotes on in your php.ini?
Re: Autotag plugin
Posted on: 11/17/07 01:34pm
By: ronack
Yes they are on.
At least the source of half of the weirdness.
Re: Autotag plugin
Posted on: 11/17/07 01:50pm
By: jmucchiello
Yeah, I just turned them on and could recreate the problem. The autotags admin page isn't cleaning it's input very well. Hey, it was my first plugin....
Find the call to saveautotags toward the end of /public_html/admin/plugins/autotags/index.php and replace the call with:
Text Formatted Code
$display = saveautotags($tag,
COM_applyFilter($_POST['old_tag']),
COM_applyFilter($_POST['description']),
COM_applyFilter($_POST['is_enabled']),
COM_applyFilter($_POST['is_function']),
COM_stripslashes($_POST['replacement']));
I'll package and release a real update shortly.
Re: Autotag plugin
Posted on: 11/17/07 02:05pm
By: ronack
Yep that does it
Something interesting happened, it fixed both issues.
Also here's another interesting feature, I use Snap Shots on that site. Check out the link now.
http://www.nc-emt.com/article.php?story=20071115180224368[*3]
I'll leave the link there for awhile so folks can look at it but since it was a test area it will be removed in a few weeks.
Thank
I really like your plug in, Great Job
Ron
Re: Autotag plugin
Posted on: 11/17/07 02:07pm
By: ronack
I just got to thinking, I wonder how hard it would be to make it just a tag vs a link..... Hmmm!
Re: Autotag plugin
Posted on: 01/23/08 05:52am
By: Benta
I like this plugin, but I also had the problem with the extra slash. The fix for it, well, fixed it.
Another issue I have is that the base url for a site is not the site name but really http:sitename.com/somesubdirectory.
That last part, some subdirectory isn't coming out with #U...only http:sitename.com.
Otherwise the idea is splendid!
Re: Autotag plugin
Posted on: 01/23/08 06:57am
By: Benta
And, oh yeah, since you asked what people do with it:
I am too lazy to write real plugins because my mods are things only I need. My mods are simply static pages and functions that look into tables with data having zilch to do with blogging (it is an intranet site used keep track of development).
Since autotags are resolved in static pages, I wanted to use autotags to make it unnecessary to ever write PHP myself in the pages.... 8)
Re: Autotag plugin
Posted on: 01/23/08 07:22am
By: Benta
Quote by: Benta
That last part, some subdirectory isn't coming out with #U...only http:sitename.com.
I was wrong about that. It works. The problem was another one:
I looked at the code, and you are sometimes (in the topic function) using the curly bracket replacing (the one for the themes). That doesn't work in static pages....
Re: Autotag plugin
Posted on: 01/23/08 01:31pm
By: jmucchiello
Quote by: Benta
I looked at the code, and you are sometimes (in the topic function) using the curly bracket replacing (the one for the themes). That doesn't work in static pages....
That's just lazy of me. It should be
Text Formatted Code
return "<a href=\"{$_CONF['site_url']}/index.php?topic=".urlencode($p1)."\">".htmlspecialchars($topic)."</a>";
The global $_CONF is even there for it. I add that to my list of bug fixes.
Re: Autotag plugin
Posted on: 01/23/08 01:48pm
By: ronack
Where does this go?
I"m guessing at line 339 of functions.inc is that correct?
Re: Autotag plugin
Posted on: 01/23/08 02:03pm
By: Benta
Quote by: ronackWhere does this go?
I"m guessing at line 339 of functions.inc is that correct?
I think it is more like 354 or something. In the phpautotags_topic function anyway.
But I think that one is there more as an example on how to make php functions for autotags, which I think is very clever. A topic autotag, on the other hand, should simply have
Text Formatted Code
<a "href=#U/index.php?topic=#1">#2</a>
in the replacement field instead, it is just a link...
Re: Autotag plugin
Posted on: 01/23/08 02:22pm
By: ronack
We may be working off of different versions.
I thinking here at the bottom where it says return.
Text Formatted Code
function phpautotags_topic($p1, $p2, $fulltag)
{
global $_TABLES, $_CONF;
$topic = DB_getItem($_TABLES['topics'], 'topic', "tid = '$p1'" . COM_getTopicSQL('AND'));
// Comment out the line above and uncomment the line below if you
// don't care whether or not users can see the names of topic they
// cannot access.
// $topic = DB_getItem($_TABLES['topics'], 'topic', "tid = '$p1'");
if (empty($topic))
return "<B>Unknown Topic</B>";
$topic = stripslashes($topic);
return "<a href=\"{site_url}/index.php?topic=$p1\">$topic</a>";
}
Re: Autotag plugin
Posted on: 01/23/08 06:22pm
By: jmucchiello
Yes, ronack, that last line of that function should be the line in my prior message.
Benta, the reason to have a topic function (aside from as an example) is to have it obey your permissions settings. Read the comment.
Re: Autotag plugin
Posted on: 06/11/08 10:59am
By: beewee
Hmm, bad luck for me, the plugin doesn't work in GL 1.5 TC2, I can edit the excisting autotags, but there's no link to make a new one....
A pity, since this is one of the best plugins ever!
Re: Autotag plugin
Posted on: 06/11/08 12:56pm
By: jmucchiello
I haven't tried it on 1.5 yet. I'll look into it soon.
Re: Autotag plugin
Posted on: 06/11/08 02:20pm
By: beewee
Quote by: jmucchielloI haven't tried it on 1.5 yet. I'll look into it soon.
Well, many thanks in advance
. I'm no developer, but I saw a comment about a changed plugin API in GL 1.5RC2 somewhere.
Re: Autotag plugin
Posted on: 06/11/08 07:51pm
By: mst3kroqs
Quote by: beeweeQuote by: jmucchielloI haven't tried it on 1.5 yet. I'll look into it soon.
Well, many thanks in advance
. I'm no developer, but I saw a comment about a changed plugin API in GL 1.5RC2 somewhere.
I believe it is in the area of rendering admin menus ... I think Joe may have actually written a 'compatibility wrapper' for that.
BTW - autotags did not work for me on my local 1.5.0rc2 testsite.
It seemed to install just fine, but the 'built-in' cipher/topic/lang tags show as Enabled=No, and also the poll/youtube autotags don't expand. Disable autolinks is 'False' in Configuration.
Re: Autotag plugin
Posted on: 06/12/08 01:02am
By: jmucchiello
Problem is I'm halfway through adding a couple new features to autotags so I can't just make a quick release. And I've tried not to work on other stuff while the calendar is hanging over my head.
Re: Autotag plugin
Posted on: 06/12/08 02:50pm
By: mst3kroqs
Quote by: jmucchielloProblem is I'm halfway through adding a couple new features to autotags so I can't just make a quick release. And I've tried not to work on other stuff while the calendar is hanging over my head.
Understood - wasn't prodding you - only trying to confirm to beewee that it doesn't work on 1.5.0 as-is. I figured you knew it didn't work ... :^) Thanks!
Re: Autotag plugin
Posted on: 08/27/08 07:06am
By: beewee
The Autotag plugin still allows you to edit an existing autotag.
In the meantime, I found a simple workaround to add a new autotag, just go to URL/admin/plugins/autotags/index.php?mode=edit, fill in the form, save, ready.
EDIT: still a small problem, it adds some slashes, despite the hacks on page#2 of this thread.
EDIT #2: added the hacks again, uploaded and installed the plugin again, and it works fine now, if you use my 'workaround' to add new autotags. I'm happy for the moment...
Re: Autotag plugin
Posted on: 09/23/08 03:16pm
By: Laugh
Has anyone fixed the autotag plugin yet? If not I'll do a maintenance release and upload it (if it is ok with Joe) since I need a fixed version of it for the sites I am upgrading to 1.5.1
Thanks
Tom
Re: Autotag plugin
Posted on: 09/23/08 05:10pm
By: jmucchiello
Quote by: LaughHas anyone fixed the autotag plugin yet? If not I'll do a maintenance release and upload it (if it is ok with Joe) since I need a fixed version of it for the sites I am upgrading to 1.5.1
Go ahead. As I've said before, I was in the middle of a major rewrite when GL1.5 came out and I haven't had time to fool with Autotags since. The fix should just be the calls to ADMIN_list/ADMIN_createMenu, right?
Re: Autotag plugin
Posted on: 09/24/08 10:44am
By: Laugh
Quote by: jmucchielloQuote by: LaughHas anyone fixed the autotag plugin yet? If not I'll do a maintenance release and upload it (if it is ok with Joe) since I need a fixed version of it for the sites I am upgrading to 1.5.1
Go ahead. As I've said before, I was in the middle of a major rewrite when GL1.5 came out and I haven't had time to fool with Autotags since. The fix should just be the calls to ADMIN_list/ADMIN_createMenu, right?
Yup, I fixed it by adding the createMenu and modifying admin_list functions. I also put a few other fixes in the build. If no one has anything else I'll upload here.
v1.02 2008-09-24
- Bugfix: phpautotags_topic() staticpage fix
- Bugfix: Clean input better when saving autotag
- Bugfix: Admin menus to work in Geeklog 1.5.
Re: Autotag plugin
Posted on: 09/24/08 12:33pm
By: beewee
You're my hero :banana:
Re: Autotag plugin
Posted on: 09/24/08 04:34pm
By: jmucchiello
Thanks.
I hope to have version 2 out by the end of the year. It will have a feature where you can disable other plugins' autotags. I'm sure someone will find that useful.
Quote by: Laugh
- Bugfix: Clean input better when saving autotag
Yeah, some of that code was embarrassing.
Re: Autotag plugin
Posted on: 09/26/08 07:53am
By: beewee
Quote by: Laugh
Yup, I fixed it by adding the createMenu and modifying admin_list functions. I also put a few other fixes in the build. If no one has anything else I'll upload here.
v1.02 2008-09-24
- Bugfix: phpautotags_topic() staticpage fix
- Bugfix: Clean input better when saving autotag
- Bugfix: Admin menus to work in Geeklog 1.5.
When will you be able to upload the new file? I'd like to point somebody to the download-url...
Re: Autotag plugin
Posted on: 09/26/08 09:48am
By: Laugh
I wanted to do a bit more testing but everything should work fine for Geeklog 1.5.0. Here is the link .
Re: Autotag plugin
Posted on: 03/10/09 04:51am
By: lingfish
A few questions:
- Is there meant to be items in the new 1.5 Configuration section, and did I bung up the upgrade to 1.02?
- If so, how can I fix that without losing my custom tags?
- Where is the smart way to add PHP functions? Obviously not to plugins/autotags/functions.inc -- I'm guessing lib-custom.php?
Re: Autotag plugin
Posted on: 03/10/09 07:33am
By: suprsidr
1.0.2 does not utilize 1.5.x's admin configuration interface. All config options are in plugins/autotaga/config.php
Adding php functions:
- Edit group autotags admin and add the autotags.PHP right.
- Add your functions to plugins/autotags/functions.inc
- The functions must have the phpautotags_ prefix.
Check my examples
here.
-s
Re: Autotag plugin
Posted on: 03/10/09 05:50pm
By: lingfish
Quote by: suprsidr1.0.2 does not utilize 1.5.x's admin configuration interface. All config options are in plugins/autotaga/config.php
Right, thanks.
Quote by: suprsidrAdding php functions:
- Add your functions to plugins/autotags/functions.inc
-s
Hrm, well then perhaps the author could update the INSTALL instructions -- namely to mention how to upgrade, and just as importantly, to mention that you shouldn't just overwrite your functions.inc as you'll lose customisations
Re: Autotag plugin
Posted on: 03/10/09 06:42pm
By: suprsidr
You could certainly put the functions in lib-custom.php, but I like to keep my plugin related funtions with the plugin
-s
Re: Autotag plugin
Posted on: 03/10/09 08:27pm
By: lingfish
For sure -- I guess my point still stands re the documentation.
Re: Autotag plugin
Posted on: 03/24/09 11:56am
By: suprsidr
Did geeklog 1.5.2 fubar the autotags plugin?
My friend has 2 sites, one with gl 1.5.1 and the autotags plugin works as expected.
His second site with gl 1.5.2 simply returns the tag - no replacement.
[rant]
Unfortunately he is on crappy godaddy so his errorlogs show absolutely nothing.
When was the last time a complete cms with third party plugins did not have a single entry in the apache error_log?
Very frustrating!!!
[/rant]
So what change in gl 1.5.2 might have fubarred the plugin and is anyone else having the same trouble?
-s
Re: Autotag plugin
Posted on: 03/24/09 02:06pm
By: Laugh
Hmm, I am not sure. I am still on 1.5.1. Anyone else having problems.
Tom
Re: Autotag plugin
Posted on: 03/24/09 02:13pm
By: Dirk
Quote by: suprsidrSo what change in gl 1.5.2 might have fubarred the plugin
The plugin API functions related to autotags didn't change. The only change in lib-plugins.php was in PLG_afterSaveSwitch. No idea what else the plugin may rely on.
bye, Dirk
Re: Autotag plugin
Posted on: 03/24/09 06:22pm
By: ::Ben
Hello,
I can confirm, the Autotag plugin is working with geeklog 1.5.2
Did you check ? Configuration >> Miscellaneous >> Miscellaneous >> Disable autolinks?
::Ben
Re: Autotag plugin
Posted on: 03/24/09 07:43pm
By: suprsidr
Ok, tracked down the problem still not sure why but..
the function name and matching tag must be all lowecase in 1.5.2, but not in 1.5.1
my
example showBlock[*4] works as is on 1.5.1, but I must change to all lowercase on 1.5.2
Going to be hard not to camelCase my functions
-s
Re: Autotag plugin
Posted on: 09/18/10 06:57am
By: jekwumoore
I need a download of the autoplugin thats has its bugs fixed
Re: Autotag plugin
Posted on: 09/18/10 07:43am
By: ::Ben
is working with geeklog 1.7.0
::Ben
Re: Autotag plugin
Posted on: 09/18/10 08:17am
By: jekwumoore
Thanks, but how do I install it, there isn't any documentation on how to install this plugin
Re: Autotag plugin
Posted on: 09/18/10 10:48am
By: Laugh