source: branches/work_311/output/URLLink.cpp @ 537

Revision 537, 6.0 KB checked in by jls17, 5 years ago (diff)
  • replaced the CWebUtil::Link call in LetterFilterControl?.cpp with a call to the DirectURLLink class
Line 
1//Copyright (C) 2014 John Luthgers | jls17
2//
3//This file is part of ARInside.
4//
5//    ARInside is free software: you can redistribute it and/or modify
6//    it under the terms of the GNU General Public License as published by
7//    the Free Software Foundation, version 2 of the License.
8//
9//    ARInside is distributed in the hope that it will be useful,
10//    but WITHOUT ANY WARRANTY; without even the implied warranty of
11//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12//    GNU General Public License for more details.
13//
14//    You should have received a copy of the GNU General Public License
15//    along with ARInside.  If not, see <http://www.gnu.org/licenses/>.
16
17#include "stdafx.h"
18#include "../core/ARServerObject.h"
19#include "ImageTag.h"
20#include "RootPath.h"
21#include "URLLink.h"
22#include "WebUtil.h"
23
24namespace OUTPUT
25{
26        // constructors
27        URLLink::URLLink(const std::string &caption, const CPageParams &linkToPage, const OUTPUT::ImageTag &image, int rootLevel, bool validate, LinkTargetMode target)
28        {
29                Init(caption, linkToPage, image, rootLevel, validate, target);
30        }
31        URLLink::URLLink(const std::string &caption, const CPageParams &linkToPage, const OUTPUT::ImageTag &image, int rootLevel, LinkTargetMode target)
32        {
33                Init(caption, linkToPage, image, rootLevel, true, target);
34        }
35        URLLink::URLLink(const std::string &caption, const CPageParams &linkToPage, const OUTPUT::ImageTag::ImageEnum imageId, int rootLevel)
36        {
37                ImageTag image(imageId, rootLevel);
38                Init(caption, linkToPage, image, rootLevel, true, TARGET_MODE_SELF);
39        }
40        URLLink::URLLink(const std::string &caption, const CPageParams &linkToPage, int rootLevel)
41        {
42                ImageTag image(ImageTag::NoImage, 0);
43                Init(caption, linkToPage, image, rootLevel, true, TARGET_MODE_SELF);
44        }
45        URLLink::URLLink(const std::string &caption, unsigned int page, OUTPUT::ImageTag::ImageEnum imageId, int rootLevel)
46        {
47                CPageParams linkToPage(page);
48                ImageTag image(imageId, rootLevel);
49                Init(caption, linkToPage, image, rootLevel, true, TARGET_MODE_SELF);
50        }
51        URLLink::URLLink(const std::string &caption, unsigned int page, int rootLevel)
52        {
53                CPageParams linkToPage(page);
54                ImageTag image(ImageTag::NoImage, 0);
55                Init(caption, linkToPage, image, rootLevel, true, TARGET_MODE_SELF);
56        }
57        URLLink::URLLink(const CARServerObject &workflowObject, int rootLevel, bool showImage)
58        {
59                InitObj(workflowObject.GetName(), workflowObject, rootLevel, showImage);
60        }
61        URLLink::URLLink(const std::string &caption, const CARServerObject &workflowObject, int rootLevel, bool showImage)
62        {
63                InitObj((caption.empty() ? workflowObject.GetName() : caption), workflowObject, rootLevel, showImage);
64        }
65
66        // Central class initialization
67        void URLLink::Init(const std::string &caption, const CPageParams &linkToPage, const OUTPUT::ImageTag &image, int rootLevel, bool validate, OUTPUT::URLLink::LinkTargetMode target)
68        {
69                stringstream strmTmp;
70
71                strmTmp << image;
72               
73                if (!linkToPage.Valid())
74                        AddCaption(strmTmp, caption, validate);
75                else
76                {
77                        strmTmp << "<a href=\"" << RootPath(rootLevel) << linkToPage->GetFullFileName() << "\"";
78                        if (target > TARGET_MODE_SELF)
79                        {
80                                strmTmp << " target=\"";
81                                switch (target)
82                                {
83                                        case TARGET_MODE_PARENT: strmTmp << "_parent"; break;
84                                        case TARGET_MODE_TOP: strmTmp << "_top"; break;
85                                        case TARGET_MODE_BLANK: strmTmp << "_blank"; break;
86                                }
87                                strmTmp << "\"";
88                        }
89                        strmTmp << ">"; 
90                        AddCaption(strmTmp, caption, validate);
91                        strmTmp << "</a>";
92                }
93
94                link = strmTmp.str();
95        }
96
97        void URLLink::InitObj(const std::string &caption, const CARServerObject &workflowObject, int rootLevel, bool showImage)
98        {
99                CPageParams linkToPage(PAGE_DETAILS, &workflowObject);
100                Init(caption, linkToPage, (showImage ? ImageTag(workflowObject, rootLevel) : ImageTag(ImageTag::NoImage, 0)), rootLevel, true, URLLink::TARGET_MODE_SELF);
101        }
102
103        void URLLink::InitDirect(const std::string &linkHTML)
104        {
105                link = linkHTML;
106        }
107
108        void URLLink::AddCaption(std::ostream &strm, const std::string &caption, bool validate)
109        {
110                strm << (validate ? CWebUtil::Validate(caption) : caption);
111        }
112
113        ostream& URLLink::ToStream(std::ostream &strm) const
114        {
115                strm << link;
116                return strm;
117        }
118
119        ostream& operator <<(ostream &strm, const URLLink &link)
120        {
121                return link.ToStream(strm);
122        }
123
124        URLLink::operator std::string() const
125        {
126                stringstream strm;
127                ToStream(strm);
128                return strm.str();
129        }
130
131        CheckedURLLink::CheckedURLLink(const CARServerObject &workflowObject, const std::string &alternateHTML, int rootLevel, bool showImage)
132        {
133                if (workflowObject.Exists())
134                {
135                        InitObj(workflowObject.GetName(), workflowObject, rootLevel, showImage);
136                }
137                else
138                {
139                        InitDirect(alternateHTML);
140                }
141        }
142
143        DirectURLLink::DirectURLLink(OUTPUT::DirectURLLink::DirectLinkEnum directLinkType, int rootLevel)
144        {
145                switch (directLinkType)
146                {
147                case CreateTop: InitDirect("<a id=\"top\"></a>"); break;
148                case LinkToTop: InitLinkEnum("Top", ImageTag::Up, "#top", rootLevel); break;
149                default: InitDirect("");
150                }
151        }
152        DirectURLLink::DirectURLLink(OUTPUT::DirectURLLink::DirectLinkEnum directLinkType, const std::string &caption, int rootLevel)
153        {
154                switch (directLinkType)
155                {
156                case JavascriptVoid: InitLinkEnum(caption, ImageTag::NoImage, "javascript:void(0)", rootLevel); break;
157                default: InitDirect("");
158                }
159        }
160
161        void DirectURLLink::InitLinkEnum(const std::string &caption, const OUTPUT::ImageTag::ImageEnum imageId, const std::string &href, int rootLevel)
162        {
163                stringstream strm;
164                if (imageId != ImageTag::NoImage)
165                {
166                        ImageTag image(imageId, rootLevel);
167                        strm << image;
168                }
169                strm << "<a href=\"" << href << "\">";
170                AddCaption(strm, caption, true);
171                strm << "</a>";
172
173                InitDirect(strm.str());
174        }
175
176        ostream& operator <<(ostream &strm, const OUTPUT::DirectURLLink::DirectLinkEnum link)
177        {
178                DirectURLLink linkInst(link, 0);
179                return linkInst.ToStream(strm);
180        }
181
182        ostream& operator <<(ostream &strm, const OUTPUT::DirectURLLink &link)
183        {
184                return link.ToStream(strm);
185        }
186
187}; // end namespace OUTPUT
188
Note: See TracBrowser for help on using the repository browser.