public function pre_render(cs_form $form) { if ($this->pre_rendered == TRUE) { return; } $id = $this->get_html_id(); if ($this->get_level() == 0) { $this->add_js(preg_replace("/\\s+/", " ", str_replace("\n", "", "" . "\$('#{$id}','#{$form->get_id()}').data('output', \$('#{$id}-output'));\n \$('#{$id}','#{$form->get_id()}').nestable({group: {$this->group}, maxDepth: {$this->maxDepth} }).on('change', function(e){\n var list = e.length ? e : \$(e.target),\n output = list.data('output');\n if (window.JSON) {\n output.val(window.JSON.stringify(list.nestable('serialize')));\n } else {\n output.val('JSON browser support required for this.');\n }\n }).trigger('change');"))); if (!cs_nestable::$_css_rendered) { $this->add_css(' .dd { position: relative; display: block; margin: 0; padding: 0; list-style: none; font-size: 13px; line-height: 20px; } .dd-list { display: block; position: relative; margin: 0; padding: 0; list-style: none; } .dd-list .dd-list { padding-left: 30px; } .dd-collapsed .dd-list { display: none; } .dd-item,.dd-empty,.dd-placeholder { display: block; position: relative; margin: 0; padding: 0; min-height: 20px; font-size: 13px; line-height: 20px; } .dd-handle { display: block; margin: 5px 0; padding: 5px 10px; color: #333; text-decoration: none; font-weight: bold; border: 1px solid #ccc; background: #fafafa; background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%); background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%); background: linear-gradient(top, #fafafa 0%, #eee 100%); -webkit-border-radius: 3px; border-radius: 3px; box-sizing: border-box; -moz-box-sizing: border-box; } .dd-handle:hover { color: #2ea8e5; background: #fff; } .dd-item > button { display: block; position: relative; cursor: pointer; z-index: 20; float: left; width: 25px; height: 20px; margin: 5px 0; padding: 0; text-indent: 100%; white-space: nowrap; overflow: hidden; border: 0; background: transparent; font-size: 12px; line-height: 1; text-align: center; font-weight: bold; } .dd-item > button:before { content: \'+\'; display: block; position: absolute; width: 100%; text-align: center; text-indent: 0; } .dd-item > button[data-action="collapse"]:before { content: \'-\'; } .dd-placeholder, .dd-empty { margin: 5px 0; padding: 0; min-height: 30px; background: #f2fbff; border: 1px dashed #b6bcbf; box-sizing: border-box; -moz-box-sizing: border-box; } .dd-empty { border: 1px dashed #bbb; min-height: 100px; background-color: #e5e5e5; background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff); background-image: -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff); background-image: linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff); background-size: 60px 60px; background-position: 0 0, 30px 30px; } .dd-dragel { position: absolute; pointer-events: none; z-index: 9999; } .dd-dragel > .dd-panel > .dd-item .dd-handle { margin-top: 0; } .dd-dragel .dd-handle { -webkit-box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1); box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1); } .dd-panel{ position: relative; } .dd-content { display: block; min-height: 30px; margin: 5px 0; padding: 5px 10px 5px 40px; color: #333; text-decoration: none; font-weight: bold; border: 1px solid #ccc; background: #fafafa; background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%); background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%); background: linear-gradient(top, #fafafa 0%, #eee 100%); -webkit-border-radius: 3px; border-radius: 3px; box-sizing: border-box; -moz-box-sizing: border-box; } .dd-content:hover { color: #2ea8e5; background: #fff; } .dd-dragel > .dd-item > .dd-panel > .dd-content { margin: 0; } .dd-item > button { margin-left: 30px; } .dd-handle { position: absolute; margin: 0; left: 0; top: 0; cursor: pointer; width: 30px; text-indent: 100%; white-space: nowrap; overflow: hidden; border: 1px solid #aaa; background: #ddd; background: -webkit-linear-gradient(top, #ddd 0%, #bbb 100%); background: -moz-linear-gradient(top, #ddd 0%, #bbb 100%); background: linear-gradient(top, #ddd 0%, #bbb 100%); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 100%; } .dd-handle:before { content: \'≡\'; display: block; position: absolute; left: 0; top: 3px; width: 100%; text-align: center; text-indent: 0; color: #fff; font-size: 20px; font-weight: normal; } .dd-handle:hover { background: #ddd; } '); cs_nestable::$_css_rendered = TRUE; } } parent::pre_render($form); }
function batchoperationsform(cs_form $form, &$form_state) { $step = 0; $form->set_action($_SERVER['PHP_SELF']); $form->add_field('progressnum', array('type' => 'value', 'value' => isset($form_state['input_form_definition']['fields'][$step]['progressnum']['value']) ? $form_state['input_form_definition']['fields'][$step]['progressnum']['value'] + 20 : 0)); $fieldset = $form->add_field('fieldset', array('type' => 'tag_container')); if (cs_form::is_partial()) { $jsondata = json_decode($form_state['input_values']['jsondata']); $callback = $jsondata->callback; if (isset($form_state['input_form_definition']['fields'][$step]['progressnum']['value']) && $form_state['input_form_definition']['fields'][$step]['progressnum']['value'] >= 100) { $fieldset->add_field('done', array('type' => 'markup', 'default_value' => 'finito!')); } else { if (is_callable($callback)) { $fieldset->add_js("setTimeout(function(){ \$('#progress','#{$form->get_id()}').trigger('click') },1000);"); } $fieldset->add_field('progress', array('type' => 'progressbar', 'default_value' => $form->get_field('progressnum')->get_value(), 'show_label' => TRUE, 'ajax_url' => $_SERVER['PHP_SELF'], 'event' => array(array('event' => 'click', 'callback' => 'batch_operations_form_callback', 'target' => 'batchoperationsform', 'effect' => '', 'method' => 'replace')))); } } // must be outside of the fieldset in order to be processed $form->add_field('file', array('type' => 'file', 'ajax_url' => $_SERVER['PHP_SELF'], 'destination' => dirname(__FILE__), 'event' => array(array('event' => 'change', 'callback' => 'batch_operations_form_callback', 'target' => 'batchoperationsform', 'effect' => 'fade', 'method' => 'replace')))); /* $fieldset->add_field('submit', array( 'type' => 'submit', )); */ return $form; }