<?php if (!defined('PmWiki')) exit(); /* Copyright 2006 Ben Wilson This file is marklets.php; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ SDV($MarkletAddTextToEnd,0); SDV($MarkletDateFmt, '[-[%b %e, %Y (%I:%M %p)]-]'); SDV($MarkletDeleteText,'Delete'); SDV($MarkletEnableReturn, 0); SDV($MarkletRedirectDelay, 4); Markup('makemark', 'inline', '/\\(:marklet\\s*(.*?):\\)/e', "Keep(MarkletCreateLinks(\$pagename,'$1'))"); Markup("marklet-delete", "block", "/\(:marklet-delete-(.*?):\)/", "<a class='markletdelete' href='$ScriptUrl?n=$pagename&marklet=$1&action=marklet-delete'>".(isset($MarkletDeleteText)?$MarkletDeleteText:'Delete')."</a>"); $HandleActions['makemark'] = 'HandleAddMark'; $HandleActions['makemarklet'] = 'AddMarklet'; $HandleActions['marklet-delete'] = 'HandleDeleteMarklet'; function HandleDeleteMarklet() { global $pagename; if (isset($_REQUEST['marklet'])) { $marklet = $_REQUEST['marklet']; $marklet = stripmagic($marklet); $page = RetrieveAuthPage($pagename, 'edit', true); if (!$page) Abort('?cannot read $pagename'); $new = $page; $new['text'] = preg_replace("/^(.*?)\(:marklet-delete-$marklet:\).*?\n/m", '', $page['text'], 1); PostPage($pagename, $page, $new); MarkletRedirect($pagename, "Deleted"); } else { Redirect($pagename); } } function AddMarklet($pagename, $argv) { global $Now, $PageRedirectFmt, $HandleActions, $HTMLHeaderFmt; global $MarkletRedirectDelay, $MarkletDateFmt, $MarkletAddText; global $MarkletRedirectMessage; global $HTMLStylesFmt; $title = $_REQUEST['title']; $link = $_REQUEST['url']; $summary = $_REQUEST['summary']; $category = ($_REQUEST['new_category']) ? $_REQUEST['new_category'] : $_REQUEST['category']; $newpage = ($category) ? join('-', array($pagename, $category)) : $pagename; $time = strftime($MarkletDateFmt, $Now); $key = md5($link); SDV($MarkletAddText, "* [[$link|$title]] $summary $time (:marklet-delete-$key:)\n"); $page = RetrieveAuthPage($newpage, 'edit'); if (!$page) Abort("?cannot edit $pagename"); $text = $page['text']; if (preg_match("/$key/", $text)) { $MarkletAddText = preg_replace("/\*/", '* %red% (duplicate)', $MarkletAddText); } if (@$_REQUEST['url']) { $text = (IsEnabled($MarkletAddTextToEnd,0)) ? "$text$MarkletAddText" : "$MarkletAddText$text"; } $page['text'] = $text; $page['text'] .= $vote; WritePage($newpage, $page); $newpage = preg_replace('/\./', '/', $newpage); if ($_REQUEST['return']) $HTMLHeaderFmt['marklet'] = "<meta http-equiv='Refresh' Content='$MarkletRedirectDelay; URL=$link' />"; MarkletRedirect($newpage, "New bookmark: $link."); } function MarkletDuplicateCheck($test, $key) { MarkletDuplicateCheck($test, $key); } # function to create the bookmarklet function MarkletCreateLinks($pagename, $linkpage) { global $MarkletEnableReturn; $return = ($MarkletEnableReturn) ? '&return=1' : ''; if ($linkpage) $pagename = MakePageName($pagename, $linkpage); $first = FmtPageName("<a href=\"javascript:document.location.href='\$PageUrl?action=makemark&url='+encodeURIComponent(document.location.href)+'$return&title='+encodeURIComponent(document.title),'bookmark'\">+=$pagename</a>", $pagename); $first .= FmtPageName("<br /><a href=\"javascript:document.location.href='\$PageUrl?action=makemark&hurry=1$return&url='+encodeURIComponent(document.location.href)+'&title='+encodeURIComponent(document.title),'bookmark'\">+=$pagename (hurrymode)</a>", $pagename); return $first; } # function to handle ?action=addlink (prepends the url to the page and # then passes control to the edit function). function HandleAddMark($pagename) { global $HandleActions, $EnableAddLinkToEnd, $AddLinkText; Lock(2); $link = $_REQUEST['url']; $title = $_REQUEST['title']; if ($_REQUEST['hurry']) { AddMarklet($pagename, ''); } $form = MakeMarkForm($pagename, $link, $title); print $form; } function MakeMarkForm($pagename, $link, $title) { global $ScriptUrl; $pages = ListPages("/^$pagename-/"); $cats = array(); foreach ($pages as $p) { list(, $c) = split('-', $p); $cats[] = "<option>$c</option>"; } sort($cats); array_unshift($cats, "<option selected></option>"); $categories = join("\n", $cats); $form =<<<MAKELINKFORM <form id='' class='odoform' action='$ScriptUrl/$pagename' method='post'> <table border='0' > <tr><td>Title:</td><td><input type='text' size='60' name='title' value='$title' /></td></tr> <tr><td>Link:</td><td><input type='text' size='60' name='url' value='$link' /></td></tr> <tr><td>Create in Category:</td><td><select name='category'>$categories</select></td></tr> <tr><td>Add Category: </td><td><input type='text' size='40' name='new_category' /></td></tr> <tr><td valign='top'>Summary: </td> <td><input type='hidden' name='action' value='makemarklet' /> <textarea cols='60' rows='5' name='summary'> </textarea></td></tr> <tr><td colspan='2'><input type='submit' /></td></tr> </table> </form> MAKELINKFORM; return $form; } function MarkletRedirect($page, $msg) { global $PageRedirectFmt, $HTMLStylesFmt; $HTMLStylesFmt[marklets] = " /* styling of marklet messages */ #markletMessage { padding: 0.5em; margin-bottom: 1em; background: #FFD; border: 3px double red; } "; $_GET['from'] = 1; $PageRedirectFmt = "<div id='markletMessage'>$msg</div>"; HandleBrowse($page); exit(); }