aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/api/history_api/example/index.md
diff options
context:
space:
mode:
Diffstat (limited to 'files/fr/web/api/history_api/example/index.md')
-rw-r--r--files/fr/web/api/history_api/example/index.md263
1 files changed, 132 insertions, 131 deletions
diff --git a/files/fr/web/api/history_api/example/index.md b/files/fr/web/api/history_api/example/index.md
index a9473b7582..1442068e52 100644
--- a/files/fr/web/api/history_api/example/index.md
+++ b/files/fr/web/api/history_api/example/index.md
@@ -194,202 +194,203 @@ Voici un exemple de site web AJAX composé uniquement de trois pages (_page_un.p
```js
"use strict";
-var ajaxRequest = new (function () {
+const ajaxRequest = new (function () {
function closeReq () {
oLoadingBox.parentNode && document.body.removeChild(oLoadingBox);
bIsLoading = false;
}
-
+
function abortReq () {
- if (!bIsLoadi
- oReq.abort(
-
+ if (!bIsLoading) { return; }
+ oReq.abort();
+ closeReq();
}
-
- fu
- alert("Unknown err
+
+ function ajaxError () {
+ alert("Unknown error.");
}
-
- function ajaxLoad
+
+ function ajaxLoad () {
var vMsg, nStatus = this.status;
switch (nStatus) {
case 200:
- vMsg = JSON.parse
+ vMsg = JSON.parse(this.responseText);
document.title = oPageInfo.title = vMsg.page;
- document.getElementById
- i
- hi
-
+ document.getElementById(sTargetId).innerHTML = vMsg.content;
+ if (bUpdateURL) {
+ history.pushState(oPageInfo, oPageInfo.title, oPageInfo.url);
+ bUpdateURL = false;
}
break;
- ult:
- vMsg = nSta
- switch
+ default:
+ vMsg = nStatus + ": " + (oHTTPStatus[nStatus] || "Unknown");
+ switch (Math.floor(nStatus / 100)) {
/*
case 1:
- //
- consol
- bre
- 2:
- //
- consol
-
-
-
- con
-
+ // Informational 1xx
+ console.log("Information code " + vMsg);
+ break;
+ case 2:
+ // Successful 2xx
+ console.log("Successful code " + vMsg);
+ break;
+ case 3:
+ // Redirection 3xx
+ console.log("Redirection code " + vMsg);
+ break;
*/
case 4:
- /*
- alert(
- bre
- 5:
- /* S
- alert(
- bre
-
-
-
-
+ /* Client Error 4xx */
+ alert("Client Error #" + vMsg);
+ break;
+ case 5:
+ /* Server Error 5xx */
+ alert("Server Error #" + vMsg);
+ break;
+ default:
+ /* Unknown status */
+ ajaxError();
+ }
}
closeReq();
}
-
- function filterURL (sURL, sView
- return sURL.replace(rSearch,
+
+ function filterURL (sURL, sViewMode) {
+ return sURL.replace(rSearch, "") + ("?" + sURL.replace(rHost, "&").replace(rView, sViewMode ? "&" + sViewKey + "=" + sViewMode : "").slice(1)).replace(rEndQstMark, "");
}
-
+
function getPage (sPage) {
if (bIsLoading) { return; }
oReq = new XMLHttpRequest();
- bIsLoading =
+ bIsLoading = true;
oReq.onload = ajaxLoad;
-
- if (sPage) { oPageInfo.ur
- oReq.open("get", filterU
+ oReq.onerror = ajaxError;
+ if (sPage) { oPageInfo.url = filterURL(sPage, null); }
+ oReq.open("get", filterURL(oPageInfo.url, "json"), true);
oReq.send();
- oLoadingBox.parent
+ oLoadingBox.parentNode || document.body.appendChild(oLoadingBox);
}
-
+
function requestPage (sURL) {
- i
-
+ if (history.pushState) {
+ bUpdateURL = true;
getPage(sURL);
- se {
- /* Ajax navigation is n
- location.assi
+ } else {
+ /* Ajax navigation is not supported */
+ location.assign(sURL);
}
}
-
- function processLi
- if (this.className === sAjaxClass
+
+ function processLink () {
+ if (this.className === sAjaxClass) {
requestPage(this.href);
-
+ return false;
}
return true;
}
-
+
function init () {
oPageInfo.title = document.title;
- for (var oLin
+ history.replaceState(oPageInfo, oPageInfo.title, oPageInfo.url);
+ for (var oLink, nIdx = 0, nLen = document.links.length; nIdx < nLen; document.links[nIdx++].onclick = processLink);
}
-
+
const
-
+
/* customizable constants */
- sTargetId = "ajax-cont
-
- /* not customizable
- rSearch = /\?.*$/, r
- oLoadingBox =
+ sTargetId = "ajax-content", sViewKey = "view_as", sAjaxClass = "ajax-nav",
+
+ /* not customizable constants */
+ rSearch = /\?.*$/, rHost = /^[^\?]*\?*&*/, rView = new RegExp("&" + sViewKey + "\\=[^&]*|&*$", "i"), rEndQstMark = /\?$/,
+ oLoadingBox = document.createElement("div"), oCover = document.createElement("div"), oLoadingImg = new Image(),
oPageInfo = {
title: null,
url: location.href
- HTTPStatus = /*
- 100: "Continue"
- 101: "Swit
- 102: "Proc
+ }, oHTTPStatus = /* http://www.iana.org/assignments/http-status-codes/http-status-codes.xml */ {
+ 100: "Continue",
+ 101: "Switching Protocols",
+ 102: "Processing",
200: "OK",
- 201: "Created
+ 201: "Created",
202: "Accepted",
- 203: "Non-Author
- 204: "No Content
- 205: "Reset Cont
- 206: "Partial Conte
- 207: "Multi-Sta
- 208: "Already R
+ 203: "Non-Authoritative Information",
+ 204: "No Content",
+ 205: "Reset Content",
+ 206: "Partial Content",
+ 207: "Multi-Status",
+ 208: "Already Reported",
226: "IM Used",
- 300: "Multipl
- 301: "Moved P
+ 300: "Multiple Choices",
+ 301: "Moved Permanently",
302: "Found",
303: "See Other",
- 304: "Not Modifi
- 305: "Use Proxy"
- 306: "Reserv
- 307: "Tempor
- 308: "Perman
+ 304: "Not Modified",
+ 305: "Use Proxy",
+ 306: "Reserved",
+ 307: "Temporary Redirect",
+ 308: "Permanent Redirect",
400: "Bad Request",
- 401: "Unauthorize
- 402: "Payment Req
+ 401: "Unauthorized",
+ 402: "Payment Required",
403: "Forbidden",
404: "Not Found",
- 405: "Method Not Allow
- 406: "Not Acce
- 407: "Proxy Au
- 408: "Reques
- 409: "Confli
+ 405: "Method Not Allowed",
+ 406: "Not Acceptable",
+ 407: "Proxy Authentication Required",
+ 408: "Request Timeout",
+ 409: "Conflict",
410: "Gone",
- 411: "Length Requi
- 412: "Precondition
- 413: "Request Enti
- 414: "Request-URI
- 415: "Unsupported
- 416: "Requested Range N
- 417: "Expectat
- 422: "Unproces
+ 411: "Length Required",
+ 412: "Precondition Failed",
+ 413: "Request Entity Too Large",
+ 414: "Request-URI Too Long",
+ 415: "Unsupported Media Type",
+ 416: "Requested Range Not Satisfiable",
+ 417: "Expectation Failed",
+ 422: "Unprocessable Entity",
423: "Locked",
- 424: "Failed Depen
+ 424: "Failed Dependency",
425: "Unassigned",
- 426: "Upgrade Requ
+ 426: "Upgrade Required",
427: "Unassigned",
- 428: "Precondition
- 429: "Too Many Req
+ 428: "Precondition Required",
+ 429: "Too Many Requests",
430: "Unassigned",
- 431: "Request Header
-
-
-
- 503: "Service Unavailab
- 504: "Gateway Time
- 505: "HTTP Version
- 506: "Variant Also Negot
- 507: "Insufficient St
- 508: "Loop Detecte
- 509: "Unassigne
- 510: "Not Exten
- 511: "Network Authentication Requ
+ 431: "Request Header Fields Too Large",
+ 500: "Internal Server Error",
+ 501: "Not Implemented",
+ 502: "Bad Gateway",
+ 503: "Service Unavailable",
+ 504: "Gateway Timeout",
+ 505: "HTTP Version Not Supported",
+ 506: "Variant Also Negotiates (Experimental)",
+ 507: "Insufficient Storage",
+ 508: "Loop Detected",
+ 509: "Unassigned",
+ 510: "Not Extended",
+ 511: "Network Authentication Required"
};
-
+
var
-
- oReq, bIsLoadi
-
- oLoadingBox.id = "aja
+
+ oReq, bIsLoading = false, bUpdateURL = false;
+
+ oLoadingBox.id = "ajax-loader";
oCover.onclick = abortReq;
oLoadingImg.src = "data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==";
oCover.appendChild(oLoadingImg);
oLoadingBox.appendChild(oCover);
-
- onpopstate = function (
+
+ onpopstate = function (oEvent) {
bUpdateURL = false;
- oPageInfo.title = oEvent.state.ti
- oPageInfo.
-
+ oPageInfo.title = oEvent.state.title;
+ oPageInfo.url = oEvent.state.url;
+ getPage();
};
-
- window.addEventListener
-
+
+ window.addEventListener ? addEventListener("load", init, false) : window.attachEvent ? attachEvent("onload", init) : (onload = init);
+
// Public methods
this.open = requestPage;