Skip to content

Commit

Permalink
fixed wrong commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Paul Kerspe committed Mar 19, 2017
1 parent 7b1dbbc commit ca308bc
Showing 1 changed file with 38 additions and 88 deletions.
126 changes: 38 additions & 88 deletions plugin.js
Original file line number Diff line number Diff line change
@@ -1,109 +1,59 @@
function getCollapsibleItem() {
var collapsibleItem =
'<div class="panel panel-default collapsible-item" id="collapbsible-1">' +
' <div class="panel-heading collapsible-item-heading" role="tab" id="headingCollapbsible">' +
' <h4 class="panel-title collapsible-item-title">' +
' <a class="collapsed collapsible-item-title-link-icon pull-right" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseCollapbsible" aria-expanded="false" aria-controls="collapseCollapbsible"><span class="glyphicon glyphicon-chevron-down">&nbsp;</span></a>' +
' <a class="collapsed collapsible-item-title-link" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseCollapbsible" aria-expanded="false" aria-controls="collapseCollapbsible"><span class="collapsible-item-title-link-text">Title Text</span></a>' +
' </h4>' +
' </div>' +
' <div id="collapseCollapbsible" class="panel-collapse collapse collapsible-item-collapse" role="tabpanel" aria-labelledby="headingCollapbsible">' +
' <div class="panel-body collapsible-item-body">Body Text</div>' +
' </div>' +
'</div>';
return collapsibleItem;
}

CKEDITOR.dtd.$editable.span = 1;

CKEDITOR.plugins.add('collapsibleItem', {
requires: 'widget',
icons: 'collapsibleItem',
CKEDITOR.plugins.add('accordionList', {
requires: 'widget,collapsibleItem',
icons: 'accordionList',
init: function (editor) {
editor.widgets.add('collapsibleItem', {
button: 'Insert Collapsible Item',
template: getCollapsibleItem(),
editor.widgets.add('accordionList', {
button: 'Insert a new Accordion List',
template: '<div class="accordion-list">' +
' <div class="panel-group accordion-list-group accordion-list-items" id="unknown" role="tablist" aria-multiselectable="true"></div>' +
'</div>',
editables: {
title: {
selector: '.collapsible-item-title-link-text',
allowedContent: 'strong em u span'
},
content: {
selector: '.collapsible-item-body',
allowedContent: 'p;br;span[*];ul;ol;li;strong;em;u;table(*)[*];tbody;thead;tr;td;th;hr;a;a(!href,*)[*];img(*)[*];'
selector: 'div.accordion-list-items',
allowedContent: 'div(!collapsible-item*,panel*,collapse)[*];h4(!collapsible-item*,panel*)[*];a(!collapsible-item*,panel*,collapsed)[*];span(!glyphicon*)[*];p;br;span[*];ul;ol;li;strong;em;u;table[*];tbody;theader;tr;td;th;hr;a;a(!href,*)[*];'
}
},
allowedContent: 'div(!collapsible-item*,panel*,collapse)[*];h4(!collapsible-item*,panel*)[*];a(!collapsible-item*,collapsed,panel*)[*];span(!glyphicon*)[*];',
requiredContent: 'div(collapsible-item);',
allowedContent: 'div(!accordion-list*)[*];',
requiredContent: 'div(accordion-list)',
upcast: function (element) {
return element.name == 'div' && element.hasClass('collapsible-item');
return element.name == 'div' && element.hasClass('accordion-list');
},
init: function () {
//called when widget instance is created
var accordionid = "";
if(editor.elementPath() != null) {
var parents = editor.elementPath().elements;
for (i = 0; i < parents.length; i++) {
if (parents[i].hasClass('accordion-list-group')) {
accordionid = parents[i].getId();
break;
}
}
}
if(accordionid == ""){
var parents = this.element.getParents();
for(i = 0 ; i < parents.length ; i++){
if(parents[i].hasClass('accordion-list-group')){
accordionid = parents[i].getId();
break;
}
var idPrefix = 'accordion';

this.setData('accordionId', idPrefix + (new Date()).getTime());

var editable = this.editables.content;
var editorForElement = editable.editor;

editable.enterMode = 2;
editorForElement.setActiveEnterMode(CKEDITOR.ENTER_BR, CKEDITOR.ENTER_BR);

//prevent entering any data via keyboard, since we only want nested widgets in here
$(editable.$).on('keydown', function (event) {
if(event.target.id.indexOf(idPrefix) == 0){
return false;
}
}
this.setData('accordionId', accordionid);
this.setData('itemId', 'Collapsible' + (new Date()).getTime());
//allow keystrokes for all nested elements (widgets)
return event;
});
},
data: function () {
//called whenever the data is updated
this.element.setAttribute('id', this.data.itemId);

var heading = this.element.find('.collapsible-item-heading').$[0];
heading.setAttribute('id', 'heading' + this.data.itemId);
var accordionElement = this.element.find('.accordion-list-items').$[0];

var itemLink = this.element.find('.collapsible-item-title-link').$[0];
var itemIconLink = this.element.find('.collapsible-item-title-link-icon').$[0];
var newLink = '#collapse' + this.data.itemId;
itemLink.setAttribute('aria-controls', 'collapse' + this.data.itemId);
itemLink.setAttribute('href', newLink);
itemLink.setAttribute('data-cke-saved-href', newLink); //this must be updated as well, otherwise editor will always fallback to old value
itemIconLink.setAttribute('aria-controls', 'collapse' + this.data.itemId);
itemIconLink.setAttribute('href', newLink);
itemIconLink.setAttribute('data-cke-saved-href', newLink);

if(this.data.accordionId != "") {
this.element.find('.collapsible-item-title-link').$[0].setAttribute('data-parent', "#" + this.data.accordionId);
this.element.find('.collapsible-item-title-link-icon').$[0].setAttribute('data-parent', "#" + this.data.accordionId);
} else {
this.element.find('.collapsible-item-title-link').$[0].removeAttribute('data-parent');
this.element.find('.collapsible-item-title-link-icon').$[0].removeAttribute('data-parent');
if(accordionElement.getAttribute('id') == 'unknown'){
accordionElement.setAttribute('id', this.data.accordionId);
}

this.element.find('.collapsible-item-collapse').$[0].setAttribute('id', 'collapse' + this.data.itemId);
this.element.find('.collapsible-item-collapse').$[0].setAttribute('aria-labelledby', 'heading' + this.data.itemId);
},
});
},

onLoad: function () {
CKEDITOR.addCss(
'.collapsible-item::before {font-size:10px;color:#000;content: "Bootstrap collapsible element"}' +
'.collapsible-item-heading {background-color:#f4f8ef;color:#72b73a;text-decoration:none;font-size:20px;} ' +
'.collapsible-item-collapse {display:block;background-color:#ddd;min-height:10px;} ' +
'.collapsible-item {padding: 8px;margin: 10px;background: #eee;border-radius: 8px;border: 1px solid #ddd;box-shadow: 0 1px 1px #fff inset, 0 -1px 0px #ccc inset;}' +
'.collapsible-item-title, .collapsible-item-body {box-shadow: 0 1px 1px #ddd inset;border: 1px solid #cccccc;border-radius: 5px;background: #fff;}' +
'.collapsible-item-title {margin: 0 0 8px;padding: 5px 8px;}' +
'.collapsible-item-body {padding: 0 8px;}' +
'.collapsible-item-title-link-text {min-width:50px;display:inline-block;min-height:20px;height:100%;}' +
'.collapsible-item-title-link-icon {display:inline-block;float:right;}'
'.accordion-list::before {font-size:10px;color:#000;content: "Bootstrap Accordion"} ' +
'.accordion-list {padding: 8px;background: #eee;border-radius: 8px;border: 1px solid #ddd;box-shadow: 0 1px 1px #fff inset, 0 -1px 0px #ccc inset;}' +
'.accordion-list-items {padding: 0 8px;box-shadow: 0 1px 1px #ddd inset;border: 1px solid #cccccc;border-radius: 5px;background: #fff;}' +
'.accordion-list-items::before {font-size:14px;color:#ccc;content: "Insert collapsible items here"; position:relative;} '
);
}
});
});

0 comments on commit ca308bc

Please sign in to comment.