| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset=utf-8> |
| <title>Calendar Picker test</title> |
| <style> |
| body { |
| background-color: #eeffff; |
| line-height: 1.4em; |
| font-family: Helvetica, sans-serif; |
| } |
| label { |
| width: 160px; |
| display: inline-block; |
| } |
| iframe { |
| z-index: 2147483647; |
| width: 100px; |
| height: 100px; |
| border: 0; |
| overflow: hidden; |
| } |
| </style> |
| </head> |
| <body> |
| |
| <p>This is a testbed for a calendar picker.</p> |
| |
| <h2>Preview</h2> |
| |
| <input type="text" id="date" style="margin: 0;"><br> |
| <iframe></iframe> |
| |
| <h2>Console</h2> |
| |
| <ol id="console" style="font-family:monospace;"></ol> |
| |
| <h2>Config</h2> |
| <form action="" method="GET"> |
| <fieldset> |
| <legend>Locale</legend> |
| |
| <label for="locale">Locale</label> |
| <select name="locale" id="config_locale"> |
| <!-- Populated from locale_data. --> |
| </select> |
| <br /> |
| <label for="locale_rtl">Locale RTL</label> |
| <input type="checkbox" name="locale_rtl" id="config_locale_rtl" value="true"> |
| <br /> |
| <label for="week_start_day">Week start day</label> |
| <select name="week_start_day" id="config_week_start_day"> |
| <option value="0">Sunday</option> |
| <option value="1">Monday</option> |
| <option value="2">Tuesday</option> |
| <option value="3">Wednesday</option> |
| <option value="4">Thursday</option> |
| <option value="5">Friday</option> |
| <option value="6">Saturday</option> |
| </select> |
| </fieldset> |
| |
| <fieldset> |
| <legend>Attributes</legend> |
| |
| <label for="type">[type]</label> |
| <select name="type" id="config_type"> |
| <option>date</option> |
| <option>week</option> |
| <option>month</option> |
| </select> |
| <br /> |
| <label for="value">[value]</label> |
| <input type="text" name="value" id="config_value"> |
| <br /> |
| <label for="min">[min]</label> |
| <input type="text" name="min" id="config_min"> |
| <br /> |
| <label for="max">[max]</label> |
| <input type="text" name="max" id="config_max"> |
| <br /> |
| <label for="step">[step]</label> |
| <input type="number" name="step" id="config_step"> |
| </fieldset> |
| <input type="submit" value="Submit"> |
| </form> |
| |
| <script> |
| function getParam(key) { |
| key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); |
| var pattern = "[\\?&]" + key + "=([^&#]*)"; |
| var regex = new RegExp(pattern); |
| var results = regex.exec(window.location.search); |
| if (!results) |
| return ""; |
| return decodeURIComponent(results[1].replace(/\+/g, " ")); |
| } |
| |
| function setParam(key, value) { |
| key = escape(key); |
| value = escape(value); |
| |
| var kvp = document.location.search.substr(1).split('&'); |
| |
| for (var i = kvp.length - 1; i >= 0; --i){ |
| kvp[i] |
| var x = kvp[i].split('='); |
| if (x[0] === key) { |
| x[1] = value; |
| kvp[i] = x.join('='); |
| break; |
| } |
| } |
| |
| if (i < 0) |
| kvp[kvp.length] = key + "=" + value; |
| |
| document.location.search = kvp.join('&'); |
| } |
| |
| function $(id) { |
| return document.getElementById(id); |
| } |
| |
| var config = {}; |
| function initializeConfig() { |
| for (locale in locale_data) { |
| var option = document.createElement("option"); |
| option.setAttribute("label", locale_data[locale].displayName); |
| option.setAttribute("value", locale); |
| $("config_locale").appendChild(option); |
| } |
| |
| config.locale = getParam("locale") || "en_US"; |
| config.isLocaleRTL = getParam("locale_rtl") === "true"; |
| config.weekStartDay = parseInt(getParam("weekStartDay") || "0", 10); |
| config.type = getParam("type") || "date"; |
| config.value = getParam("value") || ""; |
| config.min = getParam("min") || ""; |
| config.max = getParam("max") || ""; |
| config.step = getParam("step") || "1"; |
| |
| $("config_locale").value = config.locale; |
| $("config_locale_rtl").checked = config.isLocaleRTL; |
| $("config_week_start_day").value = config.weekStartDay; |
| $("config_type").value = config.type; |
| $("config_value").value = config.value; |
| $("config_min").value = config.min; |
| $("config_max").value = config.max; |
| $("config_step").value = config.step; |
| }; |
| |
| var locale_data = { |
| "en_US": { |
| "displayName": "English (United States)", |
| "shortMonthLabels": [ |
| "Jan", |
| "Feb", |
| "Mar", |
| "Apr", |
| "May", |
| "Jun", |
| "Jul", |
| "Aug", |
| "Sep", |
| "Oct", |
| "Nov", |
| "Dec" |
| ], |
| "dayLabels": [ |
| "S", |
| "M", |
| "T", |
| "W", |
| "T", |
| "F", |
| "S" |
| ], |
| }, |
| "ja": { |
| "displayName": "Japanese", |
| "shortMonthLabels": [ |
| "1月", |
| "2月", |
| "3月", |
| "4月", |
| "5月", |
| "6月", |
| "7月", |
| "8月", |
| "9月", |
| "10月", |
| "11月", |
| "12月" |
| ], |
| "dayLabels": [ |
| "日", |
| "月", |
| "火", |
| "水", |
| "木", |
| "金", |
| "土" |
| ], |
| }, |
| "ar": { |
| "displayName": "Arabic", |
| "shortMonthLabels": [ |
| "يناير", |
| "فبراير", |
| "مارس", |
| "أبريل", |
| "مايو", |
| "يونيو", |
| "يوليو", |
| "أغسطس", |
| "سبتمبر", |
| "أكتوبر", |
| "نوفمبر", |
| "ديسمبر" |
| ], |
| "dayLabels": [ |
| "ح", |
| "ن", |
| "ث", |
| "ر", |
| "خ", |
| "ج", |
| "س" |
| ], |
| }, |
| "vi": { |
| "displayName": "Vietnamese", |
| "shortMonthLabels": [ |
| "thg 1", |
| "thg 2", |
| "thg 3", |
| "thg 4", |
| "thg 5", |
| "thg 6", |
| "thg 7", |
| "thg 8", |
| "thg 9", |
| "thg 10", |
| "thg 11", |
| "thg 12" |
| ], |
| "dayLabels": [ |
| "CN", |
| "T2", |
| "T3", |
| "T4", |
| "T5", |
| "T6", |
| "T7" |
| ], |
| }, |
| }; |
| |
| function createParam() { |
| return { |
| mode: config.type, |
| locale: config.locale, |
| weekStartDay: config.weekStartDay, |
| isLocaleRTL: config.isLocaleRTL, |
| dayLabels: locale_data[config.locale].dayLabels, |
| shortMonthLabels: locale_data[config.locale].shortMonthLabels, |
| max: config.max, |
| min: config.min, |
| step: config.step * (config.type === "month" ? 1 : 86400000), |
| stepBase: "0", |
| currentValue: config.value, |
| axShowMonthSelector: "Show month selection panel", |
| axShowNextMonth: "Show next month", |
| axShowPreviousMonth: "Show previous month", |
| todayLabel: "Today", |
| } |
| }; |
| |
| function openCalendar() { |
| var frame = document.getElementsByTagName('iframe')[0]; |
| var doc = frame.contentDocument; |
| doc.documentElement.innerHTML = '<head></head><body><div id=main>Loading...</div></body>'; |
| var commonCssLink = doc.createElement('link'); |
| commonCssLink.rel = 'stylesheet'; |
| commonCssLink.href = '../../Source/core/html/forms/resources/pickerCommon.css?' + (new Date()).getTime(); |
| doc.head.appendChild(commonCssLink); |
| var buttonCssLink = doc.createElement('link'); |
| buttonCssLink.rel = 'stylesheet'; |
| buttonCssLink.href = '../../Source/core/html/forms/resources/pickerButton.css?' + (new Date()).getTime(); |
| doc.head.appendChild(buttonCssLink); |
| var suggestionPickerCssLink = doc.createElement('link'); |
| suggestionPickerCssLink.rel = 'stylesheet'; |
| suggestionPickerCssLink.href = '../../Source/core/html/forms/resources/suggestionPicker.css?' + (new Date()).getTime(); |
| doc.head.appendChild(suggestionPickerCssLink); |
| var link = doc.createElement('link'); |
| link.rel = 'stylesheet'; |
| link.href = '../../Source/core/html/forms/resources/calendarPicker.css?' + (new Date()).getTime(); |
| doc.head.appendChild(link); |
| var commonJsScript = doc.createElement('script'); |
| commonJsScript.src = '../../Source/core/html/forms/resources/pickerCommon.js?' + (new Date()).getTime(); |
| doc.body.appendChild(commonJsScript); |
| var suggestionPickerJsScript = doc.createElement('script'); |
| suggestionPickerJsScript.src = '../../Source/core/html/forms/resources/suggestionPicker.js?' + (new Date()).getTime(); |
| doc.body.appendChild(suggestionPickerJsScript); |
| var script = doc.createElement('script'); |
| script.src = '../../Source/core/html/forms/resources/calendarPicker.js?' + (new Date()).getTime(); |
| doc.body.appendChild(script); |
| |
| var pagePopupController = { |
| setValueAndClosePopup: function(numValue, stringValue) { |
| window.log('number=' + numValue + ', string="' + stringValue + '"'); |
| if (numValue == 0) |
| window.document.getElementById('date').value = stringValue; |
| }, |
| setValue: function(stringValue) { |
| window.log('string="' + stringValue + '"'); |
| window.document.getElementById('date').value = stringValue; |
| }, |
| closePopup: function() { |
| window.log('closePopup'); |
| }, |
| localizeNumberString: function(numString) { |
| if (typeof numString == "number") |
| return numString.toLocaleString(); |
| return numString.toString(); |
| }, |
| histogramEnumeration: function() {}, |
| formatMonth: function(year, zeroBaseMonth) { |
| var monthLabels = ['<January>', '<February>', '<March>', '<April>', '<May>', '<June>', |
| '<July>', '<August>', '<September>', '<October>', '<November>', '<December>']; |
| return monthLabels[zeroBaseMonth] + " " + year; |
| }, |
| formatShortMonth: function(year, zeroBaseMonth) { |
| var monthLabels = ['<Jan>', '<Feb>', '<Mar>', '<Apr>', '<May>', '<Jun>', |
| '<Jul>', '<Aug>', '<Sept>', '<Oct>', '<Nov>', '<Dec>']; |
| return monthLabels[zeroBaseMonth] + " " + year; |
| }, |
| formatWeek: function(year, week, startDate) { |
| return '' + year + '-W' + week + ' starting on ' + startDate; |
| } |
| } |
| |
| setTimeout(function() { |
| frame.contentWindow.postMessage(JSON.stringify(createParam()), "*"); |
| frame.contentWindow.pagePopupController = pagePopupController; |
| }, 100); |
| } |
| |
| function log(str) { |
| var entry = document.createElement('li'); |
| entry.innerText = str; |
| document.getElementById('console').appendChild(entry); |
| } |
| |
| window.onload = function() { |
| initializeConfig(); |
| openCalendar(); |
| }; |
| </script> |
| </body> |
| </html> |