Repeat AppleScript if User Confirms a Pop-Up Dialog

I built a script that selects and copies all text from the front Safari tab, closes the tab, and pastes the text into the front BBEdit document with a couple blank lines of padding.

I'll run it when I have several tabs I want to grab text from, dumping it all into one document, so I'll need a repeat option.

I don't want to hard-code the number of repeats, because that's unpredictable (and I don't want to close Safari tabs willy-nilly). So I want the script to complete once, pop up a choice of "Repeat?" or "Done!", and then repeat, including the pop-up, until the user chooses "Done".

I don't know how to code the repeat. Here's where I'm at:

tell application "Safari" to set the clipboard to (text of current tab of front window) as string
delay 0.1

tell application "Safari"
    close current tab of front window without saving
end tell
delay 0.1

tell application "System Events"
    tell application "BBEdit" to activate
    key code 36
    key code 36

end tell

tell application "BBEdit"
    activate
    paste
end tell

tell application "System Events"
    tell application "BBEdit" to activate
    key code 36
    key code 36

end tell

set theAlertText to "Repeat?"
display alert theAlertText as critical buttons {"Yes", "No"} default button "Yes" cancel button "No"
--> Result: {button returned:"Continue"}

--need repeat code here

Solution 1:

First, you're making your life more difficult by using the clipboard and GUI scripting. BBEdit has a full scripting dictionary designed for working with text; I've modified your code to use it.

All you need is a repeat loop, and then a conditional exit repeat, as follows:

-- first find or create a text doc called 'Transcription.txt,' and select it
tell application "BBEdit"
    set target_doc_list to every document whose name is "Transcription.txt"
    if (count of target_doc_list) is 0 then
        set target_doc to make new text document with properties {name:"Transcription.txt"}
    else
        set target_doc to item 1 of target_doc_list
    end if
    select target_doc
end tell

-- repeat loop to run through Safari pages
repeat
    tell application "Safari"
        set page_title to (name of current tab of front window)
        set page_text to (text of current tab of front window)
        close current tab of front window without saving
    end tell
    tell application "BBEdit"
        tell window 1
            set end of contents of first text document to return & return & page_text & return & return
        end tell
    end tell

    tell application "Safari"
        set next_page_title to (name of current tab of front window)
    end tell

    set theAlertText to "Finished with page " & page_title & ". Next page is titled '" & next_page_title & "'. Continue?"
    display alert theAlertText as critical buttons {"Quit", "Process"} default button "Process"
    if (button returned of the result) is "Quit" then
        exit repeat
    end if
end repeat

This pulls the text of the current tab out of Safari and puts it into a variable, then adds that contents of that variable (padded with carriage returns) to the first document in the first BBEdit window. It then asks if you want to repeat with the next tab, exiting the loop if you say 'Quit'

You could modify this easily enough to skip over tabs, or to select the tabs to process in advance. Let me know if you want variations of that sort.