public string viewUrl(CourseMeta.oldeaDataType type) { switch (type) { case CourseMeta.oldeaDataType.no: return "about:blank"; case CourseMeta.oldeaDataType.webOld: return string.Format("http://www.langmaster.cz/comcz{0}.htm", url); default: return string.Format("{0}Schools/NewEA.aspx?lang=cs-cz&a1y={1}&oldEaType={4}&url={5}#school@schoolexmodel@1@{2}@@/lm/oldea{3}", urlAuthor, loginHack(actWorker()), urlToProductName(url), url, type, newUrl); } }
public static void applyCSS(ref body pg, CourseMeta.ex ex) { //all styles (LM and CSS) from tags foreach (var tg in pg.scan()) { var hasSheet = !string.IsNullOrEmpty(tg.styleSheet); if (hasSheet) pg.bodyStyle += "" + CSS.prefixTagId(tg.id, tg.styleSheet); tg.styleSheet = null; } //all styles (LM and CSS) from parents CourseMeta.data p = ex; StringBuilder sb = new StringBuilder(pg.bodyStyle); while (p != null) { if (!string.IsNullOrEmpty(p.styleSheet)) sb.Insert(0, p.styleSheet.Trim() + " "); p = p.parent; } sb.Insert(0, CourseMeta.ex.stdStyle); pg.bodyStyle = sb.ToString(); //separate LM a CSS styles rules lmCss = separateLM_CSS_styles(pg); if (lmCss == null) return; //apply LM styles to XML XElement root = pg.ToElement(); var bodyTags = root.Element("body").DescendantsAndSelf(); foreach (var ctrl in bodyTags.Where(c => Lib.courseModelJsonMLMeta.allCSControls.Contains(c.Name.LocalName))) { var html = new DomElement(ctrl); var typeMeta = Lib.courseModelJsonMLMeta.types[ctrl.Name.LocalName]; var attrsSpecs = new Dictionary<string, specificity>(); //nejlepsi hodnoty pro kazdou property for (var i = lmCss.lmRules.Count - 1; i >= 0; i--) { //jednotilve rule var spec = lmCss.lmRules[i].data.matchesSelectors(html, null); if (spec == null) continue; foreach (var prop in lmCss.lmRules[i].props.Where(pr => typeMeta.allProps.ContainsKey(pr.name))) { //jednotlive rule properties specificity sp; if (!attrsSpecs.TryGetValue(prop.name, out sp) || sp.I_am_worse(spec, prop.important)) attrsSpecs[prop.name] = new specificity(spec, prop.important, prop.value); //nova nebo lepsi value } } //dosad values do XML foreach (var kv in attrsSpecs) { var at = ctrl.Attribute(kv.Key); if (at != null) continue; ctrl.Add(new XAttribute(kv.Key, kv.Value.value)); } } //zpracuj cssTagIds properties //foreach (var attr in bodyTags.SelectMany(el => el.Attributes()).Where(a => Lib.courseModelJsonMLMeta.allCssTagIds.Contains(a.Parent.Name.LocalName + "." + a.Name.LocalName))) { // attr.Value = cssTagRx.Replace(attr.Value, m => { // var ruleTxt = m.Groups["selector"].Value + " {}"; // var rule = CssDataFactory.parseStylesheet(ruleTxt).getRulesets(CssDataFactory.defaultMedium).First(); // return bodyTags.Where(el => rule.matchesSelectors(new DomElement(el), null) != null).Select(el => "#" + el.AttributeValue("id")).Where(id => id != "#").Aggregate((r, i) => r + "|" + i); // }); //} //body from XML pg = tag.FromElement<body>(root); }
//************ ruzne formy file: lmdata, xml, old, transformavene, ... public object getFileContentLow(CourseMeta.oldeaDataType type, LoggerMemory logger) { //vrati string => xml string, @string => filename, XElement => xml //var logger = new LoggerMemory(false); switch (type) { case CourseMeta.oldeaDataType.lmdata: return "@" + fileName(); case CourseMeta.oldeaDataType.lmdataNew: if (getMeta().isByHand()) { var fn = fileName(CourseMeta.oldeaDataType.lmdataNew); return File.Exists(fn) ? "@" + fn : null; } else { var res = CourseMeta.Lib.dataFromEAStr(newUrl, CourseMeta.oldeaDataType.lmdataNew, logger, removeOldEAPart); //XElement root = XElement.Load(fileName(), LoadOptions.PreserveWhitespace); //controlProp.adjust_child_attrs_all(root, null); //var trs = getTransforms(); //if (trs != null) foreach (var tr in trs) trans.form(tr, root); return res; } case CourseMeta.oldeaDataType.xml: return CourseMeta.Lib.dataFromEAStr(newUrl, CourseMeta.oldeaDataType.lmdata, logger); case CourseMeta.oldeaDataType.xmlNew: return CourseMeta.Lib.dataFromEAStr(newUrl, CourseMeta.oldeaDataType.xmlNew, logger, removeOldEAPart); default: throw new NotImplementedException(); } }
public bool isType(CourseMeta.runtimeType tp) { return (Type & tp) == tp; }
static Toc adjustToc(CourseMeta.data data, Dictionary<string, Toc> dir, int lev) { var res = new Toc { Title = data.title, Type = data.type }; res.Items = data.Items == null ? null : data.Items.Select(dt => adjustToc(dt, dir, lev + 1)).ToArray(); dir.Add(data.url, res); return res; }
static Prod adjustProd(CourseMeta.product data) { var res = new Prod { Url = data.url, Dir = new Dictionary<string, Toc>(), Title = data.title, actCourseRootUrl = data.Items[0].url }; res.Items = data.Items[0].Items.Select(dt => adjustToc(dt, res.Dir, 0)).ToArray(); //prvni polozka v items produktu je kurz x testGlobalAdmin if (res.Items.Length == 1) res.Items = res.Items[0].Items; return res; }
static bool datOk(CourseMeta.runtimeType type) { return (type & wrong) == 0; } static CourseMeta.runtimeType wrong = CourseMeta.runtimeType.taskTestInCourse | CourseMeta.runtimeType.taskPretest | CourseMeta.runtimeType.test;
public XElement getFileContentXml(CourseMeta.oldeaDataType type, LoggerMemory logger) { var obj = getFileContentLow(type, logger); if (obj == null) return null; if (obj is XElement) return (XElement)obj; var str = getFileContentString(type, logger); if (Convert.ToInt32(str[0]) == 65279) str = str.Substring(1); return str == null ? null : XElement.Parse(str); }
public static string urlToFile(string url, CourseMeta.oldeaDataType type) { var fnUrl = url.Replace('/', '\\'); var prefixFn = newUrlPrefix.Replace('/', '\\'); switch (type) { case CourseMeta.oldeaDataType.lmdata: return basicpath + fnUrl + ".htm.aspx.lmdata"; case CourseMeta.oldeaDataType.lmdataNew: return basicpath + fnUrl + ".new.xml"; case CourseMeta.oldeaDataType.xml: return Machines.rootDir + prefixFn + fnUrl + ".xml"; case CourseMeta.oldeaDataType.xmlNew: return Machines.rootDir + prefixFn + fnUrl + ".new.xml"; default: throw new NotImplementedException(); } }
public string fileName(CourseMeta.oldeaDataType type = CourseMeta.oldeaDataType.lmdata) { return urlToFile(url, type); }
//File path etc public string tempFileName(CourseMeta.oldeaDataType type) { return url.Substring(1).Replace('/', '-') + "." + type.ToString() + ".xml"; }
public static string getServerScript(string url, CourseMeta.oldeaDataType dataType, LoggerMemory logger) { url = url.ToLower(); if (!url.StartsWith(newUrlPrefix)) return null; url = url.Substring(newUrlPrefix.Length); exFile fileEx; if (!OldToNew.fileGroup.getAllFiles().TryGetValue(url, out fileEx)) return null; return fileEx.getFileContentString(dataType, logger); }
public string getFileContentString(CourseMeta.oldeaDataType type, LoggerMemory logger) { var obj = getFileContentLow(type, logger); if (obj == null) return null; if (obj is XElement) return ((XElement)obj).ToString(); var str = (string)obj; if (str.Length < 1) return null; return str[0] == '@' ? File.ReadAllText(str.Substring(1), Encoding.UTF8) : str; }
public static void tradosOper1(CourseMeta.data node, LoggerMemory log) { TradosLib.oper1NewTradosPages(tradosOper1Pages(XExtension.Create(node), log, false).ToArray(), false); }