From: <jon...@us...> - 2009-10-12 19:22:26
|
Revision: 22274 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=22274&view=rev Author: jonnybradley Date: 2009-10-12 19:22:10 +0000 (Mon, 12 Oct 2009) Log Message: ----------- [FIX] Plugin form fills values from textarea selection (again?) Also now replaces that text when inserted. Modified Paths: -------------- trunk/lib/jquery_tiki/tiki-jquery.js trunk/lib/tiki-js.js Modified: trunk/lib/jquery_tiki/tiki-jquery.js =================================================================== --- trunk/lib/jquery_tiki/tiki-jquery.js 2009-10-12 16:59:27 UTC (rev 22273) +++ trunk/lib/jquery_tiki/tiki-jquery.js 2009-10-12 19:22:10 UTC (rev 22274) @@ -348,20 +348,43 @@ if (!pageName) { pageName = ''; } - if (!pluginArgs) { - pluginArgs = {}; + var textarea = getElementById(area_name); // use weird version of getElementById in tiki-js.js (also gets by name) + var replaceText = ""; + + if (!pluginArgs && !bodyContent) { + pluginArgs = {}; + bodyContent = ""; + + var sel = getSelection( textarea ); + sel = sel.replace(/^\s\s*/, "").replace(/\s\s*$/g, ""); // trim + + if (sel.substring(0, 1) == "{") { // whole plugin selected + var l = type.length; + if (sel.substring(1, l+1).toUpperCase() == type.toUpperCase() ) { // same plugin + var rx = new RegExp( "{" + type + "[\\(]?([\\s\\S^\\)]*?)[\\)]?}([\\s\\S]*){" + type + "}", "mi" ); // using \s\S matches all chars including lineends + var m = sel.match(rx); + if (m) { + var paramStr = m[1]; + bodyContent = m[2]; + + var pm = paramStr.match( /([^=]*)=\"([^\"]*)\"\s?/gi ); + if (pm) { + for (i in pm) { + var ar = pm[i].split("="); + if (ar.length) { // add cleaned vals to params object + pluginArgs[ar[0].replace(/^[,\s\"\(\)]*/g, "")] = ar[1].replace(/^[,\s\"\(\)]*/g, "").replace(/[,\s\"\(\)]*$/g, ""); + } + } + } + } + replaceText = sel; + } else { + if (!confirm("You appear to have selected text for a different plugin, do you wish to continue?")) { + return false; + } + } + } } - if (!bodyContent) { - if (document.getSelection) { - bodyContent = document.getSelection(); - } else if (window.getSelection) { - bodyContent = window.getSelection(); - } else if (document.selection) { - bodyContent = document.selection.createRange().text; - } else { - bodyContent = ''; - } - } var form = build_plugin_form(type, index, pageName, pluginArgs, bodyContent); $jq(form).find('tr input[type=submit]').remove(); @@ -408,7 +431,7 @@ if (edit) { container.children('form').submit(); } else { - insertAt(area_name, blob); + insertAt(area_name, blob, false, false, replaceText); } $jq(this).dialog("close"); return false; Modified: trunk/lib/tiki-js.js =================================================================== --- trunk/lib/tiki-js.js 2009-10-12 16:59:27 UTC (rev 22273) +++ trunk/lib/tiki-js.js 2009-10-12 19:22:10 UTC (rev 22274) @@ -328,6 +328,19 @@ textarea.select(); } } +function getSelectionRange(textarea) { + if (textarea.selectionStart === undefined) { + var r = document.selection.createRange(); + + return [r.start, r.end]; + } else { + return [textarea.selectionStart, textarea.selectionEnd]; + } +} +function getSelection( textarea ) { + var ar = getSelectionRange( textarea ); + return textarea.value.substring(ar[0], ar[1]); +} function setCaretToPos (textarea, pos) { setSelectionRange(textarea, pos, pos); } @@ -348,10 +361,11 @@ return sleft.text.length + sel.text.length; } } -function insertAt(elementId, replaceString, blockLevel, perLine) { +function insertAt(elementId, replaceString, blockLevel, perLine, replaceSelection) { //inserts given text at selection or cursor position textarea = getElementById(elementId); var toBeReplaced = /text|page|area_name/g; //substrings in replaceString to be replaced by the selection if a selection was done + if (textarea.setSelectionRange) { //Mozilla UserAgent Gecko-1.4 var selectionStart = textarea.selectionStart; @@ -385,6 +399,8 @@ } else { if (replaceString.match(toBeReplaced)) { newString = replaceString.replace(toBeReplaced, textarea.value.substring(selectionStart, selectionEnd)); + } else if (replaceSelection) { + newString = replaceString; } else { newString = replaceString + '\n' + textarea.value.substring(selectionStart, selectionEnd); } @@ -1314,7 +1330,7 @@ } var input; - if (paramDef.options) { + if (paramDef && paramDef.options) { input = document.createElement('select'); input.name = 'params[' + name + ']'; for (var o in paramDef.options) { @@ -1333,7 +1349,7 @@ if (value) { input.value = value; } - if (paramDef.filter && jqueryTiki.autocomplete) { + if (paramDef && paramDef.filter && jqueryTiki.autocomplete) { if (paramDef.filter == "pagename") { $jq(input).tiki("autocomplete", "pagename"); } else if (paramDef.filter == "groupname") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |