Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Esiste un modo per inserire un collegamento ipertestuale in una casella di testo o in una casella di modifica del testo?So che puoi farlo in una tabella JMP con il tipo di colonna espressione e che puoi creare una casella di pulsanti in una finestra che agisce come un collegamento ipertestuale.Sono anche a conoscenza della << sintassi del markup per le caselle di testo, ma ciò ti consente solo di scrivere in grassetto, sottolineato e corsivo.
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Approccio molto interessante @ih
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Combinando @Byron_JMP Con l'idea della casella del browser Web di con la stringa regex è possibile salvare un file html formattato con collegamenti incorporati e visualizzarlo nella finestra.All'improvviso hai molto controllo sulla formattazione del testo; potresti anche consentire agli utenti di aggiungere facoltativamente un nome descrittivo alla sintassi dei collegamenti come [Sito Web JMP] http://www.jmp.com , simile ad alcune sintassi di markup.

Names Default To Here( 1 );
text = "Periarthritis is defined as: Inflammation of the tissues around a joint. " ||
"[A Link]http://www.reference.md/files/D010/mD010489.html As arthralgia, myalgia, tendonitis " ||
"and other musculoskeletal issues are listed events, periarthritis can be considered listed as well.
Comment: no good sentinel case — not a new signal; one case also reported somnolence and " ||
"another case reported “yawny” which could mean sleepy *http://www.ncbi.nlm.nih.gov/pubmed/12530994";
t = text;
//wrap links in a string with <A href="https://community.jmp.com/" target="_blank"> tags
findlinks = function({t, recct=0}, {url_regex, rgxmatch = {}, rtn=""},
recct++;
if(recct > 100,
throw("Recursion to deep: " || char(recct) || " levels. Still need to parse: '" || t || "'"));
url_regex = "^(.*?)(\!\[(.+)\])?((https?://){0,}(\w+\.){2,}\w+/?(\w+/?){0,}(\.\w+){0,1}/?)(\b.*)$";
rgxmatch = Regex Match(t, url_regex);
if( N Items(rgxmatch) == 0,
rtn = t, //No link
if( N Items(rgxmatch) == 10, //found a link
rtn = rgxmatch[2] ||
"</A><A href="" || rgxmatch[5] || "" target="_blank" rel="nofollow noopener noreferrer">" || if(is missing(rgxmatch[4]), rgxmatch[5], rgxmatch[4] ) || "</A>" ||
findlinks(rgxmatch[10], recct),
throw("Error matching regex in: '" || t || "'")
)
);
return(rtn)
);
//Create a simple html page from a block of text, save it to the temp files, and return the filename
texttohtmlfile = function({t},
Save text file("$TEMP/Temp HTML file.html", "" || findlinks(t) || "")
);
//Make a temp html file
fn = texttohtmlfile(text);
//Simple window to display html file, deletes the temp file when it closes
w = New Window("Example",wb = Web Browser Box());
w << On Close( Delete File( fn ) );
wb << Set Size(1000, 200);
wb << Set Auto Stretching( 1, 1 );
wb << Set Max Size( 1000, 1000 );
//Show the html file in the window
wb << Navigate( fn );Notare la sfortunata barra nell'espressione di corrispondenza regex poiché "\[" inizia una sezione di "caratteri di escape".
Modificato per aggiungere screenshot e di nuovo per correggere un errore di battitura.
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Grazie per questo suggerimento, Marco.Tuttavia, non voglio che i miei utenti debbano incorporare tag per gli URL.Il mio capo ha inventato un'espressione regolare che funziona piuttosto bene:
// Sample text
text = "Periarthritis is defined as: Inflammation of the tissues around a joint. " ||
"http://www.reference.md/files/D010/mD010489.html As arthralgia, myalgia, tendonitis " ||
"and other musculoskeletal issues are listed events, periarthritis can be considered listed as well.
Comment: no good sentinel case — not a new signal; one case also reported somnolence and " ||
"another case reported “yawny” which could mean sleepy *http://www.ncbi.nlm.nih.gov/pubmed/12530994";
url_regex = "\b(https?://){0,}(\w+\.){2,}\w+/?(\w+/?){0,}(\.\w+){0,1}/?\b";
text_list = {};
link_list = {};
keep_going = 1;
istart = 1;
text_len = length(text);
i = 0;
while(keep_going,
new_text = substr(text, istart);
link_text = regex(new_text, url_regex);
if (!is missing(link_text),
// then
i++;
start_pos = contains(text, link_text, istart);
text_list[i] = substr(text, istart, (start_pos - istart - 1));
link_list[i] = link_text;
istart = start_pos + length(link_text);
,
// else no link found
i++;
text_list[i] = new_text;
keep_going = 0;
);
);
tb = {};
lb = {};
nt = nitems(text_list);
nw = new window("Test link",
vb = vlistbox(
)
);
for(i = 1, i <= nt, i++,
tb[i] = text box(text_list[i], << set width(400));
vb << append(tb[i]);
if (i < nt,
one_button = evalinsert("\[lb[i] = button box("^link_list[i]^", web("^link_list[i]^"), << underline style(1) )]\");
eval(parse(one_button));
vb << append(lb[i]);
);
);
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Vedi la funzione Regex(). Potrebbe essere utile. L'espressione regolare sarebbe piuttosto semplice.
Names Default to Here( 1 );
text = "Periarthritis is defined as: Inflammation of the tissues around a joint. " ||
"<L>http://www.reference.md/files/D010/mD010489.html</L> As arthralgia, myalgia, tendonitis " ||
"and other musculoskeletal issues are listed events, periarthritis can be considered listed as well.
Comment: no good sentinel case — not a new signal; one case also reported somnolence and " ||
"another case reported “yawny” which could mean sleepy *<L>http://www.ncbi.nlm.nih.gov/pubmed/12530994</L>";
Regex( text,
"<L>(.+?)</L>",
"\1"
);
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Grazie per i vostri commenti e suggerimenti finora.Non posso permettermi il lusso di sapere dove si trovano gli URL nei commenti degli utenti.
Ecco alcuni esempi di output:

Ecco del codice di esempio.L'ho reso semplice utilizzando i "marcatori" URL e .Ho giocato con la posizione dell'URL utilizzando regex per evitare di dover utilizzare questi marcatori.Se qualcuno ha una buona espressione regolare per trovare gli URL me lo faccia sapere.Sto avendo vari successi con quello che ho trovato finora in rete.
// link markup example
text = "Periarthritis is defined as: Inflammation of the tissues around a joint. " ||
"<L>http://www.reference.md/files/D010/mD010489.html</L> As arthralgia, myalgia, tendonitis " ||
"and other musculoskeletal issues are listed events, periarthritis can be considered listed as well.
Comment: no good sentinel case — not a new signal; one case also reported somnolence and " ||
"another case reported “yawny” which could mean sleepy *<L>http://www.ncbi.nlm.nih.gov/pubmed/12530994</L>";
text_list = {};
link_list = {};
keep_going = 1;
istart = 1;
linkstart = "<L>";
linkend = "</L>";
text_len = length(text);
i = 0;
while(keep_going,
start_pos = contains(text, linkstart, istart);
if (start_pos,
end_pos = contains(text, linkend, istart);
if (end_pos,
i++;
text_list[i] = substr(text, istart, (start_pos - istart));
link_list[i] = substr(text, start_pos + 3, (end_pos - start_pos - 3));
istart = istart + end_pos - istart + 4;
);
);
if (!start_pos,
i++;
text_list[i] = substr(text, istart);
keep_going = 0;
);
);
tb = {};
lb = {};
nt = nitems(text_list);
nw = new window("Test link",
vb = vlistbox(
)
);
for(i = 1, i <= nt, i++,
tb[i] = text box(text_list[i], << set width(400));
vb << append(tb[i]);
if (i < nt,
one_button = evalinsert("\[lb[i] = button box("^link_list[i]^", web("^link_list[i]^"), << underline style(1) )]\");
eval(parse(one_button));
vb << append(lb[i]);
);
);
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Oh, e rendi il mousebox(textBox) una funzione o espressione che può essere utilizzata più volte, dove cambia solo il testo, il collegamento trovato.
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Questa soluzione richiede qualcosa in più, qualcosa: un WrapListBox e un MouseBox.
Names Default To Here( 1 );
New Window( "WrapListBox",
Wrap List Box(
TextBox("This is a long comment to be followed by a link "),
MouseBox(TextBox(" <U>http://www.jmp.com</U> ",<<FONT color="">");
web(lnk);
(this<<CHILD></CHILD></FONT>
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Potresti utilizzare un'espressione regolare per abbinare il modello del collegamento ipertestuale.
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Penso che potrebbe essere possibile analizzare il contenuto della casella di testo per un collegamento html (trovare modelli che iniziano con "//:http") e quindi aggiungere una casella di pulsanti alla casella di testo, con il collegamento al suo interno, per ogni modello che viene analizzato.
Sarà piuttosto complesso però. Sarebbe molto meglio se i collegamenti fossero riconosciuti nel testo e fossero cliccabili.
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Se sei d'accordo che l'intera casella sia il collegamento, puoi utilizzare una casella di pulsanti:
New Window( "Example",
Text box("Text Block 1"),
Button box( "http://www.jmp.com/", Web( "http://www.jmp.com/" ), Underline Style( 1 ) )
)Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Grazie Byron, è una sceneggiatura fantastica.Ma non è quello che cercavo.Nello specifico, voglio incorporare un collegamento in una casella di testo e renderlo cliccabile.I miei utenti inseriscono commenti che possono essere lunghi e contenere collegamenti di riferimento.Sto lavorando su un approccio in cui analizzo i collegamenti e visualizzo:
Blocco di testo1 (in una casella di testo)
Collegamento1 (come collegamento cliccabile)
Blocco di testo2 (in una casella di testo)
Collegamento2 (come collegamento cliccabile)
Blocco di testo3
eccetera.
Ciò sarà probabilmente accettabile per gli utenti.
Ri: Collegamenti ipertestuali nella casella di testo o nella casella di modifica del testo?Sospetto che tu stia cercando qualcosa di più sofisticato di questo, ma...
Names Default To Here( 1 );
New Window( "Example",
hlistbox("1",
wb = Web Browser Box(),
bb=Button Box( "Take Me to JMP",
wb << Navigate( "http://www.jmp.com" );
wb << Set Auto Stretching( 1, 1 );
wb << Set Max Size( 1000, 1000 );
)));