profile
viewpoint
Timo Tijhof Krinkle Wikimedia Foundation London, United Kingdom https://timotijhof.net Principal Engineer, Wikipedia.

jquery/jquery-migrate 1706

A development tool to help migrate away from APIs and features that have been or will be removed from jQuery core

karma-runner/grunt-karma 475

Grunt plugin for Karma.

karma-runner/karma-qunit 46

A Karma plugin. Adapter for QUnit testing framework.

addshore/mediawiki-docker-dev 42

Proof of concept, docker development environment for MediaWiki.

clarkbox/testswarm-browserstack 24

Integration layer between TestSwarm and BrowserStack

jzaefferer/node-testswarm 19

Nodejs module for interacting with TestSwarm

edg2s/gerrit-sweep 4

Script to delete branches which have been merged in gerrit, even if you don't have the latest patchset

JamesMGreene/grunt-qunitnode 3

A Grunt task plugin to execute QUnit tests in Node.js.

inez/ve-dirtydiffbot 2

Bot to look for dirty diffs by crawling random Wikipedia articles.

countervandalism/mw-gadget-cvnoverlay 1

Enhance wiki pages with information from the CVN database.

push eventKrinkle/timotijhof.net

Timo Tijhof

commit sha 5012182f3a950fe07feb1ce2af8ad5f4e4ede864

theme: avoid inline tooltips for in-page links Only display the mobile-friendly "(i)" button next to external links, not e.g. for the footnote backlinks.

view details

Timo Tijhof

commit sha ebd0f17fd1784eaed01dcd33abd720143ee489a6

site: unlink Medium

view details

Timo Tijhof

commit sha 18bb99a9427df0d7afccce23f9c11a1c01b45e6b

site: unlink Twitter

view details

Timo Tijhof

commit sha 8a0ca51dbc0666c5b597eb719b389e86dd92dda4

posts: Add substr-substring-slice

view details

push time in a day

startedschollz/croc

started time in 2 days

issue openednolanlawson/pinafore

Register Pinafore as destination for "Open in"

I'd be great to be able to take a link from an instant message and/or the address of a mastodon status in a browser, and open it in Pinafore to then eg like/bookmark/boost, read thread, find user profile etc.

This would mean Pinafore is listed as app destination, similar to how eg RSS readers, alternate browsers, and IM apps are destinations when opening the share menu from a browser tab.

When selected it would use the search feature behind the scenes and eg expand the first and only result right away, if the URL-like value turns out to indeed yield a result.

created time in 2 days

issue commentnolanlawson/pinafore

Remote mentions should indicate their instance more conveniently on mobile

I originally thought short/contextless names were only rendered if the instance is the same as your own. But now I'm actually not sure what the logic is of the default web app and/or the default rendering provided by the API for Pinafore (if different).

I think it's important that whatever logic we use is extremely simple and easy to deduce/learn/expect as a user after only a few examples.

Local-only seems fine by me, I wouldn't be bothered at all by seeing the full form for all remote mentions.

A possible compromise could be to eg also shorten the author of the tweet that is being replied to, if and only if eg no local equivalent exists or at least doesn't appear anywhere on the page currently.

Separately from that, it might also make sense to show the full form even for local users if a remote user of the same name is anywhere in the viewport, so as to disambiguate both.

00dani

comment created time in 3 days

issue commentnolanlawson/pinafore

Implement File Share Target

This would also increase the need for a Toot As interface (https://github.com/nolanlawson/pinafore/issues/1808) as the last used instance might not be the one on want to post it to.

nolanlawson

comment created time in 3 days

issue commentjekyll/jekyll-seo-tag

Consistent order of keys for JSON-LD

@bmcage I stopped using the plugin and added the bits I actually wanted directly to my theme, without external dependencies (source).

Krinkle

comment created time in 3 days

issue openednolanlawson/pinafore

Bottom of toot appears clickable but isn't

There's an unclickable "deadzone" between buttons where the cursor is turned into a pointer for hover, but no action occurs when clicking.

I found this in context of a follow-only toot (where it additonally causes the disabled button to also appear clickable), but the issue applies to regalar/public toots as well.

capture

created time in 3 days

startedtootsuite/mastodon

started time in 4 days

startedjquery/ci-management

started time in 4 days

push eventqunitjs/qunitjs.com

Timo Tijhof

commit sha 445d7e6c1a899fc67879f9aae6cb299a3f3326a4

All: Add Mastodon rel=me and footer link

view details

push time in 6 days

push eventqunitjs/jekyll-theme-amethyst

Timo Tijhof

commit sha 6f9b0d3fbb74027f1628c31cf5aa04302712defc

All: Add support for Mastodon rel=me and footer link

view details

push time in 6 days

push eventKrinkle/mw-tool-tourbot

Timo Tijhof

commit sha 51cdb9dfe7cb37a7960de12dcb9adb68be94841f

patterns: add swap for $.parseJSON() Ref https://phabricator.wikimedia.org/T169385.

view details

push time in 6 days

PR opened nolanlawson/pinafore

fix: change dark grayscale to use have a brighter action-button color

The pressed state, such as used for the "Unfollow" button, was effectively identical to the background, thus making it invisible.

Brighten it up to fix this. The relative differences are kept the same as before and match the default theme,, e.g. the brightness ranges from (darkest) Unfollow > Unfollow-hover > Follow > Follow-hover (brightest)

Before After
Follow before-follow after-follow
Unfollow before-unfollow after-unfollow

Fixes https://github.com/nolanlawson/pinafore/issues/1880.

+11 -0

0 comment

1 changed file

pr created time in 6 days

create barnchKrinkle/pinafore

branch : darkgrayscale-button-color

created branch time in 6 days

delete branch Krinkle/mw-tool-tourbot

delete branch : master

delete time in 7 days

delete branch Krinkle/mw-tool-tourbot

delete branch : async-await

delete time in 7 days

create barnchKrinkle/mw-tool-tourbot

branch : main

created branch time in 7 days

issue commentnolanlawson/pinafore

Follow button invisible in "Dark Grayscale" theme

I'd like to help fix this as my first patch. I've just gotten the local dev environment working, and now orienting myself with the code base. Could use a pointer on how to go about this :)

Krinkle

comment created time in 7 days

issue openednolanlawson/pinafore

Follow button invisible in "Dark Grayscale" theme

resting hover
Screenshot in Dark Grayscale theme Screenshot in Dark Grayscale theme (hovering icon)

For comparison, the Mastodon dark theme:

| Screenshot 2020-10-22 at 23 43 01 1 | Screenshot 2020-10-22 at 23 43 01

I note that in this theme, the color does not appear to change on-hover, I'm not sure if that's intentional or not.

created time in 7 days

delete branch Krinkle/wordpress-develop

delete branch : update-jshintrc

delete time in 7 days

startedwikimedia/mediawiki-extensions-BoilerPlate

started time in 9 days

issue commentqunitjs/qunit

Clarification on QUnit.extend capabilities/support

Object.assign was introduced as part of the ES6 spec and is still relatively new. QUnit offer broader support since its implementation is relatively simple and this allows developers to decide what their supported markets are, without being limited by developer tooling.

At this point, we support IE9+. When we require Edge 12+, we can use Object.assign() internally.

However, I would support soft-deprecating this method in the public API since it is indeed only meant for internal usage. Then in the upcoming QUnit 3 release, it can become a private utility method.

smcclure15

comment created time in 9 days

issue commentjs-reporters/js-reporters

Request for comment: CRI Version 1

Interesting, I had not considered those as similar, but you're right. I'd support merging the "test" and "suite" concepts. It might require some compromises, but I think it's worth giving a try.

Currently:

  • a "test" is the lowest measured unit, typically executed after the phase where a framework will load the test suites and plan their execution. A framework might measure runtime duration around a test, and e.g. invoke hooks (such as "before" or "after" each hooks). These aren't directly of concern to reporters, but helps illustrate what they relate to.
  • a "suite" is used for grouping tests, and suites can be nested.
  • the top-most suite is referred to as a "run".

I have not previously seen testing frameworks that allow nesting within their equivalent of the "test" concept. I see that node-tap does allow this. As such, node-tap's tests are effectively a hybrid. Like a "suite" that can also directly contain assertions.

The main issue I see with merging these concepts is that it might affect support for "planning" the execution of a run. Right now, we specify a structure that reporters can read that describes how many tests will execute and in which suites they are grouped, before execution begins.

@isaacs How does this work with node-tap? The TAP spec defines a "plan" (spec), which Mocha, QUnit, and Jasmine effectively implement by waiting until all test files have been loaded, seeing what "suites" have been called, but not actually executing the "test" portions yet. It will then know this information, and then can start execution.

I'm generally in favour of removing the structured plan (e.g. the whole suite structure) since this is afaik never used in practice by reporters. A stream-based approach seems preferable there. However an overall count of planned tests seems useful to keep, allowing reporters to track and communicate a sense of progress toward completion.

Krinkle

comment created time in 11 days

issue commenttootsuite/joinmastodon

Create a link that opens in given locale

This is possible via the lang query parameter. However, it is not promoted (the address bar does not update when selecting a language), which means without looking at the source code it can be hard to guess what the right value is (e.g. nl vs nl-NL).

It also appears to malfunction currently as it only affects the navigation menu. The rest of the page is only translated if you open the page without lang?= and select it from the menu. I've reported this bug at https://github.com/tootsuite/joinmastodon/issues/130

renatolond

comment created time in 11 days

issue openedtootsuite/joinmastodon

The 'lang' parameter does not work correctly

When navigating to https://joinmastodon.org/ and selecting "Nederlands (nl)" from the list, the page is nicely translated (awesome! 👍 )

When navigating to https://joinmastodon.org/?lang=nl-NL the menu bar is translated, but the rest of the page remains in English. This appears to be a bug?

created time in 11 days

pull request commentnolanlawson/pinafore

fix: switch from no-referrer to strict-origin

I'd support a limited (opt-out) way to indicate that traffic came from Mastodon or Pinafore. However, I think the challenge with the current patch is that it wouldn't just indicate that, it would also indicate the specific hostname.

This provides a fairly low amount of entropy when the instance in question is using the default at pinafore.social. But in the case of self-hosting or less popular forks/mirrors, this not only says much about the user's profile, it could very well even identify them directly.

nolanlawson

comment created time in 12 days

PR opened corbindavenport/tipjar

Support wildcard domains

After checking the current domain, check the list again for the parent domain.

Also:

  • Use location.hostname instead of new URL(location.href).hostname. Most properties of the modern-era URL object also exist directly on Location objects. This includes 'href', but also 'hostname'. Use this directly for simplicity.

  • Fix the (seemingly) broken entries for Gutenberg and Notepad, which included a schema and/or path slash, and thus cannot match a hostname.

  • Update sites.js to use parent domains by default where possible. For Mozilla and Internet Archive, this means the duplicates can now be removed. For Wikipedia, this means the tipjar now works also when viewing articles such as on en.wikipedia.org, and on zh.wikipedia.og.

Fixes https://github.com/corbindavenport/tipjar/issues/15.

+34 -37

0 comment

2 changed files

pr created time in 12 days

create barnchKrinkle/tipjar

branch : wildcard

created branch time in 12 days

push eventKrinkle/tipjar

Timo Tijhof

commit sha 52e9176159a9ced632eb1f9c0a077f7c79c5614a

Fix deadlink in readme

view details

Corbin Davenport

commit sha 54bcd24632d6719900cfb161ea02420d63cf4e62

Merge pull request #14 from Krinkle/patch-1 Fix deadlink in readme

view details

push time in 12 days

issue commentnolanlawson/pinafore

UX tweak: separate "copy link" from "block"

Mute thread and report account are also direct, but those are easy to undo

Reporting an account to admins is not something I would want to do automatically. […]

Indeed, and it isn't. My bad. I meant to say "Mute thread and block account.". As I wrote earlier in the message, "Report" already leads to a modal workflow, and indeed does not and should not do anything automatically from the initial tap.

strypey

comment created time in 12 days

push eventqunitjs/qunit

Timo Tijhof

commit sha 582d352450a72957c4c77965de345c2e27cec2c5

Core: Consolidate use of internal 'performance' utility

view details

Timo Tijhof

commit sha 3bec6fbf0433eb1d1a4f3918dba325c4a67d760c

Core: Replace internal use of 'defined' with 'globals'

view details

push time in 12 days

delete branch qunitjs/qunit

delete branch : rm-defined

delete time in 12 days

PR merged qunitjs/qunit

Clean up internal access to document and performance globals

The pattern of checking A to decide whether B is safe to use is imho an anti-pattern and reduces confidence in the code. This was previously the case for setTimeout, performance and document.

+55 -64

0 comment

9 changed files

Krinkle

pr closed time in 12 days

fork Krinkle/pinafore

Alternative web client for Mastodon

https://pinafore.social

fork in 12 days

issue commentnolanlawson/pinafore

Support for non-English interface language (i18n)

@nolanlawson I don't remember building something user-facing in the past decade that wasn't localised. For me that means I'm very familiar with the "how", yet, on the other hand, very blind to the cost 🙂 Could you elaborate on the kinds of maintenance difficulties you'd like to avoid?

I'm open to anything, but my go-to approach would be to move the strings out, and have the application code call a function that's given a message key, with some optional parameters if needed, and get a string in return. E.g. "You have " + num + " message(s)" might become msg("new-messages", num).

Messages would default/fallback to English so day-to-day we wouldn't need to do much other than edit a i18n/en.json file. Depending on how we handle contributions for translations, you'd either leave it up to pull requests by others to improve/add missing translations, or let something like translatewiki.net do its thing (which would pull the repo daily for any new/changed source messages, and provide a PR with any added/changed translations).

There's indeed a trade-off to be made with regards to which languages to bundle, and how much to optimise ahead of time. Rambling out loud for a bit:

  • I suspect the best performance would be achieved by compiling/embed the translations into the components. This would produce a bundle almost the same as what we have today, hiding the indirection. This seems appealing, but I've not found this to work well in practice. It makes it harder to handle message variables I think, requires additional maintenance for the logic of doing that embedding, and would mean one has to create and manage a separate app bundle for each language, and the complexity for somehow switching between them.
  • The simplest approach (for the developer) would be to bundle all JSON translation files in the bundle, and access the messages at run-time. This might actually be feasible for Pinafore, if there are only a few dozen or hundred distinct messages, the bundle size wouldn't be very notably increased. In my experience the runtime cost of accessing an object key and performing some light string manipulation tends to be insignificant. But of course, we should measure this. Every app is differnet :)
  • If bundling all languages turns out to add too much to the initial download cost, we could bundle only English and fetch other JSON files on-demand. This would mean that, like the separate bundle approach, the user would need connectivity when switching languages. However, unlike with separate bundles, there would be no switching complexity, and it would only be upon the first time a language is switched to. After that you'd keep it in the cache bucket. And upon subsequent updates, you'd always include the current language's JSON file among the preloaded assets.

Having an optional file or directory with message overrides would be cool indeed. That would e.g. allow for themetic or fandom customisations whilst still making it easy to upgrade.

Krinkle

comment created time in 12 days

startedbellard/quickjs

started time in 13 days

issue commentnolanlawson/pinafore

UX tweak: separate "copy link" from "block"

Somewhat related: Would it make sense to adopt a convention to indicate whether a link does something vs starts a modal?

Eg "copy link" directly replaces the user's clipboard. The others could have "..." after then per the desktop UI convention for menu items that have additional steps to them.

strypey

comment created time in 14 days

issue commentnolanlawson/pinafore

UX tweak: separate "copy link" from "block"

For what its worth, I think separate top-level menus or sub menus would clutter the interface, and require more overhead for both scenarios. Finding a meaningful and international icon and being friendly to new users would also be challenging.

However, I do want voice also the concern that a single menu for all items is indeed problematic and prone to error -if- the destructive actions have no confirmation behind them.

I've already lost several toots due to accidental deletions due to this via a different mastodon client I tried, after a mis-tap.

Adding indirection the menu seems undesirable as it means longer paths to discovery and more significant/distracting choices to make. However adding a confirmation to the end of it, I think, could strike a good balance here.

I notice that Mute account and Report toot already lead to modals.

Delete toot is currently direct. Unfollow is also direct.

Mute thread and report account are also direct, but those are easy to undo, and don't produce visible side effects or notifications (as far as I know).

strypey

comment created time in 14 days

issue commentnolanlawson/pinafore

Convert fediverse URLs in posts to internal links

I believe the server generally already fetches mentioned URLs for the open graph / card previews, right?

It's by design and social policy that no previews of toots are shown, however I suppose the server could at least remember that it encountered a fediverse-compatible response, and annotate the HTML anchor link in some way for clients to hook into for native navigation indeed.

Is there an upstream issue for this?

strypey

comment created time in 14 days

startedperftools/php-profiler

started time in 15 days

issue commenttootsuite/mastodon

Allow users to mute instances on their end, not just block

Would this be a standard preference in the account settings, implicitly applied to all clients and interfaces?

Or as a local feature within the main web app, and/of for individual apps to implement locally? I've seen some apps already support local filters and queries on the timelines. I don't know how those current work, though, or if they're efficient.

Mintww

comment created time in 15 days

issue commentRanchero-Software/NetNewsWire

Translate NetNewsWire?

I'd love to help out with a Dutch translation.

If you're interested in levering an open platform, then translatewiki.net could help you get a wide range of translations for app on an on-going basis, including peer review from non-technical volunteers. I've worked with them before and could help set things. Practically speaking they'd provide periodic pull requests with semi-automatic exports of the latest string sets.

CyrosX

comment created time in 16 days

PR opened ReticentJohn/Amaroq

@Krinkle Fix typo in "Privacybeleid" in Dutch translation

The welcome screen contains a spelling mistake in the link to the privacy policy. It should be spelled Privacybeleid, and not Pribacybeleid.

The same word also appears elsewhere in the application (post-login) where it is correct already, without spelling mistake.

The typo was introduced in https://github.com/ReticentJohn/Amaroq/commit/15f519a41cd6891257826ea282b669d41dae0267.

+2 -2

0 comment

2 changed files

pr created time in 16 days

push eventKrinkle/Amaroq

Timo Tijhof

commit sha 57fdfc64b01f7140ab0df36b474193a9911a437d

Fix typo "Pribacybeleid" in Dutch strings Follow-up https://github.com/ReticentJohn/Amaroq/commit/15f519a41cd6891257826ea282b669d41dae0267.

view details

push time in 16 days

push eventKrinkle/Amaroq

Timo Tijhof

commit sha f8b0973d20bcb941eb640fa5040f45c92948afec

Fix typo "Pribacybeleid" in Dutch xliff Follow-up https://github.com/ReticentJohn/Amaroq/commit/15f519a41cd6891257826ea282b669d41dae0267.

view details

push time in 16 days

fork Krinkle/Amaroq

A floofy Mastodon companion for iOS

https://appsto.re/us/OfFxib.i

fork in 16 days

issue openedReticentJohn/Amaroq

Login screen flashes when opening app

Each time when opening the app, there is a very brief flash of the login screen, as if I was not logged-in. It feels like this is unintended and might be a bug.

created time in 16 days

issue openedtootsuite/mastodon

Promote RSS icon/link on profile in web interface

Pitch

Right now I find myself putting RSS feed links into my bio with an emoji, like so:

screen shot of public ui

I'm proposing we add something like this (but perhaps not as prominent) to the "public web UI".

(Perhaps to the web app as well, in a menu somewhere, but it's far less important there since one wouid only be on those pages if you already have an account and are actively using it / logged-in to it).

Motivation

I'd like to get more people into decentralised social media, and encourage more people to follow sites they find interesting directly, without being limited to site run by big companies and/or those who maintain dedicated FB/birdsite accounts for those blogs.

For people in a transitional state where they are on board with news readers, it can make it easier to embrace and feel comfortable, I t hink, if they find that the microblogs they counter (public toots on Mastodon) can be followed this way as well. At least, until they're ready to commit to Mastodon fully 😄 (which has a fairly high barrier to entry through picking an instance, creating an identity, and then navigating the still fairly immature landscape of mobile apps). Especially compared to the well-established, localised and mature reader apps out there.

I'd be willing to help write a patch if this change is welcomed.

created time in 16 days

issue commenttootsuite/mastodon

RSS Feed Titles Need to be More Expressive.

Would a patch be welcome for improving the RSS feed items as described?

MilkManzJourDaddy

comment created time in 16 days

issue commenttootsuite/mastodon

improve the rss feeds to work as media rss

See also https://github.com/tootsuite/mastodon/issues/14538

Dorifer

comment created time in 16 days

issue commenttootsuite/mastodon

can't see toots on people's profiles or replies to many toots from self-hosted instance

I'm encountering the same issue on polyglot.city (on masto.host), and observe it both when viewing a profile after searching for it, and after having followed them. I tried this in a web app (Pinafore), and in two mobile apps (Amaroq, and Tootle).

I was nearly sure this was a bug in one of the apps, until I realized that other apps suffer the same issue. I then thought it was a problem with Masto Host, but someone pointed me here, that it is in fact a more general issue that just happens to affect smaller instances the most.

Web Amaroq app Tootle app
capture-web-pinafore Amaroq Tootle

I can sort of understand and explain to people around me, that replies and like/boost counts can be incomplete when looking at a specific toot, if that toot is from someone else, outside your local group.

However, I am unable to explain to people why it is that Mastodon lets them paste/search for any account, and click on accounts of boosted toots or comments, but then cannot "just" browse those account's profile and public toots. We let them click on it and show recent meta data, but then the profile contains only a handful of random/old toots. I think this might be negatively affecting adoption and growth among communities as it means accounts look unappealing or abandoned.

I don't know much about the inner workings of Mastodon. I can totally see how it might be infeasible to federate these ahead of time, and undesirable to locally federate these on-demand when the user isn't followed. But, that suggest to me a few things:

  • Perhaps we should not consult the local database at all then when browsing a profile unless it is followed. Instead, use an upstream API query, possibly cached locally in some way. (Either naively, by query; or normalized into an efficient internal structure separate from the timeline data, with stronger cache expiry or something).
  • Once a new account is followed, we either import "everything" (unlikely), or import just one toot and remember in some way the timestamp of their last public toot and/or when they were followed by non-zero accounts, and for any incomplete query crossing over that date, do the same as for unfollowed accounts.

I also note that we don't really promote web links to the public profile, and on mobile apps these links are often omitted from the interface entirely. I suppose an alternate solution could be to encourage apps to short-circuit links to non-followed accounts and have them point to public account URLs always (thus for apps, switching to a browser and removing the ability to easily follow them without resorting to separately logging in and/or tech-savvy gestures like copying URLs into clipboards), where some apps might choose to instead query upstream APIs directly from the client-side (which might be undesirable in terms of privacy and performance/caching/latency). If this direction is preferred, it might make sense to deprecate or otherwise emit a warning to apps when querying profile data for accounts that are not followed an known to be sparse/outdated.

See also:

  • "proxy pagination" ref https://github.com/tootsuite/mastodon/issues/14023#issuecomment-689026176
chaosmonk1

comment created time in 17 days

issue commentnolanlawson/pinafore

Support for non-English interface language (i18n)

@nolanlawson Is there something I can do as a next step toward this?

I'd also like to contribute a Dutch translation which in turn might make it easier to recommend Pinafore and Mastodon more generally toward my non-technical friends/family in the Netherlands.

Krinkle

comment created time in 17 days

startedReticentJohn/Amaroq

started time in 17 days

startedmastohost/mastodon

started time in 17 days

issue commentAutomattic/simplenote-macos

Rendering freaks out when adding the second underscore to text (for italics)

Note that it gets worse, the rendering also continuously corrupts and uncorrupts while typing in an existing sequence of italic text. Whenever a new word gets added and a space is typed, it corrupts, and then uncorrupts once the next word has begun.

This makes the editor feel rather dizzy!

edit-s2 edit-s3

Krinkle

comment created time in 18 days

issue commentAutomattic/simplenote-macos

Rendering freaks out when adding the second underscore to text (for italics)

Similar to https://github.com/Automattic/simplenote-macos/issues/205

Krinkle

comment created time in 18 days

issue openedAutomattic/simplenote-macos

Rendering freaks out when adding the second underscore to text (for italics)

Reproduced

  1. Create new note, Markdown is on by default.
  2. Enter the following:

* ([Apple](https://books.apple.com)) _about how it was to work at Apple during the original development of Safari and later the iPhone, the internal social and technical processes

  1. Add an underscore _ to the end. And observe rendering freak out.

Observed

Step 2 Step 3
add-s2 add-s3

Then, switch to another note and switch back. The renderer is now normal and with italic text. Then, remove the underscore. Observe that the renderer corrupts in this direction as well:

Step 2 (alt) Step 3 (alt)
remove-s2 remove-s3
  • MacBook Pro (Retina)
  • macOS 10.15.6
  • Simplenote 2.2

created time in 18 days

startedAutomattic/simplenote-macos

started time in 18 days

startedadactio/share-button-type

started time in 23 days

issue commentw3c/web-share

Proposal for a declarative web share button type

Apart from placing a button in the content, I'm not sure what the proposal offers over what (at least one) browser already provides? For instance, Safari UI already provides a share button by default on every page: […]

Similarly, sharing is built into mobile browsers like Safari:

@marcoscaceres wrote:

The API is specialized... using it to share the same page is kinda pointless.

Not if you're viewing a page in a progressive web app that is standalone or fullscreen. […]

👍 I too encounter this at times in offline/homescreen-supported PWAs where authors forget to put a share button in the interface, presumably because in the development stage one mainly tests in the browser mode where the address bar etc are all there.

adactio

comment created time in 23 days

delete branch Krinkle/jquery.wikilookup

delete branch : minor

delete time in 24 days

push eventqunitjs/qunitjs.com

Timo Tijhof

commit sha 6cc8eff88abff57e04a9622f8bb679e4d96cc462

All: Update url and version to 2.11.3

view details

push time in 25 days

delete branch qunitjs/qunitjs.com

delete branch : master

delete time in 25 days

create barnchqunitjs/qunitjs.com

branch : master

created branch time in 25 days

release qunitjs/qunit

2.11.3

released time in 25 days

push eventjquery/codeorigin.jquery.com

Timo Tijhof

commit sha 0cca2723f517c63b8d65a8e2a781d5f5eb1df6a0

qunit: Added version 2.11.3

view details

push time in 25 days

created tagqunitjs/qunit

tag2.11.3

🔮 An easy-to-use JavaScript unit testing framework.

created time in 25 days

push eventqunitjs/qunit

Timo Tijhof

commit sha f7cd51ebfbcb7c03313dba22b75cff308327505d

Build: Prepare 2.11.3 release

view details

push time in 25 days

delete branch qunitjs/qunit

delete branch : release

delete time in 25 days

PR merged qunitjs/qunit

Build: Prepare 2.11.3 release
+9 -2

0 comment

2 changed files

Krinkle

pr closed time in 25 days

PR opened qunitjs/qunit

Build: Prepare 2.11.3 release
+9 -2

0 comment

2 changed files

pr created time in 25 days

create barnchqunitjs/qunit

branch : release

created branch time in 25 days

CommitCommentEvent

delete branch qunitjs/qunit

delete branch : docs-contributing

delete time in 25 days

push eventqunitjs/qunit

Timo Tijhof

commit sha 4d6fb4fbdb2236c7e371cee19b8c7790fa5c7ba8

Docs: Update outdated CONTRIBUTING.md guide

view details

push time in 25 days

push eventqunitjs/qunit

Timo Tijhof

commit sha f0117c0242844550f6aed2dc1b706c0ffb44c769

CLI: Fix 'qunit' require error on Node 10 if qunit.json exists If the project using QUnit has a local qunit.json file in the repository root, then the CLI was unable to find the 'qunit' package. Instead, it first found a local 'qunit.json' file. This affected an ESLint plugin with a 'qunit' preset file. This bug was fixed in Node 12, and thus only affects Node 10 for us. The bug is also specific to require.resolve(). Regular use of require() was not affected and always correctly found the local package. (A local file would only be considered if the require started with dot-slash like `./qunit`.) Ref https://github.com/nodejs/node/issues/35367. Fixes https://github.com/qunitjs/qunit/issues/1484.

view details

Timo Tijhof

commit sha 572439b6d31c7e77f55c2414dc4470652c58e2ec

Logger: Simplify Logger.warn() internals

view details

Timo Tijhof

commit sha 7cc9a7ecfe6c4ec033780c3a7c3413beba82411e

HTML Reporter: Document situation around optional 'qunit' element

view details

Timo Tijhof

commit sha 4d6fb4fbdb2236c7e371cee19b8c7790fa5c7ba8

Docs: Update outdated CONTRIBUTING.md guide

view details

push time in 25 days

delete branch qunitjs/qunit

delete branch : js-reporters-2.0.0

delete time in 25 days

delete branch qunitjs/qunit

delete branch : cleanup

delete time in 25 days

push eventqunitjs/qunit

Timo Tijhof

commit sha 572439b6d31c7e77f55c2414dc4470652c58e2ec

Logger: Simplify Logger.warn() internals

view details

Timo Tijhof

commit sha 7cc9a7ecfe6c4ec033780c3a7c3413beba82411e

HTML Reporter: Document situation around optional 'qunit' element

view details

push time in 25 days

create barnchqunitjs/qunit

branch : cleanup

created branch time in 25 days

startedemberjs/ember.js

started time in a month

startedember-learn/guides-source

started time in a month

CommitCommentEvent

PR opened qunitjs/qunit

Clean up internal access to document and performance globals

Remove some of the indirection and simplify the way it works.

+55 -64

0 comment

9 changed files

pr created time in a month

push eventqunitjs/qunit

Timo Tijhof

commit sha 0d49e43839a7fd0580910b3cd609f390510ccb3e

Core: Consolidate use of internal 'performance' utility

view details

Timo Tijhof

commit sha a77659e7885d7ef88e82c9ecabacc9f9844425ce

Core: Replace internal use of 'defined' with 'globals'

view details

push time in a month

create barnchqunitjs/qunit

branch : rm-defined

created branch time in a month

Pull request review commentqunitjs/qunit

Add testsNotRan to keep count of testsNotRan to ensure moduleDone is called

 QUnit.module( "after (skip)", { 	} } ); -QUnit.test( "does not run after initial tests", function( assert ) {

@step2yeung Friendly ping to check if you're able to find time for this. If not, I might give it a go next week for the next patch release. Thanks again!

step2yeung

comment created time in a month

PullRequestReviewEvent

issue commentqunitjs/qunit

New test reporter hook

@ventuno Absolutely! I wanted to understand if the timing and overall contract of afterEach would suit your needs. I agree we would need to make this much simpler indeed.

The way I've handled this in projects myself is by wrapping the test or module functions, like so:

const orgModule = QUnit.module;
let nested = false;
QUnit.module = function (name, executeNow) {
  if (nested || typeof executeNow !== 'function') {
    // Ignore nested modules, already inherits parent hooks.
    // Ignore non-scoped modules.
    return orgModule.apply(this, arguments);
  }
  const orgExecute = executeNow;
  executeNow = function (hooks) {
    hooks.beforeEach(function () {
      // Do global setup, e.g. sinon sandbox, app fixtures, etc.
    });
    hooks.afterEach(function () {
      // Do global teardown, e.g. restore sandbox, or assert zero open transactions.
    });
    nested = true;
    const ret = orgExecute.apply(this, arguments);
    nested = false;
    return ret;
  };
  return orgModule(name, executeNow);
};

This reduces the "hackiness" factor by a lot, but remains rather hacky still.

Perhaps an officially supported "global hook" would make sense. E.g. a way to implicitly add before, beforeEach, after, afterEach to all modules. That would also give you the future space for a "per suite" hook as you were hinting at.

In terms of ergonomics, I imagine it could work something like this:

QUnit.config.hooks.afterEach((assert) => {
 /* … */
});
ventuno

comment created time in a month

PullRequestReviewEvent

push eventqunitjs/qunit

Timo Tijhof

commit sha f0117c0242844550f6aed2dc1b706c0ffb44c769

CLI: Fix 'qunit' require error on Node 10 if qunit.json exists If the project using QUnit has a local qunit.json file in the repository root, then the CLI was unable to find the 'qunit' package. Instead, it first found a local 'qunit.json' file. This affected an ESLint plugin with a 'qunit' preset file. This bug was fixed in Node 12, and thus only affects Node 10 for us. The bug is also specific to require.resolve(). Regular use of require() was not affected and always correctly found the local package. (A local file would only be considered if the require started with dot-slash like `./qunit`.) Ref https://github.com/nodejs/node/issues/35367. Fixes https://github.com/qunitjs/qunit/issues/1484.

view details

push time in a month

delete branch qunitjs/qunit

delete branch : resolve-paths-bug

delete time in a month

PR merged qunitjs/qunit

CLI: Fix 'qunit' require error on Node 10 if qunit.json exists

If the project using QUnit has a local qunit.json file in the repository root, then the CLI was unable to find the 'qunit' package. Instead, it first found a local 'qunit.json' file.

This affected an ESLint plugin with a 'qunit' preset file.

This bug was fixed in Node 12, and thus only affects Node 10 for us.

The bug is also specific to require.resolve(). Regular use of require() was not affected and always correctly found the local package. (A local file would only be considered if the require started with dot-slash like ./qunit.)

Ref https://github.com/nodejs/node/issues/35367. Fixes https://github.com/qunitjs/qunit/issues/1484.

+6 -1

0 comment

1 changed file

Krinkle

pr closed time in a month

issue closedqunitjs/qunit

On Node 10 and older, CLI can't find "qunit" if there's a "qunit.json" file

Tell us about your runtime:

  • QUnit version: 2.11.2
  • What environment are you running QUnit in? (e.g., browser, Node): Node

What are you trying to do?

Running qunit test/foo.js via npm test from package.json.

The project directory is a clone of https://github.com/wikimedia/eslint-config-wikimedia/.

What actually happened?

The QUnit CLI process fails early on due to confusing this file for the qunit package:

/eslint-config-wikimedia/node_modules/js-reporters/dist/js-reporters.js:1530
    runner.on('runStart', this.onRunStart.bind(this));
           ^

TypeError: runner.on is not a function
    at new TapReporter (/eslint-config-wikimedia/node_modules/js-reporters/dist/js-reporters.js:1530:12)
    at Function.init (/eslint-config-wikimedia/node_modules/js-reporters/dist/js-reporters.js:1598:14)
    at run (/eslint-config-wikimedia/node_modules/qunit/src/cli/run.js:45:19)
    at Object.<anonymous> (/eslint-config-wikimedia/node_modules/qunit/bin/qunit.js:56:2)

Manual inspection reveals that the runner variable received from https://github.com/qunitjs/qunit/blob/2.11.2/src/cli/require-qunit.js#L7 is in fact the qunit.json file, and not the qunit package.

		const localQUnitPath = resolve( "qunit", { paths: [ process.cwd() ] } );

closed time in a month

Krinkle

PR closed qunitjs/qunitjs.com

Improved Docs invalid
+1 -1

2 comments

1 changed file

nikhilkhetwal

pr closed time in a month

pull request commentqunitjs/qunitjs.com

Improved Docs

https://hacktoberfest.digitalocean.com/faq

nikhilkhetwal

comment created time in a month

pull request commentqunitjs/qunitjs.com

Improved Docs

nikhilkhetwal

comment created time in a month

PR closed qunitjs/qunitjs.com

Improved Docs invalid
+1 -1

1 comment

1 changed file

nikhilkhetwal

pr closed time in a month

issue commentqunitjs/qunit

Update HTML Reporter to use QUnit.on() instead of legacy events

There is no CRI event for individual assertions. Given we collapse tests by default in the interface, perhaps it's okay to lose this immediacy in the HTML DOM. Batching the DOM/layout to only happen at the end of each test might actually speed up execution as well.

The reporter currently uses testDone() which exposes the testId it uses to associate parts of the DOM, but callback doesn't expose the array of assertions.

The testEnd event, on the other hand, does have the assertion details, but doesn't have QUnit's testId.

I wrote more at https://github.com/qunitjs/qunit/issues/1118#issuecomment-702488633 about untangling testId from Core, for the benefit of plugins that change the HTML output.

I believe testId is probably something we only use in the HTML runner right now. On the CLI one wouldn't know that ID to pass even if we supported it there as argument. (The QUnit.config object is supported on Node, implicitly, which one could use from a boostrap file with --require, but that seems unusual, and something we'd breaking in QUnit 3.0 in favour of something better that we'd ship in QUnit 2.x.)

Thinking out loud:

  • Perhaps QUnit.config.filter could support being a a callback function (or array of such), that QUnit gives an object similar to the testStart event data (test name, suite name, and full name).
  • The HTML runner would use this to decide which tests should run, based on its query params. This could use the same hashing function we use today, or something else.
Krinkle

comment created time in a month

issue commentqunitjs/qunit

Separate HTML runner and HTML reporter?

I'm looking into this as part of https://github.com/qunitjs/qunit/issues/1486, and running into an obstacle with testId. We currrently get this from Core and use it in the HTML reporter as part of the HTML element IDs, which are intended to be part of the public API (ref https://github.com/qunitjs/qunitjs.com/issues/159) so that QUnit plugins can use them to display additional visualisations.

For QUnit's own use, we could trivially generate a different set of IDs (e.g. lazily, from the testStart event).

For plugins, we may need to change it so that the plugin reacts to the HTML rather than influencing it from the inside. For example, the way a plugin finds the HTML element currently is via (contextual) assert.test.testId.

Straw-man proposal:

  • HTML Reporter: Generate new test IDs here.
  • HTML Reporter: Emit custom events (not part of js-reporters/CRI) for the purpose of augment the display of a completed test and a completed assertion. Analogous to QUnit.testDone (CRI testEnd) and QUnit.log (has no CRI event), from which we'd provide references to the DOM elements in question.

Challenges this brings about:

  • Can we actually deprecate the core testId property? It seems we'd need to keep this at least privately for the URL parameter and re-running tests. However, "rerun" is an intimate part of the user interface. It's not like the checkboxes and module dropdown that are neatly separated in the would-be "HTML Runner" component.
  • How would our HTML Reporter operate based on CRI events whilst still being able to do QUnit-specific things like re-running tests. Maybe it's fine to have inline conditionals that would be QUnit-specific and if it were to be its own project at some point, support for other custom features of individual testing frameworks could be added. Maybe that's not so bad, and still a good enough improvement over the status quo.

Perhaps it's not worth separating the two, but we could still add support for disabling the bulk of the output and running a plain text CRI reporter in its place. In any event, that could of course be a good first step either way.

platinumazure

comment created time in a month

more