Repository files navigation

count-timer

A class implementing a counting-up/counting-down timer

Installation

$ pip install count-timer

Demo

This is a rudimentary text-based demonstration of the count-down version of the CountTimer class. You can launch it directly:

$ demo

...or from Python:

$ python count_timer/demo_async.py

Once launched, the demo will prompt you to enter a duration (the count-down timer expiration value). The timer will begin counting down on the terminal. The time will transition to yellow when there is <10 sec before expiration, and red when there are <5 sec.

Pressing "q" will cause the timer to quit.

Pressing "r" will cause the timer to restart at the original duration.

The timer may be paused/resumed by pressing the space bar.

2022-07-29 08 08 16

API

CountTimer(duration: float)

Creates a counting timer, with configurable duration (seconds). The timer starts at time t=0, and counts up using the system clock until it hits t=duration. At that time, the expired property is set to True. Note that the counter continues incrementing beyond the expiration time.

If duration is set to zero (which is the default), the timer never expires and continues to count forever.

The timer can be paused using the pause() method. When paused, the timer stops incrementing. When the clock is resumed again (using the resume() method), it continues from where it left off.

This counter/timer can be used as a "count-up" timer or a "count-down" timer. The default mode of interpretation is "up," but if you prefer a countdown time, simply look at the remaining property instead of elapsed.

┌─────────────────────────────────────────────────────────────────────────────────────┐
│ count_timer.count_timer.CountTimer │
└─────────────────────────────────────────────────────────────────────────────────────┘
class CountTimer(duration=0):
A counting timer (w/ optional expiry that can be started, paused, resumed and reset
Configuration:
duration: Number of seconds to elapse before expiration
(optional; default: 0 - indicates time never expires)
Methods:
start(): start the timer
pause(): pause the timer
resume(): resume the timer
reset(): reset the timer to default (duration 0/paused/not started)
Properties:
paused: True if timer is paused
running: True if timer is running
duration: value of the 'duration' config param
elapsed: time (sec) since timer was started
remaining: time (sec) until timer expires
Inspiration from https://stackoverflow.com/a/60027719/4402572
def start(self):
Start the timer.
def pause(self):
Pause the timer.
def resume(self):
Resume the timer.
def reset(self, duration=0):

elapsed: float Time (seconds) since the timer was started

paused: bool Whether or not the timer's countup has been paused

running: bool Whether or not the timer is currently running (i.e. incrementing internally)

expired: bool Whether or not the timer's configured expiration value has been exceeded

start(): start() -> None Starts the timer, counting up indefinitely

pause(): pause() -> None Pauses the timer; the countup is stopped until resumed

resume(): resume() -> None Resumes / unpauses the timer - when the timer is resumed, the countdown starts from where it was when paused

reset(): reset() -> None Puts the timer back in its original state when first created (paused / not yet started)

About

A timer with optional expiry that can count up or down

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

count-timer

A class implementing a counting-up/counting-down timer

Installation

$ pip install count-timer

Demo

This is a rudimentary text-based demonstration of the count-down version of the CountTimer class. You can launch it directly:

$ demo

...or from Python:

$ python count_timer/demo_async.py

Once launched, the demo will prompt you to enter a duration (the count-down timer expiration value). The timer will begin counting down on the terminal. The time will transition to yellow when there is <10 sec before expiration, and red when there are <5 sec.

Pressing "q" will cause the timer to quit.

Pressing "r" will cause the timer to restart at the original duration.

The timer may be paused/resumed by pressing the space bar.

2022-07-29 08 08 16

API

CountTimer(duration: float)

Creates a counting timer, with configurable duration (seconds). The timer starts at time t=0, and counts up using the system clock until it hits t=duration. At that time, the expired property is set to True. Note that the counter continues incrementing beyond the expiration time.

If duration is set to zero (which is the default), the timer never expires and continues to count forever.

The timer can be paused using the pause() method. When paused, the timer stops incrementing. When the clock is resumed again (using the resume() method), it continues from where it left off.

This counter/timer can be used as a "count-up" timer or a "count-down" timer. The default mode of interpretation is "up," but if you prefer a countdown time, simply look at the remaining property instead of elapsed.

┌─────────────────────────────────────────────────────────────────────────────────────┐
│ count_timer.count_timer.CountTimer │
└─────────────────────────────────────────────────────────────────────────────────────┘
class CountTimer(duration=0):
A counting timer (w/ optional expiry that can be started, paused, resumed and reset
Configuration:
duration: Number of seconds to elapse before expiration
(optional; default: 0 - indicates time never expires)
Methods:
start(): start the timer
pause(): pause the timer
resume(): resume the timer
reset(): reset the timer to default (duration 0/paused/not started)
Properties:
paused: True if timer is paused
running: True if timer is running
duration: value of the 'duration' config param
elapsed: time (sec) since timer was started
remaining: time (sec) until timer expires
Inspiration from https://stackoverflow.com/a/60027719/4402572
def start(self):
Start the timer.
def pause(self):
Pause the timer.
def resume(self):
Resume the timer.
def reset(self, duration=0):

elapsed: float Time (seconds) since the timer was started

paused: bool Whether or not the timer's countup has been paused

running: bool Whether or not the timer is currently running (i.e. incrementing internally)

expired: bool Whether or not the timer's configured expiration value has been exceeded

start(): start() -> None Starts the timer, counting up indefinitely

pause(): pause() -> None Pauses the timer; the countup is stopped until resumed

resume(): resume() -> None Resumes / unpauses the timer - when the timer is resumed, the countdown starts from where it was when paused

reset(): reset() -> None Puts the timer back in its original state when first created (paused / not yet started)

About

A timer with optional expiry that can count up or down

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

count-timer

A class implementing a counting-up/counting-down timer

Installation

$ pip install count-timer

Demo

This is a rudimentary text-based demonstration of the count-down version of the CountTimer class. You can launch it directly:

$ demo

...or from Python:

$ python count_timer/demo_async.py

Once launched, the demo will prompt you to enter a duration (the count-down timer expiration value). The timer will begin counting down on the terminal. The time will transition to yellow when there is <10 sec before expiration, and red when there are <5 sec.

Pressing "q" will cause the timer to quit.

Pressing "r" will cause the timer to restart at the original duration.

The timer may be paused/resumed by pressing the space bar.

2022-07-29 08 08 16

API

CountTimer(duration: float)

Creates a counting timer, with configurable duration (seconds). The timer starts at time t=0, and counts up using the system clock until it hits t=duration. At that time, the expired property is set to True. Note that the counter continues incrementing beyond the expiration time.

If duration is set to zero (which is the default), the timer never expires and continues to count forever.

The timer can be paused using the pause() method. When paused, the timer stops incrementing. When the clock is resumed again (using the resume() method), it continues from where it left off.

This counter/timer can be used as a "count-up" timer or a "count-down" timer. The default mode of interpretation is "up," but if you prefer a countdown time, simply look at the remaining property instead of elapsed.

┌─────────────────────────────────────────────────────────────────────────────────────┐
│ count_timer.count_timer.CountTimer │
└─────────────────────────────────────────────────────────────────────────────────────┘
class CountTimer(duration=0):
A counting timer (w/ optional expiry that can be started, paused, resumed and reset
Configuration:
duration: Number of seconds to elapse before expiration
(optional; default: 0 - indicates time never expires)
Methods:
start(): start the timer
pause(): pause the timer
resume(): resume the timer
reset(): reset the timer to default (duration 0/paused/not started)
Properties:
paused: True if timer is paused
running: True if timer is running
duration: value of the 'duration' config param
elapsed: time (sec) since timer was started
remaining: time (sec) until timer expires
Inspiration from https://stackoverflow.com/a/60027719/4402572
def start(self):
Start the timer.
def pause(self):
Pause the timer.
def resume(self):
Resume the timer.
def reset(self, duration=0):

elapsed: float Time (seconds) since the timer was started

paused: bool Whether or not the timer's countup has been paused

running: bool Whether or not the timer is currently running (i.e. incrementing internally)

expired: bool Whether or not the timer's configured expiration value has been exceeded

start(): start() -> None Starts the timer, counting up indefinitely

pause(): pause() -> None Pauses the timer; the countup is stopped until resumed

resume(): resume() -> None Resumes / unpauses the timer - when the timer is resumed, the countdown starts from where it was when paused

reset(): reset() -> None Puts the timer back in its original state when first created (paused / not yet started)

About

A timer with optional expiry that can count up or down

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

count-timer

A class implementing a counting-up/counting-down timer

Installation

$ pip install count-timer

Demo

This is a rudimentary text-based demonstration of the count-down version of the CountTimer class. You can launch it directly:

$ demo

...or from Python:

$ python count_timer/demo_async.py

Once launched, the demo will prompt you to enter a duration (the count-down timer expiration value). The timer will begin counting down on the terminal. The time will transition to yellow when there is <10 sec before expiration, and red when there are <5 sec.

Pressing "q" will cause the timer to quit.

Pressing "r" will cause the timer to restart at the original duration.

The timer may be paused/resumed by pressing the space bar.

2022-07-29 08 08 16

API

CountTimer(duration: float)

Creates a counting timer, with configurable duration (seconds). The timer starts at time t=0, and counts up using the system clock until it hits t=duration. At that time, the expired property is set to True. Note that the counter continues incrementing beyond the expiration time.

If duration is set to zero (which is the default), the timer never expires and continues to count forever.

The timer can be paused using the pause() method. When paused, the timer stops incrementing. When the clock is resumed again (using the resume() method), it continues from where it left off.

This counter/timer can be used as a "count-up" timer or a "count-down" timer. The default mode of interpretation is "up," but if you prefer a countdown time, simply look at the remaining property instead of elapsed.

┌─────────────────────────────────────────────────────────────────────────────────────┐
│ count_timer.count_timer.CountTimer │
└─────────────────────────────────────────────────────────────────────────────────────┘
class CountTimer(duration=0):
A counting timer (w/ optional expiry that can be started, paused, resumed and reset
Configuration:
duration: Number of seconds to elapse before expiration
(optional; default: 0 - indicates time never expires)
Methods:
start(): start the timer
pause(): pause the timer
resume(): resume the timer
reset(): reset the timer to default (duration 0/paused/not started)
Properties:
paused: True if timer is paused
running: True if timer is running
duration: value of the 'duration' config param
elapsed: time (sec) since timer was started
remaining: time (sec) until timer expires
Inspiration from https://stackoverflow.com/a/60027719/4402572
def start(self):
Start the timer.
def pause(self):
Pause the timer.
def resume(self):
Resume the timer.
def reset(self, duration=0):

elapsed: float Time (seconds) since the timer was started

paused: bool Whether or not the timer's countup has been paused

running: bool Whether or not the timer is currently running (i.e. incrementing internally)

expired: bool Whether or not the timer's configured expiration value has been exceeded

start(): start() -> None Starts the timer, counting up indefinitely

pause(): pause() -> None Pauses the timer; the countup is stopped until resumed

resume(): resume() -> None Resumes / unpauses the timer - when the timer is resumed, the countdown starts from where it was when paused

reset(): reset() -> None Puts the timer back in its original state when first created (paused / not yet started)

About

A timer with optional expiry that can count up or down

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

count-timer

A class implementing a counting-up/counting-down timer

Installation

$ pip install count-timer

Demo

This is a rudimentary text-based demonstration of the count-down version of the CountTimer class. You can launch it directly:

$ demo

...or from Python:

$ python count_timer/demo_async.py

Once launched, the demo will prompt you to enter a duration (the count-down timer expiration value). The timer will begin counting down on the terminal. The time will transition to yellow when there is <10 sec before expiration, and red when there are <5 sec.

Pressing "q" will cause the timer to quit.

Pressing "r" will cause the timer to restart at the original duration.

The timer may be paused/resumed by pressing the space bar.

2022-07-29 08 08 16

API

CountTimer(duration: float)

Creates a counting timer, with configurable duration (seconds). The timer starts at time t=0, and counts up using the system clock until it hits t=duration. At that time, the expired property is set to True. Note that the counter continues incrementing beyond the expiration time.

If duration is set to zero (which is the default), the timer never expires and continues to count forever.

The timer can be paused using the pause() method. When paused, the timer stops incrementing. When the clock is resumed again (using the resume() method), it continues from where it left off.

This counter/timer can be used as a "count-up" timer or a "count-down" timer. The default mode of interpretation is "up," but if you prefer a countdown time, simply look at the remaining property instead of elapsed.

┌─────────────────────────────────────────────────────────────────────────────────────┐
│ count_timer.count_timer.CountTimer │
└─────────────────────────────────────────────────────────────────────────────────────┘
class CountTimer(duration=0):
A counting timer (w/ optional expiry that can be started, paused, resumed and reset
Configuration:
duration: Number of seconds to elapse before expiration
(optional; default: 0 - indicates time never expires)
Methods:
start(): start the timer
pause(): pause the timer
resume(): resume the timer
reset(): reset the timer to default (duration 0/paused/not started)
Properties:
paused: True if timer is paused
running: True if timer is running
duration: value of the 'duration' config param
elapsed: time (sec) since timer was started
remaining: time (sec) until timer expires
Inspiration from https://stackoverflow.com/a/60027719/4402572
def start(self):
Start the timer.
def pause(self):
Pause the timer.
def resume(self):
Resume the timer.
def reset(self, duration=0):

elapsed: float Time (seconds) since the timer was started

paused: bool Whether or not the timer's countup has been paused

running: bool Whether or not the timer is currently running (i.e. incrementing internally)

expired: bool Whether or not the timer's configured expiration value has been exceeded

start(): start() -> None Starts the timer, counting up indefinitely

pause(): pause() -> None Pauses the timer; the countup is stopped until resumed

resume(): resume() -> None Resumes / unpauses the timer - when the timer is resumed, the countdown starts from where it was when paused

reset(): reset() -> None Puts the timer back in its original state when first created (paused / not yet started)

About

A timer with optional expiry that can count up or down

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

count-timer

A class implementing a counting-up/counting-down timer

Installation

$ pip install count-timer

Demo

This is a rudimentary text-based demonstration of the count-down version of the CountTimer class. You can launch it directly:

$ demo

...or from Python:

$ python count_timer/demo_async.py

Once launched, the demo will prompt you to enter a duration (the count-down timer expiration value). The timer will begin counting down on the terminal. The time will transition to yellow when there is <10 sec before expiration, and red when there are <5 sec.

Pressing "q" will cause the timer to quit.

Pressing "r" will cause the timer to restart at the original duration.

The timer may be paused/resumed by pressing the space bar.

2022-07-29 08 08 16

API

CountTimer(duration: float)

Creates a counting timer, with configurable duration (seconds). The timer starts at time t=0, and counts up using the system clock until it hits t=duration. At that time, the expired property is set to True. Note that the counter continues incrementing beyond the expiration time.

If duration is set to zero (which is the default), the timer never expires and continues to count forever.

The timer can be paused using the pause() method. When paused, the timer stops incrementing. When the clock is resumed again (using the resume() method), it continues from where it left off.

This counter/timer can be used as a "count-up" timer or a "count-down" timer. The default mode of interpretation is "up," but if you prefer a countdown time, simply look at the remaining property instead of elapsed.

┌─────────────────────────────────────────────────────────────────────────────────────┐
│ count_timer.count_timer.CountTimer │
└─────────────────────────────────────────────────────────────────────────────────────┘
class CountTimer(duration=0):
A counting timer (w/ optional expiry that can be started, paused, resumed and reset
Configuration:
duration: Number of seconds to elapse before expiration
(optional; default: 0 - indicates time never expires)
Methods:
start(): start the timer
pause(): pause the timer
resume(): resume the timer
reset(): reset the timer to default (duration 0/paused/not started)
Properties:
paused: True if timer is paused
running: True if timer is running
duration: value of the 'duration' config param
elapsed: time (sec) since timer was started
remaining: time (sec) until timer expires
Inspiration from https://stackoverflow.com/a/60027719/4402572
def start(self):
Start the timer.
def pause(self):
Pause the timer.
def resume(self):
Resume the timer.
def reset(self, duration=0):

elapsed: float Time (seconds) since the timer was started

paused: bool Whether or not the timer's countup has been paused

running: bool Whether or not the timer is currently running (i.e. incrementing internally)

expired: bool Whether or not the timer's configured expiration value has been exceeded

start(): start() -> None Starts the timer, counting up indefinitely

pause(): pause() -> None Pauses the timer; the countup is stopped until resumed

resume(): resume() -> None Resumes / unpauses the timer - when the timer is resumed, the countdown starts from where it was when paused

reset(): reset() -> None Puts the timer back in its original state when first created (paused / not yet started)

About

A timer with optional expiry that can count up or down

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

count-timer

A class implementing a counting-up/counting-down timer

Installation

$ pip install count-timer

Demo

This is a rudimentary text-based demonstration of the count-down version of the CountTimer class. You can launch it directly:

$ demo

...or from Python:

$ python count_timer/demo_async.py

Once launched, the demo will prompt you to enter a duration (the count-down timer expiration value). The timer will begin counting down on the terminal. The time will transition to yellow when there is <10 sec before expiration, and red when there are <5 sec.

Pressing "q" will cause the timer to quit.

Pressing "r" will cause the timer to restart at the original duration.

The timer may be paused/resumed by pressing the space bar.

2022-07-29 08 08 16

API

CountTimer(duration: float)

Creates a counting timer, with configurable duration (seconds). The timer starts at time t=0, and counts up using the system clock until it hits t=duration. At that time, the expired property is set to True. Note that the counter continues incrementing beyond the expiration time.

If duration is set to zero (which is the default), the timer never expires and continues to count forever.

The timer can be paused using the pause() method. When paused, the timer stops incrementing. When the clock is resumed again (using the resume() method), it continues from where it left off.

This counter/timer can be used as a "count-up" timer or a "count-down" timer. The default mode of interpretation is "up," but if you prefer a countdown time, simply look at the remaining property instead of elapsed.

┌─────────────────────────────────────────────────────────────────────────────────────┐
│ count_timer.count_timer.CountTimer │
└─────────────────────────────────────────────────────────────────────────────────────┘
class CountTimer(duration=0):
A counting timer (w/ optional expiry that can be started, paused, resumed and reset
Configuration:
duration: Number of seconds to elapse before expiration
(optional; default: 0 - indicates time never expires)
Methods:
start(): start the timer
pause(): pause the timer
resume(): resume the timer
reset(): reset the timer to default (duration 0/paused/not started)
Properties:
paused: True if timer is paused
running: True if timer is running
duration: value of the 'duration' config param
elapsed: time (sec) since timer was started
remaining: time (sec) until timer expires
Inspiration from https://stackoverflow.com/a/60027719/4402572
def start(self):
Start the timer.
def pause(self):
Pause the timer.
def resume(self):
Resume the timer.
def reset(self, duration=0):

elapsed: float Time (seconds) since the timer was started

paused: bool Whether or not the timer's countup has been paused

running: bool Whether or not the timer is currently running (i.e. incrementing internally)

expired: bool Whether or not the timer's configured expiration value has been exceeded

start(): start() -> None Starts the timer, counting up indefinitely

pause(): pause() -> None Pauses the timer; the countup is stopped until resumed

resume(): resume() -> None Resumes / unpauses the timer - when the timer is resumed, the countdown starts from where it was when paused

reset(): reset() -> None Puts the timer back in its original state when first created (paused / not yet started)

About

A timer with optional expiry that can count up or down

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

count-timer

A class implementing a counting-up/counting-down timer

Installation

$ pip install count-timer

Demo

This is a rudimentary text-based demonstration of the count-down version of the CountTimer class. You can launch it directly:

$ demo

...or from Python:

$ python count_timer/demo_async.py

Once launched, the demo will prompt you to enter a duration (the count-down timer expiration value). The timer will begin counting down on the terminal. The time will transition to yellow when there is <10 sec before expiration, and red when there are <5 sec.

Pressing "q" will cause the timer to quit.

Pressing "r" will cause the timer to restart at the original duration.

The timer may be paused/resumed by pressing the space bar.

2022-07-29 08 08 16

API

CountTimer(duration: float)

Creates a counting timer, with configurable duration (seconds). The timer starts at time t=0, and counts up using the system clock until it hits t=duration. At that time, the expired property is set to True. Note that the counter continues incrementing beyond the expiration time.

If duration is set to zero (which is the default), the timer never expires and continues to count forever.

The timer can be paused using the pause() method. When paused, the timer stops incrementing. When the clock is resumed again (using the resume() method), it continues from where it left off.

This counter/timer can be used as a "count-up" timer or a "count-down" timer. The default mode of interpretation is "up," but if you prefer a countdown time, simply look at the remaining property instead of elapsed.

┌─────────────────────────────────────────────────────────────────────────────────────┐
│ count_timer.count_timer.CountTimer │
└─────────────────────────────────────────────────────────────────────────────────────┘
class CountTimer(duration=0):
A counting timer (w/ optional expiry that can be started, paused, resumed and reset
Configuration:
duration: Number of seconds to elapse before expiration
(optional; default: 0 - indicates time never expires)
Methods:
start(): start the timer
pause(): pause the timer
resume(): resume the timer
reset(): reset the timer to default (duration 0/paused/not started)
Properties:
paused: True if timer is paused
running: True if timer is running
duration: value of the 'duration' config param
elapsed: time (sec) since timer was started
remaining: time (sec) until timer expires
Inspiration from https://stackoverflow.com/a/60027719/4402572
def start(self):
Start the timer.
def pause(self):
Pause the timer.
def resume(self):
Resume the timer.
def reset(self, duration=0):

elapsed: float Time (seconds) since the timer was started

paused: bool Whether or not the timer's countup has been paused

running: bool Whether or not the timer is currently running (i.e. incrementing internally)

expired: bool Whether or not the timer's configured expiration value has been exceeded

start(): start() -> None Starts the timer, counting up indefinitely

pause(): pause() -> None Pauses the timer; the countup is stopped until resumed

resume(): resume() -> None Resumes / unpauses the timer - when the timer is resumed, the countdown starts from where it was when paused

reset(): reset() -> None Puts the timer back in its original state when first created (paused / not yet started)

About

A timer with optional expiry that can count up or down

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages