public linkCollection(linkProcessFlags ___flags = linkProcessFlags.standard)

        {
            flags = ___flags;

            CollectionChanged += linkCollection_CollectionChanged;
        }
Beispiel #2
0
        public link(string __url, linkProcessFlags __flags)
        {
            nature = linkNature.bookmark;
            tag    = linkTag.direct;
            scope  = linkScope.special;


            _processUrl(__url);
        }
        /// <summary>
        /// Vraca Query line prema podesavanjima
        /// </summary>
        /// <param name="prefix"></param>
        /// <param name="__flags"></param>
        /// <returns></returns>
        public string getQueryLine(string prefix = "?", linkProcessFlags __flags = linkProcessFlags.standard)
        {
            if (Count == 0)
            {
                return("");
            }

            string output        = "";
            bool   anchorAsParam = __flags.HasFlag(linkProcessFlags.anchorAsParam);

            if (anchorAsParam)
            {
                if (ContainsKey(link._anchor_name))
                {
                    output += link._anchor_symbol + this[link._anchor_name];
                }
            }

            bool prefixSet = false;


            for (int i = 0; i < Count; i++)
            {
                if (anchorAsParam && (this[i] == link._anchor_name))
                {
                    //       output += Keys[i] + "" + Values[i];
                }
                else
                {
                    if (prefixSet == false)
                    {
                        output   += prefix;
                        prefixSet = true;
                    }

                    output += this[i] + "=" + this[i]; //Values[i];
                    if (i < Count - 1)
                    {
                        output += "&";
                    }
                }
            }
            return(output);
        }
        /// <summary>
        /// Podesava pairs preko query linije
        /// </summary>
        /// <param name="__query"></param>
        /// <param name="__flags"></param>
        public void setQueryLine(string __query, linkProcessFlags __flag)
        {
            //if (__flags == null) __flags = linkProcessFlags.getDefaultFlags();

            if (string.IsNullOrEmpty(__query))
            {
                return;
            }

            __query = __query.Replace("?", "&");

            if (__flag.HasFlag(linkProcessFlags.anchorAsParam))
            {
                if (__query.Contains(link._anchor_symbol))
                {
                    __query = __query.Replace(link._anchor_symbol, "&" + link._anchor_name + "=");
                }
            }

            string[] qps = __query.Split("&".ToArray(), StringSplitOptions.RemoveEmptyEntries);
            if (qps.Length == 0 && !string.IsNullOrEmpty(__query))
            {
                qps = new string[] { __query };
            }


            foreach (string qp in qps)
            {
                if (!string.IsNullOrEmpty(qp))
                {
                    string[] pr = qp.Split("=".ToArray());
                    if (pr.Count() > 1)
                    {
                        Add(pr[0], pr[1]);
                    }
                }
            }
        }
Beispiel #5
0
 public static bool Contains(this linkProcessFlags f, linkProcessFlags t)
 {
     return(f.HasFlag(t));
 }
Beispiel #6
0
        protected void _processUrl(string __url, linkProcessFlags __flags = linkProcessFlags.standard)
        {
            if (string.IsNullOrEmpty(__url))
            {
                url = "";
                return;
            }

            MatchCollection mchs = _domain_pattern.Matches(__url);

            // if (__flags == null) __flags = linkProcessFlags.getDefaultFlags();

            url         = __url;
            originalUrl = __url;


            Match mch;

            shema = urlShema.unknown;

            if (mchs.Count > 0)
            {
                mch = mchs[0];
                foreach (Group _gr in mch.Groups)
                {
                    string vl = _gr.Value;
                    if (shema == urlShema.unknown)
                    {
                        if (_test_letters.IsMatch(vl))
                        {
                            var __shema = urlShema.unknown;

                            if (Enum.TryParse(vl, true, out __shema))
                            {
                                shema = __shema;
                                continue;
                            }
                        }
                    }

                    if (string.IsNullOrEmpty(domain))
                    {
                        if (_test_lettersAndDot.IsMatch(vl))
                        {
                            domain = vl;
                            continue;
                        }
                    }
                }
            }
            else
            {
                shema  = urlShema.none;
                domain = "";
            }

            if (shema == urlShema.unknown)
            {
                shema = urlShema.none;
            }
            else
            {
                __url = __url.removeStartsWith(shema.ToString() + @"://");
            }

            if (!string.IsNullOrEmpty(domain))
            {
                __url = __url.removeStartsWith(domain);
                __url = __url.EnsureStartsWith("/");
            }

            string __query = "";

            if (__flags.Contains(linkProcessFlags.mailtoAsParam))
            {
                __url = __url.Replace(_mailto_name + ":", "?" + _mailto_name + "=");
            }


            query = "";
            if (_select_queryPairs.IsMatch(__url))
            {
                foreach (Match _mch in _select_queryPairs.Matches(__url))
                {
                    query += _mch.Value;
                }
            }


            queryPairs = new linkQueryPairs(query, __flags);

            if (_select_allBeforeQuery.IsMatch(__url))
            {
                mchs = _select_allBeforeQuery.Matches(__url);

                foreach (Match _mch in mchs)
                {
                    Group _gr = _mch.Groups.imbFirstSafe() as Group;
                    if (_gr != null)
                    {
                        path = _gr.Value;
                        break;
                    }
                }
            }

            path = path.Replace("?", "");
            path = path.Replace("#", "");

            if (!string.IsNullOrEmpty(path))
            {
                if (_select_pathFolders.IsMatch(__url))
                {
                    foreach (Match _mch in _select_pathFolders.Matches(path)) // do ovde prolazi
                    {
                        Group _gr = _mch.Groups.imbFirstSafe() as Group;
                        if (_gr != null)
                        {
                            pathFolders = _gr.Value;
                            break;
                        }
                    }
                }

                if (_select_pathFilename.IsMatch(__url))
                {
                    foreach (Match _mch in _select_pathFilename.Matches(path))
                    {
                        Group _gr = _mch.Groups.imbFirstSafe() as Group;
                        if (_gr != null)
                        {
                            pathFilename = _gr.Value;
                            break;
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(pathFilename))
            {
                if (indexFilenames.Contains(pathFilename))
                {
                    isDefaultFilepath = true;
                }
            }
            else
            {
                isDefaultFilepath = true;
            }

            if (isDefaultFilepath && string.IsNullOrEmpty(query))
            {
                if (path == "" || path == "/")
                {
                    isDefaultHomePage = true;
                }
            }

            // mchs = _prequery_pattern.Matches(__url);

            //if (mchs.Count > 0)
            //{
            //    mch = mchs[0];
            //    path = mch.Groups[0].Value;

            //    __query = __url.removeStartsWith(path);

            //    query = __query;


            //} else
            //{
            //    path = __url;
            //}

            if (_select_anchor.IsMatch(url))
            {
                var anchor_match = _select_anchor.Match(url);
                anchor = anchor_match.Value;
            }

            pathDirectoryPath = path.removeEndsWith(pathFilename).Trim('/');

            pathAndQuery = path.add(query, "?").add(anchor, "#");

            // detektovanje osobina
            int c = 0;

            if (queryPairs.ContainsKey(_mailto_name))
            {
                features |= linkFeatures.mailToLink;
                c++;
            }
            if (queryPairs.ContainsKey(_anchor_name))
            {
                features |= linkFeatures.hasSharpArchor;
                c++;
            }

            // da li ima ostale parametre
            if (queryPairs.Count > c)
            {
                features |= linkFeatures.hasParams;
            }
        }
Beispiel #7
0
        /// <summary>
        /// Processes the node.
        /// </summary>
        /// <param name="__nav">The nav.</param>
        /// <param name="__flags">The flags.</param>
        public void processNode(XPathNavigator __nav, linkProcessFlags __flags = linkProcessFlags.standard)
        {
            string  __tagName = __nav.Name.ToLower();
            linkTag __tag     = linkTag.unknown;

            if (Enum.TryParse(__tagName, out __tag))
            {
                tag = __tag;
            }
            string            __tmpUrl = "";
            HtmlNodeNavigator nodeNav  = __nav as HtmlNodeNavigator;

            html  = nodeNav.CurrentNode as HtmlNode;
            xPath = html.XPath;

            switch (tag)
            {
            case linkTag.a:
                __tmpUrl  = __nav.GetAttribute("href", "");
                attribute = linkAttribute.href;
                nature    = linkNature.navigation;
                if (__nav.HasChildren)
                {
                    int i = 0;
                    XPathNodeIterator children = __nav.SelectChildren(XPathNodeType.Text);
                    caption = "";
                    foreach (XPathItem child in children)
                    {
                        caption = caption.add(child.Value);
                        i++;
                        if (i > NODELINK_LIMIT)
                        {
                            break;
                        }
                    }
                    XPathNodeIterator imgn = __nav.Select("img");
                    if (imgn == null)
                    {
                        caption += imgn.Current.GetAttribute("alt", "");
                    }
                }
                else
                {
                    caption = __nav.Value;
                }
                break;

            case linkTag.link:
                __tmpUrl  = __nav.GetAttribute("href", "");
                attribute = linkAttribute.href;

                break;

            case linkTag.iframe:
            case linkTag.img:
            case linkTag.script:
                attribute = linkAttribute.src;
                __tmpUrl  = __nav.GetAttribute("src", "");
                name      = __nav.GetAttribute("alt", "");
                break;

            default:
                attribute = linkAttribute.unknown;

                break;
            }

            switch (tag)
            {
            case linkTag.img:
                nature = linkNature.media;
                break;

            case linkTag.link:
                nature = linkNature.technical;
                break;

            case linkTag.script:
                nature = linkNature.technical;
                break;
            }

            _processUrl(__tmpUrl, __flags);

            if (features.Contains(linkFeatures.mailToLink))
            {
                nature = linkNature.mailTo;
            }
        }
Beispiel #8
0
 /// <summary>
 /// Pravi Link objekat na osnovu xPathNavigator objekta i podesavanja
 /// </summary>
 /// <param name="__nav">The nav.</param>
 /// <param name="__flags">The flags.</param>
 public link(XPathNavigator __nav, linkProcessFlags __flags = linkProcessFlags.standard) : base()
 {
     processNode(__nav, __flags);
 }
 public linkQueryPairs(string __query, linkProcessFlags __flags = linkProcessFlags.none)
 {
     setQueryLine(__query, __flags);
 }