Back to Silas S. Brown's home page

Curved quotes on Wattpad

As part of an outreach experiment, in 2023 I placed some technical fiction on (among other forums) a website popular with female teenage fans called Wattpad.

One thing I found unsatisfactory about Wattpad's browser-based story editor was that it seemed impossible to make it accept curved quote marks and long dashes: these were replaced by their typewriter versions whenever the button was pressed to publish or save changes, and I was unable to find any part of the site's Javascript code that was obviously doing this so I think the problem was server-side (unless I missed it).

Another problem with Wattpad's story editor was that if you copied and pasted multiple paragraphs from another source, the paragraph breaks or double newlines would be collapsed into single newlines, making it necessary to go back and manually restore all the paragraph breaks taking care not to miss any. This particular problem could be worked around by arranging for your paragraphs to be separated by a line of whitespace of a type that Wattpad hadn't been programmed to collapse, such as the Unicode character U+2002 en-space---one and a half spaces, often used between sentences in professional typography---which can be coded in HTML as &#8194; and I found that editing the HTML version of a story and replacing the paragraph breaks with <br>&#8194;<br> before opening the resulting HTML file in a browser was sufficient to enable copying and pasting into Wattpad without Wattpad collapsing the paragraph breaks. As a bonus, strong and emphasized (bold and italic) formatting is preserved in the paste and did not have to be reapplied, although superscript was not supported in Wattpad. But curved quote marks and long dashes were still changed into their typewriter versions.

However, I found that Wattpad's Android application could accept the proper typographical marks, at least in chapter texts. It was still unable to persist curved quote marks in chapter titles, but getting them right in the body of the chapter seemed a good start. The app would still collapse paragraph spacing when pasting in text unless the above workaround was used, but doing it on the Android app did allow me to keep the curved quotes in the chapter body text.

Since the process of selecting only part of a substantial amount of text on Android is highly error-prone (because at least some versions of Android will automatically change the off-screen end of the selection so it will no longer be where you left it, and although Android and Chrome's source code is available I haven't taken the time to figure out the logic behind this one, sorry), you'll probably find it necessary to use Select All, which means you'll need your chapter to be in an HTML document without chapter title and with nothing else around it, so you can Select All, Copy, go to Wattpad, edit the chapter, Select All if there is a previous version of the text to replace, and Paste.

But there is a further problem: if any of your chapters have "too many" paragraphs, then select all and paste in the Android app can omit paragraphs at the end, and in some cases it can truncate paragraphs part-way through. The app seems to be able to cope with about 56 paragraphs per paste, but I observed one case in which it took only 54 paragraphs, so I suggest setting that as the limit and split chapters longer than 54 paragraphs into two or more chunks.

As a programmer, I had the source of my novel as a Python script---mostly a multi-line string-constant containing all the text with simple markup, then a couple of hundred lines of code to perform a few basic checks and output the various formats---so for Wattpad I had an option to separate the paragraphs with en-space, group them into batches of 54, and dump the resulting HTML onto a temporary Web server for me to access from an Android phone and copy-paste into the app. The grouping can also be done manually if you don't have too many long chapters. There didn't seem to be any obvious relationship between how many paragraphs it could take and their total length, so what determines the exact cutoff point is unclear, but a limit of 54 paragraphs per chunk seemed to work.

Additionally, there appears to be a certain probability that the Wattpad Android app tells you it has saved a chapter when it has not. It is therefore necessary to double-check the appearance of the chapter in a separate Web browser to ensure the update has gone through.

If you are updating an existing chapter that was previously published with typewriter-style quotes, please note that any comments received on the chapter should remain after the update but any "inline" comments that had been attached to a particular paragraph or sentence are likely to lose their inline status after you edit that chapter in the Android app, even if you take care not to edit any paragraph that has comments attached: editing other paragraphs on the Android app can still cause Wattpad to lose track of where the inline comments should be. The comments will be retained at the end of the chapter but not also shown inline. For this reason you might want to avoid using the Android app to update chapters that have already received inline comments that need to stay as inline comments.

The reader-visible publication date was not changed on chapter updates, but I think some of my readers who had followed the book received notifications that it had been updated. I had posted a separate announcement telling them that my updates were merely cosmetic this time. If you are bulk-editing chapters on the Android app and some of them are not yet published, you might like to note that the "Publish" button was placed where the "Save" button would be in an already-published chapter, making it easy to slip up and publish a scheduled chapter early (there was no confirmation check) and this definitely generates notifications to followers.

If you want to add YouTube videos at the start of your chapters, then this must be done from the desktop browser if they are at unlisted URLs, because the Android app accepts only search terms and not URLs---so adding in the curved quotes etc will then need to be redone after this desktop edit. Additionally, any YouTube videos added to scheduled chapters might be deleted on auto-publish, meaning you need to re-add them after publication and redo the curved quotes in the app. YouTube videos were the only still-supported mechanism I found that allowed an audio reading of the story to be delivered on Wattpad (there were references in the documentation to a SoundCloud function but this had apparently been removed), and even then the Wattpad-YouTube integration wasn't very good for audio if reading on the app: the video auto-plays without warning, and then stops when scrolled away so you can't read along in the chapter. It's more passable if reading on the Web version, although given the excessive nagging of readers on mobile devices to switch to the app I'm not sure how many readers still use the Web version.

Note on advertisements

Having mentioned the Wattpad Android app, I should add that, like the rest of Wattpad, it carries advertising, and at least in reader mode it features compulsory interstitial video advertisements with sound. There is an option to pay Wattpad to stop showing you these.

Advertising is common across the industry; Wattpad's did at least seem generally compliant with the UK's Advertising Standards Authority, unlike the far worse ones carried by Wattpad's unauthorised scraping proxy "TeenFic" in Vietnam, mostly advertising illegal gambling, narcotics and malware, which a Wattpad case handler told me they didn't think they could take action against, but they encouraged individual writers to file their own DMCA take-down notices to TeenFic's provider CloudFlare, to their domain registrar PorkBun and to Google, although it was already ranking quite poorly on Google for keywords related to the fiction in question. (I was in fact trying to suggest technical means to identify and block the scraping-proxy's traffic but the case handler didn't put me through to engineering.)

The one active community I found without advertising was the "Archive Of Our Own" (AO3) based on free/libre and open source software and cited in a conference paper at ACM CHI 2016, but unfortunately AO3's approach to inclusivity has backfired: their copious listings of sleazy stories, albeit nearly always with the correct warning tags, has resulted in their domain being summarily blocked by software used by many parents, institutions and mobile data providers, thereby excluding a large part of the younger audience and making AO3 an unsuitable platform for this kind of outreach experiment unless the story is cross-posted to more age-appropriate sites as well.

AO3 might be more inclusive if they served it from two domains, "safe" and "unsafe", where "safe" applies compulsory filters (I could probably rig up my Web Adjuster to do that for them, but changing the server scripts would be cleaner) and institutional blockers might be able to permit the "safe" domain if they permit similar material from elsewhere, but then there could be the danger of writers trying to break the filters, which would probably result in a blanket block being reapplied: as some people's approach to protesting censorship is to stimulate more of it so it's noticed more, they might decide they actually prefer to let the blanket ban happen.

If AO3 had advertising, they might have been under pressure to be "brand-safe" if they chose reputable advertisers who cared about that enough to mandate a site-wide policy, but if badly curated it might have resulted in more attempts to get things "under the radar" and therefore less clearly tagged, as had apparently become the case with the once dominant but now rapidly declining FanFiction.Net site, which had evidently moved to advertisers less likely to mind a poorer environment, and whose users sent me daily death threats and left unprovoked reviews suggesting serious criminal acts which could not be removed until I deleted the story---the unresponsiveness of FF administrators to my reports of that made me feel continuing to post there might amount to too substantial a contribution to the endangerment of my readers' well-being, so I didn't want to promote that platform even at the level of keeping my cross-posts up on it: yes I could have written a Selenium script to automate the process of deleting and re-uploading a work every time an offensive review was attached (while reinstating legitimate reviews as Guest) but I'd rather encourage a migration to a better-moderated platform. So I'm unsurprised by reports of sloppy tagging on FF although I've not checked it all myself.

AO3 has better tagging, but due to blanket bans of the site it's still necessary to cross-post to other communities with advertising---unless I wanted to rely on self-hosting and general Web search, but in this case I guessed target readers were more likely to discover the book by browsing their established communities than by searching the Web, and said communities didn't generally support external hosting. So I opted for platform-native uploads to three sites which seemed to have reasonably competent administrators, and put up with slightly intrusive but still ASA-compliant advertising on two of these: the girl-dominated Wattpad and the lesser-known boy-dominated Royal Road (which incidentally had better per-story SEO). But it was necessary to employ the above workaround if you cared about typography on Wattpad.

(For the YouTube audio for Wattpad, I think I was somewhat able to reduce further advertising by creating a YouTube channel on my university account, although I'm not sure what happens when this closes. Royal Road also allowed this YouTube audio via simple iframes with youtube.com/embed URLs in its code editor, plus a link to an RSS "podcast" feed of more efficient MP3s hosted on GitLab Pages, and AO3 allowed the RSS link plus <audio> tags. AO3 also allowed YouTube's iframe which I ended up using for one chapter where I'd taken advantage of the video channel to include a scrolling musical score, which I did using the scroll=horizontal filter in ffmpeg with Lilypond's one-line-auto-height-breaking and a hideNotes voice to undo most of the variable-width typography so that a constant scrolling speed could be used, but in other cases an audio-only channel was sufficient and the video was simply displaying a static picture of the book's cover so I placed just the <audio> tags on AO3.)


All material © Silas S. Brown unless otherwise stated.