Tagger: 20070930 0153
git-svn-id: file:///home/shish/svn/shimmie2/trunk@505 7f39781d-f577-437e-ae19-be835c7a54ca
This commit is contained in:
@ -3,9 +3,18 @@
|
||||
// Do not remove this notice.
|
||||
// All other code copyright by their authors, see comments for details.
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
|
||||
* Tagger Management *
|
||||
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
var remove_tagme = null;
|
||||
function taggerInit() {
|
||||
taggerResetPos();
|
||||
tagger_tagIndicators()
|
||||
DragHandler.attach(byId("tagger_titlebar"));
|
||||
remove_tagme = byId('tagme');
|
||||
}
|
||||
|
||||
function taggerResetPos() {
|
||||
// In case the drag point goes off screen.
|
||||
tagger = byId("tagger_window");
|
||||
|
||||
tagger.style.top="";
|
||||
@ -22,86 +31,120 @@ function taggerResetPos() {
|
||||
tagger.style.bottom="";
|
||||
}
|
||||
|
||||
function tagExists(tag) {
|
||||
var tags = byId("tags");
|
||||
tags_list = tags.value;
|
||||
tags_array = tags_list.split(" ");
|
||||
function tagger_tagIndicators() {
|
||||
tags = byId("tags");
|
||||
arObjTags = getElementsByTagNames('a',byId('tagger_body'));
|
||||
|
||||
tags_list = "";
|
||||
for (x in tags_array) {
|
||||
if(tags_array[x] == tag) {
|
||||
return true;
|
||||
for (i in arObjTags) {
|
||||
objTag = arObjTags[i];
|
||||
if(tagExists(objTag)) {
|
||||
objTag.style.fontWeight="bold";
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function toggleTag(tag,rTagme) {
|
||||
if (!tagExists(tag)) {
|
||||
addTag(tag);
|
||||
if(rTagme && tag != "tagme") {
|
||||
remTag("tagme");
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
|
||||
* Tagging *
|
||||
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
function toggleTag(objTag) {
|
||||
if(!tagExists(objTag)) {
|
||||
addTag(objTag);
|
||||
if (remove_tagme && objTag.attributes.tag.value != 'tagme') {
|
||||
remTag(remove_tagme);
|
||||
}
|
||||
} else {
|
||||
remTag(tag);
|
||||
}
|
||||
obj = byId("tagger_custTag");
|
||||
if(obj.value) {
|
||||
obj.select();
|
||||
remTag(objTag);
|
||||
}
|
||||
t = byId("tagger_new-tag");
|
||||
if(t.value) { t.select(); }
|
||||
}
|
||||
|
||||
function addTagById(id) {
|
||||
tag = byId(id);
|
||||
toggleTag(tag.value);
|
||||
}
|
||||
|
||||
function addTag (tag) {
|
||||
var tags = byId("tags");
|
||||
var tag_link = byId("tagger_tag_"+tag);
|
||||
function addTag (objTag) {
|
||||
var tags = byId('tags');
|
||||
|
||||
var delim = " ";
|
||||
if(tags.value == "") {
|
||||
delim="";
|
||||
}
|
||||
tags.value = tags.value + delim + tag;
|
||||
if(tag_link) {
|
||||
tag_link.style.fontWeight = "bold";
|
||||
delim = tags.value==" "?"":" ";
|
||||
|
||||
tags.value += delim + objTag.attributes.tag.value;
|
||||
|
||||
if(objTag.value != 'Add') {
|
||||
objTag.style.fontWeight = "bold";
|
||||
}
|
||||
}
|
||||
|
||||
function remTag (tag) {
|
||||
function remTag (objTag) {
|
||||
var tags = byId("tags");
|
||||
var tag_link = byId("tagger_tag_"+tag);
|
||||
|
||||
_tags = tags.value.split(" ");
|
||||
|
||||
tags.value = "";
|
||||
for (i in _tags) {
|
||||
_tag = _tags[i];
|
||||
if(_tag != tag) {
|
||||
addTag(_tag);
|
||||
aTags = tags.value.split(" ");
|
||||
|
||||
tags.value="";
|
||||
for(i in aTags) {
|
||||
aTag = aTags[i];
|
||||
if(aTag != objTag.attributes.tag.value) {
|
||||
if(tags.value=="") {
|
||||
tags.value += aTag;
|
||||
} else {
|
||||
tags.value += " "+aTag;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(tag_link) {
|
||||
tag_link.style.fontWeight = "";
|
||||
if(objTag.value != 'Add') {
|
||||
objTag.style.fontWeight = "";
|
||||
}
|
||||
}
|
||||
|
||||
function setTagIndicators() {
|
||||
taggerResetPos();
|
||||
|
||||
tags = byId("tags");
|
||||
tags = tags.value.split(" ");
|
||||
|
||||
for (x in tags) {
|
||||
tag = tags[x];
|
||||
obj = byId("tagger_tag_"+tag);
|
||||
if(obj) {
|
||||
obj.style.fontWeight="bold";
|
||||
function tagExists(objTag) {
|
||||
return byId("tags").value.match(reescape(objTag.attributes.tag.value));
|
||||
}
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
|
||||
* Filtering *
|
||||
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
var tagger_filter_focus = false;
|
||||
function tagger_filter(override) {
|
||||
if(tagger_filter_focus || override) {
|
||||
var filter = byId('tagger_new-tag');
|
||||
var arObjTags = getElementsByTagNames('a',byId('tagger_body'));
|
||||
var prepend = filter.value.length<2? " ":"_";
|
||||
var search = prepend + reescape(filter.value);
|
||||
|
||||
for(i in arObjTags) {
|
||||
objTag = arObjTags[i];
|
||||
tag = prepend + objTag.attributes.tag.value;
|
||||
|
||||
if(tag.match(search) && taggerFilterMode(objTag)) {
|
||||
objTag.style.display='';
|
||||
} else {
|
||||
objTag.style.display='none';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function taggerToggleMode() {
|
||||
var obj = byId('tagger_mode');
|
||||
|
||||
if(obj.attributes.mode.value=='all') {
|
||||
obj.attributes.mode.value='applied';
|
||||
obj.innerHTML = 'View All Tags';
|
||||
} else {
|
||||
obj.attributes.mode.value='all';
|
||||
obj.innerHTML = 'View Applied Tags';
|
||||
}
|
||||
tagger_filter(true);
|
||||
}
|
||||
function taggerFilterMode(objTag) {
|
||||
var obj = byId('tagger_mode');
|
||||
if(obj.attributes.mode.value == 'all') {
|
||||
return true;
|
||||
} else {
|
||||
return objTag.style.fontWeight=='bold';
|
||||
}
|
||||
}
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
|
||||
* Forms *
|
||||
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
function pushSet(form_id) {
|
||||
var set = getSetButton(form_id);
|
||||
@ -121,35 +164,11 @@ function getSetButton(form_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var _f_custTag = false;
|
||||
function tagger_filter(id) {
|
||||
if (_f_custTag) {
|
||||
var filter = byId(id);
|
||||
var e;
|
||||
|
||||
search = filter.value;
|
||||
// set up single letter filters for first-letter matching only.
|
||||
if (search.length == 1)
|
||||
search = " "+search;
|
||||
|
||||
tag_links = getElementsByTagNames('div',byId('tagger_body'));
|
||||
|
||||
for (x in tag_links) {
|
||||
tag_id = tag_links[x].id;
|
||||
// remove tagger_tag from id, prepend space for first-letter matching.
|
||||
tag = " "+tag_id.replace(/tagger_tag_/,"");
|
||||
e = byId(tag_id);
|
||||
if (!tag.match(search)) {
|
||||
e.style.display = 'none';
|
||||
} else {
|
||||
e.style.display = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
|
||||
* quirksmode.org *
|
||||
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
// Quirksmode.org //
|
||||
// http://www.quirksmode.org/dom/getElementsByTagNames.html //
|
||||
// http://www.quirksmode.org/dom/getElementsByTagNames.html
|
||||
function getElementsByTagNames(list,obj) {
|
||||
if (!obj) var obj = document;
|
||||
var tagNames = list.split(',');
|
||||
@ -174,7 +193,8 @@ function getElementsByTagNames(list,obj) {
|
||||
}
|
||||
return resultArray;
|
||||
}
|
||||
// http://www.quirksmode.org/js/findpos.html //
|
||||
|
||||
// http://www.quirksmode.org/js/findpos.html
|
||||
function findPos(obj) {
|
||||
var curleft = curtop = 0;
|
||||
if (obj.offsetParent) {
|
||||
@ -187,163 +207,24 @@ function findPos(obj) {
|
||||
}
|
||||
return [curleft,curtop];
|
||||
}
|
||||
// End //
|
||||
|
||||
// Drag Code //
|
||||
//*****************************************************************************
|
||||
// Do not remove this notice.
|
||||
//
|
||||
// Copyright 2001 by Mike Hall.
|
||||
// See http://www.brainjar.com for terms of use.
|
||||
//*****************************************************************************
|
||||
|
||||
// Determine browser and version.
|
||||
|
||||
function Browser() {
|
||||
|
||||
var ua, s, i;
|
||||
|
||||
this.isIE = false;
|
||||
this.isNS = false;
|
||||
this.version = null;
|
||||
|
||||
ua = navigator.userAgent;
|
||||
|
||||
s = "MSIE";
|
||||
if ((i = ua.indexOf(s)) >= 0) {
|
||||
this.isIE = true;
|
||||
this.version = parseFloat(ua.substr(i + s.length));
|
||||
return;
|
||||
}
|
||||
|
||||
s = "Netscape6/";
|
||||
if ((i = ua.indexOf(s)) >= 0) {
|
||||
this.isNS = true;
|
||||
this.version = parseFloat(ua.substr(i + s.length));
|
||||
return;
|
||||
}
|
||||
|
||||
// Treat any other "Gecko" browser as NS 6.1.
|
||||
|
||||
s = "Gecko";
|
||||
if ((i = ua.indexOf(s)) >= 0) {
|
||||
this.isNS = true;
|
||||
this.version = 6.1;
|
||||
return;
|
||||
}
|
||||
// ripped from a forum.
|
||||
// todo: cite source
|
||||
function reescape(str){
|
||||
var resp="()?:=[]*+{}^$|/,.!\\"
|
||||
var found=false
|
||||
var ret=""
|
||||
for(var i=0;i<str.length;i++) {
|
||||
found=false
|
||||
for(var j=0;j<resp.length;j++) {
|
||||
if(str.charAt(i)==resp.charAt(j)) {
|
||||
found=true;break
|
||||
}
|
||||
}
|
||||
if(found) {
|
||||
ret+="\\"
|
||||
}
|
||||
ret+=str.charAt(i)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
var browser = new Browser();
|
||||
|
||||
// Global object to hold drag information.
|
||||
|
||||
var dragObj = new Object();
|
||||
dragObj.zIndex = 0;
|
||||
|
||||
function dragStart(event, id) {
|
||||
var el;
|
||||
var x, y;
|
||||
|
||||
// If an element id was given, find it. Otherwise use the element being
|
||||
// clicked on.
|
||||
|
||||
if (id)
|
||||
dragObj.elNode = document.getElementById(id);
|
||||
else {
|
||||
if (browser.isIE)
|
||||
dragObj.elNode = window.event.srcElement;
|
||||
if (browser.isNS)
|
||||
dragObj.elNode = event.target;
|
||||
|
||||
// If this is a text node, use its parent element.
|
||||
|
||||
if (dragObj.elNode.nodeType == 3)
|
||||
dragObj.elNode = dragObj.elNode.parentNode;
|
||||
}
|
||||
|
||||
// Get cursor position with respect to the page.
|
||||
|
||||
if (browser.isIE) {
|
||||
x = window.event.clientX + document.documentElement.scrollLeft
|
||||
+ document.body.scrollLeft;
|
||||
y = window.event.clientY + document.documentElement.scrollTop
|
||||
+ document.body.scrollTop;
|
||||
}
|
||||
if (browser.isNS) {
|
||||
x = event.clientX + window.scrollX;
|
||||
y = event.clientY + window.scrollY;
|
||||
}
|
||||
|
||||
// Save starting positions of cursor and element.
|
||||
|
||||
dragObj.cursorStartX = x;
|
||||
dragObj.cursorStartY = y;
|
||||
dragObj.elStartLeft = parseInt(dragObj.elNode.style.left, 10);
|
||||
dragObj.elStartTop = parseInt(dragObj.elNode.style.top, 10);
|
||||
|
||||
if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
|
||||
if (isNaN(dragObj.elStartTop)) dragObj.elStartTop = 0;
|
||||
|
||||
// Update element's z-index.
|
||||
|
||||
dragObj.elNode.style.zIndex = ++dragObj.zIndex;
|
||||
|
||||
// Capture mousemove and mouseup events on the page.
|
||||
|
||||
if (browser.isIE) {
|
||||
document.attachEvent("onmousemove", dragGo);
|
||||
document.attachEvent("onmouseup", dragStop);
|
||||
window.event.cancelBubble = true;
|
||||
window.event.returnValue = false;
|
||||
}
|
||||
if (browser.isNS) {
|
||||
document.addEventListener("mousemove", dragGo, true);
|
||||
document.addEventListener("mouseup", dragStop, true);
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
|
||||
function dragGo(event) {
|
||||
|
||||
var x, y;
|
||||
|
||||
// Get cursor position with respect to the page.
|
||||
|
||||
if (browser.isIE) {
|
||||
x = window.event.clientX + document.documentElement.scrollLeft
|
||||
+ document.body.scrollLeft;
|
||||
y = window.event.clientY + document.documentElement.scrollTop
|
||||
+ document.body.scrollTop;
|
||||
}
|
||||
if (browser.isNS) {
|
||||
x = event.clientX + window.scrollX;
|
||||
y = event.clientY + window.scrollY;
|
||||
}
|
||||
|
||||
// Move drag element by the same amount the cursor has moved.
|
||||
|
||||
dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
|
||||
dragObj.elNode.style.top = (dragObj.elStartTop + y - dragObj.cursorStartY) + "px";
|
||||
|
||||
if (browser.isIE) {
|
||||
window.event.cancelBubble = true;
|
||||
window.event.returnValue = false;
|
||||
}
|
||||
if (browser.isNS)
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
function dragStop(event) {
|
||||
|
||||
// Stop capturing mousemove and mouseup events.
|
||||
|
||||
if (browser.isIE) {
|
||||
document.detachEvent("onmousemove", dragGo);
|
||||
document.detachEvent("onmouseup", dragStop);
|
||||
}
|
||||
if (browser.isNS) {
|
||||
document.removeEventListener("mousemove", dragGo, true);
|
||||
document.removeEventListener("mouseup", dragStop, true);
|
||||
}
|
||||
}
|
||||
// End //
|
||||
|
Reference in New Issue
Block a user