Пример #1
0
 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);
   }
 }
Пример #2
0
    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);
    }
Пример #3
0
 //************ 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();
   }
 }
Пример #4
0
 public bool isType(CourseMeta.runtimeType tp) { return (Type & tp) == tp; }
Пример #5
0
 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;
 }
Пример #6
0
 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;
 }
Пример #7
0
 static bool datOk(CourseMeta.runtimeType type) { return (type & wrong) == 0; } static CourseMeta.runtimeType wrong = CourseMeta.runtimeType.taskTestInCourse | CourseMeta.runtimeType.taskPretest | CourseMeta.runtimeType.test;
Пример #8
0
 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);
 }
Пример #9
0
 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();
   }
 }
Пример #10
0
 public string fileName(CourseMeta.oldeaDataType type = CourseMeta.oldeaDataType.lmdata) { return urlToFile(url, type); }
Пример #11
0
 //File path etc
 public string tempFileName(CourseMeta.oldeaDataType type) { return url.Substring(1).Replace('/', '-') + "." + type.ToString() + ".xml"; }
Пример #12
0
 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);
 }
Пример #13
0
 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;
 }
Пример #14
0
 public static void tradosOper1(CourseMeta.data node, LoggerMemory log) {
   TradosLib.oper1NewTradosPages(tradosOper1Pages(XExtension.Create(node), log, false).ToArray(), false);
 }