diff options
Diffstat (limited to 'media/admin_media/js/admin')
-rw-r--r-- | media/admin_media/js/admin/CollapsedFieldsets.js | 85 | ||||
-rw-r--r-- | media/admin_media/js/admin/DateTimeShortcuts.js | 254 | ||||
-rw-r--r-- | media/admin_media/js/admin/RelatedObjectLookups.js | 92 | ||||
-rw-r--r-- | media/admin_media/js/admin/ordering.js | 137 |
4 files changed, 0 insertions, 568 deletions
diff --git a/media/admin_media/js/admin/CollapsedFieldsets.js b/media/admin_media/js/admin/CollapsedFieldsets.js deleted file mode 100644 index d66bec0d..00000000 --- a/media/admin_media/js/admin/CollapsedFieldsets.js +++ /dev/null @@ -1,85 +0,0 @@ -// Finds all fieldsets with class="collapse", collapses them, and gives each -// one a "Show" link that uncollapses it. The "Show" link becomes a "Hide" -// link when the fieldset is visible. - -function findForm(node) { - // returns the node of the form containing the given node - if (node.tagName.toLowerCase() != 'form') { - return findForm(node.parentNode); - } - return node; -} - -var CollapsedFieldsets = { - collapse_re: /\bcollapse\b/, // Class of fieldsets that should be dealt with. - collapsed_re: /\bcollapsed\b/, // Class that fieldsets get when they're hidden. - collapsed_class: 'collapsed', - init: function() { - var fieldsets = document.getElementsByTagName('fieldset'); - var collapsed_seen = false; - for (var i = 0, fs; fs = fieldsets[i]; i++) { - // Collapse this fieldset if it has the correct class, and if it - // doesn't have any errors. (Collapsing shouldn't apply in the case - // of error messages.) - if (fs.className.match(CollapsedFieldsets.collapse_re) && !CollapsedFieldsets.fieldset_has_errors(fs)) { - collapsed_seen = true; - // Give it an additional class, used by CSS to hide it. - fs.className += ' ' + CollapsedFieldsets.collapsed_class; - // (<a id="fieldsetcollapser3" class="collapse-toggle" href="#">Show</a>) - var collapse_link = document.createElement('a'); - collapse_link.className = 'collapse-toggle'; - collapse_link.id = 'fieldsetcollapser' + i; - collapse_link.onclick = new Function('CollapsedFieldsets.show('+i+'); return false;'); - collapse_link.href = '#'; - collapse_link.innerHTML = gettext('Show'); - var h2 = fs.getElementsByTagName('h2')[0]; - h2.appendChild(document.createTextNode(' (')); - h2.appendChild(collapse_link); - h2.appendChild(document.createTextNode(')')); - } - } - if (collapsed_seen) { - // Expand all collapsed fieldsets when form is submitted. - addEvent(findForm(document.getElementsByTagName('fieldset')[0]), 'submit', function() { CollapsedFieldsets.uncollapse_all(); }); - } - }, - fieldset_has_errors: function(fs) { - // Returns true if any fields in the fieldset have validation errors. - var divs = fs.getElementsByTagName('div'); - for (var i=0; i<divs.length; i++) { - if (divs[i].className.match(/\berrors\b/)) { - return true; - } - } - return false; - }, - show: function(fieldset_index) { - var fs = document.getElementsByTagName('fieldset')[fieldset_index]; - // Remove the class name that causes the "display: none". - fs.className = fs.className.replace(CollapsedFieldsets.collapsed_re, ''); - // Toggle the "Show" link to a "Hide" link - var collapse_link = document.getElementById('fieldsetcollapser' + fieldset_index); - collapse_link.onclick = new Function('CollapsedFieldsets.hide('+fieldset_index+'); return false;'); - collapse_link.innerHTML = gettext('Hide'); - }, - hide: function(fieldset_index) { - var fs = document.getElementsByTagName('fieldset')[fieldset_index]; - // Add the class name that causes the "display: none". - fs.className += ' ' + CollapsedFieldsets.collapsed_class; - // Toggle the "Hide" link to a "Show" link - var collapse_link = document.getElementById('fieldsetcollapser' + fieldset_index); - collapse_link.onclick = new Function('CollapsedFieldsets.show('+fieldset_index+'); return false;'); - collapse_link.innerHTML = gettext('Show'); - }, - - uncollapse_all: function() { - var fieldsets = document.getElementsByTagName('fieldset'); - for (var i=0; i<fieldsets.length; i++) { - if (fieldsets[i].className.match(CollapsedFieldsets.collapsed_re)) { - CollapsedFieldsets.show(i); - } - } - } -} - -addEvent(window, 'load', CollapsedFieldsets.init); diff --git a/media/admin_media/js/admin/DateTimeShortcuts.js b/media/admin_media/js/admin/DateTimeShortcuts.js deleted file mode 100644 index f57f97e7..00000000 --- a/media/admin_media/js/admin/DateTimeShortcuts.js +++ /dev/null @@ -1,254 +0,0 @@ -// Inserts shortcut buttons after all of the following: -// <input type="text" class="vDateField"> -// <input type="text" class="vTimeField"> - -var DateTimeShortcuts = { - calendars: [], - calendarInputs: [], - clockInputs: [], - calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled - calendarDivName2: 'calendarin', // name of <div> that contains calendar - calendarLinkName: 'calendarlink',// name of the link that is used to toggle - clockDivName: 'clockbox', // name of clock <div> that gets toggled - clockLinkName: 'clocklink', // name of the link that is used to toggle - admin_media_prefix: '', - init: function() { - // Deduce admin_media_prefix by looking at the <script>s in the - // current document and finding the URL of *this* module. - var scripts = document.getElementsByTagName('script'); - for (var i=0; i<scripts.length; i++) { - if (scripts[i].src.match(/DateTimeShortcuts/)) { - var idx = scripts[i].src.indexOf('js/admin/DateTimeShortcuts'); - DateTimeShortcuts.admin_media_prefix = scripts[i].src.substring(0, idx); - break; - } - } - - var inputs = document.getElementsByTagName('input'); - for (i=0; i<inputs.length; i++) { - var inp = inputs[i]; - if (inp.getAttribute('type') == 'text' && inp.className.match(/vTimeField/)) { - DateTimeShortcuts.addClock(inp); - } - else if (inp.getAttribute('type') == 'text' && inp.className.match(/vDateField/)) { - DateTimeShortcuts.addCalendar(inp); - } - } - }, - // Add clock widget to a given field - addClock: function(inp) { - var num = DateTimeShortcuts.clockInputs.length; - DateTimeShortcuts.clockInputs[num] = inp; - - // Shortcut links (clock icon and "Now" link) - var shortcuts_span = document.createElement('span'); - inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); - var now_link = document.createElement('a'); - now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinuteSecond());"); - now_link.appendChild(document.createTextNode(gettext('Now'))); - var clock_link = document.createElement('a'); - clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');'); - clock_link.id = DateTimeShortcuts.clockLinkName + num; - quickElement('img', clock_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/admin/icon_clock.gif', 'alt', gettext('Clock')); - shortcuts_span.appendChild(document.createTextNode('\240')); - shortcuts_span.appendChild(now_link); - shortcuts_span.appendChild(document.createTextNode('\240|\240')); - shortcuts_span.appendChild(clock_link); - - // Create clock link div - // - // Markup looks like: - // <div id="clockbox1" class="clockbox module"> - // <h2>Choose a time</h2> - // <ul class="timelist"> - // <li><a href="#">Now</a></li> - // <li><a href="#">Midnight</a></li> - // <li><a href="#">6 a.m.</a></li> - // <li><a href="#">Noon</a></li> - // </ul> - // <p class="calendar-cancel"><a href="#">Cancel</a></p> - // </div> - - var clock_box = document.createElement('div'); - clock_box.style.display = 'none'; - clock_box.style.position = 'absolute'; - clock_box.className = 'clockbox module'; - clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num); - document.body.appendChild(clock_box); - addEvent(clock_box, 'click', DateTimeShortcuts.cancelEventPropagation); - - quickElement('h2', clock_box, gettext('Choose a time')); - time_list = quickElement('ul', clock_box, ''); - time_list.className = 'timelist'; - quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinuteSecond());") - quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '00:00:00');") - quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '06:00:00');") - quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '12:00:00');") - - cancel_p = quickElement('p', clock_box, ''); - cancel_p.className = 'calendar-cancel'; - quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissClock(' + num + ');'); - }, - openClock: function(num) { - var clock_box = document.getElementById(DateTimeShortcuts.clockDivName+num) - var clock_link = document.getElementById(DateTimeShortcuts.clockLinkName+num) - - // Recalculate the clockbox position - // is it left-to-right or right-to-left layout ? - if (getStyle(document.body,'direction')!='rtl') { - clock_box.style.left = findPosX(clock_link) + 17 + 'px'; - } - else { - // since style's width is in em, it'd be tough to calculate - // px value of it. let's use an estimated px for now - // TODO: IE returns wrong value for findPosX when in rtl mode - // (it returns as it was left aligned), needs to be fixed. - clock_box.style.left = findPosX(clock_link) - 110 + 'px'; - } - clock_box.style.top = findPosY(clock_link) - 30 + 'px'; - - // Show the clock box - clock_box.style.display = 'block'; - addEvent(window, 'click', function() { DateTimeShortcuts.dismissClock(num); return true; }); - }, - dismissClock: function(num) { - document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; - window.onclick = null; - }, - handleClockQuicklink: function(num, val) { - DateTimeShortcuts.clockInputs[num].value = val; - DateTimeShortcuts.dismissClock(num); - }, - // Add calendar widget to a given field. - addCalendar: function(inp) { - var num = DateTimeShortcuts.calendars.length; - - DateTimeShortcuts.calendarInputs[num] = inp; - - // Shortcut links (calendar icon and "Today" link) - var shortcuts_span = document.createElement('span'); - inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); - var today_link = document.createElement('a'); - today_link.setAttribute('href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);'); - today_link.appendChild(document.createTextNode(gettext('Today'))); - var cal_link = document.createElement('a'); - cal_link.setAttribute('href', 'javascript:DateTimeShortcuts.openCalendar(' + num + ');'); - cal_link.id = DateTimeShortcuts.calendarLinkName + num; - quickElement('img', cal_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/admin/icon_calendar.gif', 'alt', gettext('Calendar')); - shortcuts_span.appendChild(document.createTextNode('\240')); - shortcuts_span.appendChild(today_link); - shortcuts_span.appendChild(document.createTextNode('\240|\240')); - shortcuts_span.appendChild(cal_link); - - // Create calendarbox div. - // - // Markup looks like: - // - // <div id="calendarbox3" class="calendarbox module"> - // <h2> - // <a href="#" class="link-previous">‹</a> - // <a href="#" class="link-next">›</a> February 2003 - // </h2> - // <div class="calendar" id="calendarin3"> - // <!-- (cal) --> - // </div> - // <div class="calendar-shortcuts"> - // <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a> - // </div> - // <p class="calendar-cancel"><a href="#">Cancel</a></p> - // </div> - var cal_box = document.createElement('div'); - cal_box.style.display = 'none'; - cal_box.style.position = 'absolute'; - cal_box.className = 'calendarbox module'; - cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num); - document.body.appendChild(cal_box); - addEvent(cal_box, 'click', DateTimeShortcuts.cancelEventPropagation); - - // next-prev links - var cal_nav = quickElement('div', cal_box, ''); - var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', 'javascript:DateTimeShortcuts.drawPrev('+num+');'); - cal_nav_prev.className = 'calendarnav-previous'; - var cal_nav_next = quickElement('a', cal_nav, '>', 'href', 'javascript:DateTimeShortcuts.drawNext('+num+');'); - cal_nav_next.className = 'calendarnav-next'; - - // main box - var cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); - cal_main.className = 'calendar'; - DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); - DateTimeShortcuts.calendars[num].drawCurrent(); - - // calendar shortcuts - var shortcuts = quickElement('div', cal_box, ''); - shortcuts.className = 'calendar-shortcuts'; - quickElement('a', shortcuts, gettext('Yesterday'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', -1);'); - shortcuts.appendChild(document.createTextNode('\240|\240')); - quickElement('a', shortcuts, gettext('Today'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);'); - shortcuts.appendChild(document.createTextNode('\240|\240')); - quickElement('a', shortcuts, gettext('Tomorrow'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', +1);'); - - // cancel bar - var cancel_p = quickElement('p', cal_box, ''); - cancel_p.className = 'calendar-cancel'; - quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissCalendar(' + num + ');'); - }, - openCalendar: function(num) { - var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1+num) - var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName+num) - var inp = DateTimeShortcuts.calendarInputs[num]; - - // Determine if the current value in the input has a valid date. - // If so, draw the calendar with that date's year and month. - if (inp.value) { - var date_parts = inp.value.split('-'); - var year = date_parts[0]; - var month = parseFloat(date_parts[1]); - if (year.match(/\d\d\d\d/) && month >= 1 && month <= 12) { - DateTimeShortcuts.calendars[num].drawDate(month, year); - } - } - - - // Recalculate the clockbox position - // is it left-to-right or right-to-left layout ? - if (getStyle(document.body,'direction')!='rtl') { - cal_box.style.left = findPosX(cal_link) + 17 + 'px'; - } - else { - // since style's width is in em, it'd be tough to calculate - // px value of it. let's use an estimated px for now - // TODO: IE returns wrong value for findPosX when in rtl mode - // (it returns as it was left aligned), needs to be fixed. - cal_box.style.left = findPosX(cal_link) - 180 + 'px'; - } - cal_box.style.top = findPosY(cal_link) - 75 + 'px'; - - cal_box.style.display = 'block'; - addEvent(window, 'click', function() { DateTimeShortcuts.dismissCalendar(num); return true; }); - }, - dismissCalendar: function(num) { - document.getElementById(DateTimeShortcuts.calendarDivName1+num).style.display = 'none'; - }, - drawPrev: function(num) { - DateTimeShortcuts.calendars[num].drawPreviousMonth(); - }, - drawNext: function(num) { - DateTimeShortcuts.calendars[num].drawNextMonth(); - }, - handleCalendarCallback: function(num) { - return "function(y, m, d) { DateTimeShortcuts.calendarInputs["+num+"].value = y+'-'+(m<10?'0':'')+m+'-'+(d<10?'0':'')+d; document.getElementById(DateTimeShortcuts.calendarDivName1+"+num+").style.display='none';}"; - }, - handleCalendarQuickLink: function(num, offset) { - var d = new Date(); - d.setDate(d.getDate() + offset) - DateTimeShortcuts.calendarInputs[num].value = d.getISODate(); - DateTimeShortcuts.dismissCalendar(num); - }, - cancelEventPropagation: function(e) { - if (!e) e = window.event; - e.cancelBubble = true; - if (e.stopPropagation) e.stopPropagation(); - } -} - -addEvent(window, 'load', DateTimeShortcuts.init); diff --git a/media/admin_media/js/admin/RelatedObjectLookups.js b/media/admin_media/js/admin/RelatedObjectLookups.js deleted file mode 100644 index d201f390..00000000 --- a/media/admin_media/js/admin/RelatedObjectLookups.js +++ /dev/null @@ -1,92 +0,0 @@ -// Handles related-objects functionality: lookup link for raw_id_fields -// and Add Another links. - -function html_unescape(text) { - // Unescape a string that was escaped using django.utils.html.escape. - text = text.replace(/</g, '<'); - text = text.replace(/>/g, '>'); - text = text.replace(/"/g, '"'); - text = text.replace(/'/g, "'"); - text = text.replace(/&/g, '&'); - return text; -} - -// IE doesn't accept periods or dashes in the window name, but the element IDs -// we use to generate popup window names may contain them, therefore we map them -// to allowed characters in a reversible way so that we can locate the correct -// element when the popup window is dismissed. -function id_to_windowname(text) { - text = text.replace(/\./g, '__dot__'); - text = text.replace(/\-/g, '__dash__'); - return text; -} - -function windowname_to_id(text) { - text = text.replace(/__dot__/g, '.'); - text = text.replace(/__dash__/g, '-'); - return text; -} - -function showRelatedObjectLookupPopup(triggeringLink) { - var name = triggeringLink.id.replace(/^lookup_/, ''); - name = id_to_windowname(name); - var href; - if (triggeringLink.href.search(/\?/) >= 0) { - href = triggeringLink.href + '&pop=1'; - } else { - href = triggeringLink.href + '?pop=1'; - } - var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); - win.focus(); - return false; -} - -function dismissRelatedLookupPopup(win, chosenId) { - var name = windowname_to_id(win.name); - var elem = document.getElementById(name); - if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) { - elem.value += ',' + chosenId; - } else { - document.getElementById(name).value = chosenId; - } - win.close(); -} - -function showAddAnotherPopup(triggeringLink) { - var name = triggeringLink.id.replace(/^add_/, ''); - name = id_to_windowname(name); - href = triggeringLink.href - if (href.indexOf('?') == -1) { - href += '?_popup=1'; - } else { - href += '&_popup=1'; - } - var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); - win.focus(); - return false; -} - -function dismissAddAnotherPopup(win, newId, newRepr) { - // newId and newRepr are expected to have previously been escaped by - // django.utils.html.escape. - newId = html_unescape(newId); - newRepr = html_unescape(newRepr); - var name = windowname_to_id(win.name); - var elem = document.getElementById(name); - if (elem) { - if (elem.nodeName == 'SELECT') { - var o = new Option(newRepr, newId); - elem.options[elem.options.length] = o; - o.selected = true; - } else if (elem.nodeName == 'INPUT') { - elem.value = newId; - } - } else { - var toId = name + "_to"; - elem = document.getElementById(toId); - var o = new Option(newRepr, newId); - SelectBox.add_to_cache(toId, o); - SelectBox.redisplay(toId); - } - win.close(); -} diff --git a/media/admin_media/js/admin/ordering.js b/media/admin_media/js/admin/ordering.js deleted file mode 100644 index 53c42f36..00000000 --- a/media/admin_media/js/admin/ordering.js +++ /dev/null @@ -1,137 +0,0 @@ -addEvent(window, 'load', reorder_init); - -var lis; -var top = 0; -var left = 0; -var height = 30; - -function reorder_init() { - lis = document.getElementsBySelector('ul#orderthese li'); - var input = document.getElementsBySelector('input[name=order_]')[0]; - setOrder(input.value.split(',')); - input.disabled = true; - draw(); - // Now initialise the dragging behaviour - var limit = (lis.length - 1) * height; - for (var i = 0; i < lis.length; i++) { - var li = lis[i]; - var img = document.getElementById('handle'+li.id); - li.style.zIndex = 1; - Drag.init(img, li, left + 10, left + 10, top + 10, top + 10 + limit); - li.onDragStart = startDrag; - li.onDragEnd = endDrag; - img.style.cursor = 'move'; - } -} - -function submitOrderForm() { - var inputOrder = document.getElementsBySelector('input[name=order_]')[0]; - inputOrder.value = getOrder(); - inputOrder.disabled=false; -} - -function startDrag() { - this.style.zIndex = '10'; - this.className = 'dragging'; -} - -function endDrag(x, y) { - this.style.zIndex = '1'; - this.className = ''; - // Work out how far along it has been dropped, using x co-ordinate - var oldIndex = this.index; - var newIndex = Math.round((y - 10 - top) / height); - // 'Snap' to the correct position - this.style.top = (10 + top + newIndex * height) + 'px'; - this.index = newIndex; - moveItem(oldIndex, newIndex); -} - -function moveItem(oldIndex, newIndex) { - // Swaps two items, adjusts the index and left co-ord for all others - if (oldIndex == newIndex) { - return; // Nothing to swap; - } - var direction, lo, hi; - if (newIndex > oldIndex) { - lo = oldIndex; - hi = newIndex; - direction = -1; - } else { - direction = 1; - hi = oldIndex; - lo = newIndex; - } - var lis2 = new Array(); // We will build the new order in this array - for (var i = 0; i < lis.length; i++) { - if (i < lo || i > hi) { - // Position of items not between the indexes is unaffected - lis2[i] = lis[i]; - continue; - } else if (i == newIndex) { - lis2[i] = lis[oldIndex]; - continue; - } else { - // Item is between the two indexes - move it along 1 - lis2[i] = lis[i - direction]; - } - } - // Re-index everything - reIndex(lis2); - lis = lis2; - draw(); -// document.getElementById('hiddenOrder').value = getOrder(); - document.getElementsBySelector('input[name=order_]')[0].value = getOrder(); -} - -function reIndex(lis) { - for (var i = 0; i < lis.length; i++) { - lis[i].index = i; - } -} - -function draw() { - for (var i = 0; i < lis.length; i++) { - var li = lis[i]; - li.index = i; - li.style.position = 'absolute'; - li.style.left = (10 + left) + 'px'; - li.style.top = (10 + top + (i * height)) + 'px'; - } -} - -function getOrder() { - var order = new Array(lis.length); - for (var i = 0; i < lis.length; i++) { - order[i] = lis[i].id.substring(1, 100); - } - return order.join(','); -} - -function setOrder(id_list) { - /* Set the current order to match the lsit of IDs */ - var temp_lis = new Array(); - for (var i = 0; i < id_list.length; i++) { - var id = 'p' + id_list[i]; - temp_lis[temp_lis.length] = document.getElementById(id); - } - reIndex(temp_lis); - lis = temp_lis; - draw(); -} - -function addEvent(elm, evType, fn, useCapture) -// addEvent and removeEvent -// cross-browser event handling for IE5+, NS6 and Mozilla -// By Scott Andrew -{ - if (elm.addEventListener){ - elm.addEventListener(evType, fn, useCapture); - return true; - } else if (elm.attachEvent){ - var r = elm.attachEvent("on"+evType, fn); - return r; - } else { - elm['on'+evType] = fn; - } -} |