{ "version": 3, "file": "threads.js", "sourceRoot": "../src/coffee/", "sources": [ "threads.coffee" ], "names": [], "mappings": "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", "sourcesContent": [ "'use strict'\n\nreturn unless window.localStorage?\n\nstripBasepath = (s) -> s[window.crOpts.basepath.length..]\n\nmarkAllRead = ->\n\twindow.fromList(document.querySelectorAll 'article.thread-item').map (thread) ->\n\t\tdate = thread.querySelector('span.date').dataset.udate\n\t\tlreplyAnchor = thread.querySelector 'a.last-reply'\n\t\t[surl, _, lpage] = lreplyAnchor.pathname.split('/')[2..4]\n\t\tlpost = lreplyAnchor.hash\n\t\tif lpost.length < 3\n\t\t\t# shouldn't happen, but for insurance we put post = 0\n\t\t\tlpost = 0\n\t\telse\n\t\t\tlpost = lpost[2..] # strip the initial \"#p\"\n\t\tlpage = '1' unless lpage?\n\t\tconsole.log \"saving lview_#{surl}\"\n\t\twindow.localStorage.setItem \"lview_#{surl}\", \"#{date}##{lpost}##{lpage}\"\n\npageIs =\n\tthread: window.location.pathname.startsWith \"#{window.crOpts.basepath}thread/\"\n\tthreads: window.location.pathname.startsWith \"#{window.crOpts.basepath}threads\"\n\ttagSearch: window.location.pathname.startsWith \"#{window.crOpts.basepath}tag/\"\n\thome: window.location.pathname == window.crOpts.basepath\n\n# mark NSFW threads\nif pageIs.tagSearch or pageIs.threads or pageIs.home\n\twindow.fromList(document.querySelectorAll 'article.thread-item, article.home-thread').map (thread) ->\n\t\ttags = thread.dataset?.tags?.split '#'\n\t\treturn unless tags?\n\t\t# setup title\n\t\tthread.title = \"#{tags.join ' #'}\"[1..]\n\t\tif 'nsfw' in tags\n\t\t\ttitle = thread.querySelector('.thread-name, .thread-title')\n\t\t\timg = window.createElementEx \"img\", { src: \"/static/images/nsfw.svg\", alt: \"NSFW\", className: \"nsfwIcon\" }\n\t\t\ttitle.insertBefore img, title.firstChild\n\n\nreturn unless SiteOptions?.dehighlight or SiteOptions?.jumptolastread\n\nif pageIs.thread\n\t# When a thread is visited, save the latest post date is localStorage.\n\t# First, ensure this is the last page of the thread. If not, don't\n\t# mark this thread as 'visited', since latest replies are not being\n\t# actually seen. Also save number of replies, and make the thread link\n\t# point to the latest read post instead of last one.\n\tpages = document.querySelector 'div.pages'\n\treturn unless pages?.dataset? and (pages.dataset.current == pages.dataset.max)\n\t# grab latest post\n\tposts = document.getElementById('replies').querySelectorAll 'article.post'\n\tnreplies = posts.length\n\t# if no replies, pick op\n\tlatest = document.getElementById 'thread'\n\tnpost = 0\n\tif posts.length > 0\n\t\tlatest = posts[posts.length-1]\n\t\tnpost = latest.id[1..]\n\t# page of latest post\n\tpage = pages.dataset.current ? \"1\"\n\tdate = latest.querySelector('a.date').dataset.udate\n\t# id of latest post\n\tif date?\n\t\tsurl = stripBasepath(window.location.pathname).split('/')[1]\n\t\twindow.localStorage.setItem \"lview_#{surl}\", \"#{date}##{npost}##{page}\"\nelse if pageIs.home or pageIs.threads\n\t# Bind \"Mark All Read\" button\n\tdocument.getElementById('mark-all-read').addEventListener 'click', markAllRead\n\n\t# In home/all-threads: for each thread, check if already viewed or not\n\twindow.fromList(document.querySelectorAll 'article.thread-item').map (thread) ->\n\t\t# get last-modified date\n\t\tdate = thread.querySelector('span.date').dataset.udate\n\t\t# compare with locally saved date, if any\n\t\tlreplyAnchor = thread.querySelector 'a.last-reply'\n\t\tsplpath = stripBasepath(lreplyAnchor.pathname).split('/')\n\t\tsurl = splpath[1]\n\t\titem = window.localStorage.getItem \"lview_#{surl}\"\n\t\treturn unless item?\n\t\t[lview, lpost, lpage] = item.split '#'\n\t\tif lview? and lview == date\n\t\t\t# no updates since latest visit\n\t\t\tif SiteOptions.dehighlight\n\t\t\t\tthread.className += \" seen\"\n\t\telse if lpost?\n\t\t\t# make the last reply link to point to the latest seen post\n\t\t\tif SiteOptions.jumptolastread\n\t\t\t\tif splpath.length > 3 and lpage?\n\t\t\t\t\t# pathname contains /page/n\n\t\t\t\t\tlreplyAnchor.pathname = splpath[0..1].join('/') + \"/page/#{lpage}\"\n\t\t\t\tlreplyAnchor.hash = if lpost is 0 then \"#thread\" else \"#p#{lpost}\"\n" ] }