diff options
author | substantialnoninfringinguser <substantialnoninfringinguser@gmail.com> | 2009-05-22 02:54:09 +0100 |
---|---|---|
committer | substantialnoninfringinguser <substantialnoninfringinguser@gmail.com> | 2009-05-22 02:54:09 +0100 |
commit | 3784eb97209c00da703036031fa5127197ccef38 (patch) | |
tree | 7ef253ef0c23617f77168445686fa41e896f13b0 /media | |
parent | 49ed6495ad296283ee0977777b2b2d8a72bc23af (diff) | |
download | troggle-3784eb97209c00da703036031fa5127197ccef38.tar.gz troggle-3784eb97209c00da703036031fa5127197ccef38.tar.bz2 troggle-3784eb97209c00da703036031fa5127197ccef38.zip |
[svn] - Remove feature (admin JSON / XML downloads) which won't work until we have django 1.1 installed (works on my SVN version, but not on seagrass debian package version).
- Copy feincms media to project so that we don't have to serve it separately. Also useful because we may want to customize it.
Diffstat (limited to 'media')
32 files changed, 1782 insertions, 0 deletions
diff --git a/media/feincms/css/jquery.alerts.css b/media/feincms/css/jquery.alerts.css new file mode 100644 index 0000000..0b5e1e8 --- /dev/null +++ b/media/feincms/css/jquery.alerts.css @@ -0,0 +1,54 @@ +#popup_container {
+ font-family: Arial, sans-serif;
+ font-size: 12px;
+ min-width: 300px; /* Dialog will be no smaller than this */
+ max-width: 600px; /* Dialog will wrap after this width */
+ background: #FFF;
+ border: solid 1px #666;
+ color: #000;
+}
+
+#popup_title {
+ font-size: 14px;
+ font-weight: bold;
+ text-align: center;
+ line-height: 1.75em;
+ color: #666;
+ background: #eee url(images/title.gif) top repeat-x;
+ border: solid 1px #FFF;
+ border-bottom: solid 1px #666;
+ cursor: default;
+ padding: 0em;
+ margin: 0em;
+}
+
+#popup_content {
+ background: 16px 16px no-repeat url(../img/info.gif);
+ padding: 1em 1.75em;
+ margin: 0em;
+}
+
+#popup_content.alert {
+ background-image: url(../img/info.gif);
+}
+
+#popup_content.confirm {
+ background-image: url(../img/important.gif);
+}
+
+#popup_content.prompt {
+ background-image: url(../img/help.gif);
+}
+
+#popup_message {
+ padding-left: 48px;
+}
+
+#popup_panel {
+ text-align: center;
+ margin: 1em 0em 0em 1em;
+}
+
+#popup_prompt {
+ margin: .5em 0em;
+}
\ No newline at end of file diff --git a/media/feincms/css/jquery.treeTable.css b/media/feincms/css/jquery.treeTable.css new file mode 100644 index 0000000..5305653 --- /dev/null +++ b/media/feincms/css/jquery.treeTable.css @@ -0,0 +1,47 @@ +/* jQuery TreeTable Core 2.0 stylesheet + * + * This file contains styles that are used to display the tree table. Each tree + * table is assigned the +treeTable+ class. + * ========================================================================= */ + +/* jquery.treeTable.collapsible + * ------------------------------------------------------------------------- */ +.treeTable tr td .expander { + background-position: left center; + background-repeat: no-repeat; + cursor: pointer; + padding: 0; + zoom: 1; /* IE7 Hack */ +} + +.treeTable tr.collapsed td .expander { + background-image: url(../img/toggle-expand-dark.png); +} + +.treeTable tr.expanded td .expander { + background-image: url(../img/toggle-collapse-dark.png); +} + +/* jquery.treeTable.sortable + * ------------------------------------------------------------------------- */ +.treeTable tr.selected, .treeTable tr.accept { + /*background-color: #7799ff; + color: #fff;*/ +} + +.treeTable tr.append { + border-bottom: 2px solid #7799ff; +} + +.treeTable tr.collapsed.selected td .expander, .treeTable tr.collapsed.accept td .expander { + /*background-image: url(../img/toggle-expand-light.png);*/ +} + +.treeTable tr.expanded.selected td .expander, .treeTable tr.expanded.accept td .expander { + /*background-image: url(../img/toggle-collapse-light.png);*/ +} + +.treeTable .ui-draggable-dragging { + color: #000; + z-index: 1; +}
\ No newline at end of file diff --git a/media/feincms/css/layout.css b/media/feincms/css/layout.css new file mode 100644 index 0000000..d7be020 --- /dev/null +++ b/media/feincms/css/layout.css @@ -0,0 +1,242 @@ + +#overview { + background-color:none; + padding:5px 0px 0px 5px; + margin:10px 0px 0px 10px; +} + +#content { + background-color:#fff; + margin-bottom:0px; + width:745px; +} + +.navi_tab { + float:left; + padding: 3px 10px 3px 10px; + cursor:pointer; + border: 1px solid #aaa; + border-bottom:none; + min-width:100px; +} +.tab_active { + height:16px; + font-weight: bold; + background-image:url('../img/default-bg.gif'); + color: white; +} +.tab_inactive { + margin-top:4px; + height:12px; + font-weight: normal; + background-image:none; + color: black; +} +#main_wrapper {margin-left:15px;} +#main { + clear:both; + padding: 10px 10px 10px 10px; + border: 1px solid #aaa; +} +.panel { + display:none; + position:relative; + padding-bottom:50px; +} + + +lab { font-weight: bold; margin-right:5px;} +span { margin-right: 5px;} + +.order-machine { + margin-bottom:10px; +} + +.order-item { + margin: 5px 15px 10px 5px; + background: #eee; + position:relative; + width:700px; + min-height:24px; + border: 1px solid #678; +} +.order-item span { + font-weight:bold; + margin-left:5px; +} +.order-item .handle { + float: left; + margin-top:2px; + cursor: move; +} +.item-content { + padding: 0px 10px 0px 15px; + margin-right:5px; + clear:both; + margin-left:10px; +} +.item-header { + padding: 3px 10px 3px 15px; + margin-left:10px; + margin-top:1px; +} +.item-header span { + margin-right:10px; + float:left; + font-weight: strong; +} +.item-delete { + cursor:pointer; + float:right; + margin:3px 0px 0px 5px; +} +.active-item { + border: 1px solid #00a; + background-color:#def; +} +.button { + margin:5px; padding:5px; + font-weight: bold; + background-image:url('../img/nav-bg.gif'); + cursor:pointer; + border: 1px solid #678; + width:30px; +} +th { vertical-align: middle; } + +#test-log { padding: 5px; border: 1px solid #ccc; } + +#overview span { margin-right:15px; margin-left:5px;} + +.richtextcontent {display:none;} + +textarea { + width: 100%; + margin-top:5px; + margin-bottom:5px; +} + +.item-minimize { + width: 15px; + height:15px; + float: left; + cursor: pointer; + margin-left:-17px; +} + +.item-minimize-disabled { + width: 15px; + height:15px; + float: left; + margin-left:-17px; +} + +.machine-control { + height:50px; + padding: 5px 0px 5px 0px; + border: 1px solid #678; + background-color:#ddd; + width:728px; + position:absolute; + left:-11px; + bottom:-21px; +} + +.control-unit { + float:left; + padding-left:15px; + padding-right:10px; + border-right: 1px solid #678; +} + +.control-unit span { + font-weight:bold; + margin-left:5px; +} + +hr { + color: #f00; + background-color: #bbb; + height: 1px; + margin-top: 5px; + margin-bottom: 5px; +} + +.empty-machine-msg { + margin:10px 0px 5px 300px; + font-style: italic; + font-size:14px; + color:#999; +} + +td span select { + width:600px; +} + +.popup_bg { + width:100%; height:100%; + background-color:white; + opacity: 0.5; + filter:alpha(opacity=50); + position:absolute; + top:0px; left:0px; +} + +#sitetree { + margin-left: 20px; + margin-top: 20px; + padding: 0px; +} + +.title-col { + position:relative; + z-index:2; + background-color:none; +} +td div.wrap { + border: 0px solid #000; + margin: -5px; + padding: 4px; + position:relative; +} + +.insert-as-child { + position:absolute; + bottom:-3px; + left: 15px; + height:15px; + width:100%; + border: 0px solid #0f0; +} +.insert-as-sibling { + position:absolute; + top:0px; + left: 15px; + height:10px; + width:100%; + border: 0px solid #f00; +} + +.nohover { + background-color: #eef; +} + +.flash { + background-color: #afa; +} + +.hover-as-child { + background-color:#cdf; +} + +.hover-as-sibling { + border: 1px solid #aee; +} + +.move-node { + cursor: move; + margin-left:5px; +} +.del-page { + cursor: pointer; +} diff --git a/media/feincms/helper.js b/media/feincms/helper.js new file mode 100644 index 0000000..58ca3eb --- /dev/null +++ b/media/feincms/helper.js @@ -0,0 +1,88 @@ +function region_append(region, obj, modname) { + var wrp = []; + wrp.push('<div class="order-item"><div class="item-header">'); + if (obj.children(":visible").length > 0) + wrp.push('<div class="item-minimize"><img src="'+IMG_ARROW_DOWN_PATH+'" /></div>'); + else + wrp.push('<div class="item-minimize-disabled"><img src="'+IMG_CIRCLE_PATH+'" /></div>'); + wrp.push('<span>' + modname + '</span><img class="handle" src='+IMG_MOVE_PATH+' />'); + wrp.push('<img class="item-delete" src="'+IMG_DELETELINK_PATH+'" />'); + wrp.push('</div><div class="item-content"></div></div>'); + + $("#"+REGIONS[region]+"_body").children(".order-machine").append(wrp.join("")) + .children(".order-item:last").children(".item-content").append(obj); +} + +function create_new_from_form(form, modvar, last_id) { + var new_form = form.html().replace( + new RegExp(modvar+'-'+last_id, 'g'), + modvar+'-'+(last_id+1)); + new_form = '<div id="'+modvar+'_set_item_'+(last_id+1)+'">'+new_form+'</div>'; + $("#"+modvar+"_set").append(new_form); +} + +function get_item_field_value(item,field) { + // item: DOM object created by 'region_append' function + // field: "order-field" | "delete-field" | "region-field" + if (field=="delete-field") + return item.find("."+field).attr("checked"); + else + return item.find("."+field).val(); +} + +function set_item_field_value(item,field, value) { + // item: DOM object created by 'region_append' function + // field: "order-field" | "delete-field" | "region-field" + if (field=="delete-field") + item.find("."+field).attr("checked",value); + else if (field=="region-choice-field") { + var old_region_id = REGION_MAP.indexOf(item.find("."+field).val()); + item.find("."+field).val(REGION_MAP[value]); + + old_region_item = $("#"+REGIONS[old_region_id]+"_body"); + old_region_item.children(".empty-machine-msg").hide(); + if (old_region_item.children(".order-machine").children().length == 0) + old_region_item.children(".empty-machine-msg").show(); + + new_region_item = $("#"+REGIONS[value]+"_body"); + new_region_item.children(".empty-machine-msg").hide(); + } + else + item.find("."+field).val(value); +} + +function move_item (region_id, item) { + poorify_rich(item); + $("#"+REGIONS[region_id]+"_body").children(".order-machine").append(item); + set_item_field_value(item, "region-choice-field", region_id); + richify_poor(item); +} + +function poorify_rich(item){ + item.children(".item-content").hide(); + if (item.find("div[id^=richtext]").length > 0) { + var editor_id = item.find(".mceEditor").prev().attr("id"); + tinyMCE.execCommand('mceRemoveControl',false,editor_id); + } +} +function richify_poor(item){ + item.children(".item-content").show(); + if (item.find("div[id^=richtext]").length > 0) { + var editor_id = item.find('textarea[name*=richtext]:visible').attr("id"); + tinyMCE.execCommand('mceAddControl',false,editor_id); + } +} + +function zucht_und_ordnung(move_item) { + for (var i=0; i<REGIONS.length;i++) { + var container = $("#"+REGIONS[i]+"_body .order-machine"); + for (var j=0; j<container.children().length; j++) { + if (move_item) + container.find(".order-field[value="+j+"]").parents(".order-item").appendTo(container); + else + set_item_field_value(container.find(".order-item:eq("+j+")"),"order-field",j); + } + } +} + + diff --git a/media/feincms/img/arrow_down.gif b/media/feincms/img/arrow_down.gif Binary files differnew file mode 100644 index 0000000..64b5403 --- /dev/null +++ b/media/feincms/img/arrow_down.gif diff --git a/media/feincms/img/arrow_right.gif b/media/feincms/img/arrow_right.gif Binary files differnew file mode 100644 index 0000000..244e5c3 --- /dev/null +++ b/media/feincms/img/arrow_right.gif diff --git a/media/feincms/img/circle.gif b/media/feincms/img/circle.gif Binary files differnew file mode 100644 index 0000000..fa75af5 --- /dev/null +++ b/media/feincms/img/circle.gif diff --git a/media/feincms/img/cut.png b/media/feincms/img/cut.png Binary files differnew file mode 100644 index 0000000..f215d6f --- /dev/null +++ b/media/feincms/img/cut.png diff --git a/media/feincms/img/default-bg.gif b/media/feincms/img/default-bg.gif Binary files differnew file mode 100644 index 0000000..003aeca --- /dev/null +++ b/media/feincms/img/default-bg.gif diff --git a/media/feincms/img/door.png b/media/feincms/img/door.png Binary files differnew file mode 100644 index 0000000..369fc46 --- /dev/null +++ b/media/feincms/img/door.png diff --git a/media/feincms/img/help.gif b/media/feincms/img/help.gif Binary files differnew file mode 100644 index 0000000..3b51425 --- /dev/null +++ b/media/feincms/img/help.gif diff --git a/media/feincms/img/icon_deletelink.gif b/media/feincms/img/icon_deletelink.gif Binary files differnew file mode 100644 index 0000000..72523e3 --- /dev/null +++ b/media/feincms/img/icon_deletelink.gif diff --git a/media/feincms/img/icon_move.gif b/media/feincms/img/icon_move.gif Binary files differnew file mode 100644 index 0000000..004bb7c --- /dev/null +++ b/media/feincms/img/icon_move.gif diff --git a/media/feincms/img/important.gif b/media/feincms/img/important.gif Binary files differnew file mode 100644 index 0000000..41d4943 --- /dev/null +++ b/media/feincms/img/important.gif diff --git a/media/feincms/img/info.gif b/media/feincms/img/info.gif Binary files differnew file mode 100644 index 0000000..c81828d --- /dev/null +++ b/media/feincms/img/info.gif diff --git a/media/feincms/img/nav-bg.gif b/media/feincms/img/nav-bg.gif Binary files differnew file mode 100644 index 0000000..f8402b8 --- /dev/null +++ b/media/feincms/img/nav-bg.gif diff --git a/media/feincms/img/page_white_copy.png b/media/feincms/img/page_white_copy.png Binary files differnew file mode 100644 index 0000000..a9f31a2 --- /dev/null +++ b/media/feincms/img/page_white_copy.png diff --git a/media/feincms/img/page_white_delete.png b/media/feincms/img/page_white_delete.png Binary files differnew file mode 100644 index 0000000..af1ecaf --- /dev/null +++ b/media/feincms/img/page_white_delete.png diff --git a/media/feincms/img/page_white_edit.png b/media/feincms/img/page_white_edit.png Binary files differnew file mode 100644 index 0000000..b93e776 --- /dev/null +++ b/media/feincms/img/page_white_edit.png diff --git a/media/feincms/img/page_white_paste.png b/media/feincms/img/page_white_paste.png Binary files differnew file mode 100644 index 0000000..5b2cbb3 --- /dev/null +++ b/media/feincms/img/page_white_paste.png diff --git a/media/feincms/img/title.gif b/media/feincms/img/title.gif Binary files differnew file mode 100644 index 0000000..f92b596 --- /dev/null +++ b/media/feincms/img/title.gif diff --git a/media/feincms/img/toggle-collapse-dark.png b/media/feincms/img/toggle-collapse-dark.png Binary files differnew file mode 100644 index 0000000..76577a5 --- /dev/null +++ b/media/feincms/img/toggle-collapse-dark.png diff --git a/media/feincms/img/toggle-collapse-light.png b/media/feincms/img/toggle-collapse-light.png Binary files differnew file mode 100644 index 0000000..ed1612f --- /dev/null +++ b/media/feincms/img/toggle-collapse-light.png diff --git a/media/feincms/img/toggle-expand-dark.png b/media/feincms/img/toggle-expand-dark.png Binary files differnew file mode 100644 index 0000000..cfb42a4 --- /dev/null +++ b/media/feincms/img/toggle-expand-dark.png diff --git a/media/feincms/img/toggle-expand-light.png b/media/feincms/img/toggle-expand-light.png Binary files differnew file mode 100644 index 0000000..27b5234 --- /dev/null +++ b/media/feincms/img/toggle-expand-light.png diff --git a/media/feincms/jquery.alerts.css b/media/feincms/jquery.alerts.css new file mode 100644 index 0000000..6c9532c --- /dev/null +++ b/media/feincms/jquery.alerts.css @@ -0,0 +1,54 @@ +#popup_container {
+ font-family: Arial, sans-serif;
+ font-size: 12px;
+ min-width: 300px; /* Dialog will be no smaller than this */
+ max-width: 600px; /* Dialog will wrap after this width */
+ background: #FFF;
+ border: solid 1px #666;
+ color: #000;
+}
+
+#popup_title {
+ font-size: 14px;
+ font-weight: bold;
+ text-align: center;
+ line-height: 1.75em;
+ color: #666;
+ background: #eee url(img/title.gif) top repeat-x;
+ border: solid 1px #FFF;
+ border-bottom: solid 1px #666;
+ cursor: default;
+ padding: 0em;
+ margin: 0em;
+}
+
+#popup_content {
+ background: 16px 16px no-repeat url(img/info.gif);
+ padding: 1em 1.75em;
+ margin: 0em;
+}
+
+#popup_content.alert {
+ background-image: url(img/info.gif);
+}
+
+#popup_content.confirm {
+ background-image: url(img/important.gif);
+}
+
+#popup_content.prompt {
+ background-image: url(img/help.gif);
+}
+
+#popup_message {
+ padding-left: 48px;
+}
+
+#popup_panel {
+ text-align: center;
+ margin: 1em 0em 0em 1em;
+}
+
+#popup_prompt {
+ margin: .5em 0em;
+}
\ No newline at end of file diff --git a/media/feincms/jquery.alerts.js b/media/feincms/jquery.alerts.js new file mode 100644 index 0000000..0fdee7a --- /dev/null +++ b/media/feincms/jquery.alerts.js @@ -0,0 +1,235 @@ +// jQuery Alert Dialogs Plugin
+//
+// Version 1.0
+//
+// Cory S.N. LaViska
+// A Beautiful Site (http://abeautifulsite.net/)
+// 29 December 2008
+//
+// Visit http://abeautifulsite.net/notebook/87 for more information
+//
+// Usage:
+// jAlert( message, [title, callback] )
+// jConfirm( message, [title, callback] )
+// jPrompt( message, [value, title, callback] )
+//
+// History:
+//
+// 1.00 - Released (29 December 2008)
+//
+// License:
+//
+// This plugin is licensed under the GNU General Public License: http://www.gnu.org/licenses/gpl.html
+//
+(function($) {
+
+ $.alerts = {
+
+ // These properties can be read/written by accessing $.alerts.propertyName from your scripts at any time
+
+ verticalOffset: -75, // vertical offset of the dialog from center screen, in pixels
+ horizontalOffset: 0, // horizontal offset of the dialog from center screen, in pixels/
+ repositionOnResize: true, // re-centers the dialog on window resize
+ overlayOpacity: .01, // transparency level of overlay
+ overlayColor: '#FFF', // base color of overlay
+ draggable: true, // make the dialogs draggable (requires UI Draggables plugin)
+ okButton: ' OK ', // text for the OK button
+ cancelButton: ' Cancel ', // text for the Cancel button
+ dialogClass: null, // if specified, this class will be applied to all dialogs
+
+ // Public methods
+
+ alert: function(message, title, callback) {
+ if( title == null ) title = 'Alert';
+ $.alerts._show(title, message, null, 'alert', function(result) {
+ if( callback ) callback(result);
+ });
+ },
+
+ confirm: function(message, title, callback) {
+ if( title == null ) title = 'Confirm';
+ $.alerts._show(title, message, null, 'confirm', function(result) {
+ if( callback ) callback(result);
+ });
+ },
+
+ prompt: function(message, value, title, callback) {
+ if( title == null ) title = 'Prompt';
+ $.alerts._show(title, message, value, 'prompt', function(result) {
+ if( callback ) callback(result);
+ });
+ },
+
+ // Private methods
+
+ _show: function(title, msg, value, type, callback) {
+
+ $.alerts._hide();
+ $.alerts._overlay('show');
+
+ $("BODY").append(
+ '<div id="popup_container">' +
+ '<h1 id="popup_title"></h1>' +
+ '<div id="popup_content">' +
+ '<div id="popup_message"></div>' +
+ '</div>' +
+ '</div>');
+
+ if( $.alerts.dialogClass ) $("#popup_container").addClass($.alerts.dialogClass);
+
+ // IE6 Fix
+ var pos = ($.browser.msie && parseInt($.browser.version) <= 6 ) ? 'absolute' : 'fixed';
+
+ $("#popup_container").css({
+ position: pos,
+ zIndex: 99999,
+ padding: 0,
+ margin: 0
+ });
+
+ $("#popup_title").text(title);
+ $("#popup_content").addClass(type);
+ $("#popup_message").text(msg);
+ $("#popup_message").html( $("#popup_message").text().replace(/\n/g, '<br />') );
+
+ $("#popup_container").css({
+ minWidth: $("#popup_container").outerWidth(),
+ maxWidth: $("#popup_container").outerWidth()
+ });
+
+ $.alerts._reposition();
+ $.alerts._maintainPosition(true);
+
+ switch( type ) {
+ case 'alert':
+ $("#popup_message").after('<div id="popup_panel"><input type="button" value="' + $.alerts.okButton + '" id="popup_ok" /></div>');
+ $("#popup_ok").click( function() {
+ $.alerts._hide();
+ callback(true);
+ });
+ $("#popup_ok").focus().keypress( function(e) {
+ if( e.keyCode == 13 || e.keyCode == 27 ) $("#popup_ok").trigger('click');
+ });
+ break;
+ case 'confirm':
+ $("#popup_message").after('<div id="popup_panel"><input type="button" value="' + $.alerts.okButton + '" id="popup_ok" /> <input type="button" value="' + $.alerts.cancelButton + '" id="popup_cancel" /></div>');
+ $("#popup_ok").click( function() {
+ $.alerts._hide();
+ if( callback ) callback(true);
+ });
+ $("#popup_cancel").click( function() {
+ $.alerts._hide();
+ if( callback ) callback(false);
+ });
+ $("#popup_ok").focus();
+ $("#popup_ok, #popup_cancel").keypress( function(e) {
+ if( e.keyCode == 13 ) $("#popup_ok").trigger('click');
+ if( e.keyCode == 27 ) $("#popup_cancel").trigger('click');
+ });
+ break;
+ case 'prompt':
+ $("#popup_message").append('<br /><input type="text" size="30" id="popup_prompt" />').after('<div id="popup_panel"><input type="button" value="' + $.alerts.okButton + '" id="popup_ok" /> <input type="button" value="' + $.alerts.cancelButton + '" id="popup_cancel" /></div>');
+ $("#popup_prompt").width( $("#popup_message").width() );
+ $("#popup_ok").click( function() {
+ var val = $("#popup_prompt").val();
+ $.alerts._hide();
+ if( callback ) callback( val );
+ });
+ $("#popup_cancel").click( function() {
+ $.alerts._hide();
+ if( callback ) callback( null );
+ });
+ $("#popup_prompt, #popup_ok, #popup_cancel").keypress( function(e) {
+ if( e.keyCode == 13 ) $("#popup_ok").trigger('click');
+ if( e.keyCode == 27 ) $("#popup_cancel").trigger('click');
+ });
+ if( value ) $("#popup_prompt").val(value);
+ $("#popup_prompt").focus().select();
+ break;
+ }
+
+ // Make draggable
+ if( $.alerts.draggable ) {
+ try {
+ $("#popup_container").draggable({ handle: $("#popup_title") });
+ $("#popup_title").css({ cursor: 'move' });
+ } catch(e) { /* requires jQuery UI draggables */ }
+ }
+ },
+
+ _hide: function() {
+ $("#popup_container").remove();
+ $.alerts._overlay('hide');
+ $.alerts._maintainPosition(false);
+ },
+
+ _overlay: function(status) {
+ switch( status ) {
+ case 'show':
+ $.alerts._overlay('hide');
+ $("BODY").append('<div id="popup_overlay"></div>');
+ $("#popup_overlay").css({
+ position: 'absolute',
+ zIndex: 99998,
+ top: '0px',
+ left: '0px',
+ width: '100%',
+ height: $(document).height(),
+ background: $.alerts.overlayColor,
+ opacity: $.alerts.overlayOpacity,
+ display: 'none'
+ });
+ break;
+ case 'hide':
+ $("#popup_overlay").remove();
+ break;
+ }
+ },
+
+ _reposition: function() {
+ var top = (($(window).height() / 2) - ($("#popup_container").outerHeight() / 2)) + $.alerts.verticalOffset;
+ var left = (($(window).width() / 2) - ($("#popup_container").outerWidth() / 2)) + $.alerts.horizontalOffset;
+ if( top < 0 ) top = 0;
+ if( left < 0 ) left = 0;
+
+ // IE6 fix
+ if( $.browser.msie && parseInt($.browser.version) <= 6 ) top = top + $(window).scrollTop();
+
+ $("#popup_container").css({
+ top: top + 'px',
+ left: left + 'px'
+ });
+ $("#popup_overlay").height( $(document).height() );
+ },
+
+ _maintainPosition: function(status) {
+ if( $.alerts.repositionOnResize ) {
+ switch(status) {
+ case true:
+ $(window).bind('resize', function() {
+ $.alerts._reposition();
+ });
+ break;
+ case false:
+ $(window).unbind('resize');
+ break;
+ }
+ }
+ }
+
+ }
+
+ // Shortuct functions
+ jAlert = function(message, title, callback) {
+ $.alerts.alert(message, title, callback);
+ }
+
+ jConfirm = function(message, title, callback) {
+ $.alerts.confirm(message, title, callback);
+ };
+
+ jPrompt = function(message, value, title, callback) {
+ $.alerts.prompt(message, value, title, callback);
+ };
+
+})(jQuery);
\ No newline at end of file diff --git a/media/feincms/jquery.json-1.3.js b/media/feincms/jquery.json-1.3.js new file mode 100644 index 0000000..225ca82 --- /dev/null +++ b/media/feincms/jquery.json-1.3.js @@ -0,0 +1,156 @@ +/* + * jQuery JSON Plugin + * version: 1.0 (2008-04-17) + * + * This document is licensed as free software under the terms of the + * MIT License: http://www.opensource.org/licenses/mit-license.php + * + * Brantley Harris technically wrote this plugin, but it is based somewhat + * on the JSON.org website's http://www.json.org/json2.js, which proclaims: + * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that + * I uphold. I really just cleaned it up. + * + * It is also based heavily on MochiKit's serializeJSON, which is + * copywrited 2005 by Bob Ippolito. + */ + +(function($) { + function toIntegersAtLease(n) + // Format integers to have at least two digits. + { + return n < 10 ? '0' + n : n; + } + + Date.prototype.toJSON = function(date) + // Yes, it polutes the Date namespace, but we'll allow it here, as + // it's damned usefull. + { + return this.getUTCFullYear() + '-' + + toIntegersAtLease(this.getUTCMonth()) + '-' + + toIntegersAtLease(this.getUTCDate()); + }; + + var escapeable = /["\\\x00-\x1f\x7f-\x9f]/g; + var meta = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }; + + $.quoteString = function(string) + // Places quotes around a string, inteligently. + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape + // sequences. + { + if (escapeable.test(string)) + { + return '"' + string.replace(escapeable, function (a) + { + var c = meta[a]; + if (typeof c === 'string') { + return c; + } + c = a.charCodeAt(); + return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); + }) + '"'; + } + return '"' + string + '"'; + }; + + $.toJSON = function(o, compact) + { + var type = typeof(o); + + if (type == "undefined") + return "undefined"; + else if (type == "number" || type == "boolean") + return o + ""; + else if (o === null) + return "null"; + + // Is it a string? + if (type == "string") + { + return $.quoteString(o); + } + + // Does it have a .toJSON function? + if (type == "object" && typeof o.toJSON == "function") + return o.toJSON(compact); + + // Is it an array? + if (type != "function" && typeof(o.length) == "number") + { + var ret = []; + for (var i = 0; i < o.length; i++) { + ret.push( $.toJSON(o[i], compact) ); + } + if (compact) + return "[" + ret.join(",") + "]"; + else + return "[" + ret.join(", ") + "]"; + } + + // If it's a function, we have to warn somebody! + if (type == "function") { + throw new TypeError("Unable to convert object of type 'function' to json."); + } + + // It's probably an object, then. + var ret = []; + for (var k in o) { + var name; + type = typeof(k); + + if (type == "number") + name = '"' + k + '"'; + else if (type == "string") + name = $.quoteString(k); + else + continue; //skip non-string or number keys + + var val = $.toJSON(o[k], compact); + if (typeof(val) != "string") { + // skip non-serializable values + continue; + } + + if (compact) + ret.push(name + ":" + val); + else + ret.push(name + ": " + val); + } + return "{" + ret.join(", ") + "}"; + }; + + $.compactJSON = function(o) + { + return $.toJSON(o, true); + }; + + $.evalJSON = function(src) + // Evals JSON that we know to be safe. + { + return eval("(" + src + ")"); + }; + + $.secureEvalJSON = function(src) + // Evals JSON in a way that is *more* secure. + { + var filtered = src; + filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@'); + filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + + if (/^[\],:{}\s]*$/.test(filtered)) + return eval("(" + src + ")"); + else + throw new SyntaxError("Error parsing JSON, source is not valid."); + }; +})(jQuery); diff --git a/media/feincms/jquery.livequery.js b/media/feincms/jquery.livequery.js new file mode 100644 index 0000000..dde8ad8 --- /dev/null +++ b/media/feincms/jquery.livequery.js @@ -0,0 +1,250 @@ +/*! Copyright (c) 2008 Brandon Aaron (http://brandonaaron.net) + * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) + * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. + * + * Version: 1.0.3 + * Requires jQuery 1.1.3+ + * Docs: http://docs.jquery.com/Plugins/livequery + */ + +(function($) { + +$.extend($.fn, { + livequery: function(type, fn, fn2) { + var self = this, q; + + // Handle different call patterns + if ($.isFunction(type)) + fn2 = fn, fn = type, type = undefined; + + // See if Live Query already exists + $.each( $.livequery.queries, function(i, query) { + if ( self.selector == query.selector && self.context == query.context && + type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) ) + // Found the query, exit the each loop + return (q = query) && false; + }); + + // Create new Live Query if it wasn't found + q = q || new $.livequery(this.selector, this.context, type, fn, fn2); + + // Make sure it is running + q.stopped = false; + + // Run it immediately for the first time + q.run(); + + // Contnue the chain + return this; + }, + + expire: function(type, fn, fn2) { + var self = this; + + // Handle different call patterns + if ($.isFunction(type)) + fn2 = fn, fn = type, type = undefined; + + // Find the Live Query based on arguments and stop it + $.each( $.livequery.queries, function(i, query) { + if ( self.selector == query.selector && self.context == query.context && + (!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped ) + $.livequery.stop(query.id); + }); + + // Continue the chain + return this; + } +}); + +$.livequery = function(selector, context, type, fn, fn2) { + this.selector = selector; + this.context = context || document; + this.type = type; + this.fn = fn; + this.fn2 = fn2; + this.elements = []; + this.stopped = false; + + // The id is the index of the Live Query in $.livequery.queries + this.id = $.livequery.queries.push(this)-1; + + // Mark the functions for matching later on + fn.$lqguid = fn.$lqguid || $.livequery.guid++; + if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++; + + // Return the Live Query + return this; +}; + +$.livequery.prototype = { + stop: function() { + var query = this; + + if ( this.type ) + // Unbind all bound events + this.elements.unbind(this.type, this.fn); + else if (this.fn2) + // Call the second function for all matched elements + this.elements.each(function(i, el) { + query.fn2.apply(el); + }); + + // Clear out matched elements + this.elements = []; + + // Stop the Live Query from running until restarted + this.stopped = true; + }, + + run: function() { + // Short-circuit if stopped + if ( this.stopped ) return; + var query = this; + + var oEls = this.elements, + els = $(this.selector, this.context), + nEls = els.not(oEls); + + // Set elements to the latest set of matched elements + this.elements = els; + + if (this.type) { + // Bind events to newly matched elements + nEls.bind(this.type, this.fn); + + // Unbind events to elements no longer matched + if (oEls.length > 0) + $.each(oEls, function(i, el) { + if ( $.inArray(el, els) < 0 ) + $.event.remove(el, query.type, query.fn); + }); + } + else { + // Call the first function for newly matched elements + nEls.each(function() { + query.fn.apply(this); + }); + + // Call the second function for elements no longer matched + if ( this.fn2 && oEls.length > 0 ) + $.each(oEls, function(i, el) { + if ( $.inArray(el, els) < 0 ) + query.fn2.apply(el); + }); + } + } +}; + +$.extend($.livequery, { + guid: 0, + queries: [], + queue: [], + running: false, + timeout: null, + + checkQueue: function() { + if ( $.livequery.running && $.livequery.queue.length ) { + var length = $.livequery.queue.length; + // Run each Live Query currently in the queue + while ( length-- ) + $.livequery.queries[ $.livequery.queue.shift() ].run(); + } + }, + + pause: function() { + // Don't run anymore Live Queries until restarted + $.livequery.running = false; + }, + + play: function() { + // Restart Live Queries + $.livequery.running = true; + // Request a run of the Live Queries + $.livequery.run(); + }, + + registerPlugin: function() { + $.each( arguments, function(i,n) { + // Short-circuit if the method doesn't exist + if (!$.fn[n]) return; + + // Save a reference to the original method + var old = $.fn[n]; + + // Create a new method + $.fn[n] = function() { + // Call the original method + var r = old.apply(this, arguments); + + // Request a run of the Live Queries + $.livequery.run(); + + // Return the original methods result + return r; + } + }); + }, + + run: function(id) { + if (id != undefined) { + // Put the particular Live Query in the queue if it doesn't already exist + if ( $.inArray(id, $.livequery.queue) < 0 ) + $.livequery.queue.push( id ); + } + else + // Put each Live Query in the queue if it doesn't already exist + $.each( $.livequery.queries, function(id) { + if ( $.inArray(id, $.livequery.queue) < 0 ) + $.livequery.queue.push( id ); + }); + + // Clear timeout if it already exists + if ($.livequery.timeout) clearTimeout($.livequery.timeout); + // Create a timeout to check the queue and actually run the Live Queries + $.livequery.timeout = setTimeout($.livequery.checkQueue, 20); + }, + + stop: function(id) { + if (id != undefined) + // Stop are particular Live Query + $.livequery.queries[ id ].stop(); + else + // Stop all Live Queries + $.each( $.livequery.queries, function(id) { + $.livequery.queries[ id ].stop(); + }); + } +}); + +// Register core DOM manipulation methods +$.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove'); + +// Run Live Queries when the Document is ready +$(function() { $.livequery.play(); }); + + +// Save a reference to the original init method +var init = $.prototype.init; + +// Create a new init method that exposes two new properties: selector and context +$.prototype.init = function(a,c) { + // Call the original init and save the result + var r = init.apply(this, arguments); + + // Copy over properties if they exist already + if (a && a.selector) + r.context = a.context, r.selector = a.selector; + + // Set properties + if ( typeof a == 'string' ) + r.context = c || document, r.selector = a; + + // Return the result + return r; +}; + +// Give the init function the jQuery prototype for later instantiation (needed after Rev 4091) +$.prototype.init.prototype = $.prototype; + +})(jQuery);
\ No newline at end of file diff --git a/media/feincms/jquery.treeTable.js b/media/feincms/jquery.treeTable.js new file mode 100644 index 0000000..83d0fb0 --- /dev/null +++ b/media/feincms/jquery.treeTable.js @@ -0,0 +1,383 @@ +/* jQuery treeTable Plugin 2.2 - http://ludo.cubicphuse.nl/jquery-plugins/treeTable/ */ +(function($) { + // Helps to make options available to all functions + // TODO: This gives problems when there are both expandable and non-expandable + // trees on a page. The options shouldn't be global to all these instances! + var options; + + $.fn.treeTable = function(opts) { + options = $.extend({}, $.fn.treeTable.defaults, opts); + + return this.each(function() { + $(this).addClass("treeTable").find("tbody tr").each(function() { + // Initialize root nodes only whenever possible + if(!options.expandable || $(this)[0].className.search("child-of-") == -1) { + initialize($(this)); + } + }); + }); + }; + + $.fn.treeTable.defaults = { + childPrefix: "child-of-", + expandable: true, + indent: 19, + initialState: "collapsed", + treeColumn: 0 + }; + + // Recursively hide all node's children in a tree + $.fn.collapse = function() { + $(this).addClass("collapsed"); + + childrenOf($(this)).each(function() { + initialize($(this)); + + if(!$(this).hasClass("collapsed")) { + $(this).collapse(); + } + + $(this).hide(); + }); + + return this; + }; + + // Recursively show all node's children in a tree + $.fn.expand = function() { + $(this).removeClass("collapsed").addClass("expanded"); + + childrenOf($(this)).each(function() { + initialize($(this)); + + if($(this).is(".expanded.parent")) { + $(this).expand(); + } + + $(this).show(); + }); + + return this; + }; + + // Add an entire branch to +destination+ + $.fn.appendBranchTo = function(destination) { + var node = $(this); + var parent = parentOf(node); + + var ancestorNames = $.map(ancestorsOf(destination), function(a) { return a.id; }); + + // Conditions: + // 1: +node+ should not be inserted in a location in a branch if this would + // result in +node+ being an ancestor of itself. + // 2: +node+ should not have a parent OR the destination should not be the + // same as +node+'s current parent (this last condition prevents +node+ + // from being moved to the same location where it already is). + // 3: +node+ should not be inserted as a child of +node+ itself. + if($.inArray(node[0].id, ancestorNames) == -1 && (!parent || (destination.attr("id") != parent[0].id)) && destination.attr("id") != node[0].id) { + indent(node, ancestorsOf(node).length * options.indent * -1); // Remove indentation + + if(parent) { node.removeClass(options.childPrefix + parent[0].id); } + + var dest_id = $(destination).attr("id"); + while ($(".child-of-"+dest_id).length > 0) { + var move_to = $(".child-of-"+dest_id+":last"); + dest_id = move_to.attr("id"); + } + + node.addClass(options.childPrefix + destination.attr("id")); + if (move_to) + moveChild(node, move_to); // Recursively move nodes to new location + else + moveChild(node, destination); + indent(node, ancestorsOf(node).length * options.indent); + } + + return this; + }; + + $.fn.insertBranchBefore = function(destination) { + var node = $(this); + var parent = parentOf_jQuery(node); + var dest_parent = parentOf_jQuery(destination); + + if ($(this).attr("id")==destination.attr("id")) + return false; + + var ancestorNames = $.map(ancestorsOf_jQuery(destination), function(a) { return a.id; }); + + indent(node, ancestorsOf_jQuery(node).length * options.indent * -1); // Remove indentation + + if(parent) { node.removeClass(options.childPrefix + parent[0].id); } + + if (dest_parent) + node.addClass(options.childPrefix + dest_parent.attr("id")); + + moveBefore(node, destination); // Recursively move nodes to new location + indent(node, (ancestorsOf_jQuery(node).length * options.indent)); + + return this; + }; + + // Add reverse() function from JS Arrays + $.fn.reverse = function() { + return this.pushStack(this.get().reverse(), arguments); + }; + + // Toggle an entire branch + $.fn.toggleBranch = function() { + if($(this).hasClass("collapsed")) { + $(this).expand(); + } else { + $(this).removeClass("expanded").collapse(); + } + + return this; + }; + + // === Private functions + + function ancestorsOf(node) { + var ancestors = []; + while(node = parentOf(node)) { + ancestors[ancestors.length] = node[0]; + } + return ancestors; + }; + + function childrenOf(node) { + return $("table.treeTable tbody tr." + options.childPrefix + node[0].id); + }; + + function indent(node, value) { + var cell = $(node.children("td")[options.treeColumn]); + var padding = parseInt(cell.css("padding-left"), 10) + value; + + cell.css("padding-left", + padding + "px"); + + childrenOf(node).each(function() { + indent($(this), value); + }); + }; + + function initialize(node) { + if(!node.hasClass("initialized")) { + node.addClass("initialized"); + + var childNodes = childrenOf(node); + + if(!node.hasClass("parent") && childNodes.length > 0) { + node.addClass("parent"); + } + + if(node.hasClass("parent")) { + var cell = $(node.children("td")[options.treeColumn]); + var padding = parseInt(cell.css("padding-left"), 10) + options.indent; + + childNodes.each(function() { + $($(this).children("td")[options.treeColumn]).css("padding-left", padding + "px"); + }); + + if(options.expandable) { + cell.children(":first").children("span").prepend('<span style="margin-left: -' + (options.indent-15) + 'px; padding-left: ' + (options.indent-5) + 'px;" class="expander"></span>'); + //$(cell[0].firstChild).click(function() { node.toggleBranch(); }); + + // Check for a class set explicitly by the user, otherwise set the default class + if(!(node.hasClass("expanded") || node.hasClass("collapsed"))) { + node.addClass(options.initialState); + } + + if(node.hasClass("collapsed")) { + node.collapse(); + } else if (node.hasClass("expanded")) { + node.expand(); + } + } + } else { + var cell = $(node.children("td")[options.treeColumn]); + cell.children(":first").children("span").prepend('<span style="margin-left: -' + (options.indent-15) + 'px; padding-left: ' + (options.indent-5) + 'px;"></span>'); + } + node.children(":first").addClass("padded"); + } + }; + + function move(node, destination) { + node.insertAfter(destination); + childrenOf(node).reverse().each(function() { move($(this), node[0]); }); + }; + + function moveChild(node, destination) { + node.insertAfter(destination) + childrenOf(node).reverse().each(function() { move($(this), node[0]); }); + + }; + + function moveBefore(node, destination) { + node.insertBefore(destination) + childrenOf(node).reverse().each(function() { move($(this), node[0]); }); + }; + + function parentOf(node) { + + var classNames = node[0].className.split(' '); + + for(key in classNames) { + if(classNames[key].match("child-of-")) { + return $("#" + classNames[key].substring(9)); + } + } + }; +})(jQuery); + +// public functions +function handle_drop_event(source, dest, method){ + var ancestorNames = $.map(ancestorsOf_jQuery(dest), function(a) { return a.attr("id"); }); + if (method=="child") + dest.find(".wrap").removeClass("hover-as-child").addClass("nohover"); + else // method == "sibling" + dest.find("div:first").remove(); + // do not drop on itself or its own children, if method == "child" + if ( (method == "sibling") || (source.attr("id") != dest.attr("id") && $.inArray(source.attr("id"), ancestorNames) == -1) ) { + var source_child_of = null; + if (source.attr("class").match(/child-of-node-(\d+)/)) + source_child_of = source.attr("class").match(/child-of-node-(\d+)/)[0]; + var dest_child_of = "child-of-" + dest.attr("id"); + if (source_child_of && $("."+source_child_of).length - 1 == 0) { + var parent_id = "#" + source_child_of.substring(9); + $(parent_id).removeClass("parent"); + if ($(parent_id).hasClass("expanded")) + $(parent_id).removeClass("expanded").addClass("collapsed"); + $(parent_id+" .title-col span").removeClass("expander"); + } + if (method=="child") { + if ($("."+dest_child_of).length == 0) { + var parent_id = "#" + dest_child_of.substring(9); + $(parent_id).addClass("parent").find(".title-col span").addClass("expander"); + } + if (!dest.hasClass("expanded")) + dest.expand(); + // *** INSERT *** + source.appendBranchTo(dest); + } else // method == "sibling" + source.insertBranchBefore(dest); + } + source.find(".wrap").switchClass("nohover","flash",0).switchClass("flash","nohover",500); +} + +function handle_page_delete(node) { + var page_id = node.attr("class").match(/page-id-(\d+)/)[1]; + var parent_id = null; + if (node.attr("class").match(/child-of-node-(\d+)/)) + parent_id = node.attr("class").match(/child-of-node-(\d+)/)[1]; + var popup_bg = '<div class="popup_bg"></div>'; + $("body").append(popup_bg); + if (node.hasClass("parent")){ + jAlert('Cannot delete item, because it is parent of at least one other item.', + 'Cannot delete item', function(){ + $(".popup_bg").remove(); + }); + } else { + jConfirm('Really delete item?', 'Confirm to delete item', function(r) { + if (r==true) { + $.post('.', {'__cmd': 'delete_item', 'item_id': page_id}, function(data){ + if (data == "OK") { + if (parent_id && $(".child-of-node-"+parent_id).length == 1) { + $("#node-"+parent_id).removeClass("parent") + .removeClass("expanded").addClass("collapsed") + .find(".expander").removeClass("expander"); + } + node.remove(); + $("body").append(popup_bg); + jAlert('Item deleted successfully.', + 'Item deleted', function(){ + $(".popup_bg").remove(); + }); + } + }); + } + $(".popup_bg").remove(); + }); + } +} + +function parentOf_jQuery(node) { + if (node.attr("class").match(/child-of-node-(\d+)/)) { + var parent_id = node.attr("class").match(/child-of-node-(\d+)/)[1]; + return $("#node-"+parent_id); + } + return null; +}; + +function ancestorsOf_jQuery(node) { + var ancestors = []; + while(node = parentOf_jQuery(node)) { + ancestors[ancestors.length] = node; + } + return ancestors; +}; + +function save_page_tree() { + var send_tree = new Array(); + + // prepare tree + var i = 0; + var ancestor_tree_ids = []; + var ancestor_indeces = []; + var tree_id = 0; + $("#sitetree tbody tr").each(function(){ + var tobj = new Array(); + // 0 = tree_id, 1 = parent_id, 2 = left, 3 = right, 4 = level, 5 = page_id + var classNames = $(this).attr("class").split(' '); + var is_child = false; var is_parent = false; + var parent_id = ""; + tobj[1] = null; + // gather information + for (key in classNames) { + if(classNames[key].match("page-id-")) + tobj[5] = parseInt(classNames[key].substring(8)); + if(classNames[key].match("parent")) + is_parent = true; + if(classNames[key].match("child-of-")) { + is_child = true; + var node_parent_id = classNames[key].substring(9); + var parent_id = parseInt($("#"+node_parent_id).attr("class").match(/page-id-(\d+)/)[1]) + tobj[1] = parent_id; + } + } + // save info + var inArray = ancestor_tree_ids.indexOf(parent_id); + while ( ( is_child && inArray < ancestor_tree_ids.length - 1 && inArray >= 0) || ( !is_child && ancestor_tree_ids.length > 0 ) ) { + send_tree[ancestor_indeces.pop()][3] = i++; + ancestor_tree_ids.pop(); + } + if (!is_child) { + tree_id++; + i = 0; + } + tobj[0] = tree_id; + tobj[4] = ancestor_tree_ids.length; + tobj[2] = i++; + if (is_parent) { + ancestor_tree_ids.push(tobj[5]); + ancestor_indeces.push(send_tree.length); + } else { + tobj[3] = i++; + } + send_tree.push(tobj); + }); + while (ancestor_tree_ids.length>0) { + send_tree[ancestor_indeces.pop()][3] = i++; + ancestor_tree_ids.pop(); + } + + // send tree to url + $.post('.', {'__cmd': 'save_tree', 'tree': $.toJSON(send_tree)}, function(data){ + if (data == "OK") { + var popup_bg = '<div class="popup_bg"></div>'; + $("body").append(popup_bg); + jAlert("Tree saved successfully.", "Tree saved", function(){ + $(".popup_bg").remove(); + }); + } + }); +} diff --git a/media/feincms/layout.css b/media/feincms/layout.css new file mode 100644 index 0000000..23c2ccd --- /dev/null +++ b/media/feincms/layout.css @@ -0,0 +1,183 @@ + +#overview { + background-color:none; + padding:5px 0px 0px 5px; + margin:10px 0px 0px 10px; +} + +#content-main { + background-color:#fff; + margin-bottom:0px; + width:730px; +} + +.navi_tab { + float:left; + padding: 3px 10px 3px 10px; + cursor:pointer; + border: 1px solid #aaa; + border-bottom:none; + min-width:100px; +} +.tab_active { + height:16px; + font-weight: bold; + background-image:url('img/default-bg.gif'); + color: white; +} +.tab_inactive { + margin-top:4px; + height:12px; + font-weight: normal; + background-image:none; + color: black; +} +#main { + clear:both; + padding: 10px 10px 10px 10px; + border: 1px solid #aaa; +} +.panel { + display:none; + position:relative; + padding-bottom:70px; +} + + +span { margin-right: 5px;} + +.order-machine { + margin-bottom:10px; +} + +.order-item { + margin: 5px 15px 10px 5px; + background: #eee; + position:relative; + width:700px; + min-height:24px; + border: 1px solid #678; +} +.order-item span { + font-weight:bold; + margin-left:5px; +} +.order-item .handle { + float: left; + cursor: move; + background-color: #456; + height:100%; + border: 0px solid #456; + width:5px; + position:absolute; +} +.item-content { + padding: 0px 10px 10px 15px; + margin-right:5px; + clear:both; + margin-left:10px; +} +.item-header { + padding: 3px 10px 3px 15px; + margin-left:10px; + margin-top:1px; +} +.item-header span { + margin-right:10px; + float:left; + font-weight: strong; +} +.item-delete { + cursor:pointer; + float:right; + margin:3px 0px 0px 5px; +} +.active-item { + border: 1px solid #00a; + background-color:#def; +} +.button { + margin:5px; padding:5px; + font-weight: bold; + background-image:url('img/nav-bg.gif'); + cursor:pointer; + border: 1px solid #678; + width:30px; +} + +#test-log { padding: 5px; border: 1px solid #ccc; } + +#overview span { margin-right:15px; margin-left:5px;} + +.richtextcontent {display:none;} + +textarea { + width: 100%; + height: 80px; +} + +.item-minimize { + width: 15px; + height:15px; + float: left; + cursor: pointer; + margin-left:-17px; +} + +.item-minimize-disabled { + width: 15px; + height:15px; + float: left; + margin-left:-17px; +} + +.machine-control { + height:50px; + padding: 5px 0px 5px 0px; + border: 1px solid #678; + background-color:#ddd; + width:700px; + position:absolute; + left:5px; + bottom:5px; +} + +.control-unit { + float:left; + padding-left:15px; + padding-right:10px; + border-right: 1px solid #678; +} + +.control-unit span { + font-weight:bold; + margin-left:5px; +} + +hr { + color: #f00; + background-color: #bbb; + height: 1px; + margin-top: 5px; + margin-bottom: 5px; +} + +.empty-machine-msg { + margin:10px 0px 5px 300px; + font-style: italic; + font-size:14px; + color:#999; +} + +td span select { + width:600px; +} + +.popup_bg { + width:100%; height:100%; + background-color:white; + opacity: 0.5; + filter:alpha(opacity=50); + position:absolute; + top:0px; left:0px; +} diff --git a/media/feincms/listener.js b/media/feincms/listener.js new file mode 100644 index 0000000..2b6a5c6 --- /dev/null +++ b/media/feincms/listener.js @@ -0,0 +1,90 @@ +$(document).ready(function(){ + $(".navi_tab").livequery('click',function(){ + $(".navi_tab").removeClass("tab_active").addClass("tab_inactive"); + $(this).removeClass("tab_inactive").addClass("tab_active"); + $("#main > div:visible").hide(); + + var tab_str = $(this).attr("id").substr(0,$(this).attr("id").length-4); + $('#'+tab_str+'_body').show(); + ACTIVE_REGION = REGIONS.indexOf(tab_str); + + if (tab_str == "settings") + $(".machine-control").hide(); + else + $(".machine-control").show(); + + window.location.hash = '#'+tab_str; + }); + + $(".order-machine-add-button").livequery('click', function(){ + var modvar = $(this).prev().val(); + var modname = $(this).prev().children("option:selected").html(); + var total_forms = $('#id_'+modvar+'-TOTAL_FORMS'); + var last_id = parseInt(total_forms.val()) - 1; + var form = $("#"+modvar+"_set_item_"+last_id); + + total_forms.val(last_id+2); + create_new_from_form(form, modvar, last_id); + region_append(ACTIVE_REGION, form, modname, modvar); + set_item_field_value(form,"region-choice-field", ACTIVE_REGION); + + init_pagecontent(); + }); + + $(".order-machine-move-button").livequery('click', function(){ + var moveTo = $(this).prev().val(); + move_item(REGIONS.indexOf(moveTo),$(".active-item")); + }); + + $(".item-delete").livequery('click',function(){ + popup_bg = '<div class="popup_bg"></div>'; + $("body").append(popup_bg); + var item = $(this).parents(".order-item"); + jConfirm('Really delete item?', 'Confirm to delete item', function(r) { + if (r==true) { + set_item_field_value(item,"delete-field","checked"); + item.fadeOut(200); + } + $(".popup_bg").remove(); + }); + }); + + $(".cancel").livequery('click',function(){ + popup_bg = '<div class="popup_bg"></div>'; + $("body").append(popup_bg); + jConfirm('Really change template? <br/>All content will be moved to main region.', + 'Change template', function(r) { + if (r==true) { + var items = $(".panel").children(".order-machine").children(); + move_item(0, items); + $(".submit_form").click(); + } else { + $(".popup_bg").remove(); + } + }); + }); + + $(".item-minimize").livequery('click',function(){ + var item = $(this).parent().next(); + if (item.is(":visible")) { + $(this).html('<img src="'+IMG_ARROW_RIGHT_PATH+'" />'); + item.slideUp(200); + } else { + $(this).html('<img src="'+IMG_ARROW_DOWN_PATH+'" />'); + item.slideDown(200); + } + }); + + $(".order-item").livequery('click',function(){ + $(".order-item").removeClass("active-item"); + $(this).addClass("active-item"); + }); + + $(".submit_form").livequery('click',function(){ + zucht_und_ordnung(false); + var form = $(this).parents('form'); + form.attr('action', form.attr('action')+window.location.hash); + return true; + }); + +}); |