コード例 #1
0
ファイル: nf_pp.php プロジェクト: alexxxnf/nf_pp
    protected function p_jsfunc()
    {
        if (self::$jsFuncDisp) {
            return;
        } else {
            self::$jsFuncDisp = TRUE;
        }
        echo '<script type="text/javascript">

function nf_pp_init(m,x,u){function q(a){n(a,"pp_expandOpen");l(a,"pp_expandClosed")}function r(a){n(a,"pp_expandClosed");l(a,"pp_expandOpen")}function t(a){r(a);g(a,"pp_isRoot")||t(a.parentNode.parentNode)}function y(a,b){for(var d=a.getElementsByTagName("SPAN"),c=[],f=d.length-1;0<=f;f--){var e=d[f];if(g(e,"pp_key"))for(var h=b.length-1;0<=h;h--)if(-1!=e.innerHTML.search(new RegExp("\\\\["+b[h]+"(:<span[^<]*</span>)?\\\\]","i"))){c.push(e.parentNode.parentNode);break}}for(f=c.length-1;0<=f;f--)t(c[f])}
function z(a){a=a.getElementsByTagName("LI");for(var b=a.length-1;0<=b;b--){var d=a[b];g(d,"pp_node")&&q(d)}}function v(){var a=w(this.parentNode.nextSibling.nextSibling,this.value.toLowerCase());this.parentNode.getElementsByTagName("SPAN")[0].innerHTML="found: "+a.length;this.found=a;this.foundCurIdx=-1}function w(a,b){var d=[];if("SPAN"==a.tagName&&g(a,"pp_key")||g(a,"pp_value")){if(a.getElementsByTagName("EM").length)for(var c=null,f=0;f<a.childNodes.length;){var e=a.childNodes[f];3==e.nodeType?
c?(c.nodeValue+=e.nodeValue,a.removeChild(e)):(c=e,++f):1==e.nodeType&&(g(e,"pp_foundInText")?(c||(c=document.createTextNode(""),a.insertBefore(c,e),++f),c.nodeValue+=e.innerText||e.textContent,a.removeChild(e)):(c=null,++f))}if(b)for(var f=b.length,h=a.childNodes[0],c=-1;-1!=(c=h.nodeValue.toLowerCase().indexOf(b,c+1));){var k=h.nodeValue.substring(c,c+f),e=document.createElement("EM");l(e,"pp_foundInText");e.appendChild(document.createTextNode(k));h=h.splitText(c);h.nodeValue=h.nodeValue.substring(f);
a.insertBefore(e,h);d.push(e)}}else if(a.children.length)for(c=a.children,f=0,e=c.length;f<e;++f)d=d.concat(w(c[f],b));return d}function g(a,b){return 0<=(" "+a.className+" ").indexOf(" "+b+" ")}function l(a,b){g(a,b)||(a.className+=(a.className?" ":"")+b)}function n(a,b){a.className=a.className.split(b).join("").replace(/^\\s+|\\s+$/g,"")}function p(a,b,d){d=d||"click";a.addEventListener?a.addEventListener(d,b,!1):a.attachEvent("on"+d,function(){b.call(a)})}var k=document.getElementById(m);m=k.children[2].firstChild;
x&&z(k);u.length&&y(k,u);p(k,function(a){a=a||window.event;a=a.target||a.srcElement;if(g(a,"pp_expand")){var b=a.parentNode;g(b,"pp_expandOpen")?q(b):g(b,"pp_expandClosed")&&r(b)}else if(g(a,"pp_ctrlCollapseCh")){b=a.parentNode.parentNode;a=!1;for(var d=null,c=b.children.length-1;0<=c;c--)if("UL"==b.children[c].nodeName){d=b.children[c];break}b=null;d&&(b=d.children);for(c=b.length-1;0<=c;c--)if(g(b[c],"pp_expandOpen")){a=!0;break}if(a)for(c=b.length-1;0<=c;c--)q(b[c]);else for(c=b.length-1;0<=c;c--)r(b[c])}else if(g(a,
"pp_top"))if(g(k,"pp_fixed"))n(k,"pp_fixed");else{a=document.getElementsByTagName("DIV");for(d=a.length-1;0<=d;d--)g(a[d],"pp_fixed")&&n(a[d],"pp_fixed");l(k,"pp_fixed")}else g(a,"pp_value")&&(b=a.parentNode,g(b,"pp_noTrim")?n(b,"pp_noTrim"):l(b,"pp_noTrim"))});p(m,v,"input");p(m,function(){"value"==event.propertyName&&v.apply(this)},"propertychange");p(m,function(a){a=a||window.event;if(13==a.keyCode&&this.found&&this.found.length){a.shiftKey?0>=this.foundCurIdx?this.foundCurIdx=this.found.length-
1:--this.foundCurIdx:this.foundCurIdx==this.found.length-1?this.foundCurIdx=0:++this.foundCurIdx;a=this.found[this.foundCurIdx];var b=a.parentNode;l(b.parentNode,"pp_noTrim");t(b);a.scrollIntoView()}},"keyup")};
</script>';
    }
コード例 #2
0
ファイル: nf_pp.php プロジェクト: olegfox/muzlo
 protected function p_jsfunc()
 {
     if (self::$jsFuncDisp) {
         return;
     } else {
         self::$jsFuncDisp = TRUE;
     }
     //echo '<script src="/application/templates/js/nf_pp.js"></script>';
 }
コード例 #3
0
    protected function p_jsfunc()
    {
        if (self::$jsFuncDisp) {
            return;
        } else {
            self::$jsFuncDisp = TRUE;
        }
        echo '<script type="text/javascript">
//<![CDATA[
function nf_pp_init( id, autoCollapsed, autoOpen ){
    var
        classCtrl = \'pp_expand\',
        classOpened = \'pp_expandOpen\',
        classClosed = \'pp_expandClosed\',
        classCollapseCh = \'pp_ctrlCollapseCh\',
        classKey = \'pp_key\',
        classValue = \'pp_value\',
        classNode = \'pp_node\',
        classRoot = \'pp_isRoot\',
        classFoundInText = \'pp_found_in_text\',
        re = new RegExp( \'(^|\\\\s)(\'+classOpened+\'|\'+classClosed+\')(\\\\s|$)\' );
    var
        wrap = document.getElementById( id ),
        searchInput = wrap.children[2].firstChild;
        
    if( autoCollapsed )
        autoCollapseTree( wrap );
        
    if( autoOpen.length )
        autoOpenTree( wrap, autoOpen );
        
    applyHdlr( wrap, tree_toggle );
    applyHdlr( searchInput, searchHdlr, \'input\' );
    applyHdlr( searchInput, function(){ if (event.propertyName == \'value\') searchHdlr.apply( this ); }, \'propertychange\' );
    applyHdlr( searchInput, searchKeyHdlr, \'keyup\' );
    
    function tree_toggle( event ){
        event = event || window.event;
        var clickedElem = event.target || event.srcElement;
        if( hasClass( clickedElem, classCtrl ) ){
            var node = clickedElem.parentNode;
            if( hasClass( node, classOpened ) )
                closeNode( node );
            else if( hasClass( node, classClosed ) )
                openNode( node );
        }
        else if( hasClass( clickedElem, \'pp_ctrlCollapseCh\' ) ) {
            var node = clickedElem.parentNode.parentNode;
            collapseChildren(node);
        }
        else if( hasClass( clickedElem, \'pp_top\' ) ) {
            onTop( wrap );
        }
    }
    
    function closeNode( node ){
        node.className = node.className.replace( re, \'$1\'+classClosed+\'$3\' );
    }
    
    function openNode( node ){
        node.className = node.className.replace( re, \'$1\'+classOpened+\'$3\' );
    }
    
    function openNodeUpWard( node ){
        openNode( node ); // open current node
        if( ! hasClass( node, classRoot ) ){
            var parent = node.parentNode.parentNode;
            openNodeUpWard( parent ); // open parent node
        }
    }
    
    function autoOpenTree( node, autoOpen ){
        var
            arSpan = node.getElementsByTagName( \'SPAN\' ),
            arToOpen = [];
            
    for( var c = arSpan.length - 1; c >= 0; c-- ){
        var curSpan = arSpan[c];
        if( ! hasClass( curSpan, classKey ) )
            continue;
        for( var q = autoOpen.length - 1; q >= 0; q-- ){
            var rx = new RegExp( \'\\\\[\'+autoOpen[q]+\'(:<span[^<]*</span>)?\\\\]\', \'i\' );
            if( curSpan.innerHTML.search( rx ) != -1 ){
                arToOpen.push( curSpan.parentNode.parentNode );
                break;
            }
        }
    }
    
    for( var c = arToOpen.length - 1; c >= 0; c-- )
        openNodeUpWard( arToOpen[c] );
    }
    
    function autoCollapseTree( node ){
        var arLi = node.getElementsByTagName( \'LI\' );
        for( var c = arLi.length - 1; c >= 0; c-- ){
            var curli = arLi[c];
            if( hasClass( curli, classNode ) )
                closeNode( curli );
        }
    }
    
    function collapseChildren( node ){
        var collapse = false;
        // get children UL
        var ul = null;
        for( var c = node.children.length - 1; c >= 0; c-- ){
            if( node.children[c].nodeName == \'UL\' ){
                ul = node.children[c];
                break;
            }
        }
        
        // get children LIs
        var arLi = null;
        if( ul )
            arLi = ul.children;
        // determine if there is opened nodes
        for( var c = arLi.length - 1; c >= 0; c-- ){
            if( hasClass( arLi[c], classOpened ) ){
                collapse = true;
                break;
            }
        }
        
        if( collapse ) // collapse
            for( var c = arLi.length - 1; c >= 0; c-- )
                closeNode( arLi[c] );
        else // open
            for( var c = arLi.length - 1; c >= 0; c-- )
                openNode( arLi[c] );
    }
    
    function onTop( wrap ){
        if( hasClass( wrap, \'pp_fixed\' ) ){
            wrap.className = wrap.className.replace( \' pp_fixed\', \'\' );
        }
        else {
            var divs = document.getElementsByTagName( \'DIV\' );
            for( var c = divs.length - 1; c >= 0; c-- ){
                if( hasClass( divs[c], \'pp_fixed\' ) ){
                    divs[c].className = divs[c].className.replace( \' pp_fixed\', \'\' );
                }
            }
            wrap.className += \' pp_fixed\';
        }
    }
    
    function searchHdlr(){
        var
            searchString = this.value,
            found = recSearch( this.parentNode.nextSibling.nextSibling, this.value.toLowerCase() );
        this.nextSibling.innerHTML = \'found: \' + found.length;
        this.found = found;
    }
    
    function searchKeyHdlr( event ){
        event = event || window.event;
        // hit ENTER
        if( event.keyCode == 13 && this.found && this.found.length ){
            var firstFound = this.found.pop();
            openNodeUpWard( firstFound );
            firstFound.scrollIntoView();
            this.found.unshift( firstFound );
        }
    }
    
    function recSearch( node, text ){
        var found = [];
        if ( node.tagName == \'SPAN\' && hasClass( node, classKey+\'|\'+classValue ) ) {
            // remove old marks
            if( node.getElementsByTagName( \'EM\' ).length ){
                var prevNode = null;
                var i = 0;
                while( i < node.childNodes.length ){
                    var curNode = node.childNodes[i];
                    if( curNode.nodeType == 3 ){
                        if( prevNode ){
                            prevNode.nodeValue += curNode.nodeValue;
                            node.removeChild( curNode );
                        }
                        else{
                            prevNode = curNode;
                            ++i;
                        }
                    }
                    else if(curNode.nodeType == 1 ){
                        if( hasClass( curNode, classFoundInText ) ){
                            if( ! prevNode ){
                                prevNode = document.createTextNode( \'\' );
                                node.insertBefore( prevNode, curNode );
                                ++i;
                            }
                            prevNode.nodeValue += curNode.innerText || curNode.textContent;
                            node.removeChild( curNode );
                        }
                        else{
                            prevNode = null;
                            ++i;
                        }
                    }
                }
            }
            if( text ){
                var
                    textLength = text.length,
                    textNode = node.childNodes[0],
                    startPos = textNode.nodeValue.toLowerCase().indexOf( text );
                if( startPos > -1 ){
                    var
                        foundText = textNode.nodeValue.substring(
                            startPos,
                            startPos + textLength
                        ),
                    mark = document.createElement( \'EM\' );
                    mark.className = classFoundInText;
                    mark.appendChild( document.createTextNode( foundText ) );
                    var tail = textNode.splitText( startPos );
                    tail.nodeValue = tail.nodeValue.substring( textLength );
                    node.insertBefore( mark, tail );
                    found.push( node );
                }
            }
        }
        else if( node.children.length ){
            var children = node.children;
            for( var i = children.length - 1; i >= 0; i-- ){
                found = found.concat( recSearch( children[i], text ) );
            }
        }
        return found;
    }
    
    function hasClass( elem, className ){
        return new RegExp( \'(^|\\\\s)\'+className+\'(\\\\s|$)\' ).test( elem.className );
    }
    
    /**
    * Applies handler to control
    */
    function applyHdlr( target, handler, type ){
        type = type || \'click\';
        if( target.addEventListener )
            target.addEventListener( type, handler, false );
        else
            target.attachEvent( \'on\' + type, function(){ handler.call( target ) } );
        }
    }
    //]]>
    </script>';
    }
コード例 #4
0
ファイル: nf_pp.php プロジェクト: alexxxnf/nf_pp
    protected function p_jsfunc()
    {
        if (self::$jsFuncDisp) {
            return;
        } else {
            self::$jsFuncDisp = TRUE;
        }
        echo '<script type="text/javascript">
{{nf_pp.js}}
</script>';
    }