Hello,
I read already that there are IE9 issues. I will wait for some hotfix, but here is my code that causes problems in IE9 and the editor. Might help you with the debugging.
Below you will ind my Aspx page, Code-behind and the content file I load into the editor.
Scenario: Click a treeview node to load content into editor. In the content (see below) in the 2nd paragraph (indicated by 2nd bold line) when you try to select text a few lines below that bold part, it won't select anything. And when you click a few times, the editor puts cursor at the bottom and scrolls down. I disabled my timer (auto save) but that didnt help.
Ways to prevent:
Aspx file
Code behind:
Content for editor:
I read already that there are IE9 issues. I will wait for some hotfix, but here is my code that causes problems in IE9 and the editor. Might help you with the debugging.
Below you will ind my Aspx page, Code-behind and the content file I load into the editor.
Scenario: Click a treeview node to load content into editor. In the content (see below) in the 2nd paragraph (indicated by 2nd bold line) when you try to select text a few lines below that bold part, it won't select anything. And when you click a few times, the editor puts cursor at the bottom and scrolls down. I disabled my timer (auto save) but that didnt help.
Ways to prevent:
- Use meta tag to force IE8 mode
- Use different browser
- Put editor in fullscreen mode (F11)
I hope this info helps you track down the problems :-)
Meta would be :
<
meta
http-equiv
=
"X-UA-Compatible"
content
=
"IE=EmulateIE8"
/>
Aspx file
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
>HezelTax - Artikel Editor</
title
>
<
style
type
=
"text/css"
>
html, body, form
{
height: 100%;
margin: 0px;
padding: 0px;
font-family: verdana;
font-size: 0.9em;
}
div.RadTabStrip .rtsUL
{
float: none;
background: #ccc;
}
div.RadTabStrip .rightTab
{
float: right;
}
#RadSplitter1
{
margin-top: 15px;
}
.reTool.Metro .InsertSpecialLink
{
background-image: url(http://www.telerik.com/DEMOS/ASPNET/RadControls/Editor/Skins/Default/buttons/Custom.gif);
}
</
style
>
<
telerik:RadStyleSheetManager
ID
=
"RadStyleSheetManager1"
runat
=
"server"
/>
<
telerik:RadScriptBlock
ID
=
"rsb"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
function setSplitInfo(sender, args) {
window.$find("<%=ram.ClientID%>").ajaxRequest('split_main');
}
function setSplitInfoTop(sender, args) {
window.$find("<%=ram.ClientID%>").ajaxRequest('split_top');
}
function rtvExplore_OnNodeExpandedCollapsed(sender, eventArgs) {
var allNodes = eventArgs._node.get_treeView().get_allNodes();
var i;
var selectedNodes = "";
for (i = 0; i <
allNodes.length
; i++) {
if (allNodes[i].get_expanded())
selectedNodes += allNodes[i].get_value() + "*";
}
Set_Cookie("expandedNodes", selectedNodes, 30);
}
function Set_Cookie(name, value, expires, path, domain, secure) {
var
today
=
new
Date();
today.setTime(today.getTime());
if (expires) {
expires
= expires * 1000 * 60 * 60 * 24;
}
var
expires_date
=
new
Date(today.getTime() + (expires));
document.cookie
=
name
+ "=" + escape(value) +
((expires) ? ";
expires
=
" + expires_date.toGMTString() : "
") +
((path) ? ";
path
=
" + path : "
") +
((domain) ? ";
domain
=
" + domain : "
") +
((secure) ? ";secure" : "");
}
function editorModeChanged(editor, args) {
var
mode
=
editor
.get_mode();
switch (mode) {
case 1:
//We are in Design mode
if (editor.isFullScreen())
editor.fire("ToggleScreenMode");
break;
case 2:
//We are in Html mode
if (editor.isFullScreen())
editor.fire("ToggleScreenMode");
break;
case 4:
if (!editor.isFullScreen())
editor.fire("ToggleScreenMode");
break;
}
}
function OnClientLoad(sender, args) {
// var timer = $find("<%=Timer1.ClientID %>");
// sender.add_spellCheckLoaded(function () {
// var spell = sender.get_ajaxSpellCheck();
// spell.add_spellCheckStart(function (sender, args) {
// timer._stopTimer();
// });
// spell.add_spellCheckEnd(function (sender, args) {
// timer._startTimer();
// });
// }
// );
}
</
script
>
</
telerik:RadScriptBlock
>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadFormDecorator
runat
=
"server"
ID
=
"rfd"
DecoratedControls
=
"All"
Skin
=
"Metro"
/>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
ScriptMode
=
"Release"
EnableScriptCombine
=
"True"
EnableCdn
=
"True"
>
<
Scripts
>
<%--Needed for JavaScript IntelliSense in VS2010--%>
<%--For VS2008 replace RadScriptManager with ScriptManager--%>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.Core.js"
/>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.jQuery.js"
/>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.jQueryInclude.js"
/>
</
Scripts
>
</
telerik:RadScriptManager
>
<
script
type
=
"text/javascript"
>
</
script
>
<
div
id
=
"ParentDivElement"
style
=
"height: 100%;"
>
<
telerik:RadSplitter
ID
=
"MainSplitter"
runat
=
"server"
Height
=
"100%"
Width
=
"100%"
Orientation
=
"Horizontal"
Skin
=
"Metro"
>
<
telerik:RadPane
ID
=
"TopPane"
runat
=
"server"
Height
=
"28"
MinHeight
=
"28"
MaxHeight
=
"28"
Scrolling
=
"none"
OnClientResized
=
"setSplitInfoTop"
OnClientCollapsed
=
"setSplitInfoTop"
OnClientExpanded
=
"setSplitInfoTop"
>
<
telerik:RadTabStrip
ID
=
"RadTabStrip1"
runat
=
"server"
MultiPageID
=
"MultiPage1"
>
<
Tabs
>
<
telerik:RadTab
Text
=
"Artikelen"
Selected
=
"true"
PageViewID
=
"RadPageView1"
>
</
telerik:RadTab
>
<
telerik:RadTab
Text
=
"Tooltips"
NavigateUrl
=
"~/ToolTips.aspx"
>
</
telerik:RadTab
>
<
telerik:RadTab
Text
=
"Afmelden"
NavigateUrl
=
"~/Logoff.aspx"
>
</
telerik:RadTab
>
<
telerik:RadTab
Text
=
"Welkom "
OuterCssClass
=
"rightTab"
Value
=
"userid"
/>
</
Tabs
>
</
telerik:RadTabStrip
>
</
telerik:RadPane
>
<
telerik:RadSplitBar
ID
=
"RadsplitbarTop"
runat
=
"server"
CollapseMode
=
"Forward"
/>
<
telerik:RadPane
ID
=
"MainPane"
runat
=
"server"
Scrolling
=
"none"
MinWidth
=
"500"
>
<
telerik:RadSplitter
ID
=
"NestedSplitter"
runat
=
"server"
Skin
=
"Metro"
HeightOffset
=
"140"
LiveResize
=
"false"
>
<
telerik:RadPane
ID
=
"LeftPane"
runat
=
"server"
Width
=
"200"
MinWidth
=
"150"
MaxWidth
=
"400"
OnClientResized
=
"setSplitInfo"
OnClientCollapsed
=
"setSplitInfo"
OnClientExpanded
=
"setSplitInfo"
>
<
telerik:RadTreeView
ID
=
"rtv"
runat
=
"server"
Skin
=
"Metro"
OnNodeExpand
=
"rtv_NodeExpand"
OnNodeClick
=
"rtv_NodeClick"
OnClientNodeExpanded
=
"rtvExplore_OnNodeExpandedCollapsed"
OnClientNodeCollapsed
=
"rtvExplore_OnNodeExpandedCollapsed"
>
</
telerik:RadTreeView
>
</
telerik:RadPane
>
<
telerik:RadSplitBar
ID
=
"VerticalSplitBar"
runat
=
"server"
CollapseMode
=
"Forward"
/>
<
telerik:RadPane
ID
=
"ContentPane"
runat
=
"server"
Height
=
"100%"
Scrolling
=
"None"
>
<
telerik:RadMultiPage
ID
=
"MultiPage1"
runat
=
"server"
Height
=
"100%"
>
<
telerik:RadPageView
ID
=
"RadPageView1"
runat
=
"server"
Selected
=
"true"
Height
=
"98%"
>
<
telerik:RadTabStrip
ID
=
"rtsArtikel"
runat
=
"server"
MultiPageID
=
"MultiPage2"
>
<
Tabs
>
<
telerik:RadTab
Text
=
"Kernwoorden"
Selected
=
"true"
PageViewID
=
"rpvKernwoorden"
>
</
telerik:RadTab
>
<
telerik:RadTab
Text
=
"Artikel"
PageViewID
=
"rpvAtikel"
>
</
telerik:RadTab
>
</
Tabs
>
</
telerik:RadTabStrip
>
<
telerik:RadMultiPage
ID
=
"MultiPage2"
runat
=
"server"
Height
=
"100%"
>
<
telerik:RadPageView
ID
=
"rpvKernwoorden"
runat
=
"server"
Selected
=
"true"
Height
=
"98%"
>
<
div
style
=
"width: 240px; display: inline; float: left; margin-left: 4px; margin-top: 4px;"
>
<
asp:Button
runat
=
"server"
ID
=
"btnSave"
Text
=
"Opslaan"
OnClick
=
"btnSave_Click"
Width
=
"100"
/>
<
asp:Button
runat
=
"server"
ID
=
"btnPreview"
Text
=
"Preview"
OnClientClick
=
"return false;"
Width
=
"100"
/>
</
div
>
<
div
style
=
"width: 40px; display: inline; float: left; margin-top: 12px;"
>
<
telerik:RadAjaxLoadingPanel
ID
=
"lp"
runat
=
"server"
IsSticky
=
"True"
EnableAjaxSkinRendering
=
"False"
EnableEmbeddedSkins
=
"False"
>
<
asp:Image
ID
=
"Image2"
runat
=
"server"
AlternateText
=
"Loading..."
ImageUrl
=
"~/Styles/Images/whiteloader.gif"
/>
</
telerik:RadAjaxLoadingPanel
>
</
div
>
<
div
style
=
"width: 320px; display: inline; float: left; margin-left: 4px; margin-top: 12px;"
>
<
asp:Label
runat
=
"server"
ID
=
"lblInfo2"
></
asp:Label
>
</
div
>
<
telerik:RadEditor
ID
=
"RadEditor2"
runat
=
"server"
ToolbarMode
=
"Default"
ToolsFile
=
"Tools.xml"
StripFormattingOptions
=
"All"
NewLineMode
=
"P"
Width
=
"98%"
Language
=
"nl-NL"
AutoResizeHeight
=
"False"
OnClientModeChange
=
"editorModeChanged"
ContentAreaCssFile
=
"~/Styles/EditorCss.css"
LocalizationPath
=
"~/Resources/"
ExternalDialogsPath
=
"~/Resources/EditorDialogs/"
EnableViewState
=
"true"
OnClientLoad
=
"OnClientLoad"
>
<
FontNames
>
<
telerik:EditorFont
runat
=
"server"
Value
=
"Verdana"
/>
</
FontNames
>
<
SpellCheckSettings
AllowAddCustom
=
"True"
DictionaryLanguage
=
"nl-NL"
></
SpellCheckSettings
>
<
MediaManager
UploadPaths
=
"~/Media/"
ViewPaths
=
"~/Media/"
DeletePaths
=
"~/Media/"
MaxUploadFileSize
=
"10240000"
></
MediaManager
>
<
ImageManager
UploadPaths
=
"~/Media/"
ViewPaths
=
"~/Media/"
DeletePaths
=
"~/Media/"
EnableImageEditor
=
"False"
MaxUploadFileSize
=
"10240000"
EnableThumbnailLinking
=
"True"
>
</
ImageManager
>
<
DocumentManager
ViewPaths
=
"~/Documents/"
UploadPaths
=
"~/Documents/"
DeletePaths
=
"~/Documents/"
/>
</
telerik:RadEditor
>
</
telerik:RadPageView
>
<
telerik:RadPageView
ID
=
"rpvAtikel"
runat
=
"server"
Selected
=
"false"
Height
=
"98%"
>
<
div
style
=
"width: 240px; display: inline; float: left; margin-left: 4px; margin-top: 4px;"
>
<
asp:Button
runat
=
"server"
ID
=
"btnSave2"
Text
=
"Opslaan"
OnClick
=
"btnSave_Click"
Width
=
"100"
/>
<
asp:Button
runat
=
"server"
ID
=
"btnPreview2"
Text
=
"Preview"
OnClientClick
=
"return false;"
Width
=
"100"
/>
</
div
>
<
div
style
=
"width: 40px; display: inline; float: left; margin-top: 12px;"
>
<
telerik:RadAjaxLoadingPanel
ID
=
"lp2"
runat
=
"server"
IsSticky
=
"True"
EnableAjaxSkinRendering
=
"False"
EnableEmbeddedSkins
=
"False"
>
<
asp:Image
ID
=
"Image1"
runat
=
"server"
AlternateText
=
"Loading..."
ImageUrl
=
"~/Styles/Images/whiteloader.gif"
/>
</
telerik:RadAjaxLoadingPanel
>
</
div
>
<
div
style
=
"width: 320px; display: inline; float: left; margin-left: 4px; margin-top: 12px;"
>
<
asp:Label
runat
=
"server"
ID
=
"lblInfo"
></
asp:Label
>
</
div
>
<
telerik:RadEditor
ID
=
"RadEditor1"
runat
=
"server"
ToolbarMode
=
"Default"
ToolsFile
=
"Tools.xml"
StripFormattingOptions
=
"All"
NewLineMode
=
"P"
EnableViewState
=
"true"
Width
=
"98%"
Language
=
"nl-NL"
AutoResizeHeight
=
"False"
OnClientModeChange
=
"editorModeChanged"
ContentAreaCssFile
=
"~/Styles/EditorCss.css"
LocalizationPath
=
"~/Resources/"
ExternalDialogsPath
=
"~/Resources/EditorDialogs/"
OnClientLoad
=
"OnClientLoad"
>
<
FontNames
>
<
telerik:EditorFont
runat
=
"server"
Value
=
"Verdana"
/>
</
FontNames
>
<
SpellCheckSettings
AllowAddCustom
=
"True"
DictionaryLanguage
=
"nl-NL"
></
SpellCheckSettings
>
<
MediaManager
UploadPaths
=
"~/Media/"
ViewPaths
=
"~/Media/"
DeletePaths
=
"~/Media/"
MaxUploadFileSize
=
"10240000"
></
MediaManager
>
<
ImageManager
UploadPaths
=
"~/Media/"
ViewPaths
=
"~/Media/"
DeletePaths
=
"~/Media/"
EnableImageEditor
=
"False"
MaxUploadFileSize
=
"10240000"
EnableThumbnailLinking
=
"True"
>
</
ImageManager
>
<
DocumentManager
ViewPaths
=
"~/Documents/"
UploadPaths
=
"~/Documents/"
DeletePaths
=
"~/Documents/"
/>
</
telerik:RadEditor
>
</
telerik:RadPageView
>
</
telerik:RadMultiPage
>
</
telerik:RadPageView
>
</
telerik:RadMultiPage
>
</
telerik:RadPane
>
</
telerik:RadSplitter
>
</
telerik:RadPane
>
</
telerik:RadSplitter
>
</
div
>
<
asp:Timer
ID
=
"Timer1"
runat
=
"server"
Interval
=
"60000"
OnTick
=
"Timer1_Tick"
>
</
asp:Timer
>
<
telerik:RadAjaxManager
runat
=
"server"
ID
=
"ram"
OnAjaxRequest
=
"ram_AjaxRequest"
UpdatePanelsRenderMode
=
"Inline"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"ram"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"ram"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"rtv"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadEditor1"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadEditor2"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblInfo"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"btnPreview"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblInfo2"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"btnPreview2"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"btnSave"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadEditor1"
LoadingPanelID
=
"lp"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadEditor2"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblInfo"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"btnPreview"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblInfo2"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"btnPreview2"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"btnSave2"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadEditor1"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"RadEditor2"
LoadingPanelID
=
"lp2"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblInfo"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"btnPreview"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblInfo2"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"btnPreview2"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"Timer1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblInfo"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"btnPreview"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"lblInfo2"
/>
<
telerik:AjaxUpdatedControl
ControlID
=
"btnPreview2"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadScriptBlock
runat
=
"server"
ID
=
"rsbottom"
>
<
script
type
=
"text/javascript"
>
Telerik.Web.UI.Editor.CommandList["InsertSpecialLink"] = function (commandName, editor, args) {
var elem = editor.getSelectedElement(); //returns the selected element.
if (elem.tagName == "A") {
editor.selectElement(elem);
argument = elem;
}
else {
var content = editor.getSelectionHtml();
var link = editor.get_document().createElement("A");
link.innerHTML = content;
argument = link;
}
var myCallbackFunction = function (sender, args) {
editor.pasteHtml(String.format("[[{3}|{2}]] ", args.href, args.target, args.className, args.name));
};
editor.showExternalDialog('InsertLink.aspx', argument, 390, 260, myCallbackFunction, null, 'Tooltip invoegen', true, Telerik.Web.UI.WindowBehaviors.Close + Telerik.Web.UI.WindowBehaviors.Move, false, false);
};
</
script
>
</
telerik:RadScriptBlock
>
</
form
>
</
body
>
</
html
>
Code behind:
using
System;
using
System.Drawing;
using
System.Web;
using
Business;
using
Hive;
using
Hive.Core;
using
Hive.SQL;
using
Telerik.Web.UI;
using
Process;
public
partial
class
Default : System.Web.UI.Page
{
private
Functies _functiesZonderArtikel;
protected
void
Page_Load(
object
sender, EventArgs e)
{
Gebruiker.forceLogin();
Timer1.Enabled =
false
;
RadTab tab = RadTabStrip1.FindTabByValue(
"userid"
);
tab.Text =
"Welkom "
+ Gebruiker.getCurrent();
StoredProcedure sp =
new
StoredProcedure(
"getFunctieZonderArtikel"
);
_functiesZonderArtikel =
new
Functies();
_functiesZonderArtikel.retrieve(sp);
if
(!IsPostBack)
{
lblInfo.Text = lblInfo2.Text =
"Laatste keer opgeslagen: n.v.t."
;
loadFuntieTree();
PaneSettings.LoadState_Click(MainSplitter);
PaneSettings.LoadState_Click(NestedSplitter);
HttpCookie cookie = Request.Cookies[
"expandedNodes"
];
if
(cookie !=
null
)
{
string
[] expandedNodeValues = cookie.Value.Split(
'*'
);
foreach
(
string
nodeValue
in
expandedNodeValues)
{
RadTreeNode expandedNode = rtv.FindNodeByValue(HttpUtility.UrlDecode(nodeValue));
if
(expandedNode !=
null
)
{
expandedNode.Expanded =
true
;
loadNode(expandedNode);
}
}
}
}
}
private
void
loadArtikel(Functie functie)
{
Artikel artikel = Artikel.getArtikelBijFunctie(functie);
if
(!artikel.isDBNull())
{
RadEditor1.Content = artikel.omschrijving;
RadEditor2.Content = artikel.titel;
btnPreview.OnClientClick = btnPreview2.OnClientClick =
string
.Format(
"window.open('Preview.aspx?artikel={0}'); return false;"
, artikel.oid);
}
else
{
RadEditor1.Content =
"Nog geen artikel"
;
RadEditor2.Content =
"Nog geen kernwoorden"
;
btnPreview.OnClientClick = btnPreview2.OnClientClick =
"return false;"
;
}
lblInfo.Text = lblInfo2.Text =
"Laatste keer opgeslagen: n.v.t."
;
}
private
void
loadFuntieTree()
{
SelectCriteria sc =
new
SelectCriteria(
typeof
(Functie),
"parent"
,
null
, SqlOperator.equal);
Functies functies =
new
Functies();
functies.retrieve(sc);
functies.sortByProperty(
"OID"
);
foreach
(Functie functie
in
functies)
{
RadTreeNode node =
new
RadTreeNode(functie.thema, functie.oid);
node.ExpandMode = TreeNodeExpandMode.ServerSideCallBack;
if
(_functiesZonderArtikel.contains(functie))
node.ForeColor = Color.Red;
rtv.Nodes.Add(node);
}
}
private
void
loadNode(RadTreeNode node)
{
SelectCriteria sc =
new
SelectCriteria(
typeof
(Functie),
"parent"
, node.Value, SqlOperator.equal);
Functies functies =
new
Functies();
functies.retrieve(sc);
functies.sortByProperty(
"OID"
);
foreach
(Functie f
in
functies)
{
RadTreeNode cnode =
new
RadTreeNode();
cnode.Text = f.thema;
cnode.Value = f.oid;
if
(_functiesZonderArtikel.contains(f))
cnode.ForeColor = Color.Red;
node.Nodes.Add(cnode);
}
node.ExpandMode = TreeNodeExpandMode.ClientSide;
}
protected
void
rtv_NodeExpand(
object
sender, RadTreeNodeEventArgs e)
{
SelectCriteria sc =
new
SelectCriteria(
typeof
(Functie),
"parent"
, e.Node.Value, SqlOperator.equal);
Functies functies =
new
Functies();
functies.retrieve(sc);
functies.sortByProperty(
"OID"
);
foreach
(Functie f
in
functies)
{
RadTreeNode node =
new
RadTreeNode();
node.Text = f.thema;
node.Value = f.oid;
if
(_functiesZonderArtikel.contains(f))
node.ForeColor = Color.Red;
e.Node.Nodes.Add(node);
}
e.Node.Expanded =
true
;
e.Node.ExpandMode = TreeNodeExpandMode.ClientSide;
}
protected
void
ram_AjaxRequest(
object
sender, AjaxRequestEventArgs e)
{
if
(e.Argument !=
null
)
{
switch
(e.Argument.ToLower())
{
case
"split_top"
:
PaneSettings.SaveState_Click(MainSplitter);
break
;
case
"split_main"
:
PaneSettings.SaveState_Click(NestedSplitter);
break
;
}
}
}
protected
void
rtv_NodeClick(
object
sender, RadTreeNodeEventArgs e)
{
if
(rtv.SelectedNodes.Count == 1)
{
loadArtikel(
new
Functie(rtv.SelectedNode.Value));
}
}
protected
void
btnSave_Click(
object
sender, EventArgs e)
{
Broker b = Broker.instance();
b.startTransaction();
string
oid =
""
;
try
{
if
(rtv.SelectedNodes.Count == 1)
{
Guid guid = Guid.NewGuid();
Functie curFunctie =
new
Functie(rtv.SelectedNode.Value);
Artikel artikel = Artikel.getArtikelBijFunctie(curFunctie);
if
(!artikel.isDBNull())
{
artikel.omschrijving = RadEditor1.Content;
artikel.datum = DateTime.Now.Date;
artikel.titel = RadEditor2.Content;
artikel.save();
oid = artikel.oid;
}
else
{
artikel =
new
Artikel();
artikel.omschrijving = RadEditor1.Content;
artikel.datum = DateTime.Now.Date;
artikel.datumIngevoerd = DateTime.Now.Date;
artikel.titel = RadEditor2.Content;
artikel.uniqueID = guid;
artikel.save();
oid = artikel.oid;
if
(artikel.profielonderdelen.count() == 0)
{
ProfielOnderdeel po =
new
ProfielOnderdeel();
po.functie = curFunctie;
po.artikel = artikel;
po.isGeselecteerd =
false
;
po.save();
}
}
}
else
{
ram.Alert(
"Er is geen functie geselecteerd! Kopieer alle content naar het klembord (ctrl + A, en dan ctrl + C in de editor). Selecteer vervolgens de gewenste functie en plak uw content."
);
}
}
catch
(Exception ex)
{
b.rollbackTransaction();
lblInfo.Text = lblInfo2.Text =
"Laatste keer opgeslagen: n.v.t."
;
btnPreview.OnClientClick = btnPreview2.OnClientClick =
"return false;"
;
ram.Alert(ex.Message);
}
if
(b.isTransactionActive())
{
b.commitTransaction();
lblInfo.Text = lblInfo2.Text =
"Laatste keer opgeslagen: "
+ DateTime.Now.ToLongTimeString();
btnPreview.OnClientClick = btnPreview2.OnClientClick =
string
.Format(
"window.open('Preview.aspx?artikel={0}'); return false;"
, oid);
}
}
protected
void
Timer1_Tick(
object
sender, EventArgs e)
{
if
(rtv.SelectedNodes.Count != 1 || (RadEditor1.Content ==
"Nog geen artikel"
&& RadEditor2.Content ==
"Nog geen kernwoorden"
))
return
;
btnSave_Click(
this
,
null
);
}
}
Content for editor:
<
p
><
b
><
a
href
=
"http://"
target
=
"_blank"
><
b
></
b
></
a
><
a
href
=
"http://"
target
=
"_blank"
><
b
></
b
></
a
><
a
href
=
"http://"
target
=
"_blank"
><
b
></
b
></
a
><
a
href
=
"http://"
target
=
"_blank"
><
b
></
b
></
a
>Btw Raad en raadscommissies (vacatiegelden, vergoedingen, verzekeringen, excursies e.d.)</
b
> </
p
>
<
p
>Deze functie ziet op het democratisch functioneren van de gemeente. Bij deze functie handelt de gemeente als overheid, waardoor de daaraan toerekenbare inkoop-btw volledig compensabel is. Verder valt deze functie onder <
i
>post 45</
i
> <
a
id
=
"_anchor_1"
>[M1]</
a
> : <
i
>algemeen bestuur gemeente </
i
>van de MvF-lijst (=compensabel).</
p
>
<
p
> </
p
>
<
p
><
i
><
span
style
=
"text-decoration: underline;"
>Pas op</
span
>:</
i
></
p
>
<
p
> - Naar mening van de belastingdienst kunnen gemeenteraadsleden niet worden aangemerkt als werknemers voor toepassing van het bcf. De btw ter zake van verstrekkingen aan deze personen (bijvoorbeeld ter zake van declaraties) komt niet voor compensatie in aanmerking, omdat deze personen worden beschouwd als ‘individuele derden’ als bedoeld in <
a
href
=
"http://wetten.overheid.nl/BWBR0013817/geldigheidsdatum_11-01-2012#Artikel4"
target
=
"_blank"
>artikel 4(1)a Wet BCF</
a
>. </
p
>
<
p
> - Als facturen voor kosten (bijvoorbeeld auto-, lunch-, parkeer-, telefoondeclaraties) niet op naam van de gemeente staan, is compensatie uitgesloten. Aangezien kassabonnen niet kwalificeren als een factuur, kan de daarop in rekening gebrachte btw in beginsel niet worden gecompenseerd of in aftrek worden gebracht. Door de steekproefcontrole van de belastingdienst bij gemeenten kan een gering ten onrechte gecompenseerd btw-bedrag van een kassabon leiden tot een zeer forse correctie!</
p
>
<
p
> - De declaraties van vervoersbewijzen (taxi of trein) zijn daarentegen wel compensabel, als deze ten laste komen van de gemeente en als overheid worden aangewend.</
p
>
<
p
> - De (afzonderlijk vermelde) inkoop-btw op horecabestedingen (restaurantkosten e.d.) is in beginsel eveneens volledig compensabel, als de facturen op naam staan van de gemeente en als overheid worden aangewend. De inkoop-btw op deze horecabestedingen is echter nimmer aftrekbaar op de btw-aangifte. Indien op deze kosten het [[2|mengpercentage]] van toepassing is, dient met deze aftrekbeperking rekening te worden gehouden.</
p
>
<
p
> - Sinds 1 januari 2007 is de inkoop-btw op personeelsverstrekkingen (voor privé-doeleinden van ambtenaren) volledig compensabel (Besluit van 10 juni 2009, nr. CPP2009/838M<
a
id
=
"_anchor_4"
>[M4]</
a
> ). </
p
>
<
p
> - Personeelsverstrekkingen boven de €227 en toerekenbaar aan het btw-ondernemerschap van de gemeente komen echter nimmer voor aftrek op de btw-aangifte in aanmerking. Op grond van het Besluit uitsluiting aftrek omzetbelasting<
a
id
=
"_anchor_5"
>[M5]</
a
> (‘Bua’) is de aftrek van inkoop-btw op desbetreffende personeelsverstrekkingen namelijk volledig uitgesloten. </
p
>
<
p
> - De inkoop-btw op personeelsverstrekkingen, die gelijkgesteld kunnen worden aan btw-vrijgestelde prestaties (zoals het ter beschikking stellen van de ambtswoning aan de burgermeester) is niet compensabel (art. 4 (1)b Wet BCF<
a
id
=
"_anchor_6"
>[M6]</
a
> ). </
p
>
<
p
> </
p
>
<
p
><
i
>Ergo:</
i
> de inkoop-btw op personeelsdeclaraties en verstrekkingen vraagt extra aandacht, voordat tot compensatie of aftrek wordt over gegaan.</
p
>
<
p
> </
p
>
<
p
><
b
>College van burgemeester en wethouders (loonkosten, reis- en verblijfkosten, ambtswoning, huistelefoon, e.d.)</
b
> </
p
>
<
p
>Deze functie ziet op het democratisch functioneren van de gemeente. Bij deze functie handelt de gemeente als overheid, waardoor de daaraan toerekenbare inkoop-btw volledig compensabel is. Verder valt deze functie onder <
i
>post 45</
i
> <
a
id
=
"_anchor_7"
>[M7]</
a
> : <
i
>algemeen bestuur gemeente </
i
>van de MvF-lijst (=compensabel).</
p
>
<
p
> </
p
>
<
p
><
i
>Pas op:</
i
></
p
>
<
p
> - Naar mening van de belastingdienst kunnen gemeenteraadsleden niet worden aangemerkt als werknemers voor toepassing van het bcf. De btw ter zake van verstrekkingen aan deze personen (bijvoorbeeld ter zake van declaraties) komt niet voor compensatie in aanmerking, omdat deze personen worden beschouwd als 'individuele derden' als bedoeld in artikel 4(1)a Wet BCF. </
p
>
<
p
> - Als facturen voor kosten (bijvoorbeeld auto-, lunch-, parkeer-, telefoondeclaraties) niet op naam van de gemeente staan, is compensatie uitgesloten. Aangezien kassabonnen niet kwalificeren als een factuur, kan de daarop in rekening gebrachte btw in beginsel niet worden gecompenseerd of in aftrek worden gebracht. Door de steekproefcontrole van de belastingdienst bij gemeenten kan een gering ten onrechte gecompenseerd btw-bedrag van een kassabon leiden tot een zeer forse correctie!</
p
>
<
p
> - De declaraties van vervoersbewijzen (taxi of trein) zijn daarentegen wel compensabel, als deze ten laste komen van de gemeente en als overheid worden aangewend.</
p
>
<
p
> - De (afzonderlijk vermelde) inkoop-btw op horecabestedingen (restaurantkosten e.d.) is in beginsel eveneens volledig compensabel, als de facturen op naam staan van de gemeente en als overheid worden aangewend. De inkoop-btw op deze horecabestedingen is echter nimmer aftrekbaar op de btw-aangifte. Indien op deze kosten het [[2|mengpercentage]] van toepassing is, dient met deze aftrekbeperking rekening te worden gehouden.</
p
>
<
p
> - Sinds 1 januari 2007 is de inkoop-btw op personeelsverstrekkingen (voor privé-doeleinden van ambtenaren) volledig compensabel ( Besluit van 10 juni 2009, nr. CPP2009/838M<
a
id
=
"_anchor_10"
>[M10]</
a
> ). </
p
>
<
p
> - Personeelsverstrekkingen boven de €227 en toerekenbaar aan het btw-ondernemerschap van de gemeente komen echter nimmer voor aftrek op de btw-aangifte in aanmerking. Op grond van het Besluit uitsluiting aftrek omzetbelasting<
a
id
=
"_anchor_11"
>[M11]</
a
> (‘Bua’) is de aftrek van inkoop-btw op desbetreffende personeelsverstrekkingen namelijk volledig uitgesloten. </
p
>
<
p
> - De inkoop-btw op personeelsverstrekkingen, die gelijkgesteld kunnen worden aan btw-vrijgestelde prestaties (zoals het ter beschikking stellen van de ambtswoning aan de burgermeester) is niet compensabel (art. 4 (1)b Wet BCF<
a
id
=
"_anchor_12"
>[M12]</
a
> ). </
p
>
<
p
> </
p
>
<
p
><
i
>Ergo:</
i
> de inkoop-btw op personeelsdeclaraties en verstrekkingen vraagt extra aandacht, voordat tot compensatie of aftrek wordt over gegaan.</
p
>
<
p
> </
p
>
<
p
><
b
>Functionele en territoriale commissies (commissies ex artikel 96 Gemeentewet</
b
><
b
>).</
b
> </
p
>
<
p
>Deze functie ziet op het democratisch functioneren van de gemeente. Bij deze functie handelt de gemeente als overheid, waardoor de daaraan toerekenbare inkoop-btw volledig compensabel is. Verder valt deze functie onder <
i
>post 45</
i
> <
a
id
=
"_anchor_14"
>[M14]</
a
> : <
i
>algemeen bestuur gemeente </
i
>van de MvF-lijst (=compensabel).</
p
>
<
p
><
i
>Pas op:</
i
></
p
>
<
p
> - Naar mening van de belastingdienst kunnen gemeenteraadsleden niet worden aangemerkt als werknemers voor toepassing van het bcf. De btw ter zake van verstrekkingen aan deze personen (bijvoorbeeld ter zake van declaraties) komt niet voor compensatie in aanmerking, omdat deze personen worden beschouwd als ‘individuele derden’ als bedoeld in artikel 4(1)a Wet BCF <
a
id
=
"_anchor_15"
>[M15]</
a
> . </
p
>
<
p
> - Als facturen voor kosten (bijvoorbeeld auto-, lunch-, parkeer-, telefoondeclaraties) niet op naam van de gemeente staan, is compensatie uitgesloten. Aangezien kassabonnen niet kwalificeren als een factuur, kan de daarop in rekening gebrachte btw in beginsel niet worden gecompenseerd of in aftrek worden gebracht. Door de steekproefcontrole van de belastingdienst bij gemeenten kan een gering ten onrechte gecompenseerd btw-bedrag van een kassabon leiden tot een zeer forse correctie!</
p
>
<
p
> - De declaraties van vervoersbewijzen (taxi of trein) zijn daarentegen wel compensabel, als deze ten laste komen van de gemeente en als overheid worden aangewend.</
p
>
<
p
> - De (afzonderlijk vermelde) inkoop-btw op horecabestedingen (restaurantkosten e.d.) is in beginsel eveneens volledig compensabel, als de facturen op naam staan van de gemeente en als overheid worden aangewend. De inkoop-btw op deze horecabestedingen is echter nimmer aftrekbaar op de btw-aangifte. Indien op deze kosten het [[2|mengpercentage]] van toepassing is, dient met deze aftrekbeperking rekening te worden gehouden.</
p
>
<
p
> - Sinds 1 januari 2007 is de inkoop-btw op personeelsverstrekkingen (voor privé-doeleinden van ambtenaren) volledig compensabel ( Besluit van 10 juni 2009, nr. CPP2009/838M<
a
id
=
"_anchor_17"
>[M17]</
a
> ). </
p
>
<
p
> - Personeelsverstrekkingen boven de €227 en toerekenbaar aan het btw-ondernemerschap van de gemeente komen echter nimmer voor aftrek op de btw-aangifte in aanmerking. Op grond van het Besluit uitsluiting aftrek omzetbelasting<
a
id
=
"_anchor_18"
>[M18]</
a
> (‘Bua’) is de aftrek van inkoop-btw op desbetreffende personeelsverstrekkingen namelijk volledig uitgesloten. </
p
>
<
p
> - De inkoop-btw op personeelsverstrekkingen, die gelijkgesteld kunnen worden aan btw-vrijgestelde prestaties (zoals het ter beschikking stellen van de ambtswoning aan de burgermeester) is niet compensabel (art. 4 (1)b Wet BCF). </
p
>
<
p
><
i
>Ergo:</
i
> de inkoop-btw op personeelsdeclaraties en verstrekkingen vraagt extra aandacht, voordat tot compensatie of aftrek wordt over gegaan.</
p
>
<
p
> </
p
>
<
p
><
b
>Verwante functies;</
b
><
b
><
span
style
=
"text-decoration: underline;"
> <
br
/>
</
span
></
b
></
p
>
<
p
><
b
>Afscheidsreceptie burgemeester</
b
><
b
> </
b
></
p
>
<
p
>Bij het organiseren van een afscheidsreceptie van de burgemeester handelt de gemeente als overheid/niet btw-ondernemer, waardoor de daaraan toerekenbare inkoop-btw volledig compensabel is.</
p
>
<
p
><
i
></
i
></
p
>
<
p
><
i
>Pas op:</
i
></
p
>
<
p
>De ervaring leert dat de belastingdienst tijdens de btw-/bcf-controles (steekproefmethode) van mening is dat deze kosten moeten worden aangemerkt als een ‘algemene kosten’, waarop het [[2|mengpercentage]] van toepassing is.</
p
>
<
p
> </
p
>
<
p
><
b
>Nieuwjaarsreceptie</
b
><
b
> </
b
></
p
>
<
p
>Bij het organiseren van de jaarlijkse nieuwjaarsreceptie handelt de gemeente als overheid/niet btw-ondernemer, waardoor de daaraan toerekenbare inkoop-btw volledig compensabel is.</
p
>
<
p
> </
p
>
<
p
><
i
>Pas op:</
i
></
p
>
<
p
>De ervaring leert dat de belastingdienst tijdens de btw-/bcf-controles (steekproefmethode) van mening is dat deze kosten moeten worden aangemerkt als een ‘algemene kosten’, waarop het [[2|mengpercentage]] toepassing is.</
p
>
<
p
> </
p
>
<
div
>
<
div
>
<
div
id
=
"_com_1"
>
<
p
> [M1]Link naar document: Lijst MinFin/goedkeuringen<
br
/>
[M4]Link naar besluit/besluiten</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_5"
>
<
p
> [M5]Pop-up: toelichting en link overheid.nl</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_6"
>
<
p
> [M6]Link naar overheid.nl</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_7"
>
<
p
> [M7]Link naar document: Lijst MinFin/goedkeuringen</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_8"
>
<
p
> [M8]Link naar overheid.nl</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_9"
>
<
p
> [M9]Pop-up: toelichting</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_10"
>
<
p
> [M10]Link naar besluit/besluiten</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_11"
>
<
p
> [M11]Pop-up: toelichting en link overheid.nl</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_12"
>
<
p
> [M12]Link naar overheid.nl</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_13"
>
<
p
> [M13]Link Overheid.nl</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_14"
>
<
p
> [M14]Link lijst Minfin/goedkeuring</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_15"
>
<
p
> [M15]Link naar overheid.nl</
p
>
</
div
>
</
div
>
<
div
id
=
"_com_17"
>
<
p
> [M17]Link naar besluit/besluiten</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_18"
>
<
p
> [M18]Pop-up: toelichting en link overheid.nl</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_19"
>
<
p
> [M19]Link naar overheid.nl</
p
>
</
div
>
</
div
>
<
div
>
<
div
id
=
"_com_20"
>
<
p
> </
p
>
</
div
>
</
div
>