jsharmony-cms 1.4.1 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -115,7 +115,9 @@ DataModelTemplate_GridPreview.prototype.buildTemplate = function(componentTempla
115
115
  model.oncommit = '_this.onCommit(xmodel, rowid, callback);';
116
116
  model.ejs = '';
117
117
  model.sort = { [this._sequenceFieldName]: 'asc' };
118
- model.oninit = "jsh.$root('.xform'+xmodel.class).before('<div class=\"dataGridEditor_instructions\"><span style=\"font-size:1.3em;position:relative;top:1px;margin-right:2px;margin-left:4px;\">&#x1f6c8;</span> Add, edit, and re-order items using the icons :: Double-click to edit</div>');";
118
+ model.oninit = [
119
+ "jsh.$root('.xform'+xmodel.class).before('<div class=\"dataGridEditor_instructions\"><span style=\"font-size:1.3em;position:relative;top:1px;margin-right:2px;margin-left:4px;\">&#x1f6c8;</span> Add, edit, and re-order items using the icons <span class=\"dataGridEditor_instructions_doubleClick\">:: Double-click to edit</span></div>');",
120
+ ].join(' ');
119
121
  model.rowclass = "<%=xejs.iif(rowid==0,'first')%>";
120
122
  model.tableclass = ((model.tableclass||'')+' '+(componentConfig&&componentConfig.options&&componentConfig.options.component_preview_size=='collapse'?'jsharmony_cms_component_preview_collapse':'jsharmony_cms_component_preview_expand')).trim();
121
123
  this._jsh.XPage.ParseModelDefinition(model, null, null, { ignoreErrors: true });
@@ -83,6 +83,9 @@ exports = module.exports = function(jsh, cms, toolbarContainer){
83
83
  ],
84
84
  contextmenu: 'jsharmonycmscomponentcontextmenu link linkchecker image imagetools table spellchecker configurepermanentpen',
85
85
  toolbar: 'formatselect | backcolor forecolor | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image charmapmaterialicons table fullscreen | jsHarmonyCmsWebSnippet | jsHarmonyCmsComponent | jsHarmonyCmsView | jsHarmonyCmsEndEdit',
86
+ mobile: {
87
+ toolbar_mode: 'floating',
88
+ },
86
89
  removed_menuitems: 'newdocument',
87
90
  image_advtab: true,
88
91
  menu: {
@@ -9,9 +9,7 @@ jsh.App[modelid] = new (function(){
9
9
  jChangeStatus.html(XExt.renderClientEJS(tmpl, { _: _, jsh: jsh }));
10
10
  }
11
11
  else {
12
- jChangeStatus.hide(); //Control
13
- jChangeStatus.prev('.xform_caption').hide(); //Caption
14
- jChangeStatus.prev().prev('br').hide(); //Newline
12
+ jsh.$root('.'+xmodel.class+'_change_status_group').hide();
15
13
  }
16
14
  };
17
15
 
@@ -28,7 +28,9 @@
28
28
  "lov":{ "sql": "select 'PUBLIC' code_val, 'Release' code_txt where ({schema}.my_user_is_publisher({schema}.my_current_site_id()) = 1) union all select 'USER' code_val, (select concat(sys_user_fname,' ',sys_user_lname) from jsharmony.sys_user where jsharmony.sys_user.sys_user_id=jsharmony.my_sys_user_id()) code_txt" } },
29
29
  {"control":"html","value":"&nbsp;/&nbsp;","nl":false},
30
30
  {"name":"new_branch_name","actions":"BU","type":"varchar","control":"textbox","caption":"","nl":false,"validate":["Required"],"caption_ext":"New Revision Name","focus":true,"controlparams":{"placeholder":"New Revision Name"}},
31
- {"control":"html","value":"<div class='<%=model.class%>_Change_Status'></div>","caption":"Change Status","captionstyle":"vertical-align:top;font-weight:bold;padding-top:3px;"},
31
+ {"control":"html","value":"<span class='<%=model.class%>_change_status_group'>"},
32
+ {"control":"html","value":"<div class='<%=model.class%>_Change_Status'></div>","caption":"Change Status","captionclass":"Change_Status_caption","captionstyle":"vertical-align:top;font-weight:bold;padding-top:3px;"},
33
+ {"control":"html","value":"</span>"},
32
34
  {"name":"new_branch_changes","control":"hidden","type":"varchar","length":8,"actions":"BU","ongetvalue":"return _this.Change_Status_getvalue(val,field,xmodel);"},
33
35
  {"control":"button","value":"Clone","controlstyle": "padding:3px 8px;margin-top:6px;","onclick": "if(!xmodel.controller.form.Data.Commit()) return; XForm.prototype.XExecutePost(xmodel.id+'/?branch_id='+xmodel.get('branch_id'), { new_branch_type: xmodel.get('new_branch_type'), new_branch_name: xmodel.get('new_branch_name'), new_branch_changes: xmodel.get('new_branch_changes') }, function(rslt){ xmodel.controller.form.ResetDirty(); XExt.navTo(jsh._BASEURL+xmodel.module_namespace+'Sitemap_Listing_Redirect'); });"}
34
36
  ]
@@ -17,7 +17,7 @@
17
17
  {"name":"branch_user_id_fmt","caption":"Author","control":"label","sqlselect":"(jsharmony.get_sys_user_name(branch_user_id))"},
18
18
  {"name":"branch_sts","caption":"Status","control":"label"},
19
19
  {"name":"branch_data_mtstmp_fmt","type":"datetime","caption":"Last Modified","sqlselect":"$ifnull(branch_data_mtstmp,branch_mtstmp)","control":"label","format":["date","MM/DD/YYYY h:mm a"]},
20
- {"caption":"Actions","control":"html","captionstyle":"display:none;vertical-align:top;padding-top:5px;font-weight:bold;text-align:right;",
20
+ {"caption":"Actions","control":"html","captionstyle":"display:none;vertical-align:top;padding-top:5px;font-weight:bold;text-align:right;","captionclass":"actions_bar_caption",
21
21
  "value":"<div class='<%=model.class%>_actions_bar jsHarmonyCms_Branch_Summary_Actions_Bar'></div>"},
22
22
  {"name":"branch_merge_desc","caption":"Merge In Progress","control":"label","captionstyle":"font-weight:bold;text-align:right;","block":true,"blockclass":"branch_merge_desc","sqlselect":"(select branch_desc from {schema}.branch merge_branch inner join {schema}.v_my_branch_desc merge_branch_desc on (merge_branch.branch_id=v_my_branch_desc.branch_id and merge_branch.branch_merge_id=merge_branch_desc.branch_id))"},
23
23
  {"name":"branch_type","control":"hidden"},
@@ -19,7 +19,7 @@ jsh.App[modelid] = new (function(){
19
19
  }
20
20
  var diffModel = jsh.XModels[jsh.$root('.xform'+xmodel.class+' .xsubform_diff .xpanel .xform').first().data('id')];
21
21
  var actionsBar = jsh.$root('.'+diffModel.class+'_actions_bar');
22
- actionsBar.prev('.xform_caption').show();
22
+ jsh.$root('.xform'+diffModel.class+' .actions_bar_caption').show();
23
23
  var buttonGroup = jsh.$root('.xactions_group.xelem'+xmodel.class+'[data-group="Actions"]');
24
24
  actionsBar.html(buttonGroup.html());
25
25
  }
@@ -14,6 +14,9 @@
14
14
  padding-right:19px;
15
15
  white-space:nowrap;
16
16
  }
17
+ .xform<%=model.class%> th a {
18
+ color:#555;
19
+ }
17
20
  .xform<%=model.class%> td {
18
21
  font-family: 'PT Sans', arial, helvetica, sans-serif;
19
22
  font-size:1.2em;
@@ -30,7 +30,7 @@
30
30
  <%% } %%>
31
31
  <%% _.each(cur_branch && branch_data, function(branch_item){ if(branch_item.code_val=='branch') return; %%>
32
32
  <tr>
33
- <th valign="bottom">&nbsp;&nbsp;<%%=branch_item.code_txt%%></th>
33
+ <th valign="bottom">&nbsp;&nbsp;<a href="<%%=jsh.globalparams.branch_items[branch_item.code_val].editor_url%%>"><%%=branch_item.code_txt%%></a></th>
34
34
  <td valign="bottom">
35
35
  <%%=branch_item.cnt%%>
36
36
  </td>
@@ -61,18 +61,11 @@ jsh.App[modelid] = new (function(){
61
61
  this.updateEnabledState = function(){
62
62
  var menu_item_link_type = xmodel.get('menu_item_link_type');
63
63
 
64
- var jtarget = $('.menu_item_link_target.xelem'+xmodel.class);
65
- var jtarget_group = jtarget.add(jtarget.prevUntil('.xelem'+xmodel.class));
66
-
67
- var jdest = $('.menu_item_link_dest.xelem'+xmodel.class);
68
- var jdestcaption = jdest.prev();
69
- var jdest_group = jdest.add(jdest.prevUntil('.xelem'+xmodel.class));
70
-
71
- var jdest_page = $('.menu_item_link_page.xelem'+xmodel.class);
72
- var jdest_page_group = jdest_page.add(jdest_page.prevUntil('.xelem'+xmodel.class)).add(jdest_page.next('.xelem'+xmodel.class));
73
-
74
- var jdest_media = $('.menu_item_link_media.xelem'+xmodel.class);
75
- var jdest_media_group = jdest_media.add(jdest_media.prevUntil('.xelem'+xmodel.class)).add(jdest_media.next('.xelem'+xmodel.class));
64
+ var jtarget_group = $('.'+xmodel.class+'_link_target_group');
65
+ var jdestcaption = $('.sitemap_item_link_dest_caption');
66
+ var jdest_group = $('.'+xmodel.class+'_link_dest_group');
67
+ var jdest_page_group = $('.'+xmodel.class+'_link_page_group');
68
+ var jdest_media_group = $('.'+xmodel.class+'_link_media_group');
76
69
 
77
70
  var enable_target = true;
78
71
  var enable_dest = false;
@@ -20,18 +20,26 @@
20
20
  {"name":"menu_item_path","control":"hidden"},
21
21
  {"name":"menu_item_text","control":"textbox_M","caption":"Text","controlstyle":"width:300px;","validate":["Required"],"nl":true,"onchange":"_this.menu_item_text_onchange(obj,newval);", "captionstyle":"width:68px;"},
22
22
  {"name":"menu_item_link_type","control":"dropdown","caption":"Link Type","lov":{ "blank": "(No Link)", "values": { "JS": "JavaScript", "MEDIA": "Media", "PAGE": "Page", "URL": "URL" } }, "onchange":"_this.menu_item_link_type_onchange(obj, newval, undoChange);","nl":true},
23
+ {"control":"html","value":"<span class='<%=model.class%>_link_target_group'>"},
23
24
  {"name":"menu_item_link_target","control":"dropdown","caption":"Target","lov":{ "blank": "Same Window", "values": { "NEWWIN": "New Window" } }},
25
+ {"control":"html","value":"</span>"},
24
26
 
25
- {"name":"menu_item_link_dest","control":"textbox_L","caption":"Destination","controlstyle":"width:300px;","nl":true,
27
+ {"control":"html","value":"<span class='<%=model.class%>_link_dest_group'>"},
28
+ {"name":"menu_item_link_dest","control":"textbox_L","caption":"Destination","captionclass":"menu_item_link_dest_caption","controlstyle":"width:300px;","nl":true,
26
29
  "validate":[{"function":"js:if((_obj.menu_item_link_type=='URL') && !_obj.menu_item_link_dest) return 'URL is required'; if((_obj.menu_item_link_type=='JS') && !_obj.menu_item_link_dest) return 'JS is required';"}]},
30
+ {"control":"html","value":"</span>"},
27
31
 
32
+ {"control":"html","value":"<span class='<%=model.class%>_link_page_group'>"},
28
33
  {"name":"menu_item_link_page","control":"textbox_M","caption":"Page","controlstyle":"margin-right:4px;","readonly":true,"nl":true,
29
34
  "validate":[{"function":"js:if((_obj.menu_item_link_type=='PAGE') && !_obj.menu_item_link_dest) return 'Page is required';"}]},
30
35
  {"name":"menu_item_link_page_browse","control":"button","value":"Browse","onclick":"js:_this.browsePage();","actions":"IU"},
36
+ {"control":"html","value":"</span>"},
31
37
 
38
+ {"control":"html","value":"<span class='<%=model.class%>_link_media_group'>"},
32
39
  {"name":"menu_item_link_media","control":"textbox_M","caption":"Media","controlstyle":"margin-right:4px;","readonly":true,"nl":true,
33
40
  "validate":[{"function":"js:if((_obj.menu_item_link_type=='MEDIA') && !_obj.menu_item_link_dest) return 'Media is required';"}]},
34
41
  {"name":"menu_item_link_media_browse","control":"button","value":"Browse","onclick":"js:_this.browseMedia();","actions":"IU"},
42
+ {"control":"html","value":"</span>"},
35
43
 
36
44
  {"control":"html","value":"<div class='<%=model.class%>_divider'>:: Advanced Options</div>","nl":true},
37
45
  {"name":"menu_item_type","control":"dropdown","caption":"Render As","default":"TEXT","lov":{ "blank": false, "values": { "TEXT": "Text", "HTML": "HTML" } }, "captionstyle":"width:130px;"},
@@ -113,18 +113,11 @@ jsh.App[modelid] = new (function(){
113
113
  this.render = function(){
114
114
  var sitemap_item_link_type = xmodel.get('sitemap_item_link_type');
115
115
 
116
- var jtarget = $('.sitemap_item_link_target.xelem'+xmodel.class);
117
- var jtarget_group = jtarget.add(jtarget.prevUntil('.xelem'+xmodel.class));
118
-
119
- var jdest = $('.sitemap_item_link_dest.xelem'+xmodel.class);
120
- var jdestcaption = jdest.prev();
121
- var jdest_group = jdest.add(jdest.prevUntil('.xelem'+xmodel.class));
122
-
123
- var jdest_page = $('.sitemap_item_link_page.xelem'+xmodel.class);
124
- var jdest_page_group = jdest_page.add(jdest_page.prevUntil('.xelem'+xmodel.class)).add(jdest_page.next('.xelem'+xmodel.class));
125
-
126
- var jdest_media = $('.sitemap_item_link_media.xelem'+xmodel.class);
127
- var jdest_media_group = jdest_media.add(jdest_media.prevUntil('.xelem'+xmodel.class)).add(jdest_media.next('.xelem'+xmodel.class));
116
+ var jtarget_group = $('.'+xmodel.class+'_link_target_group');
117
+ var jdestcaption = $('.sitemap_item_link_dest_caption');
118
+ var jdest_group = $('.'+xmodel.class+'_link_dest_group');
119
+ var jdest_page_group = $('.'+xmodel.class+'_link_page_group');
120
+ var jdest_media_group = $('.'+xmodel.class+'_link_media_group');
128
121
 
129
122
  var enable_target = true;
130
123
  var enable_dest = false;
@@ -30,18 +30,26 @@
30
30
  {"name":"sitemap_item_path","control":"hidden"},
31
31
  {"name":"sitemap_item_text","control":"textbox_M","controlstyle":"width:300px;","caption":"Link Text","validate":["Required"],"nl":true,"onchange":"_this.sitemap_item_text_onchange(obj,newval);", "captionstyle":"width:68px;"},
32
32
  {"name":"sitemap_item_link_type","control":"dropdown","caption":"Link Type","lov":{ "blank": "(No Link)", "values": { "JS": "JavaScript", "MEDIA": "Media", "PAGE": "Page", "URL": "URL" } }, "onchange":"_this.sitemap_item_link_type_onchange(obj, newval, undoChange);","nl":true},
33
+ {"control":"html","value":"<span class='<%=model.class%>_link_target_group'>"},
33
34
  {"name":"sitemap_item_link_target","control":"dropdown","caption":"Target","lov":{ "blank": "Same Window", "values": { "NEWWIN": "New Window" } }},
35
+ {"control":"html","value":"</span>"},
34
36
 
35
- {"name":"sitemap_item_link_dest","control":"textbox_L","caption":"Destination","controlstyle":"width:300px;","nl":true,
37
+ {"control":"html","value":"<span class='<%=model.class%>_link_dest_group'>"},
38
+ {"name":"sitemap_item_link_dest","control":"textbox_L","caption":"Destination","captionclass":"sitemap_item_link_dest_caption","controlstyle":"width:300px;","nl":true,
36
39
  "validate":[{"function":"js:if((_obj.sitemap_item_link_type=='URL') && !_obj.sitemap_item_link_dest) return 'URL is required'; if((_obj.sitemap_item_link_type=='JS') && !_obj.sitemap_item_link_dest) return 'JS is required';"}]},
40
+ {"control":"html","value":"</span>"},
37
41
 
42
+ {"control":"html","value":"<span class='<%=model.class%>_link_page_group'>"},
38
43
  {"name":"sitemap_item_link_page","control":"textbox_M","caption":"Page","controlstyle":"margin-right:4px;","readonly":true,"nl":true,
39
44
  "validate":[{"function":"js:if((_obj.sitemap_item_link_type=='PAGE') && !_obj.sitemap_item_link_dest) return 'Page is required';"}]},
40
45
  {"name":"sitemap_item_link_page_browse","control":"button","value":"Browse","onclick":"js:_this.browsePage();","actions":"IU"},
46
+ {"control":"html","value":"</span>"},
41
47
 
48
+ {"control":"html","value":"<span class='<%=model.class%>_link_media_group'>"},
42
49
  {"name":"sitemap_item_link_media","control":"textbox_M","caption":"Media","controlstyle":"margin-right:4px;","readonly":true,"nl":true,
43
50
  "validate":[{"function":"js:if((_obj.sitemap_item_link_type=='MEDIA') && !_obj.sitemap_item_link_dest) return 'Media is required';"}]},
44
51
  {"name":"sitemap_item_link_media_browse","control":"button","value":"Browse","onclick":"js:_this.browseMedia();","actions":"IU"},
52
+ {"control":"html","value":"</span>"},
45
53
 
46
54
  {"control":"html","value":"<div class='<%=model.class%>_page_options'>"},
47
55
  {"control":"html","value":"<div class='<%=model.class%>_divider'>:: Page</div>"},
@@ -1835,7 +1835,7 @@ module.exports = exports = function(module, funcs){
1835
1835
  function(generate_cb){
1836
1836
  async.eachOfSeries(branchData.site_config.media_thumbnails, function(thumbnail_config, thumbnail_id, thumbnail_cb){
1837
1837
  if(!thumbnail_config || !thumbnail_config.export) return thumbnail_cb();
1838
- if(!_.includes(['.jpg','.jpeg','.tif','.tiff','.png','.gif','.svg'], media.media_ext)) return cb();
1838
+ if(!_.includes(['.jpg','.jpeg','.tif','.tiff','.png','.gif','.svg'], media.media_ext)) return thumbnail_cb();
1839
1839
 
1840
1840
  funcs.getMediaFile(media.media_file_id, media.media_filename, media.media_ext, thumbnail_id, thumbnail_config, function(err, thumbnail_srcpath, thumbnail_fname, stat){
1841
1841
  if(err) return thumbnail_cb('Error getting thumbnail for '+media_fpath+':'+thumbnail_id+' - '+err.toString());
@@ -447,7 +447,7 @@ module.exports = exports = function(module, funcs){
447
447
  var rslt = funcs.replaceBranchURLs(content, _.extend({ replaceComponents: true }, options, {
448
448
  getMediaURL: function(media_key, thumbnail_id, branchData, getLinkContent, urlparts){
449
449
  if(!media_files){
450
- return baseurl + urlparts.path.substr(1) + '#@JSHCMS';
450
+ return baseurl + urlparts.pathname.substr(1) + '#@JSHCMS';
451
451
  }
452
452
  return baseurl+'_funcs/media/'+media_key+(thumbnail_id?'/'+thumbnail_id:'')+'/?media_id='+media_files[media_key].media_id+'#@JSHCMS';
453
453
  },
@@ -1693,7 +1693,8 @@ module.exports = exports = function(module, funcs){
1693
1693
  if(thumbnails[key].responsive) responsiveThumbnails[key] = thumbnails[key];
1694
1694
  }
1695
1695
 
1696
- if(_.isEmpty(responsiveThumbnails)) return content;
1696
+ var lcontent = content.toLowerCase();
1697
+ if(_.isEmpty(responsiveThumbnails) && (lcontent.indexOf('cms-image-dimensions') < 0)) return content;
1697
1698
 
1698
1699
  //If no img tags, return
1699
1700
  if(content.toLowerCase().indexOf('img') < 0) return content;
@@ -1705,7 +1706,7 @@ module.exports = exports = function(module, funcs){
1705
1706
  exec: function(node){
1706
1707
  var src = (htdoc.getAttr(node, 'src')||'').toString();
1707
1708
  if(!src) return;
1708
- if(htdoc.hasAttr(node, 'srcset')) return;
1709
+ if(htdoc.hasAttr(node, 'srcset') && !htdoc.hasAttr(node, 'cms-image-dimensions')) return;
1709
1710
 
1710
1711
  //Check for #@JSHCMS
1711
1712
  var urlparts = null;
@@ -1727,42 +1728,62 @@ module.exports = exports = function(module, funcs){
1727
1728
  //Check if media_key is valid
1728
1729
  var media_item = media_items[media_key];
1729
1730
  var media_width = 0;
1730
- if(media_item && media_item.media_width) media_width = media_item.media_width;
1731
+ var media_height = 0;
1732
+ if(media_item){
1733
+ if(media_item.media_width) media_width = media_item.media_width;
1734
+ if(media_item.media_height) media_height = media_item.media_height;
1735
+ }
1731
1736
  if(media_thumbnail && (media_thumbnail in thumbnails)){
1732
1737
  var tgtThumbnail = thumbnails[media_thumbnail];
1733
- if(tgtThumbnail.resize && tgtThumbnail.resize.length) media_width = tgtThumbnail.resize[0];
1734
- else if(tgtThumbnail.crop && tgtThumbnail.crop.length) media_width = tgtThumbnail.crop[0];
1738
+ if(tgtThumbnail.resize && tgtThumbnail.resize.length){
1739
+ media_width = tgtThumbnail.resize[0];
1740
+ media_height = tgtThumbnail.resize[1];
1741
+ }
1742
+ else if(tgtThumbnail.crop && tgtThumbnail.crop.length){
1743
+ media_width = tgtThumbnail.crop[0];
1744
+ media_height = tgtThumbnail.crop[1];
1745
+ }
1735
1746
  }
1736
1747
 
1737
- var srcsets = [];
1738
- var max_width = media_width;
1739
- for(var thumbnail_id in responsiveThumbnails){
1740
- var thumbnail = responsiveThumbnails[thumbnail_id];
1741
- var srcsetCondition = '';
1742
- if(_.isString(thumbnail.responsive)) srcsetCondition = thumbnail.responsive;
1743
- else {
1744
- var thumbnail_width = 0;
1745
- if(media_item && media_item.media_width) thumbnail_width = media_item.media_width;
1746
- if(thumbnail.resize && thumbnail.resize.length) thumbnail_width = thumbnail.resize[0];
1747
- else if(thumbnail.crop && thumbnail.crop.length) thumbnail_width = thumbnail.crop[0];
1748
-
1749
- if(thumbnail_width && (!media_width || (thumbnail_width < media_width))){
1750
- srcsetCondition = thumbnail_width + 'w';
1751
- if(thumbnail_width >= max_width) max_width = thumbnail_width + 1;
1748
+ if(!htdoc.hasAttr(node, 'srcset')){
1749
+ var srcsets = [];
1750
+ var max_width = media_width;
1751
+ for(var thumbnail_id in responsiveThumbnails){
1752
+ var thumbnail = responsiveThumbnails[thumbnail_id];
1753
+ var srcsetCondition = '';
1754
+ if(_.isString(thumbnail.responsive)) srcsetCondition = thumbnail.responsive;
1755
+ else {
1756
+ var thumbnail_width = 0;
1757
+ if(media_item && media_item.media_width) thumbnail_width = media_item.media_width;
1758
+ if(thumbnail.resize && thumbnail.resize.length) thumbnail_width = thumbnail.resize[0];
1759
+ else if(thumbnail.crop && thumbnail.crop.length) thumbnail_width = thumbnail.crop[0];
1760
+
1761
+ if(thumbnail_width && (!media_width || (thumbnail_width < media_width))){
1762
+ srcsetCondition = thumbnail_width + 'w';
1763
+ if(thumbnail_width >= max_width) max_width = thumbnail_width + 1;
1764
+ }
1765
+ }
1766
+
1767
+ if(srcsetCondition){
1768
+ //Generate srcset
1769
+ var srcsetUrl = urlparts.protocol+'//'+urlparts.host+'/_funcs/media/'+media_key+'/'+thumbnail_id+'/#@JSHCMS'+urlparts.hash.substr(('#@JSHCMS').length);
1770
+ srcsets.push(srcsetUrl+' '+srcsetCondition);
1752
1771
  }
1753
1772
  }
1754
1773
 
1755
- if(srcsetCondition){
1756
- //Generate srcset
1757
- var srcsetUrl = urlparts.protocol+'//'+urlparts.host+'/_funcs/media/'+media_key+'/'+thumbnail_id+'/#@JSHCMS'+urlparts.hash.substr(('#@JSHCMS').length);
1758
- srcsets.push(srcsetUrl+' '+srcsetCondition);
1774
+ //Update img tag
1775
+ if(srcsets.length){
1776
+ srcsets.unshift(src + ' ' + max_width + 'w');
1777
+ htdoc.appendAttr(node, 'srcset', srcsets.join(', '), 'srcset');
1759
1778
  }
1760
1779
  }
1761
1780
 
1762
- //Update img tag
1763
- if(srcsets.length){
1764
- srcsets.push(src + ' ' + max_width + 'w');
1765
- htdoc.appendAttr(node, 'srcset', srcsets.join(', '), 'srcset');
1781
+ if(media_width && media_height && htdoc.hasAttr(node, 'cms-image-dimensions')){
1782
+ if(!htdoc.hasAttr(node, 'width') && !htdoc.hasAttr(node, 'height')){
1783
+ htdoc.appendAttr(node, 'width', media_width.toString());
1784
+ htdoc.appendAttr(node, 'height', media_height.toString());
1785
+ htdoc.removeAttr(node, 'cms-image-dimensions');
1786
+ }
1766
1787
  }
1767
1788
  }
1768
1789
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsharmony-cms",
3
- "version": "1.4.1",
3
+ "version": "1.5.3",
4
4
  "description": "jsHarmony CMS",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -30,8 +30,8 @@
30
30
  "diff2html": "3.4.1",
31
31
  "ejs": "2.7.4",
32
32
  "js-beautify": "^1.11.0",
33
- "jsharmony": "^1.1.201",
34
- "jsharmony-factory": "^1.1.97",
33
+ "jsharmony": "^1.4.0",
34
+ "jsharmony-factory": "^1.2.0",
35
35
  "lodash": "^4.17.19",
36
36
  "node-forge": "^0.10.0",
37
37
  "parse5": "^6.0.1",
@@ -579,7 +579,9 @@ DataModelTemplate_GridPreview.prototype.buildTemplate = function(componentTempla
579
579
  model.oncommit = '_this.onCommit(xmodel, rowid, callback);';
580
580
  model.ejs = '';
581
581
  model.sort = { [this._sequenceFieldName]: 'asc' };
582
- model.oninit = "jsh.$root('.xform'+xmodel.class).before('<div class=\"dataGridEditor_instructions\"><span style=\"font-size:1.3em;position:relative;top:1px;margin-right:2px;margin-left:4px;\">&#x1f6c8;</span> Add, edit, and re-order items using the icons :: Double-click to edit</div>');";
582
+ model.oninit = [
583
+ "jsh.$root('.xform'+xmodel.class).before('<div class=\"dataGridEditor_instructions\"><span style=\"font-size:1.3em;position:relative;top:1px;margin-right:2px;margin-left:4px;\">&#x1f6c8;</span> Add, edit, and re-order items using the icons <span class=\"dataGridEditor_instructions_doubleClick\">:: Double-click to edit</span></div>');",
584
+ ].join(' ');
583
585
  model.rowclass = "<%=xejs.iif(rowid==0,'first')%>";
584
586
  model.tableclass = ((model.tableclass||'')+' '+(componentConfig&&componentConfig.options&&componentConfig.options.component_preview_size=='collapse'?'jsharmony_cms_component_preview_collapse':'jsharmony_cms_component_preview_expand')).trim();
585
587
  this._jsh.XPage.ParseModelDefinition(model, null, null, { ignoreErrors: true });
@@ -6172,6 +6174,9 @@ exports = module.exports = function(jsh, cms, toolbarContainer){
6172
6174
  ],
6173
6175
  contextmenu: 'jsharmonycmscomponentcontextmenu link linkchecker image imagetools table spellchecker configurepermanentpen',
6174
6176
  toolbar: 'formatselect | backcolor forecolor | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image charmapmaterialicons table fullscreen | jsHarmonyCmsWebSnippet | jsHarmonyCmsComponent | jsHarmonyCmsView | jsHarmonyCmsEndEdit',
6177
+ mobile: {
6178
+ toolbar_mode: 'floating',
6179
+ },
6175
6180
  removed_menuitems: 'newdocument',
6176
6181
  image_advtab: true,
6177
6182
  menu: {
@@ -667,4 +667,28 @@ span[data-component] {
667
667
  right:6px;
668
668
  cursor:pointer;
669
669
  font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;
670
+ }
671
+
672
+ @media screen and (max-width: 500px) {
673
+ .jsharmony_cms .xactions.secondaryform {
674
+ padding-top:20px;
675
+ }
676
+ .jsharmony_cms .xactions.secondarygrid {
677
+ padding-top:14px;
678
+ }
679
+ .jsharmony_cms_dialog .jsharmony_cms_component_dialog > .xbodyhead {
680
+ position:relative;
681
+ }
682
+ .jsharmony_cms_component_dataGridEditor .dataGridEditor_instructions {
683
+ border-right: 2px solid #eee;
684
+ }
685
+ .dataGridEditor_instructions_doubleClick {
686
+ display:none;
687
+ }
688
+ .xdialogbox.jsharmony_cms_component_dialog {
689
+ min-width:auto !important;
690
+ }
691
+ .jsharmony_cms_component_dataGridEditor [data-component-template="gridRow"] .component_toolbar {
692
+ text-align:left;
693
+ }
670
694
  }
@@ -281,6 +281,7 @@ cms-content-editor
281
281
  cms-content-editor-type
282
282
  cms-component-editor-remove-class
283
283
  cms-component-editor-add-class
284
+ cms-image-dimensions
284
285
 
285
286
  ===================
286
287
  EJS Container Slurp