开发者

How to Replace or Remove HTML Editor styles in the Sharepoint 2010 Ribbon

开发者 https://www.devze.com 2023-01-10 02:21 出处:网络
I want to replace the HTML Editor styles in the HTML Style dropdown on the editor ribbon with styles of my own creation. According to this MSDN article http://msdn.microsoft.com/en-gb/library/ms551040

I want to replace the HTML Editor styles in the HTML Style dropdown on the editor ribbon with styles of my own creation. According to this MSDN article http://msdn.microsoft.com/en-gb/library/ms551040.aspx as soon as I start putting classes that begin with the pattern ms-rteCustom-XXXX(XXXX being a custom name) into CSS that's loaded in the page, the existing styles should be replaced. I would expect this to leave only my styles in the drop-down, however I can see all of the original Sharepoint styles, and then my styles.

Am I missing something in the documentation, or is it lying to me? As far as I can tell, the original styles come from the corev4.css that's also loaded by the开发者_如何学Go master page, however as my CSS is loaded later, it seems like any styles already in the drop down should be cleared.

Here is one of the new/custom styles in the CSS I'm using;

H3.ms-rteElement-H3CompanyName
{
    -ms-name:"Heading 3";
}
.ms-rteElement-H3CompanyName
{
    font-family: Arial, Helvetica, sans-serif;
    font-size: small;
    font-style: normal;
    line-height: normal;
    font-weight: bold;
    font-variant: normal;
    text-transform: none;
    color: #000000;
}


The best way to remove the styles, assuming this is a publishing page, is to modify the control within your page layout.

<PublishingWebControls:RichHtmlField FieldName="PublishingPageContent" HasInitialFocus="True" MinimumEditHeight="400px" runat="server" PrefixStyleSheet="customPrefix"/>

By declaring a new PrefixStyleSheet it will remove all of the default styles so that you can only provide your own.


Rather than JavaScript, you can also use css to hide Markup Styles. For example, this is how to hide Heading 1s.

#Ribbon\.EditingTools\.CPEditTab\.Paragraph\.ElementWithStyle\.Menu\.Styles #ElementWithStyle0-Menu,
#Ribbon\.EditingTools\.CPEditTab\.Paragraph\.ElementWithStyle\.Menu\.Styles #ElementWithStyle4-Menu
    {display:none;}


I'm not sure where you've read that "as soon as custom styles are added, old ones are removed". The way I read the documentation, it correlates to my experience with this - that the custom styles are just added to the bottom of the dropdown list.

What you could do though, is to override the built-in ones with your custom style as well. Just use the exact same name as the OOTB styles and enter your own styles in the CSS file. Example: to override the style "Callout 1", add a rule for .ms-rteElement-Callout1 in your CSS and add your own styling there.

Another option is to write a JavaScript function and attach it to the ribbon resized event using

SP.UI.Workspace.add_resized(your_javascript_function_name);

Inside your function, you can use a jQuery statement to remove all (or the first X) elements from the dropdown list in the ribbon control.


It looks like the only way to remove elements from the Markup Style drop down list is to modify files in the main Sharepoint hive. A reset of IIS is probably a good idea after these changes, then ctrl-F5 to fully refresh what the browser is seeing.

This is not normally recommended as these files may change as part of a Sharepoint upgrade, however it seems to be the only way that reliably works.

To remove unwanted elements from the Markup Style dropdown, remove all CSS rules that affect classes named in this pattern .ms-rteElement-XXXX . Our own styles for use in this menu are added in one of our own style sheets.

There are four files that need to be modified, two copies of Controls.css and two copies of Corev4.css.

They are located as follows;

Controls.css 
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES\PublishingLayouts\en-us\Controls.css

COREV4.CSS 
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\1033\STYLES\COREV4.CSS

CONTROLS.CSS 
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\1033\STYLES\CONTROLS.CSS

COREV4.CSS 
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\1033\STYLES\Themable\COREV4.CSS


I would add your CSS to the alternate CSS option under Look and Feel in your site settings. If you dont see the option, turn on publishing options.

Then add the CSS you want. It gets loaded last and to make sure, you can add !important to the styles.

Look here for more details... Half way down the page.

Sharepoint 2010 Themes and Alternate CSS for overriding Core

EDIT FOR COMMENT BELOW:

$('a#Ribbon.EditingTools.CPEditTab.Markup.ElementWithStyle-Large').click(function(){
  $('a#ElementWithStyle3-Menu').parent().hide();
});


I finally got this to work using purely Javascript. What I did is register a PageComponent and then add a handler for the appropriate command (In the case of Markup Styles, the command is called 'ElementWithStyleOptionsOpen').

Here is the MSDN documentation about how to develop PageComponents: http://msdn.microsoft.com/en-us/library/ff407303.aspx#Y300

In my custom PageComponent class I registered 'ElementWithStyleOptionsOpen' as a GlobalCommand:

getGlobalCommands: function () {
    return ['ElementWithStyleOptionsOpen'];
}

...And also added it to canHandleCommand:

canHandleCommand: function (commandId) {
    if (commandId === 'ElementWithStyleOptionsOpen')  {
        return true;
    }
    else {
        return false;
    }

Finally my HandleCommand looks like this:

handleCommand: function (commandId, properties, sequence) {
    if(commandId=='ElementWithStyleOptionsOpen') {
          //Remove styles that have the word Colored
          jQuery('li.ms-cui-menusection-items:contains("Colored")').remove();
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号