Introduction
Introduction Statistics Contact Development Disclaimer Help
improvements - jscancer - Javascript crap (relatively small)
git clone git://git.codemadness.org/jscancer
Log
Files
Refs
README
LICENSE
---
commit 13a12137bb28679d37ce6672224e714ba0ab24dd
parent d606fe0157d28f240efac38511c881e6e781ce68
Author: Hiltjo Posthuma <[email protected]>
Date: Thu, 22 Dec 2022 18:12:19 +0100
improvements
fixes and enhancements:
- xhrform: fix for when novalidate is set on the form or element.
- add xhr form test for it.
- datalist: improve use of label and values
- Make sure when a data-value is empty (as opposed to unset) it is still used.
- Try to use the label when it is set (not the value): matches the native
browser more closely too and it is more logical.
- Add as a test to test.html
added:
- add clipboard copy script
documentation:
- remove some empty TODO files
- improve some README texts
license:
- bump LICENSE year
Diffstat:
M LICENSE | 2 +-
M README | 6 +++---
A clipcopy/README | 26 ++++++++++++++++++++++++++
A clipcopy/clipcopy.js | 28 ++++++++++++++++++++++++++++
A clipcopy/example.html | 10 ++++++++++
M datalist/README | 6 +-----
D datalist/TODO | 0
M datalist/datalist.js | 31 +++++++++++++++++++++++------…
M datalist/test.html | 16 ++++++++++++++--
M datepicker/README | 4 ----
D datepicker/TODO | 0
M tooltipxhr/README | 4 ----
D tooltipxhr/TODO | 0
M treeview/README | 11 +++++++----
M xhrform/README | 4 ++--
A xhrform/test.html | 34 +++++++++++++++++++++++++++++…
M xhrform/xhrform.js | 4 +++-
17 files changed, 152 insertions(+), 34 deletions(-)
---
diff --git a/LICENSE b/LICENSE
@@ -1,6 +1,6 @@
ISC License
-Copyright (c) 2016-2021 Hiltjo Posthuma <[email protected]>
+Copyright (c) 2016-2023 Hiltjo Posthuma <[email protected]>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
diff --git a/README b/README
@@ -9,8 +9,8 @@ Goals
- Functional for 90% of the tasks.
- Be compatible with most commonly used browsers (but not ancient browsers).
- If possible fallback to native browser behaviour.
-- Provide consistent behaviour for things like a datepicker, datalist and so on
- until the major browsers will support it consistently natively.
+- Provide consistent behaviour for things like a datepicker, datalist and so
+ on until the major browsers will support it consistently natively.
Issues with native behaviour
@@ -33,7 +33,7 @@ Inconsistent autocomplete behaviour, for example:
Filter:
- In Firefox filter part of items in the list.
- In Chrome filter from start of a label in the list, searches on
- <option value /> if set, but not label.
+ <option value /> if set, but not the label.
- In IE/Edge filter does not work.
Display:
diff --git a/clipcopy/README b/clipcopy/README
@@ -0,0 +1,26 @@
+clipcopy
+========
+
+Script to copy some text to the clipboard, if the browser allows it.
+
+
+FEATURES
+--------
+
+- Small:
+ - Filesize: +- 1KB.
+ - Lines: +- 25, not much code, so hopefully easy to understand.
+ - No dependencies on other libraries like jQuery.
+- Permissive ISC license, see LICENSE file.
+
+
+EXAMPLES
+--------
+
+See example.html for an example.
+
+
+Author
+------
+
+Hiltjo Posthuma <[email protected]>
diff --git a/clipcopy/clipcopy.js b/clipcopy/clipcopy.js
@@ -0,0 +1,27 @@
+// clipboard(text, [el])
+// (if allowed, try to) copy text to clipboard.
+// specifying el tries to insert the textarea before the element, this
+// prevents the page from scrolling in some cases.
+function clipcopy(text, el) {
+ var textarea = document.createElement("textarea");
+ textarea.value = text;
+ if (el == null)
+ document.body.appendChild(textarea);
+ else
+ el.parentNode.insertBefore(textarea, el);
+ textarea.focus();
+ textarea.select();
+ try {
+ document.execCommand("copy");
+ } catch (err) {
+ }
+ if (el == null)
+ document.body.removeChild(textarea);
+ else
+ el.parentNode.removeChild(textarea);
+}
+
+// copy the data-value from the specified element to the clipboard.
+function clipcopy_datavalue(el) {
+ clipcopy(el.getAttribute("data-value") || "", el);
+}
+\ No newline at end of file
diff --git a/clipcopy/example.html b/clipcopy/example.html
@@ -0,0 +1,10 @@
+<label id="somelabel" data-value="Oh hai">Click on the button, the text copied…
+<input type="button" onclick="javascript:clipcopy_datavalue(document.getElemen…
+
+<br/>
+
+<label>Click on the button, the text copied should be "Something".</label>
+<input type="button" onclick="javascript:clipcopy('Something');" value="Click …
+
+<script type="text/javascript" src="clipcopy.js"></script>
+<script type="text/javascript"></script>
diff --git a/datalist/README b/datalist/README
@@ -9,7 +9,7 @@ FEATURES
- Small:
- Filesize: +- 7.2KB.
- - Lines: +- 250, not much code, so hopefully easy to understand.
+ - Lines: +- 275, not much code, so hopefully easy to understand.
- No dependencies on other libraries like jQuery.
- (Graceful) fallback to HTML5 datalist if Javascript is disabled for inline
datalist.
@@ -22,10 +22,6 @@ FEATURES
- IE10+.
-USAGE
------
-
-
EXAMPLES
--------
diff --git a/datalist/TODO b/datalist/TODO
diff --git a/datalist/datalist.js b/datalist/datalist.js
@@ -13,18 +13,33 @@ function datalist_init(input) {
urlfn = input.getAttribute("data-urlfn") || "";
dropdown.className = "datalist-dropdown";
+ var getlabel = function(el) {
+ return el.textContent || el.innerText || "";
+ };
+
var getvalue = function(el) {
- return el.getAttribute("data-value") ||
- el.textContent || el.innerText;
+ var value = el.getAttribute("data-value");
+ if (value !== null)
+ return value;
+ value = el.value;
+ if (value !== null)
+ return value;
+ return el.textContent || el.innerText || "";
};
- var createitem = function(s) {
+ // create item: expects string, or object with name and label attribut…
+ var createitem = function(o) {
var label, value, div = document.createElement("div");
- if (typeof(s) === "string") {
- label = value = s;
+ if (typeof(o) === "string") {
+ label = value = o;
+ } else if (typeof(o.getAttribute) == "function") {
+ // element
+ label = getlabel(o);
+ value = getvalue(o);
} else {
- label = s.label;
- value = s.value;
+ // (JSON) object
+ label = o.label;
+ value = o.value;
}
div.innerHTML = label;
@@ -83,7 +98,7 @@ function datalist_init(input) {
if (attrlist === null || ellist === undefined)
return;
for (var i = 0, ec = ellist.children, o; i < ec.length; i++) {
- var o = createitem(getvalue(ec[i]));
+ var o = createitem(ec[i]);
o.search = o.label.toLowerCase().split(" ");
items.push(o);
}
diff --git a/datalist/test.html b/datalist/test.html
@@ -64,7 +64,7 @@
<table>
<tr><td>
-test
+Test:
</td><td></td></tr>
<tr><td></td><td>
<input type="text" placeholder="Select OS..." value="" list="list" name="os" i…
@@ -73,13 +73,25 @@ test
<table style="float:right">
<tr><td>
-test
+Test float style:
</td><td></td></tr>
<tr><td></td><td>
<input type="text" placeholder="Select OS..." value="" list="list" name="os" i…
</td></tr>
</table>
+<br/>
+
+<label>Test: using value, but showing the label:</label>
+<input type="text" placeholder="Select OS..." value="" list="listlabel" name="…
+<datalist class="datalist" id="listlabel">
+ <option value="">Empty value: use ""</option>
+ <option>No value attribute: just use label</option>
+ <option data-value="3">data-value set: use 3</option>
+ <option data-value="">data-value set but empty: use ""</option>
+ <option value="4">Value attribute set: use 4</option>
+</datalist>
+
</form>
<script type="text/javascript" src="datalist.js"></script>
diff --git a/datepicker/README b/datepicker/README
@@ -21,10 +21,6 @@ FEATURES
- IE10+.
-USAGE
------
-
-
EXAMPLES
--------
diff --git a/datepicker/TODO b/datepicker/TODO
diff --git a/tooltipxhr/README b/tooltipxhr/README
@@ -18,10 +18,6 @@ FEATURES
- IE10+.
-USAGE
------
-
-
EXAMPLES
--------
diff --git a/tooltipxhr/TODO b/tooltipxhr/TODO
diff --git a/treeview/README b/treeview/README
@@ -1,23 +1,26 @@
treeview
========
-small treeview script.
+Small treeview script.
FEATURES
--------
+
- Small
- Filesize: +- 1KB.
- Lines: +- 25 lines of Javascript and +- 25 lines of CSS.
- No dependencies on other libraries like jQuery.
- Expand and collapse all child nodes with ctrl-click.
- Graceful fallback if Javascript is disabled.
+- Permissive ISC license, see LICENSE file.
- Officially supported browsers are:
- Firefox and Firefox ESR.
- Chrome
- IE9+
-License
--------
-ISC
+Author
+------
+
+Hiltjo Posthuma <[email protected]>
diff --git a/xhrform/README b/xhrform/README
@@ -9,8 +9,8 @@ FEATURES
--------
- Small:
- - Filesize: +- 1.6KB.
- - Lines: +- 50, not much code, so hopefully easy to understand.
+ - Filesize: +- 2KB.
+ - Lines: +- 60, not much code, so hopefully easy to understand.
- No dependencies on other libraries like jQuery.
- (Graceful) fallback to a normal form if Javascript is disabled.
- Permissive ISC license, see LICENSE file.
diff --git a/xhrform/test.html b/xhrform/test.html
@@ -0,0 +1,34 @@
+<html>
+<body>
+
+<h1>Example form with validation</h1>
+
+<form method="post" action="">
+ <label for="search">Search:</label>
+ <input type="text" id="search" name="search" required />
+ <input type="submit" name="save" data-xhr data-xhr-status="showstatus"…
+ <input type="submit" name="save" data-xhr data-xhr-status="showstatus"…
+</form>
+
+
+<h1>Example form validation with novalidate set</h1>
+
+<form method="post" action="" novalidate>
+ <label for="search">Search:</label>
+ <input type="text" id="search" name="search" required />
+ <input type="submit" name="save" data-xhr data-xhr-status="showstatus"…
+</form>
+
+
+Result:
+<div id="result" style="border: 1px #000 solid">&nbsp;</div>
+
+<script type="text/javascript" src="xhrform.js"></script>
+<script type="text/javascript">
+function showstatus(x, formdata) {
+ var el = document.getElementById("result").innerHTML = "Response statu…
+}
+</script>
+
+</body>
+</html>
diff --git a/xhrform/xhrform.js b/xhrform/xhrform.js
@@ -48,7 +48,9 @@ document.addEventListener("click", function(e) {
!e.target.form || e.target.getAttribute("data-xhr") === null)
return;
- if (!e.target.form.reportValidity || e.target.form.reportValidity())
+ if (e.target.form.noValidate || // disabled validation on form.
+ e.target.formNoValidate || // disabled validation on element.
+ !e.target.form.reportValidity || e.target.form.reportValidity()) /…
xhr_form_submit(e.target);
// prevent default action.
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.