formagic 0.1.0 → 0.2.5
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/formagic/form.coffee +31 -11
- data/app/assets/javascripts/formagic/inputs/checkbox.coffee +1 -0
- data/app/assets/javascripts/formagic/inputs/date.coffee +28 -3
- data/app/assets/javascripts/formagic/inputs/datetime.coffee +30 -2
- data/app/assets/javascripts/formagic/inputs/document.coffee +110 -0
- data/app/assets/javascripts/formagic/inputs/documents.coffee +39 -13
- data/app/assets/javascripts/formagic/inputs/documents_reorder.coffee +1 -1
- data/app/assets/javascripts/formagic/inputs/file.coffee +3 -0
- data/app/assets/javascripts/formagic/inputs/html.coffee +1 -0
- data/app/assets/javascripts/formagic/inputs/redactor.coffee +1 -0
- data/app/assets/javascripts/formagic/inputs/redactor_character.coffee +16 -14
- data/app/assets/javascripts/formagic/inputs/select2.coffee +1 -1
- data/app/assets/javascripts/formagic/inputs/string.coffee +5 -4
- data/app/assets/javascripts/formagic/inputs/text.coffee +4 -3
- data/app/assets/javascripts/formagic/inputs/url.coffee +37 -0
- data/app/assets/javascripts/formagic.coffee +2 -1
- data/app/assets/javascripts/vendor/ace.js +811 -577
- data/app/assets/javascripts/vendor/mode-html.js +24 -25
- data/app/assets/javascripts/vendor/mode-markdown.js +25 -26
- data/app/assets/javascripts/vendor/redactor.table.js +338 -0
- data/app/assets/stylesheets/formagic/date.scss +1 -0
- data/app/assets/stylesheets/formagic/file.scss +7 -0
- data/app/assets/stylesheets/formagic/form.scss +15 -10
- data/app/assets/stylesheets/formagic/image.scss +4 -0
- data/app/assets/stylesheets/formagic/label.scss +27 -0
- data/app/assets/stylesheets/formagic/nested-form.scss +3 -3
- data/app/assets/stylesheets/formagic/select2.scss +19 -1
- data/app/assets/stylesheets/formagic.scss +2 -1
- data/lib/formagic/version.rb +1 -1
- metadata +6 -3
- /data/app/assets/stylesheets/formagic/{redactor.scss → redactor1.scss} +0 -0
@@ -475,6 +475,19 @@ var initContext = function(editor) {
|
|
475
475
|
};
|
476
476
|
};
|
477
477
|
|
478
|
+
var getWrapped = function(selection, selected, opening, closing) {
|
479
|
+
var rowDiff = selection.end.row - selection.start.row;
|
480
|
+
return {
|
481
|
+
text: opening + selected + closing,
|
482
|
+
selection: [
|
483
|
+
0,
|
484
|
+
selection.start.column + 1,
|
485
|
+
rowDiff,
|
486
|
+
selection.end.column + (rowDiff ? 0 : 1)
|
487
|
+
]
|
488
|
+
};
|
489
|
+
};
|
490
|
+
|
478
491
|
var CstyleBehaviour = function() {
|
479
492
|
this.add("braces", "insertion", function(state, action, editor, session, text) {
|
480
493
|
var cursor = editor.getCursorPosition();
|
@@ -484,10 +497,7 @@ var CstyleBehaviour = function() {
|
|
484
497
|
var selection = editor.getSelectionRange();
|
485
498
|
var selected = session.doc.getTextRange(selection);
|
486
499
|
if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
|
487
|
-
return {
|
488
|
-
text: '{' + selected + '}',
|
489
|
-
selection: false
|
490
|
-
};
|
500
|
+
return getWrapped(selection, selected, '{', '}');
|
491
501
|
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
492
502
|
if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {
|
493
503
|
CstyleBehaviour.recordAutoInsert(editor, session, "}");
|
@@ -567,10 +577,7 @@ var CstyleBehaviour = function() {
|
|
567
577
|
var selection = editor.getSelectionRange();
|
568
578
|
var selected = session.doc.getTextRange(selection);
|
569
579
|
if (selected !== "" && editor.getWrapBehavioursEnabled()) {
|
570
|
-
return
|
571
|
-
text: '(' + selected + ')',
|
572
|
-
selection: false
|
573
|
-
};
|
580
|
+
return getWrapped(selection, selected, '(', ')');
|
574
581
|
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
575
582
|
CstyleBehaviour.recordAutoInsert(editor, session, ")");
|
576
583
|
return {
|
@@ -615,10 +622,7 @@ var CstyleBehaviour = function() {
|
|
615
622
|
var selection = editor.getSelectionRange();
|
616
623
|
var selected = session.doc.getTextRange(selection);
|
617
624
|
if (selected !== "" && editor.getWrapBehavioursEnabled()) {
|
618
|
-
return
|
619
|
-
text: '[' + selected + ']',
|
620
|
-
selection: false
|
621
|
-
};
|
625
|
+
return getWrapped(selection, selected, '[', ']');
|
622
626
|
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
623
627
|
CstyleBehaviour.recordAutoInsert(editor, session, "]");
|
624
628
|
return {
|
@@ -664,10 +668,7 @@ var CstyleBehaviour = function() {
|
|
664
668
|
var selection = editor.getSelectionRange();
|
665
669
|
var selected = session.doc.getTextRange(selection);
|
666
670
|
if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
|
667
|
-
return
|
668
|
-
text: quote + selected + quote,
|
669
|
-
selection: false
|
670
|
-
};
|
671
|
+
return getWrapped(selection, selected, quote, quote);
|
671
672
|
} else if (!selected) {
|
672
673
|
var cursor = editor.getCursorPosition();
|
673
674
|
var line = session.doc.getLine(cursor.row);
|
@@ -679,8 +680,8 @@ var CstyleBehaviour = function() {
|
|
679
680
|
if (leftChar == "\\" && token && /escape/.test(token.type))
|
680
681
|
return null;
|
681
682
|
|
682
|
-
var stringBefore = token && /string/.test(token.type);
|
683
|
-
var stringAfter = !rightToken || /string/.test(rightToken.type);
|
683
|
+
var stringBefore = token && /string|escape/.test(token.type);
|
684
|
+
var stringAfter = !rightToken || /string|escape/.test(rightToken.type);
|
684
685
|
|
685
686
|
var pair;
|
686
687
|
if (rightChar == quote) {
|
@@ -821,7 +822,7 @@ oop.inherits(FoldMode, BaseFoldMode);
|
|
821
822
|
this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
|
822
823
|
this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
|
823
824
|
this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
|
824
|
-
this.startRegionRe = /^\s*(\/\*|\/\/)
|
825
|
+
this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
|
825
826
|
this._getFoldWidgetBase = this.getFoldWidget;
|
826
827
|
this.getFoldWidget = function(session, foldStyle, row) {
|
827
828
|
var line = session.getLine(row);
|
@@ -909,13 +910,12 @@ oop.inherits(FoldMode, BaseFoldMode);
|
|
909
910
|
|
910
911
|
return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
|
911
912
|
};
|
912
|
-
|
913
913
|
this.getCommentRegionBlock = function(session, line, row) {
|
914
914
|
var startColumn = line.search(/\s*$/);
|
915
915
|
var maxRow = session.getLength();
|
916
916
|
var startRow = row;
|
917
917
|
|
918
|
-
var re = /^\s*(
|
918
|
+
var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
|
919
919
|
var depth = 1;
|
920
920
|
while (++row < maxRow) {
|
921
921
|
line = session.getLine(row);
|
@@ -1323,8 +1323,7 @@ var oop = require("../lib/oop");
|
|
1323
1323
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
1324
1324
|
|
1325
1325
|
var XmlHighlightRules = function(normalize) {
|
1326
|
-
|
1327
|
-
var tagRegex = "[a-zA-Z][-_a-zA-Z0-9]*";
|
1326
|
+
var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*";
|
1328
1327
|
|
1329
1328
|
this.$rules = {
|
1330
1329
|
start : [
|
@@ -1566,7 +1565,7 @@ var HtmlHighlightRules = function() {
|
|
1566
1565
|
include : "tag_whitespace"
|
1567
1566
|
}, {
|
1568
1567
|
token : "entity.other.attribute-name.xml",
|
1569
|
-
regex : "[-_a-zA-Z0-9
|
1568
|
+
regex : "[-_a-zA-Z0-9:.]+"
|
1570
1569
|
}, {
|
1571
1570
|
token : "keyword.operator.attribute-equals.xml",
|
1572
1571
|
regex : "=",
|
@@ -1590,7 +1589,7 @@ var HtmlHighlightRules = function() {
|
|
1590
1589
|
return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml",
|
1591
1590
|
"meta.tag" + (group ? "." + group : "") + ".tag-name.xml"];
|
1592
1591
|
},
|
1593
|
-
regex : "(</?)([-_a-zA-Z0-9
|
1592
|
+
regex : "(</?)([-_a-zA-Z0-9:.]+)",
|
1594
1593
|
next: "tag_stuff"
|
1595
1594
|
}],
|
1596
1595
|
tag_stuff: [
|
@@ -475,6 +475,19 @@ var initContext = function(editor) {
|
|
475
475
|
};
|
476
476
|
};
|
477
477
|
|
478
|
+
var getWrapped = function(selection, selected, opening, closing) {
|
479
|
+
var rowDiff = selection.end.row - selection.start.row;
|
480
|
+
return {
|
481
|
+
text: opening + selected + closing,
|
482
|
+
selection: [
|
483
|
+
0,
|
484
|
+
selection.start.column + 1,
|
485
|
+
rowDiff,
|
486
|
+
selection.end.column + (rowDiff ? 0 : 1)
|
487
|
+
]
|
488
|
+
};
|
489
|
+
};
|
490
|
+
|
478
491
|
var CstyleBehaviour = function() {
|
479
492
|
this.add("braces", "insertion", function(state, action, editor, session, text) {
|
480
493
|
var cursor = editor.getCursorPosition();
|
@@ -484,10 +497,7 @@ var CstyleBehaviour = function() {
|
|
484
497
|
var selection = editor.getSelectionRange();
|
485
498
|
var selected = session.doc.getTextRange(selection);
|
486
499
|
if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
|
487
|
-
return {
|
488
|
-
text: '{' + selected + '}',
|
489
|
-
selection: false
|
490
|
-
};
|
500
|
+
return getWrapped(selection, selected, '{', '}');
|
491
501
|
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
492
502
|
if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {
|
493
503
|
CstyleBehaviour.recordAutoInsert(editor, session, "}");
|
@@ -567,10 +577,7 @@ var CstyleBehaviour = function() {
|
|
567
577
|
var selection = editor.getSelectionRange();
|
568
578
|
var selected = session.doc.getTextRange(selection);
|
569
579
|
if (selected !== "" && editor.getWrapBehavioursEnabled()) {
|
570
|
-
return
|
571
|
-
text: '(' + selected + ')',
|
572
|
-
selection: false
|
573
|
-
};
|
580
|
+
return getWrapped(selection, selected, '(', ')');
|
574
581
|
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
575
582
|
CstyleBehaviour.recordAutoInsert(editor, session, ")");
|
576
583
|
return {
|
@@ -615,10 +622,7 @@ var CstyleBehaviour = function() {
|
|
615
622
|
var selection = editor.getSelectionRange();
|
616
623
|
var selected = session.doc.getTextRange(selection);
|
617
624
|
if (selected !== "" && editor.getWrapBehavioursEnabled()) {
|
618
|
-
return
|
619
|
-
text: '[' + selected + ']',
|
620
|
-
selection: false
|
621
|
-
};
|
625
|
+
return getWrapped(selection, selected, '[', ']');
|
622
626
|
} else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
|
623
627
|
CstyleBehaviour.recordAutoInsert(editor, session, "]");
|
624
628
|
return {
|
@@ -664,10 +668,7 @@ var CstyleBehaviour = function() {
|
|
664
668
|
var selection = editor.getSelectionRange();
|
665
669
|
var selected = session.doc.getTextRange(selection);
|
666
670
|
if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
|
667
|
-
return
|
668
|
-
text: quote + selected + quote,
|
669
|
-
selection: false
|
670
|
-
};
|
671
|
+
return getWrapped(selection, selected, quote, quote);
|
671
672
|
} else if (!selected) {
|
672
673
|
var cursor = editor.getCursorPosition();
|
673
674
|
var line = session.doc.getLine(cursor.row);
|
@@ -679,8 +680,8 @@ var CstyleBehaviour = function() {
|
|
679
680
|
if (leftChar == "\\" && token && /escape/.test(token.type))
|
680
681
|
return null;
|
681
682
|
|
682
|
-
var stringBefore = token && /string/.test(token.type);
|
683
|
-
var stringAfter = !rightToken || /string/.test(rightToken.type);
|
683
|
+
var stringBefore = token && /string|escape/.test(token.type);
|
684
|
+
var stringAfter = !rightToken || /string|escape/.test(rightToken.type);
|
684
685
|
|
685
686
|
var pair;
|
686
687
|
if (rightChar == quote) {
|
@@ -821,7 +822,7 @@ oop.inherits(FoldMode, BaseFoldMode);
|
|
821
822
|
this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
|
822
823
|
this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
|
823
824
|
this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
|
824
|
-
this.startRegionRe = /^\s*(\/\*|\/\/)
|
825
|
+
this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
|
825
826
|
this._getFoldWidgetBase = this.getFoldWidget;
|
826
827
|
this.getFoldWidget = function(session, foldStyle, row) {
|
827
828
|
var line = session.getLine(row);
|
@@ -909,13 +910,12 @@ oop.inherits(FoldMode, BaseFoldMode);
|
|
909
910
|
|
910
911
|
return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
|
911
912
|
};
|
912
|
-
|
913
913
|
this.getCommentRegionBlock = function(session, line, row) {
|
914
914
|
var startColumn = line.search(/\s*$/);
|
915
915
|
var maxRow = session.getLength();
|
916
916
|
var startRow = row;
|
917
917
|
|
918
|
-
var re = /^\s*(
|
918
|
+
var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
|
919
919
|
var depth = 1;
|
920
920
|
while (++row < maxRow) {
|
921
921
|
line = session.getLine(row);
|
@@ -1031,8 +1031,7 @@ var oop = require("../lib/oop");
|
|
1031
1031
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
1032
1032
|
|
1033
1033
|
var XmlHighlightRules = function(normalize) {
|
1034
|
-
|
1035
|
-
var tagRegex = "[a-zA-Z][-_a-zA-Z0-9]*";
|
1034
|
+
var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*";
|
1036
1035
|
|
1037
1036
|
this.$rules = {
|
1038
1037
|
start : [
|
@@ -1666,7 +1665,7 @@ oop.inherits(Mode, TextMode);
|
|
1666
1665
|
|
1667
1666
|
this.blockComment = {start: "<!--", end: "-->"};
|
1668
1667
|
|
1669
|
-
|
1668
|
+
this.createWorker = function(session) {
|
1670
1669
|
var worker = new WorkerClient(["ace"], "ace/mode/xml_worker", "Worker");
|
1671
1670
|
worker.attachToDocument(session.getDocument());
|
1672
1671
|
|
@@ -2016,7 +2015,7 @@ var HtmlHighlightRules = function() {
|
|
2016
2015
|
include : "tag_whitespace"
|
2017
2016
|
}, {
|
2018
2017
|
token : "entity.other.attribute-name.xml",
|
2019
|
-
regex : "[-_a-zA-Z0-9
|
2018
|
+
regex : "[-_a-zA-Z0-9:.]+"
|
2020
2019
|
}, {
|
2021
2020
|
token : "keyword.operator.attribute-equals.xml",
|
2022
2021
|
regex : "=",
|
@@ -2040,7 +2039,7 @@ var HtmlHighlightRules = function() {
|
|
2040
2039
|
return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml",
|
2041
2040
|
"meta.tag" + (group ? "." + group : "") + ".tag-name.xml"];
|
2042
2041
|
},
|
2043
|
-
regex : "(</?)([-_a-zA-Z0-9
|
2042
|
+
regex : "(</?)([-_a-zA-Z0-9:.]+)",
|
2044
2043
|
next: "tag_stuff"
|
2045
2044
|
}],
|
2046
2045
|
tag_stuff: [
|
@@ -0,0 +1,338 @@
|
|
1
|
+
if (!RedactorPlugins) var RedactorPlugins = {};
|
2
|
+
|
3
|
+
(function($)
|
4
|
+
{
|
5
|
+
RedactorPlugins.table = function()
|
6
|
+
{
|
7
|
+
return {
|
8
|
+
getTemplate: function()
|
9
|
+
{
|
10
|
+
return String()
|
11
|
+
+ '<section id="redactor-modal-table-insert">'
|
12
|
+
+ '<label>' + this.lang.get('rows') + '</label>'
|
13
|
+
+ '<input type="text" size="5" value="2" id="redactor-table-rows" />'
|
14
|
+
+ '<label>' + this.lang.get('columns') + '</label>'
|
15
|
+
+ '<input type="text" size="5" value="3" id="redactor-table-columns" />'
|
16
|
+
+ '</section>';
|
17
|
+
},
|
18
|
+
init: function()
|
19
|
+
{
|
20
|
+
|
21
|
+
var dropdown = {};
|
22
|
+
|
23
|
+
dropdown.insert_table = { title: this.lang.get('insert_table'), func: this.table.show };
|
24
|
+
dropdown.insert_row_above = { title: this.lang.get('insert_row_above'), func: this.table.addRowAbove };
|
25
|
+
dropdown.insert_row_below = { title: this.lang.get('insert_row_below'), func: this.table.addRowBelow };
|
26
|
+
dropdown.insert_column_left = { title: this.lang.get('insert_column_left'), func: this.table.addColumnLeft };
|
27
|
+
dropdown.insert_column_right = { title: this.lang.get('insert_column_right'), func: this.table.addColumnRight };
|
28
|
+
dropdown.add_head = { title: this.lang.get('add_head'), func: this.table.addHead };
|
29
|
+
dropdown.delete_head = { title: this.lang.get('delete_head'), func: this.table.deleteHead };
|
30
|
+
dropdown.delete_column = { title: this.lang.get('delete_column'), func: this.table.deleteColumn };
|
31
|
+
dropdown.delete_row = { title: this.lang.get('delete_row'), func: this.table.deleteRow };
|
32
|
+
dropdown.delete_table = { title: this.lang.get('delete_table'), func: this.table.deleteTable };
|
33
|
+
|
34
|
+
this.observe.addButton('td', 'table');
|
35
|
+
this.observe.addButton('th', 'table');
|
36
|
+
|
37
|
+
var button = this.button.addBefore('link', 'table', this.lang.get('table'));
|
38
|
+
this.button.addDropdown(button, dropdown);
|
39
|
+
},
|
40
|
+
show: function()
|
41
|
+
{
|
42
|
+
this.modal.addTemplate('table', this.table.getTemplate());
|
43
|
+
|
44
|
+
this.modal.load('table', this.lang.get('insert_table'), 300);
|
45
|
+
this.modal.createCancelButton();
|
46
|
+
|
47
|
+
var button = this.modal.createActionButton(this.lang.get('insert'));
|
48
|
+
button.on('click', this.table.insert);
|
49
|
+
|
50
|
+
this.selection.save();
|
51
|
+
this.modal.show();
|
52
|
+
|
53
|
+
$('#redactor-table-rows').focus();
|
54
|
+
|
55
|
+
},
|
56
|
+
insert: function()
|
57
|
+
{
|
58
|
+
this.placeholder.remove();
|
59
|
+
this.clean.cleanEmptyParagraph();
|
60
|
+
|
61
|
+
var rows = $('#redactor-table-rows').val(),
|
62
|
+
columns = $('#redactor-table-columns').val(),
|
63
|
+
$tableBox = $('<div>'),
|
64
|
+
tableId = Math.floor(Math.random() * 99999),
|
65
|
+
$table = $('<table id="table' + tableId + '"><tbody></tbody></table>'),
|
66
|
+
i, $row, z, $column;
|
67
|
+
|
68
|
+
for (i = 0; i < rows; i++)
|
69
|
+
{
|
70
|
+
$row = $('<tr>');
|
71
|
+
|
72
|
+
for (z = 0; z < columns; z++)
|
73
|
+
{
|
74
|
+
$column = $('<td>' + this.opts.invisibleSpace + '</td>');
|
75
|
+
|
76
|
+
// set the focus to the first td
|
77
|
+
if (i === 0 && z === 0)
|
78
|
+
{
|
79
|
+
$column.append(this.selection.getMarker());
|
80
|
+
}
|
81
|
+
|
82
|
+
$($row).append($column);
|
83
|
+
}
|
84
|
+
|
85
|
+
$table.append($row);
|
86
|
+
}
|
87
|
+
|
88
|
+
$tableBox.append($table);
|
89
|
+
var html = $tableBox.html();
|
90
|
+
|
91
|
+
this.modal.close();
|
92
|
+
this.selection.restore();
|
93
|
+
|
94
|
+
if (this.table.getTable()) return;
|
95
|
+
|
96
|
+
this.buffer.set();
|
97
|
+
|
98
|
+
var current = this.selection.getBlock() || this.selection.getCurrent();
|
99
|
+
if (current && current.tagName != 'BODY')
|
100
|
+
{
|
101
|
+
if (current.tagName == 'LI') current = $(current).closest('ul, ol');
|
102
|
+
$(current).after(html);
|
103
|
+
}
|
104
|
+
else
|
105
|
+
{
|
106
|
+
this.insert.html(html, false);
|
107
|
+
}
|
108
|
+
|
109
|
+
this.selection.restore();
|
110
|
+
|
111
|
+
var table = this.$editor.find('#table' + tableId);
|
112
|
+
|
113
|
+
if (!this.opts.linebreaks && (this.utils.browser('mozilla') || this.utils.browser('msie')))
|
114
|
+
{
|
115
|
+
var $next = table.next();
|
116
|
+
if ($next.length === 0)
|
117
|
+
{
|
118
|
+
table.after(this.opts.emptyHtml);
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
this.observe.buttons();
|
123
|
+
|
124
|
+
table.find('span.redactor-selection-marker').remove();
|
125
|
+
table.removeAttr('id');
|
126
|
+
|
127
|
+
this.code.sync();
|
128
|
+
this.core.setCallback('insertedTable', table);
|
129
|
+
},
|
130
|
+
getTable: function()
|
131
|
+
{
|
132
|
+
var $table = $(this.selection.getParent()).closest('table');
|
133
|
+
|
134
|
+
if (!this.utils.isRedactorParent($table)) return false;
|
135
|
+
if ($table.size() === 0) return false;
|
136
|
+
|
137
|
+
return $table;
|
138
|
+
},
|
139
|
+
restoreAfterDelete: function($table)
|
140
|
+
{
|
141
|
+
this.selection.restore();
|
142
|
+
$table.find('span.redactor-selection-marker').remove();
|
143
|
+
this.code.sync();
|
144
|
+
},
|
145
|
+
deleteTable: function()
|
146
|
+
{
|
147
|
+
var $table = this.table.getTable();
|
148
|
+
if (!$table) return;
|
149
|
+
|
150
|
+
this.buffer.set();
|
151
|
+
|
152
|
+
|
153
|
+
var $next = $table.next();
|
154
|
+
if (!this.opts.linebreaks && $next.length !== 0)
|
155
|
+
{
|
156
|
+
this.caret.setStart($next);
|
157
|
+
}
|
158
|
+
else
|
159
|
+
{
|
160
|
+
this.caret.setAfter($table);
|
161
|
+
}
|
162
|
+
|
163
|
+
|
164
|
+
$table.remove();
|
165
|
+
|
166
|
+
this.code.sync();
|
167
|
+
},
|
168
|
+
deleteRow: function()
|
169
|
+
{
|
170
|
+
var $table = this.table.getTable();
|
171
|
+
if (!$table) return;
|
172
|
+
|
173
|
+
var $current = $(this.selection.getCurrent());
|
174
|
+
|
175
|
+
this.buffer.set();
|
176
|
+
|
177
|
+
var $current_tr = $current.closest('tr');
|
178
|
+
var $focus_tr = $current_tr.prev().length ? $current_tr.prev() : $current_tr.next();
|
179
|
+
if ($focus_tr.length)
|
180
|
+
{
|
181
|
+
var $focus_td = $focus_tr.children('td, th').first();
|
182
|
+
if ($focus_td.length) $focus_td.prepend(this.selection.getMarker());
|
183
|
+
}
|
184
|
+
|
185
|
+
$current_tr.remove();
|
186
|
+
this.table.restoreAfterDelete($table);
|
187
|
+
},
|
188
|
+
deleteColumn: function()
|
189
|
+
{
|
190
|
+
var $table = this.table.getTable();
|
191
|
+
if (!$table) return;
|
192
|
+
|
193
|
+
this.buffer.set();
|
194
|
+
|
195
|
+
var $current = $(this.selection.getCurrent());
|
196
|
+
var $current_td = $current.closest('td, th');
|
197
|
+
var index = $current_td[0].cellIndex;
|
198
|
+
|
199
|
+
$table.find('tr').each($.proxy(function(i, elem)
|
200
|
+
{
|
201
|
+
var $elem = $(elem);
|
202
|
+
var focusIndex = index - 1 < 0 ? index + 1 : index - 1;
|
203
|
+
if (i === 0) $elem.find('td, th').eq(focusIndex).prepend(this.selection.getMarker());
|
204
|
+
|
205
|
+
$elem.find('td, th').eq(index).remove();
|
206
|
+
|
207
|
+
}, this));
|
208
|
+
|
209
|
+
this.table.restoreAfterDelete($table);
|
210
|
+
},
|
211
|
+
addHead: function()
|
212
|
+
{
|
213
|
+
var $table = this.table.getTable();
|
214
|
+
if (!$table) return;
|
215
|
+
|
216
|
+
this.buffer.set();
|
217
|
+
|
218
|
+
if ($table.find('thead').size() !== 0)
|
219
|
+
{
|
220
|
+
this.table.deleteHead();
|
221
|
+
return;
|
222
|
+
}
|
223
|
+
|
224
|
+
var tr = $table.find('tr').first().clone();
|
225
|
+
tr.find('td').replaceWith($.proxy(function()
|
226
|
+
{
|
227
|
+
return $('<th>').html(this.opts.invisibleSpace);
|
228
|
+
}, this));
|
229
|
+
|
230
|
+
$thead = $('<thead></thead>').append(tr);
|
231
|
+
$table.prepend($thead);
|
232
|
+
|
233
|
+
this.code.sync();
|
234
|
+
|
235
|
+
},
|
236
|
+
deleteHead: function()
|
237
|
+
{
|
238
|
+
var $table = this.table.getTable();
|
239
|
+
if (!$table) return;
|
240
|
+
|
241
|
+
var $thead = $table.find('thead');
|
242
|
+
if ($thead.size() === 0) return;
|
243
|
+
|
244
|
+
this.buffer.set();
|
245
|
+
|
246
|
+
$thead.remove();
|
247
|
+
this.code.sync();
|
248
|
+
},
|
249
|
+
addRowAbove: function()
|
250
|
+
{
|
251
|
+
this.table.addRow('before');
|
252
|
+
},
|
253
|
+
addRowBelow: function()
|
254
|
+
{
|
255
|
+
this.table.addRow('after');
|
256
|
+
},
|
257
|
+
addColumnLeft: function()
|
258
|
+
{
|
259
|
+
this.table.addColumn('before');
|
260
|
+
},
|
261
|
+
addColumnRight: function()
|
262
|
+
{
|
263
|
+
this.table.addColumn('after');
|
264
|
+
},
|
265
|
+
addRow: function(type)
|
266
|
+
{
|
267
|
+
var $table = this.table.getTable();
|
268
|
+
if (!$table) return;
|
269
|
+
|
270
|
+
this.buffer.set();
|
271
|
+
|
272
|
+
var $current = $(this.selection.getCurrent());
|
273
|
+
var $current_tr = $current.closest('tr');
|
274
|
+
var new_tr = $current_tr.clone();
|
275
|
+
|
276
|
+
new_tr.find('th').replaceWith(function()
|
277
|
+
{
|
278
|
+
var $td = $('<td>');
|
279
|
+
$td[0].attributes = this.attributes;
|
280
|
+
|
281
|
+
return $td.append($(this).contents());
|
282
|
+
});
|
283
|
+
|
284
|
+
new_tr.find('td').html(this.opts.invisibleSpace);
|
285
|
+
|
286
|
+
if (type == 'after')
|
287
|
+
{
|
288
|
+
$current_tr.after(new_tr);
|
289
|
+
}
|
290
|
+
else
|
291
|
+
{
|
292
|
+
$current_tr.before(new_tr);
|
293
|
+
}
|
294
|
+
|
295
|
+
this.code.sync();
|
296
|
+
},
|
297
|
+
addColumn: function (type)
|
298
|
+
{
|
299
|
+
var $table = this.table.getTable();
|
300
|
+
if (!$table) return;
|
301
|
+
|
302
|
+
var index = 0;
|
303
|
+
var current = $(this.selection.getCurrent());
|
304
|
+
|
305
|
+
this.buffer.set();
|
306
|
+
|
307
|
+
var $current_tr = current.closest('tr');
|
308
|
+
var $current_td = current.closest('td, th');
|
309
|
+
|
310
|
+
$current_tr.find('td, th').each($.proxy(function(i, elem)
|
311
|
+
{
|
312
|
+
if ($(elem)[0] === $current_td[0]) index = i;
|
313
|
+
|
314
|
+
}, this));
|
315
|
+
|
316
|
+
$table.find('tr').each($.proxy(function(i, elem)
|
317
|
+
{
|
318
|
+
var $current = $(elem).find('td, th').eq(index);
|
319
|
+
|
320
|
+
var td = $current.clone();
|
321
|
+
td.html(this.opts.invisibleSpace);
|
322
|
+
|
323
|
+
if (type == 'after')
|
324
|
+
{
|
325
|
+
$current.after(td);
|
326
|
+
}
|
327
|
+
else
|
328
|
+
{
|
329
|
+
$current.before(td);
|
330
|
+
}
|
331
|
+
|
332
|
+
}, this));
|
333
|
+
|
334
|
+
this.code.sync();
|
335
|
+
}
|
336
|
+
};
|
337
|
+
};
|
338
|
+
})(jQuery);
|
@@ -9,6 +9,7 @@
|
|
9
9
|
.form .input-stacked input.input-datetime-time { width: auto; display: inline-block; }
|
10
10
|
|
11
11
|
.input-date-label { display: inline-block; min-width: 7em; cursor: pointer; }
|
12
|
+
.input-date-label .placeholder { color: $lightColor; }
|
12
13
|
.input-timedate-at { color: $stableColor; margin: 0 .25em; }
|
13
14
|
|
14
15
|
.dd_ .dd_sw_ .dd_nav_.dd_prev_ { background-image: image-url('datedropper/prev.png'); }
|
@@ -2,11 +2,7 @@
|
|
2
2
|
|
3
3
|
.form {
|
4
4
|
|
5
|
-
//
|
6
|
-
|
7
|
-
label { display: block; }
|
8
|
-
|
9
|
-
// general
|
5
|
+
// General
|
10
6
|
|
11
7
|
.input-stacked {
|
12
8
|
@include position(relative); padding: .5em 1em .9em;
|
@@ -17,20 +13,29 @@
|
|
17
13
|
.label { display: block; line-height: 1.8; color: $stableColor; }
|
18
14
|
}
|
19
15
|
|
20
|
-
//
|
16
|
+
// Validation error
|
21
17
|
|
22
18
|
.error-message { color: $assertiveColor; font-size: .8em; margin-left: .5em; }
|
23
19
|
|
24
|
-
//
|
20
|
+
// Required
|
25
21
|
|
26
22
|
.input-required .label:before { content: '*'; color: $assertiveColor; @include position(absolute, null null null .38em); }
|
27
23
|
|
28
|
-
//
|
24
|
+
// Disabled
|
29
25
|
|
30
|
-
.input-disabled { textarea, input { color: $
|
26
|
+
.input-disabled { textarea, input { color: lighten($black, 20%); } }
|
31
27
|
|
32
|
-
//
|
28
|
+
// Character counter
|
33
29
|
|
34
30
|
.input-character-counter { font-size: .8em; margin-left: .5em; &.exceeds { color: $assertiveColor; } }
|
35
31
|
|
32
|
+
// Information box
|
33
|
+
|
34
|
+
.form-information {
|
35
|
+
margin : 1em 1em 0;
|
36
|
+
padding : 1em;
|
37
|
+
background : $neutralColor;
|
38
|
+
text-align : center;
|
39
|
+
}
|
40
|
+
|
36
41
|
}
|